{"version":3,"sources":["components/admin_left_menu/index.js","components/partner_left_menu/index.js","components/search_button/index.js","components/clear_button/index.js","components/app_context/index.js","components/empty_row/index.js","components/loading_row/index.js","components/format_number/index.js","components/save_button/index.js","components/close_button/index.js","components/loading_button/index.js","components/upload_img/index.js","components/upload_product_img/index.jsx","components/icon_button/index.js","components/avatar_row/index.js","components/notification/index.js","components/input_select/index.js","components/pagination/index.js","components/read_excel_button/index.js","components/number_up_down/index.js","components/detail_row/index.jsx","components/shopee_product_avatar/index.jsx","components/product_status/index.jsx","components/auth_admin_view/index.jsx","components/action_row/index.jsx","components/action_item/index.jsx","components/category_dropdown_tree/index.jsx","components/modal_popup/index.jsx","components/custom_select/index.jsx","components/check_box/CheckBox.jsx","components/upload_file_button/UploadFileButton.jsx","services/admin/category_service.js","services/admin/attribute_service.js","services/admin/children_attribute_service.js","pages/admin/category_page/components/filter/index.js","pages/admin/category_page/components/table/index.js","pages/admin/category_page/components/modal_add/index.js","pages/admin/category_page/components/modal_edit/index.js","pages/admin/category_page/index.js","pages/admin/product_page/components/filter/index.js","pages/admin/product_page/components/table/index.js","pages/admin/product_page/components/modal_add/index.js","pages/admin/product_page/components/modal_edit_price/index.js","pages/admin/product_page/components/modal_edit_qty/index.js","pages/admin/product_page/components/modal_edit/index.js","pages/admin/product_page/components/modal_edit_qty_excel/index.js","pages/admin/product_page/components/modal_edit_status/ModalEditStatus.jsx","pages/admin/product_page/index.js","pages/admin/partner_group_page/components/table/index.js","pages/admin/partner_group_page/components/modal_add/index.js","pages/admin/partner_group_page/components/modal_edit/index.js","pages/admin/partner_group_page/index.js","pages/admin/partner_page/components/filter/index.js","pages/admin/partner_page/components/table/index.js","pages/admin/partner_page/components/modal_add/index.js","pages/admin/partner_page/components/modal_edit/index.js","pages/admin/partner_page/components/modal_set_pwd/index.js","pages/admin/partner_page/components/modal_recharge/index.js","pages/admin/partner_page/components/balance_table/index.jsx","pages/admin/partner_page/components/order_table/index.jsx","pages/admin/partner_page/components/shopee_table/index.jsx","pages/admin/partner_page/components/detail/index.jsx","pages/admin/partner_page/components/info_block/index.jsx","pages/admin/partner_page/components/freeship_table/FreeShipTable.jsx","pages/admin/partner_page/components/modal_children/ModalChildren.jsx","pages/admin/partner_page/index.js","pages/admin/dashboard_page/components/best_selling_product/index.jsx","pages/admin/dashboard_page/components/order_block/index.jsx","pages/admin/dashboard_page/components/partner_chart/index.jsx","pages/admin/dashboard_page/components/revenue_profit/index.jsx","pages/admin/dashboard_page/components/main_block/index.jsx","pages/admin/dashboard_page/components/welcome/index.jsx","pages/admin/dashboard_page/index.js","pages/admin/attribute_page/components/table_attr/index.js","pages/admin/attribute_page/components/table_attr_child/index.js","pages/admin/attribute_page/components/modal_add_attr/index.js","pages/admin/attribute_page/components/moda_add_attr_child/index.js","pages/admin/attribute_page/components/modal_edit_attr/index.js","pages/admin/attribute_page/components/modal_edit_attr_child/index.js","pages/admin/attribute_page/index.js","pages/admin/order_page/components/filter/index.jsx","pages/admin/order_page/components/table/index.jsx","pages/admin/order_page/components/modal_update_status/index.jsx","pages/admin/order_page/components/modal_edit_warehouse_note/index.jsx","pages/admin/order_page/components/modal_edit/index.jsx","pages/admin/order_page/index.jsx","pages/admin/statistic_partner_order/components/filter/index.jsx","pages/admin/statistic_partner_order/components/table/index.jsx","pages/admin/statistic_partner_order/index.jsx","pages/admin/shipping_unit_page/components/table/index.js","pages/admin/shipping_unit_page/components/modal_add/index.js","pages/admin/shipping_unit_page/components/modal_edit/index.js","pages/admin/shipping_unit_page/index.js","pages/admin/user_page/components/modal_add_user/index.js","pages/admin/user_page/components/modal_edit_user/index.js","pages/admin/user_page/components/table/index.js","pages/admin/user_page/components/filter/index.js","pages/admin/user_page/components/modal_set_pwd_user/index.js","pages/admin/user_page/index.js","pages/admin/role_page/components/modal_add/index.js","pages/admin/role_page/components/modal_edit/index.js","pages/admin/role_page/components/modal_permission/index.js","pages/admin/role_page/components/table/index.js","pages/admin/role_page/index.js","pages/admin/popup_page/components/filter/index.js","pages/admin/popup_page/components/table/index.js","pages/admin/popup_page/components/modal_add/index.js","pages/admin/popup_page/components/modal_edit/index.js","pages/admin/popup_page/index.js","pages/admin/user_info_page/components/profile/index.js","pages/admin/user_info_page/components/password/index.js","pages/admin/user_info_page/index.js","pages/admin/setting_page/components/setting_affiliate/SettingAffiliate.jsx","pages/admin/setting_page/index.js","pages/admin/product_from_excel/index.jsx","pages/admin/login_page/index.jsx","pages/admin/freeship_page/components/filter/index.jsx","pages/admin/freeship_page/components/modal_add/index.jsx","pages/admin/freeship_page/components/table/index.jsx","pages/admin/freeship_page/index.jsx","AdminLayout.js","pages/partner/customer_page/components/filter/index.js","pages/partner/customer_page/components/table/index.js","pages/partner/customer_page/components/modal_add/index.js","pages/partner/customer_page/components/modal_edit/index.js","pages/partner/customer_page/index.js","pages/partner/dashboard_page/components/order_block/index.jsx","pages/partner/dashboard_page/components/partner_info/index.jsx","pages/partner/dashboard_page/components/message/index.jsx","pages/partner/dashboard_page/components/revenue/index.jsx","pages/partner/dashboard_page/index.js","pages/partner/product_page/components/filter/index.js","pages/partner/product_page/components/list/index.js","pages/partner/product_page/components/modal_add_to_card/index.js","pages/partner/product_page/components/modal_detail/index.js","pages/partner/product_page/components/modal_order/index.js","pages/partner/product_page/index.js","pages/partner/product_checking_page/components/filter/index.js","pages/partner/product_checking_page/components/table/index.js","pages/partner/product_checking_page/index.js","pages/partner/order_page/components/filter/index.js","pages/partner/order_page/components/table/index.js","pages/partner/order_page/components/modal_edit_warehouse_note/index.js","pages/partner/order_page/index.js","pages/partner/profile_page/components/profile/index.js","pages/partner/profile_page/components/password/index.js","pages/partner/profile_page/index.js","pages/partner/balance_history_page/components/filter/index.js","pages/partner/balance_history_page/components/table/index.js","pages/partner/balance_history_page/index.js","pages/partner/partner_shop/components/modal_add/index.jsx","pages/partner/partner_shop/components/modal_edit/index.jsx","pages/partner/partner_shop/components/table/index.jsx","pages/partner/partner_shop/index.jsx","pages/partner/order_from_shopee/components/filter/index.jsx","pages/partner/order_from_shopee/components/table/index.jsx","pages/partner/order_from_shopee/index.jsx","pages/partner/register_page/index.jsx","pages/partner/login_page/index.jsx","pages/partner/children_page/ChildrenPage.jsx","PartnerLayout.js","App.js","reportWebVitals.js","index.js"],"names":["AdminLeftMenu","props","className","to","right","onClick","onLogout","defaultProps","PartnerLeftMenu","SearchButton","type","ClearButton","AppContext","React","createContext","EmptyRow","colSpan","title","LoadingRow","role","FormatNumber","children","maxDigit","toLocaleString","maximumFractionDigits","SaveButton","disabled","isBusy","icon","CloseButton","LoadingButton","useState","setIsBusy","apiUrl","window","UploadImg","fileInput","useRef","uploadUrl","isPartner","style","display","accept","ref","onChange","e","files","target","length","file","name","size","formData","FormData","append","url","axios","post","then","res","data","onCompleted","backgroundImage","imgUrl","thumbnailSize","current","click","UploadProductImg","me","IconButton","variant","undefined","text","AvatarRow","fullUrl","baseUrl","duration","Notification","success","msg","store","addNotification","message","insert","container","animationIn","animationOut","dismiss","pauseOnHover","warning","danger","confirm","ok","cancel","Swal","fire","showCloseButton","showCancelButton","confirmButtonText","cancelButtonText","result","isConfirmed","DismissReason","confirmHtml","objText","str","html","InputSelect","isChecked","checked","value","parseInt","renderControl","options","isVertical","map","item","index","id","htmlFor","label","renderContainer","defaultValue","Pagination","pageBreak","Math","floor","displayPage","onPrevClick","currentPage","onNextClick","onFirstClick","onLastClick","totalPage","onPageChange","renderNum","start","end","i","push","isHideIfOnePage","renderHtml","ReadExcelButton","NumberUpDown","placeholder","max","step","currentValue","setCurrentValue","useEffect","inputValue","currentVal","newValue","allowNegative","decimalScale","onValueChange","val","min","DetailRow","titleColumn","childrenColumn","ShopeeProductAvatar","getImgUrl","renderStatus","statusId","ProductStatus","AuthAdminView","appSettings","useContext","rights","some","n","renderChildrent","ActionRow","ActionItem","getCategoryLevel","parentId","catName","lst","filter","ParentId","forEach","levelCatName","CategoryName","Label","CategoryId","cat","CategoryDropdownTree","isClearable","categories","setCategories","category","setCategory","cats","tempList","selectedValue","classNamePrefix","isSearchable","ModalPopup","partnerPopupId","content","onSave","onClose","isShow","Modal","show","onHide","backdrop","centered","onExited","Header","closeButton","Title","Body","dangerouslySetInnerHTML","__html","Footer","handleSave","CustomSelect","noOptionsMessage","newValues","detaultProps","CheckBox","UploadFileButton","finally","CategoryService","filters","keyword","get","getDropdown","create","getById","categoryId","update","delete","AttributeService","getAll","attributeId","ChildrenAttributeService","getByAttribute","childAttributeId","Filter","onSearch","setKeyword","handleSearch","autoFocus","onKeyDown","key","autoComplete","Table","CategoryNote","ProductCount","CreatedDate","CreatedTime","StatusId","onEdit","onDelete","renderTable","schema","yup","shape","required","integer","Note","statusOptions","ModalAdd","useForm","resolver","yupResolver","defaultValues","control","register","handleSubmit","reset","errors","formState","onSubmit","render","field","parent","rows","ModalEdit","setValue","onShow","info","CategoryPage","isShowModalCategoryAdd","setIsShowModalCategoryAdd","isShowModalCategoryEdit","setEditIsShowModalCategoryEdit","categoryDropdown","setCategoryDropdown","categoryInfo","setCategoryInfo","setFilters","document","getElementById","innerText","loadCategoryDropdown","IsSuccess","Result","reloadCategory","params","newFilters","productTypes","catId","typeId","productStatus","setProductStatus","productStatusList","setProductStatusList","productType","setProductType","setCatId","proStatusList","ProductStatusId","ProductStatusName","onParentClick","onAvatarClick","pageItem","pageIndex","ProductId","IsParent","ProductCode","AvatarUrl","urlObj","ProductName","OutputPrice","Quantity","onEditStatus","onEditPrice","onEditQty","invalidValue","InputPrice","oneOf","Detail","ProductPrices","SubProducts","ProductChildrentAttribute","getCombn","arr","ans","otherCases","slice","j","idArr","getValues","childrenProduct","setChildrenProduct","qty","setQty","sttList","onChangeChildExtName","ExtensionName","onChangeChildQty","groupList","GroupId","UnitPrice","proChildAttr","temp","x","concat","subProArr","ChildrentAttributes","ChildrenAttrList","href","ImageUrl","SupplierProductCode","modules","Config","editorCfg","GroupName","groupId","findIndex","handleGroupPriceChange","allAttribute","childAttr","Children","child","ChildrenAttributeId","ChildrenAttributeName","AttributeName","idList","combnArr","split","num","reqStr","join","attr_name","attr","trim","AttrName","initCombn","isMulti","AttributeId","list","ModalEditPrice","animation","ProductPriceId","PartnerGroupId","isParent","productId","defaultChecked","ModalEditQty","productList","onBlur","IsApplyForAll","ModalEditQtyExcel","setProductList","ID","TEN_SP","SO_LUONG","onNumberChange","defaultPropts","orderId","ModalEditStatus","statuses","productStatuses","setProductStatuses","statusList","downloadFile","downloadUrl","URL","createObjectURL","Blob","link","createElement","setAttribute","body","appendChild","remove","ProductPage","history","useHistory","isShowModalProAdd","setIsShowModalProAdd","modalEditPriceInfo","setModalEditPriceInfo","setGroupList","setAllAttribute","totalRow","pagination","setPagination","modalEditQtyInfo","setModalEditQtyInfo","modalEditInfo","setModalEditInfo","isShowModalEditQtyExcel","setIsShowModalEditQtyExcel","setParent","isShowViewer","setIsShowViewer","isShowModalEditStatus","setisShowModalEditStatus","editStatusInfo","setEditStatusInfo","viewerList","setViewerList","loadCategory","loadPropductStatus","loadPartnerGroup","loadAllAttrParentChildren","getParamString","strParam","newPagination","TotalRow","TotalPage","PageIndex","Data","reloadProduct","isKeepCurrent","Dropdown","Toggle","Menu","Item","responseType","renderParent","newFilter","product","pIndex","date","products","ProductList","isForAllChildrent","src","currentIndex","disableScroll","closeOnClickOutside","TotalPartner","DropShipFee","transform","_value","originalValue","Number","replaceAll","negative","c","setVal","vallue","PartnerGroupPage","partnerGroup","setPartnerGroup","editValue","setEditValue","isShowModalPartnerGroupEdit","setIsShowModalPartnerGroupEdit","isShowModalPartnerGroupAdd","setIsShowModalPartnerGroupAdd","formVal","groupOptions","setGroupOptions","group","setGroup","status","setStatus","onShowChildren","renderDetail","isSelected","detail","orders","partnerOrders","partnerOrderPagination","onPartnerOrderPageChange","PartnerId","balanceHistories","balanceHistoryPagination","onBalanceHistoryPageChange","balancePageItem","balancePageIndex","shops","shopeeShops","onRecharge","onSetPassword","onLogOut","onCloseDetail","onOpenDetail","FullName","Email","Phone","Balance","WardId","nullable","ShopName","email","Password","Address","ShipFeeId","GHTKToken","provinceId","onProvinceChange","province","ProvinceId","Prefix","ProvinceName","districtId","onDistrictChange","district","DistrictId","DistrictName","ward","WardName","setProvinceId","setDistrictId","partner","Partner","NewPassword","ModalSetPwd","partnerId","RechargeTypeId","Amount","ModalRecharge","BalanceTable","renderObjectValue","objectValue","renderType","amount","ObjectValue","PartnerBalanceHistoryId","OrderTable","orderStatusId","orderStatusName","order","OrderId","CustomerName","Products","SumOutputPrice","SumPartnerPrice","PartnerDropShipFee","OrderStatusId","OrderStatusName","ShopeeTable","Portrait","ShopId","UserName","PartnerShopId","FreeShipQty","PartnerCode","RefFullName","InfoBlock","FreeShipTable","TypeId","Qty","FreeShipTitle","FreeShipHistoryId","ModalChildren","partners","PartnerPage","setPartner","setProvince","setDistrict","setWard","isShowModalPartnerAdd","setIsShowModalPartnerAdd","isShowModalPartnerEdit","setIsShowModalPartnerEdit","partnerEdit","setPartnerEdit","partnerSetPwd","setPartnerSetPwd","partnerRecharge","setPartnerRecharge","allPartner","activePartner","inActivePartner","balance","setInfo","isShowModalChildren","setIsShowModalChildren","childrenPartners","setChildrenPartners","loadInfo","loadProvince","setPartnerOrderPagination","balanceHistoryPatination","setBalanceHistoryPatination","freeShipPatination","setFreeShipPatination","setPartnerOrders","setBalanceHistories","partnerDetail","setPartnerDetail","setShopeeShops","freeShips","setFreeShips","loadDistrict","loadWard","handleRowClick","newindex","newItem","prevIndex","prev","clearDetail","loadDetail","loadPartnerDetail","loadPartnerOrders","loadBalanceHistory","loadShopeeShop","loadFreeShip","reloadPartner","AllPartner","ActivePartner","InActivePartner","Provinces","Districts","Wards","reqInfo","newPartnerDetail","BestSellingProduct","paddingBottom","width","OrderBlock","header","percent","PartnerChart","colors","series","partnerGroups","color","PartnerGroupName","CountPartner","RevenueProfit","setSeries","chart","height","toolbar","plotOptions","bar","borderRadius","dataLabels","position","enabled","formatter","offsetY","fontSize","xaxis","axisBorder","axisTicks","crosshairs","fill","gradient","colorFrom","colorTo","stops","opacityFrom","opacityTo","tooltip","yaxis","labels","floating","align","setOptions","valueList","Value","dateList","Date","MainBlock","newOrder","setNewOrder","inProcessOrder","setInProcessOrder","shippingOrder","setShippingOrder","countProduct","setCountProduct","revenueProfit","setRevenueProfit","setProducts","legend","responsive","breakpoint","partnerGroupChart","setPartnerGroupChart","Percent","loadNewOrder","loadInProcessOrder","loadShippingOrder","loadProductCount","loadRevenueProfit","loadBestSellingProduct","Welcome","alt","DashboardPage","TableAttr","onSelect","stopPropagation","TableAttrChild","TotalUsing","ModalAddAttr","ModalAddAttrChild","attrId","ModalEditAttr","ModalEditAttrChild","AttributePage","attribute","childrenAttribute","setChildrenAttribute","isShowModalAttrAdd","setIsShowModalAttrAdd","isShowModalAttrEdit","setIsShowModalAttrEdit","isShowModalChildAttrAdd","setIsShowModalChildAttrAdd","isShowModalChildAttrEdit","setIsShowModalChildAttrEdit","attrEditInfo","setAttrEditInfo","setAttributeId","childAttrEditInfo","setChildAttrEditInfo","loadAttribute","obj","loadChildrenAttribute","firstAttributeId","nextIndex","selectedAttrIndex","wayBillCode","fromDate","toDate","orderFromId","loadOptions","callback","partnerLst","orderFroms","setOrderId","setWayBillCode","setFromDate","setToDate","setStatusOptions","orderFromOptions","setOrderFromOptions","orderFrom","setOrderFrom","orderFromList","OrderFromId","OrderFromName","cacheOptions","defaultOptions","debounce","loadingMessage","placeholderText","dateFormat","selected","day","getDate","month","getMonth","year","getFullYear","strDate","onUpdateStatus","onDownloadWaybill","onGetWaybill","onDownloadAttachWaybill","renderDownloadAttachWaybill","FileUrl","renderGetWaybill","renderUpdateCmd","renderDownloadWaybill","WaybillUrl","statusName","handleChangeStatus","renderChildrenProduct","productLength","CustomerUnitPrice","rowSpan","firstProduct","PartnerFullName","WaybillCode","ShippingUnitName","DropshipFee","onEditWarehouseNote","ModalUpdateStatus","orderStatuses","setOrderStatuses","WarehouseNote","ModalEditWarehouseNote","isEnableEdit","setIsEnableEdit","CustomerPhone","CustomerAddress","CustomerWardId","ShippingUnitId","ShippingWeight","ShippingMethodId","ShippingFeeTypeId","ShippingFeeAmount","ShippingNote","OrderTypeId","orderTypes","shippingTypes","provinces","setProvinces","districts","setDistricts","wards","setWards","shippingUnits","setShippingUnits","shippingMethods","setShippingMethods","tienHang","setTienHang","provinceArray","districtArray","wardArray","shippingUnitArray","shippingMethodArray","ShippingMethodName","tien_hang","reduce","TotalAmount","formProducts","ReceiverName","WeightInGram","ShippingFree","CustomerProvinceId","CustomerDistrictId","PartnerUnitPrice","removeProduct","renderProduct","ShippingFeeTypeObj","OrderPage","setOrderFroms","setOrders","modalStatus","setModalStatus","modalEditWarehouseNote","setModalEditWarehouseNote","modalOrderEditInfo","setModalOrderEditInfo","loadOrderStatus","loadOrderFrom","loadShippingUnit","loadShippingMethod","provinceList","setProvinceList","districtList","setDistrictList","wardList","setWardList","reloadOrder","fileName","ShopeeOrderSn","open","orderList","wardId","dropShipFee","newProducts","dateOptions","now","toLocaleDateString","rederDetail","CountOrder","CountCancel","TotalMoney","TotalRecharge","CountProduct","TotalDropshipFee","StatisticPartnerOrder","setPartners","setDetail","ShippingUnitStatusId","ShippingUnitPage","isShowModalShippingUnitAdd","setIsShowModalShippingUnitAdd","isShowModalShippingUnitEdit","setIsShowModalShippingUnitEdit","shippingUnit","setShippingUnit","shippingUnitEditInfo","setShippingUnitEditInfo","RoleId","ModalAddUser","roleOptions","setRoleOptions","roles","RoleName","UserId","ModalEditUser","onSetPwd","roleId","setRole","ModalUserSetPwd","userId","UserPage","userList","setUserList","isShowModalUserAdd","setIsShowModalUserAdd","isShowModalUserEdit","setIsShowModalUserEdit","infoModalUserSetPwd","setInfoModalUserSetPwd","roleList","setRoleList","userEditInfo","setUserEditInfo","loadRole","reloadUser","RoleNote","ModalPermission","rightList","setRightList","groups","inputList","arrRight","Rights","IsAllow","RightId","RightGroupName","rightId","newList","indexOf","splice","onRightChange","RightName","RightGroupId","UserCount","onPermission","RolePage","isShowModalRoleAdd","setIsShowModalRoleAdd","infoModalRoleEdit","setInfoModalRoleEdit","infoModalPer","setInfoModalPer","PopupId","PopupTypeId","when","is","Content","poupTypes","popupType","setPopupType","isShowCTV","setIsShowCTV","isShowGroup","setIsShowGroup","renderPartner","renderGroup","PopupPage","popupList","setPopupList","isShowModalPopupAdd","setIsShowModalPopupAdd","partnerGoupList","setPartnerGroupList","popupEditInfo","setPopupEditInfo","reloadPopup","Profile","CurrentPassword","NewPasswordConfirm","UserInfoPage","userInfo","setUserInfo","loadUserInfo","setAdminFullName","localStorage","setItem","setAdminAvatarUrl","callBack","AffAmount","SettingAffiliate","setting","emailStatusOptions","EmailToAddress","SendingEmailStatusId","EmailSubject","SettingPage","setContent","isBusyEmail","setIsBusyEmail","setSetting","loadSetting","Message","resStatus","ProductFromExcel","Json","JSON","stringify","PartnerGroupPrices","AttributeList","replace","imgInfo","parentIndex","Id","childIndex","onUploadComplete","mbClass","LoginPage","setFocus","setMessage","a_token","getItem","from","useLocation","state","pathname","Token","defaults","headers","common","setRights","setAdminRole","marginTop","adminLoginLogoHeight","setTimeout","onLogin","types","loadPartner","freeShipType","setFreeShipType","FreeShipId","FreeShipPage","isShowModalAdd","setIsShowModalAdd","setPartnerGroups","collapsed","handleCollapse","classList","add","App","token","pathName","location","logoHeight","removeItem","adminFullName","paddingTop","path","version","CustomerId","WardObj","wardObj","selectedWard","selectedProvince","selectedDistrict","CustomerPage","customerList","setCustomerList","reloadCustomer","customer","CustomerInfo","PartnerInfo","freeShipQty","groupName","countCustomer","orderToday","Revenue","horizontal","columnWidth","endingShape","stroke","opacity","y","income","Income","revenue","newOptions","refLink","setRefLink","setRevenue","loadRevenue","setPartnerInfo","CountCustomer","OrderToday","origin","toLowerCase","loadPartnerInfo","IsShow","loadMessage","partnerInfo","readOnly","onCopy","cursor","setIsBusyOrder","onOrder","countCart","List","onShowDetail","avatarUrl","background","UnitPriceByPartnerGroup","onAddToCart","ModalAddToCart","renderQty","renderNumberInput","ModalDetail","setProductId","customerPrice","partnerPrice","productName","parentInfo","setParentInfo","setChildren","Parent","CustomerPrice","PartnerPrice","childrenArray","IsSelected","extName","startsWith","substring","isDisabled","setIsBusyBtn","CustomerWardObj","ShippingUnitObj","ShippingMethodObj","IsUseFreeShip","ModalOrder","shippingNote","setFileName","tongTienHang","productArray","customerWardObj","shippingUnitObj","shippingMethodObj","onRemoveCart","CartId","isCheck","onFreeShipChange","FileName","setCountCart","modalAddToCartInfo","setModalAddToCartInfo","modalDetailInfo","setModalDetailInfo","dropShipFeeBase","modalOrderInfo","setModalOrderInfo","loadCountCart","cartId","renderFirstChild","renderChildren","ProductCheckingPage","setStatuses","froms","renderAddress","address","wardName","districtName","provinceName","wardPrefix","districtPrefix","provincePrefix","ProvinceNam","WardPrefix","DistrictPrefix","ProvincePrefix","modalEditWarehouseNoteInfo","setModalEditWarehouseNoteInfo","param","provinceOptions","setProvinceOptions","districtOptions","setDistrictOptions","wardOptions","setWardOptions","partnerWard","partnerDistrict","partnerProvince","ProfilePage","loadProfile","profileInfo","setProfileInfo","Info","setPartnerFullName","setPartnerAvatarUrl","resetForm","BalanceHistoryPage","histories","setHistories","PartnerShopPage","setShops","loadShop","shop","sortOptions","partnerShopId","sortBy","shopeeShopOptions","setShopeeShopOptions","shopeeShop","setShopeeShop","sort","setSort","shopeeShopList","renderFooter","Order_Items","Item_Model","Sku","handleOrder","orderItems","totalProductPrice","Product","Price","Order_Sn","Buyer_Address_Name","Buyer_Address_Phone","Shipping_Fee","imgs","Images","Name","Order_Id","OrderFromShopee","RegisterPage","refCode","search","useMemo","URLSearchParams","useQuery","refPartnerName","setRefPartnerName","partnerLoginLogoHeight","newFormData","AffCode","p_token","LoginTypeId","ChildrenPage","globalPopups","renderAvatar","PartnerLayout","popupInfo","setPopupInfo","popups","popup","PartnerPopupId","loadPopup","partnerAvatarUrl","partnerFullName","nextPopups","nextPopup","loadProgressBar","registerLocale","vi","setDefaultLocale","baseURL","timeout","interceptors","response","use","config","Code","urlArr","adminOrPartner","reload","error","Promise","reject","strRight","fullName","adminAvatarUrl","roleName","adminRole","Provider","AdminLayout","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode"],"mappings":"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","file":"static/js/main.7fca0d16.chunk.js","sourcesContent":["import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport {\r\n IoBagHandleOutline, IoBicycleOutline, IoCardOutline, IoChatboxEllipsesOutline, IoCubeOutline,\r\n IoExtensionPuzzleOutline, IoLogOutOutline, IoPeopleOutline, IoPersonOutline, IoPieChartOutline, IoPricetagOutline, IoReceiptOutline, IoSettingsOutline, IoShirtOutline, IoSpeedometerOutline, IoTicketOutline\r\n} from 'react-icons/io5'\r\nimport { NavLink } from \"react-router-dom\"\r\nimport { AuthAdminView } from '..'\r\n\r\nconst AdminLeftMenu = (props) => {\r\n return (\r\n <ul className=\"side-nav\">\r\n\r\n <li className=\"side-nav-title side-nav-item\">Trang chá»§</li>\r\n\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/dashboard\" className=\"side-nav-link\">\r\n <IoSpeedometerOutline />\r\n <span> Tổng quan </span>\r\n </NavLink>\r\n </li>\r\n\r\n <li className=\"side-nav-title side-nav-item\">Danh mục</li>\r\n\r\n <AuthAdminView right=\"partner_group_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/partner-group\" className=\"side-nav-link\">\r\n <IoPeopleOutline />\r\n <span> Nhóm cá»™ng tác viên </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <AuthAdminView right=\"partner_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/partner\" className=\"side-nav-link\">\r\n <IoPersonOutline />\r\n <span> Cá»™ng tác viên </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <AuthAdminView right=\"category_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/category\" className=\"side-nav-link\">\r\n <IoCubeOutline />\r\n <span> Nhóm sản phẩm </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <AuthAdminView right=\"product_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/product\" className=\"side-nav-link\">\r\n <IoShirtOutline />\r\n <span> Sản phẩm </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <AuthAdminView right=\"attribute_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/attribute\" className=\"side-nav-link\">\r\n <IoPricetagOutline />\r\n <span> Thuá»™c tÃnh </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <AuthAdminView right=\"shipping_unit_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/shipping-unit\" className=\"side-nav-link\">\r\n <IoBicycleOutline />\r\n <span> ÄÆ¡n vị váºn chuyển </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <li className=\"side-nav-title side-nav-item\">Quản lý</li>\r\n\r\n <AuthAdminView right=\"order_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/order\" className=\"side-nav-link\">\r\n <IoReceiptOutline />\r\n <span> ÄÆ¡n hà ng </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <AuthAdminView right=\"statistic_partner_order\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/statistic-partner-order\" className=\"side-nav-link\">\r\n <IoPieChartOutline />\r\n <span> Thống kê đơn hà ng </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <AuthAdminView right=\"popup_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/popup\" className=\"side-nav-link\">\r\n <IoChatboxEllipsesOutline />\r\n <span> Popup </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <AuthAdminView right=\"popup_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/freeship\" className=\"side-nav-link\">\r\n <IoBagHandleOutline />\r\n <span> Miá»…n phà đóng gói </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <li className=\"side-nav-title side-nav-item\">Tà i khoản</li>\r\n\r\n <AuthAdminView right=\"account_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/user-info\" className=\"side-nav-link\">\r\n <IoCardOutline />\r\n <span> Thông tin cá nhân </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <li className=\"side-nav-item\">\r\n <span className=\"side-nav-link cursor-point\" onClick={() => {\r\n props.onLogout()\r\n }}>\r\n <IoLogOutOutline />\r\n <span> Äăng xuất </span>\r\n </span>\r\n </li>\r\n\r\n <li className=\"side-nav-title side-nav-item\">Hệ thống</li>\r\n\r\n <AuthAdminView right=\"user_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/user\" className=\"side-nav-link\">\r\n <IoExtensionPuzzleOutline />\r\n <span> Thà nh viên </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <AuthAdminView right=\"role_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/role\" className=\"side-nav-link\">\r\n <IoTicketOutline />\r\n <span> Vai trò </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n <AuthAdminView right=\"setting_view\">\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/admin/setting\" className=\"side-nav-link\">\r\n <IoSettingsOutline />\r\n <span> Cấu hình </span>\r\n </NavLink>\r\n </li>\r\n </AuthAdminView>\r\n\r\n </ul>\r\n )\r\n}\r\n\r\nAdminLeftMenu.propTypes = {\r\n onLogout: PropTypes.func,\r\n}\r\n\r\nAdminLeftMenu.defaultProps = {\r\n onLogout: () => { }\r\n}\r\n\r\nexport default AdminLeftMenu","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { AiOutlineHistory } from 'react-icons/ai'\r\nimport {\r\n IoCardOutline,\r\n IoLogOutOutline, IoPersonOutline, IoReceiptOutline, IoScanCircleOutline, IoShirtOutline, IoSpeedometerOutline,\r\n IoLayersOutline,\r\n // IoCloudDownloadOutline,\r\n // IoStorefrontOutline,\r\n} from 'react-icons/io5'\r\nimport { NavLink } from \"react-router-dom\"\r\n\r\nfunction PartnerLeftMenu(props) {\r\n return (\r\n <ul className=\"side-nav\">\r\n\r\n <li className=\"side-nav-title side-nav-item\">Trang chá»§</li>\r\n\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/partner/dashboard\" className=\"side-nav-link\">\r\n <IoSpeedometerOutline />\r\n <span> Tổng quan </span>\r\n </NavLink>\r\n </li>\r\n\r\n <li className=\"side-nav-title side-nav-item\">Quản lý</li>\r\n\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/partner/product\" className=\"side-nav-link\">\r\n <IoShirtOutline />\r\n <span> Danh sách sản phẩm </span>\r\n </NavLink>\r\n </li>\r\n\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/partner/product-checking\" className=\"side-nav-link\">\r\n <IoScanCircleOutline />\r\n <span> Kiểm tra ID sản phẩm </span>\r\n </NavLink>\r\n </li>\r\n\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/partner/customer\" className=\"side-nav-link\">\r\n <IoPersonOutline />\r\n <span> Khách hà ng </span>\r\n </NavLink>\r\n </li>\r\n\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/partner/order\" className=\"side-nav-link\">\r\n <IoReceiptOutline />\r\n <span> ÄÆ¡n hà ng </span>\r\n </NavLink>\r\n\r\n </li>\r\n\r\n {/* <li className=\"side-nav-item\">\r\n <NavLink to=\"/partner/shop\" className=\"side-nav-link\">\r\n <IoStorefrontOutline />\r\n <span> Tà i khoản shopee</span>\r\n </NavLink>\r\n </li>\r\n\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/partner/order-from-shopee\" className=\"side-nav-link\">\r\n <IoCloudDownloadOutline />\r\n <span> ÄÆ¡n hà ng từ shopee</span>\r\n </NavLink>\r\n </li> */}\r\n\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/partner/children\" className=\"side-nav-link\">\r\n <IoLayersOutline />\r\n <span> Äã giá»›i thiệu</span>\r\n </NavLink>\r\n </li>\r\n\r\n <li className=\"side-nav-title side-nav-item\">Tà i khoản</li>\r\n\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/partner/profile\" className=\"side-nav-link\">\r\n <IoCardOutline />\r\n <span> Thông tin cá nhân </span>\r\n </NavLink>\r\n </li>\r\n\r\n <li className=\"side-nav-item\">\r\n <NavLink to=\"/partner/balance-history\" className=\"side-nav-link\">\r\n <AiOutlineHistory />\r\n <span> Lịch sá» giao dịch </span>\r\n </NavLink>\r\n </li>\r\n\r\n <li className=\"side-nav-item\">\r\n <span className=\"side-nav-link cursor-point\" onClick={() => {\r\n props.onLogout()\r\n }}>\r\n <IoLogOutOutline />\r\n <span> Äăng xuất </span>\r\n </span>\r\n </li>\r\n\r\n </ul>\r\n )\r\n}\r\n\r\nPartnerLeftMenu.propTypes = {\r\n onLogout: PropTypes.func,\r\n}\r\n\r\nPartnerLeftMenu.defaultProps = {\r\n onLogout: () => { }\r\n}\r\n\r\nexport default PartnerLeftMenu","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoSearchOutline } from 'react-icons/io5'\r\n\r\nconst SearchButton = (props) => {\r\n const { onClick, type } = props\r\n\r\n return (\r\n <button onClick={onClick} className=\"btn btn-primary\" type={type}>\r\n <IoSearchOutline className=\"me-1 mt--2-px font-17\" />Tìm kiếm\r\n </button>\r\n )\r\n}\r\n\r\nSearchButton.propTypes = {\r\n onClick: PropTypes.func,\r\n type: PropTypes.string\r\n}\r\n\r\nSearchButton.defaultProps = {\r\n onClick: () => { },\r\n type: 'button'\r\n}\r\n\r\nexport default SearchButton","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport { GiBroom } from 'react-icons/gi';\r\n\r\nconst ClearButton = (props) => {\r\n return (\r\n <button onClick={props.onClick} type=\"button\" className=\"btn btn-warning\">\r\n <GiBroom className=\"me-1 mt--2-px font-17\" />Xóa Tìm kiếm\r\n </button>\r\n )\r\n}\r\n\r\nClearButton.propTypes = {\r\n onClick: PropTypes.func\r\n}\r\n\r\nClearButton.defaultProps = {\r\n onClick: () => { }\r\n}\r\n\r\nexport default ClearButton","import React from \"react\";\r\n\r\nconst AppContext = React.createContext();\r\n\r\nexport default AppContext;","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoFileTrayOutline } from 'react-icons/io5'\r\n\r\nconst EmptyRow = props => {\r\n return (\r\n <tr className=\"cursor-default\">\r\n <td colSpan={props.colSpan} className=\"text-center\">\r\n <IoFileTrayOutline className=\"fs-1 mt-2\" />\r\n <p>{props.title}</p>\r\n </td>\r\n </tr>\r\n )\r\n}\r\n\r\nEmptyRow.propTypes = {\r\n colSpan: PropTypes.number,\r\n title: PropTypes.string\r\n}\r\n\r\nEmptyRow.defaultProps = {\r\n colSpan: 1,\r\n title: 'Không tìm thấy dữ liệu'\r\n}\r\n\r\nexport default EmptyRow","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst LoadingRow = props => {\r\n return (\r\n <tr>\r\n <td colSpan={props.colSpan} className=\"text-center\">\r\n <div className=\"spinner-border text-primary mt-2 mb-1\" role=\"status\"></div>\r\n <p>{props.title}</p>\r\n </td>\r\n </tr>\r\n )\r\n}\r\n\r\nLoadingRow.propTypes = {\r\n colSpan: PropTypes.number,\r\n title: PropTypes.string\r\n}\r\n\r\nLoadingRow.defaultProps = {\r\n colSpan: 1,\r\n title: 'Äang tải dữ liệu'\r\n}\r\n\r\nexport default LoadingRow","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst FormatNumber = props => {\r\n const { children, maxDigit } = props\r\n\r\n return (\r\n <Fragment>\r\n {children.toLocaleString('vi-VN', { maximumFractionDigits: maxDigit })}\r\n </Fragment>\r\n )\r\n}\r\n\r\nFormatNumber.propTypes = {\r\n children: PropTypes.number,\r\n maxDigit: PropTypes.number\r\n}\r\n\r\nFormatNumber.defaultProps = {\r\n children: 0,\r\n maxDigit: 0\r\n}\r\n\r\nexport default FormatNumber","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoSaveOutline } from 'react-icons/io5'\r\n\r\nconst SaveButton = props => {\r\n const handleOnClick = () => {\r\n if (props.onClick) {\r\n props.onClick()\r\n }\r\n }\r\n\r\n const renderIcon = () => {\r\n if (props.isBusy) {\r\n return <div className=\"spinner-border spinner-border-sm me-1\" role=\"status\"></div>;\r\n }\r\n else {\r\n return props.icon\r\n }\r\n }\r\n\r\n return (\r\n <button type={props.type} className={props.className + ' btn btn-primary'} onClick={handleOnClick} disabled={props.isBusy}>\r\n {renderIcon()}\r\n {props.title}\r\n </button>\r\n )\r\n}\r\n\r\nSaveButton.propTypes = {\r\n type: PropTypes.string,\r\n title: PropTypes.string,\r\n onClick: PropTypes.func,\r\n icon: PropTypes.element,\r\n isBusy: PropTypes.bool,\r\n className: PropTypes.string,\r\n}\r\n\r\nSaveButton.defaultProps = {\r\n type: 'submit',\r\n title: 'Lưu',\r\n onClick: () => { },\r\n icon: <IoSaveOutline className=\"mt--3-px me-1 font-17\" />,\r\n isBusy: false,\r\n className: ''\r\n}\r\n\r\nexport default SaveButton","import React from 'react'\r\nimport { IoBanOutline } from 'react-icons/io5'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst CloseButton = props => {\r\n const handleOnClick = () => {\r\n if (props.onClick) {\r\n props.onClick()\r\n }\r\n }\r\n\r\n return (\r\n <button type=\"button\" className=\"btn btn-light\" onClick={handleOnClick}>\r\n <IoBanOutline className=\"mt--3-px me-1 font-17\" />\r\n {props.title}\r\n </button>\r\n )\r\n}\r\n\r\nCloseButton.propTypes = {\r\n title: PropTypes.string,\r\n onClick: PropTypes.func\r\n}\r\n\r\nCloseButton.defaultProps = {\r\n title: 'Äóng',\r\n onClick: () => { }\r\n}\r\n\r\nexport default CloseButton","import React, { useState } from 'react'\r\nimport { IoSaveOutline } from 'react-icons/io5'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst LoadingButton = props => {\r\n const [isBusy, setIsBusy] = useState(false);\r\n\r\n const handleOnClick = () => {\r\n if (props.onClick) {\r\n props.onClick(setIsBusy)\r\n }\r\n }\r\n\r\n const renderIcon = () => {\r\n if (isBusy) {\r\n return <div className=\"spinner-border spinner-border-sm me-1\" role=\"status\"></div>\r\n }\r\n else {\r\n return props.icon;\r\n }\r\n }\r\n\r\n return (\r\n <button type={props.type} className=\"btn btn-primary\" onClick={handleOnClick} disabled={isBusy}>\r\n {renderIcon()}\r\n {props.title}\r\n </button>\r\n );\r\n}\r\n\r\nLoadingButton.propTypes = {\r\n type: PropTypes.string,\r\n title: PropTypes.string,\r\n onClick: PropTypes.func,\r\n // icon: \r\n}\r\n\r\nLoadingButton.defaultProps = {\r\n type: 'button',\r\n title: 'Lưu',\r\n onClick: null,\r\n icon: <IoSaveOutline className=\"mt--3-px me-1 font-17\" />\r\n}\r\n\r\nexport default LoadingButton","import axios from 'axios'\r\nimport PropTypes from 'prop-types'\r\nimport React, { Fragment, useRef } from 'react'\r\n\r\nconst maxSizeInBute = 5_242_880 // 5MB\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst UploadImg = props => {\r\n const fileInput = useRef(null)\r\n\r\n const handleTrigger = () => {\r\n fileInput.current.click()\r\n }\r\n\r\n const handleUpload = e => {\r\n let files = e.target.files\r\n if (files.length !== 0) {\r\n let file = files[0]\r\n let name = file.name\r\n let sizeInByte = file.size\r\n if (sizeInByte > maxSizeInBute) {\r\n return\r\n }\r\n const formData = new FormData()\r\n formData.append('formFile', file)\r\n formData.append('fileName', name)\r\n const url = uploadUrl();\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (props.onCompleted) {\r\n props.onCompleted(data)\r\n }\r\n })\r\n }\r\n }\r\n\r\n const uploadUrl = () => {\r\n if (props.isPartner) return '/partner/storage/upload-image'\r\n else return '/admin/storage/upload-image'\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <input\r\n style={{ display: 'none' }}\r\n type=\"file\"\r\n accept=\".gif, .jpg, jpeg, .png\"\r\n ref={fileInput}\r\n onChange={handleUpload} />\r\n <p\r\n className=\"bg-img cursor-point\"\r\n style={{ backgroundImage: `url(${(props.imgUrl === '' ? noImgUrl : `${apiUrl}/admin/storage/thumbnail?url=${props.imgUrl}&size=${props.thumbnailSize}`)})` }}\r\n onClick={handleTrigger}\r\n />\r\n <p className=\"mb-0 fst-italic\">Ảnh tối Ä‘a 5MB (.jpg .jpeg .gif .png)</p>\r\n </Fragment>\r\n )\r\n}\r\n\r\nUploadImg.propTypes = {\r\n imgUrl: PropTypes.string,\r\n thumbnailSize: PropTypes.number,\r\n onCompleted: PropTypes.func,\r\n isPartner: PropTypes.bool\r\n}\r\n\r\nUploadImg.defaultProps = {\r\n imgUrl: '',\r\n thumbnailSize: 400,\r\n onCompleted: () => { },\r\n isPartner: false\r\n}\r\n\r\nexport default UploadImg","import axios from 'axios'\r\nimport PropTypes from 'prop-types'\r\nimport React, { Fragment, useRef } from 'react'\r\n\r\nconst maxSizeInBute = 5_242_880 // 5MB\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst UploadProductImg = props => {\r\n const fileInput = useRef(null)\r\n\r\n const handleTrigger = () => {\r\n fileInput.current.click()\r\n }\r\n\r\n const handleUpload = e => {\r\n let files = e.target.files\r\n if (files.length !== 0) {\r\n let file = files[0]\r\n let name = file.name\r\n let sizeInByte = file.size\r\n if (sizeInByte > maxSizeInBute) {\r\n return\r\n }\r\n const formData = new FormData()\r\n formData.append('formFile', file)\r\n formData.append('fileName', name)\r\n const url = uploadUrl();\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (props.onCompleted) {\r\n props.onCompleted(data)\r\n }\r\n })\r\n }\r\n }\r\n\r\n const uploadUrl = () => {\r\n if (props.isPartner) return '/partner/storage/upload-image'\r\n else return '/admin/storage/upload-image'\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <input\r\n style={{ display: 'none' }}\r\n type=\"file\"\r\n accept=\".gif, .jpg, jpeg, .png\"\r\n ref={fileInput}\r\n onChange={handleUpload} />\r\n <span\r\n className={`bg-avatar rounded-circle cursor-point me-${props.me}`}\r\n style={{ backgroundImage: `url(${(props.imgUrl === '' ? noImgUrl : `${apiUrl}/admin/storage/thumbnail?url=${props.imgUrl}&size=${props.thumbnailSize}`)})` }}\r\n onClick={handleTrigger}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nUploadProductImg.propTypes = {\r\n imgUrl: PropTypes.string,\r\n thumbnailSize: PropTypes.number,\r\n onCompleted: PropTypes.func,\r\n me: PropTypes.number,\r\n}\r\n\r\nUploadProductImg.defaultProps = {\r\n imgUrl: '',\r\n thumbnailSize: 50,\r\n onCompleted: () => { },\r\n me: 1\r\n}\r\n\r\nexport default UploadProductImg","import React, { useState } from 'react';\r\nimport { IoExtensionPuzzleOutline } from 'react-icons/io5'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst IconButton = props => {\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const btnClassName = () => {\r\n return `btn btn-${props.variant} btn-icon ${props.className}`\r\n }\r\n\r\n const handleClick = () => {\r\n if (props.onClick) {\r\n props.onClick(setIsBusy)\r\n }\r\n }\r\n\r\n const renderIcon = () => {\r\n if (isBusy) {\r\n return <div className=\"spinner-border spinner-border-sm me-1\" role=\"status\"></div>;\r\n }\r\n else {\r\n return props.icon\r\n }\r\n }\r\n\r\n const renderContent = () => {\r\n if (props.children !== undefined) return props.children\r\n else return props.text\r\n }\r\n\r\n return (\r\n <button onClick={handleClick} className={btnClassName()} disabled={isBusy} type={props.type}>\r\n {renderIcon()}\r\n {renderContent()}\r\n </button>\r\n )\r\n}\r\n\r\nIconButton.propTypes = {\r\n icon: PropTypes.element,\r\n text: PropTypes.string,\r\n variant: PropTypes.string,\r\n onClick: PropTypes.func,\r\n className: PropTypes.string,\r\n type: PropTypes.string,\r\n}\r\n\r\nIconButton.defaultProps = {\r\n icon: <IoExtensionPuzzleOutline />,\r\n text: 'Text',\r\n variant: 'primary',\r\n onClick: () => { },\r\n className: '',\r\n type: \"button\"\r\n}\r\n\r\nexport default IconButton","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst AvatarRow = props => {\r\n const { className, onClick, url, me, size } = props\r\n\r\n const getImgUrl = () => {\r\n if (url === '' || url === null) return `url(${noImgUrl})`\r\n else return `url(${apiUrl}/admin/storage/thumbnail?url=${url}&size=${size})`\r\n }\r\n\r\n const iconClass = () => {\r\n return `bg-avatar me-${me} rounded-circle`\r\n }\r\n\r\n const handleClick = () => {\r\n if (onClick) {\r\n const fullUrl = `${apiUrl}${url}`\r\n onClick({\r\n baseUrl: url,\r\n fullUrl\r\n })\r\n }\r\n }\r\n\r\n return (\r\n <span\r\n onClick={handleClick}\r\n className={iconClass() + ` ${className}`}\r\n style={{ backgroundImage: getImgUrl() }}\r\n ></span>\r\n )\r\n}\r\n\r\nAvatarRow.propTypes = {\r\n url: PropTypes.string,\r\n size: PropTypes.number,\r\n me: PropTypes.number,\r\n className: PropTypes.string,\r\n onClick: PropTypes.func,\r\n}\r\n\r\nAvatarRow.defaultProps = {\r\n url: '',\r\n size: 50,\r\n me: 1,\r\n className: '',\r\n onClick: null\r\n}\r\n\r\nexport default AvatarRow","import { store } from 'react-notifications-component';\r\nimport Swal from 'sweetalert2'\r\n\r\nconst duration = 3_500\r\n\r\nconst Notification = {\r\n success: msg => {\r\n store.addNotification({\r\n // title: \"Wonderful!\",\r\n message: msg,\r\n type: \"success\",\r\n insert: \"top\",\r\n container: \"bottom-right\",\r\n animationIn: [\"animate__animated\", \"animate__fadeIn\"],\r\n animationOut: [\"animate__animated\", \"animate__fadeOut\"],\r\n dismiss: {\r\n duration: duration,\r\n pauseOnHover: true\r\n // onScreen: true\r\n }\r\n });\r\n },\r\n warning: msg => {\r\n store.addNotification({\r\n message: msg,\r\n type: \"warning\",\r\n insert: \"top\",\r\n container: \"bottom-right\",\r\n animationIn: [\"animate__animated\", \"animate__fadeIn\"],\r\n animationOut: [\"animate__animated\", \"animate__fadeOut\"],\r\n dismiss: {\r\n duration: duration,\r\n pauseOnHover: true\r\n }\r\n });\r\n },\r\n danger: msg => {\r\n store.addNotification({\r\n message: msg,\r\n type: \"danger\",\r\n insert: \"top\",\r\n container: \"bottom-right\",\r\n animationIn: [\"animate__animated\", \"animate__fadeIn\"],\r\n animationOut: [\"animate__animated\", \"animate__fadeOut\"],\r\n dismiss: {\r\n duration: duration,\r\n pauseOnHover: true\r\n }\r\n });\r\n },\r\n confirm: (msg = 'Bạn có chắc muốn thá»±c hiện?', ok, cancel) => {\r\n Swal.fire({\r\n // title: 'Xác nháºn',\r\n text: msg,\r\n icon: 'question',\r\n showCloseButton: false,\r\n showCancelButton: true,\r\n confirmButtonText: 'Äồng ý',\r\n cancelButtonText: 'Bá» qua'\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n ok();\r\n } else if (result.dismiss === Swal.DismissReason.cancel) {\r\n if (cancel) {\r\n cancel()\r\n }\r\n }\r\n })\r\n },\r\n confirmHtml: (msg, objText, ok) => {\r\n const str = `${msg} <span class=\"text-danger\">${objText}</span> không?`\r\n Swal.fire({\r\n html: str,\r\n icon: 'question',\r\n showCloseButton: false,\r\n showCancelButton: true,\r\n confirmButtonText: 'Äồng ý',\r\n cancelButtonText: 'Bá» qua'\r\n }).then((result) => {\r\n if (result.isConfirmed) {\r\n ok();\r\n } else if (result.dismiss === Swal.DismissReason.cancel) {\r\n\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default Notification","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\n\r\nfunction InputSelect(props) {\r\n const variantClassName = (variant) => {\r\n return `form-control form-check form-radio-${variant !== undefined ? variant : props.variant} position-relative`\r\n }\r\n\r\n const onChange = (e) => {\r\n const isChecked = e.target.checked\r\n const value = parseInt(e.target.value)\r\n if (isChecked) {\r\n if (props.onChange) {\r\n props.onChange(value)\r\n }\r\n }\r\n }\r\n\r\n const renderControl = () => {\r\n const name = props.name\r\n const options = props.options\r\n const className = !props.isVertical ? 'col' : 'col-12'\r\n return options.map((item, index) => {\r\n return (\r\n <div className={className} key={item.value}>\r\n <div className={variantClassName(item.variant)}>\r\n <input\r\n checked={item.value === props.value}\r\n type=\"radio\"\r\n value={item.value}\r\n id={name + '-' + index}\r\n name={name}\r\n className=\"form-check-input input-select-radio\"\r\n onChange={onChange}\r\n />\r\n <label\r\n className=\"form-check-label input-select-label\"\r\n htmlFor={name + '-' + index}>{item.label}\r\n </label>\r\n </div>\r\n </div>\r\n )\r\n })\r\n }\r\n\r\n const renderContainer = () => {\r\n const className = !props.isVertical ? 'row' : 'row gy-2'\r\n return <div className={className}>\r\n {renderControl()}\r\n </div>\r\n }\r\n\r\n return (\r\n renderContainer()\r\n )\r\n}\r\n\r\nInputSelect.propTypes = {\r\n options: PropTypes.array,\r\n value: PropTypes.number,\r\n defaultValue: PropTypes.number,\r\n name: PropTypes.string,\r\n variant: PropTypes.string,\r\n onChange: PropTypes.func,\r\n isVertical: PropTypes.bool\r\n}\r\n\r\nInputSelect.defaultProps = {\r\n options: [\r\n {\r\n value: 1,\r\n label: 'Option 1',\r\n variant: 'primary'\r\n },\r\n {\r\n value: 2,\r\n label: 'Option 2',\r\n variant: 'warning'\r\n }\r\n ],\r\n value: 0,\r\n defaultValue: 0,\r\n name: 'input-select',\r\n variant: 'primary',\r\n onChange: () => { },\r\n isVertical: false\r\n}\r\n\r\nexport default InputSelect","import PropTypes from 'prop-types'\r\nimport React, { Fragment } from 'react'\r\n\r\nfunction Pagination(props) {\r\n const pageBreak = () => Math.floor(props.displayPage / 2)\r\n\r\n const startPage = () => {\r\n if (props.totalPage > props.displayPage) {\r\n if (props.currentPage > props.displayPage - pageBreak()) {\r\n return props.currentPage - pageBreak < 1 ? 1 : props.currentPage - pageBreak()\r\n }\r\n else return 1\r\n }\r\n else return 1\r\n }\r\n\r\n const endPage = () => {\r\n if (props.totalPage > props.displayPage) {\r\n if (props.currentPage > props.displayPage - pageBreak()) {\r\n if (props.currentPage < props.totalPage - pageBreak())\r\n return pageBreak() % 2 === 0 ? props.currentPage + pageBreak() : props.currentPage + (pageBreak() - 1)\r\n else return props.totalPage\r\n }\r\n else return props.displayPage\r\n }\r\n else return props.totalPage\r\n }\r\n\r\n const isCanPrev = () => props.currentPage > 1\r\n\r\n const isCanNext = () => props.currentPage < props.totalPage\r\n\r\n const isCanFirst = () => props.currentPage > 1\r\n\r\n const isCanLast = () => props.currentPage < props.totalPage\r\n\r\n const isRender = () => {\r\n if (props.totalPage > 1) return true\r\n else if (!props.isHideIfOnePage) return true\r\n return false\r\n }\r\n\r\n const onPageClick = (pageIndex) => {\r\n onChange(pageIndex)\r\n }\r\n\r\n const onPrevClick = () => {\r\n onChange(props.currentPage - 1)\r\n }\r\n\r\n const onNextClick = () => {\r\n onChange(props.currentPage + 1)\r\n }\r\n\r\n const onFirstClick = () => {\r\n onChange(1)\r\n }\r\n\r\n const onLastClick = () => {\r\n onChange(props.totalPage)\r\n }\r\n\r\n const onChange = (currentPage) => {\r\n props.onPageChange(currentPage)\r\n }\r\n\r\n const renderHtml = () => {\r\n if (isRender()) {\r\n return (\r\n <nav className=\"mt-3 float-end\">\r\n <ul className=\"pagination pagination-rounded mb-0\">\r\n <li className={'page-item first' + (!isCanFirst() ? ' disabled' : '')}>\r\n <button className=\"page-link\" onClick={onFirstClick}>â†</button>\r\n </li>\r\n <li className={'page-item' + (!isCanPrev() ? ' disabled' : '')}>\r\n <button className=\"page-link\" aria-label=\"Previous\" onClick={onPrevClick}>\r\n <span aria-hidden=\"true\">«</span>\r\n </button>\r\n </li>\r\n {renderNum()}\r\n <li className={'page-item' + (!isCanNext() ? ' disabled' : '')}>\r\n <button className=\"page-link\" aria-label=\"Next\" onClick={onNextClick}>\r\n <span aria-hidden=\"true\">»</span>\r\n </button>\r\n </li>\r\n <li className={'page-item last' + (!isCanLast() ? ' disabled' : '')}>\r\n <button className=\"page-link\" onClick={onLastClick}>→</button>\r\n </li>\r\n </ul >\r\n </nav >\r\n )\r\n }\r\n }\r\n\r\n const renderNum = () => {\r\n const start = startPage()\r\n const end = endPage() + 1\r\n const html = []\r\n for (let i = start; i < end; i++) {\r\n html.push(<li className={'page-item' + (i === props.currentPage ? ' active' : '')} key={i}>\r\n <button className=\"page-link\" onClick={() => onPageClick(i)}>{i}</button>\r\n </li>)\r\n }\r\n return html\r\n }\r\n\r\n return (\r\n <Fragment>\r\n {renderHtml()}\r\n </Fragment>\r\n )\r\n}\r\n\r\nPagination.propTypes = {\r\n onPageChange: PropTypes.func,\r\n totalPage: PropTypes.number,\r\n currentPage: PropTypes.number,\r\n displayPage: PropTypes.number,\r\n isHideIfOnePage: PropTypes.bool\r\n}\r\n\r\nPagination.defaultProps = {\r\n onPageChange: () => { },\r\n totalPage: 10,\r\n currentPage: 1,\r\n displayPage: 5,\r\n isHideIfOnePage: true\r\n}\r\n\r\nexport default Pagination","import React, { Fragment, useRef, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { SiMicrosoftexcel } from 'react-icons/si'\r\nimport axios from 'axios'\r\n\r\nconst maxSizeInBute = 5_242_880 // 5MB\r\n\r\nconst url = '/admin/storage/excel-to-json'\r\n\r\nfunction ReadExcelButton(props) {\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const fileInput = useRef(null)\r\n\r\n const handleTrigger = () => {\r\n fileInput.current.click()\r\n }\r\n\r\n const handleUpload = (e) => {\r\n let files = e.target.files\r\n if (files.length !== 0) {\r\n let file = files[0]\r\n let name = file.name\r\n let sizeInByte = file.size\r\n if (sizeInByte > maxSizeInBute) {\r\n return\r\n }\r\n setIsBusy(true)\r\n const formData = new FormData()\r\n formData.append('formFile', file)\r\n formData.append('fileName', name)\r\n axios.post(url, formData).then(({ data }) => {\r\n if (props.onCompleted) {\r\n props.onCompleted(data)\r\n }\r\n setIsBusy(false)\r\n })\r\n }\r\n }\r\n\r\n const renderIcon = () => {\r\n if (isBusy) return <div className=\"spinner-border spinner-border-sm me-1\" role=\"status\"></div>\r\n else return <SiMicrosoftexcel className=\"mt--3-px me-1 font-17\" />\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <input\r\n style={{ display: 'none' }}\r\n type=\"file\"\r\n accept=\".xlsx\"\r\n ref={fileInput}\r\n onChange={handleUpload}\r\n />\r\n <button\r\n className={'btn btn-' + props.variant}\r\n type=\"button\"\r\n onClick={handleTrigger}\r\n >\r\n {renderIcon()}\r\n Chá»n file excel\r\n </button>\r\n </Fragment>\r\n )\r\n}\r\n\r\nReadExcelButton.propTypes = {\r\n onCompleted: PropTypes.func,\r\n variant: PropTypes.string\r\n}\r\n\r\nReadExcelButton.defaultProps = {\r\n onCompleted: () => { },\r\n variant: 'success'\r\n}\r\n\r\nexport default ReadExcelButton","import PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport NumberFormat from 'react-number-format'\r\n\r\nconst NumberUpDown = (props) => {\r\n const {\r\n placeholder,\r\n // min,\r\n max,\r\n step,\r\n onChange,\r\n value,\r\n className\r\n } = props\r\n\r\n const [currentValue, setCurrentValue] = useState(0)\r\n\r\n useEffect(() => {\r\n const inputValue = value\r\n if (inputValue > max) {\r\n setCurrentValue(max)\r\n }\r\n else {\r\n if (inputValue !== currentValue) {\r\n setCurrentValue(inputValue)\r\n }\r\n }\r\n // eslint-disable-next-line\r\n }, [value])\r\n\r\n const onIncrease = () => {\r\n let currentVal = parseInt(currentValue)\r\n if (currentVal + step >= max) {\r\n setCurrentValue(max)\r\n onChange(max)\r\n }\r\n else {\r\n const newValue = currentVal + step\r\n setCurrentValue(newValue)\r\n onChange(newValue)\r\n }\r\n }\r\n\r\n const onDecrease = () => {\r\n let currentVal = parseInt(currentValue)\r\n if (currentVal <= step) {\r\n setCurrentValue(0)\r\n onChange(0)\r\n }\r\n else {\r\n const newValue = currentVal - step\r\n setCurrentValue(newValue)\r\n onChange(newValue)\r\n }\r\n }\r\n\r\n return (\r\n <div className={className + ' input-group flex-nowrap'}>\r\n <span className=\"input-group-text cursor-point\" onClick={onDecrease}>-</span>\r\n <NumberFormat\r\n placeholder={placeholder}\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={currentValue}\r\n onValueChange={val => {\r\n if (val.value !== '') {\r\n if (val.value > max) setCurrentValue(max)\r\n else setCurrentValue(val.value)\r\n }\r\n else setCurrentValue(0)\r\n }}\r\n />\r\n <span className=\"input-group-text cursor-point\" onClick={onIncrease}>+</span>\r\n </div>\r\n )\r\n}\r\n\r\nNumberUpDown.propTypes = {\r\n placeholder: PropTypes.string,\r\n min: PropTypes.number,\r\n max: PropTypes.number,\r\n step: PropTypes.number,\r\n onChange: PropTypes.func,\r\n value: PropTypes.number,\r\n className: PropTypes.string\r\n}\r\n\r\nNumberUpDown.defaultProps = {\r\n placeholder: '0',\r\n min: 0,\r\n max: 1_000_000,\r\n step: 1,\r\n onChange: () => { },\r\n value: 0,\r\n className: ''\r\n}\r\n\r\nexport default NumberUpDown","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nfunction DetailRow(props) {\r\n const { className, title, titleColumn, childrenColumn } = props\r\n\r\n const titleColumnString = () => `col-sm-${titleColumn}`\r\n\r\n const childrenColumnString = () => `col-sm-${childrenColumn}`\r\n\r\n return (\r\n <div className={className}>\r\n <div className=\"border-bottom\">\r\n <div className=\"row gx-2 pt-2 pb-2\">\r\n <div className={titleColumnString()}>\r\n <p className=\"fw-bold mb-0\">{title}</p>\r\n </div>\r\n <div className={childrenColumnString()}>\r\n <p className=\"mb-0\">{props.children}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nDetailRow.propTypes = {\r\n className: PropTypes.string,\r\n title: PropTypes.string,\r\n titleColumn: PropTypes.number,\r\n childrenColumn: PropTypes.number,\r\n}\r\n\r\nDetailRow.defaultProps = {\r\n className: \"col-sm-12 col-md-6 col-lg-6 col-xl-4\",\r\n title: 'Title',\r\n titleColumn: 4,\r\n childrenColumn: 8\r\n}\r\n\r\nexport default DetailRow","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nfunction ShopeeProductAvatar(props) {\r\n const getImgUrl = () => {\r\n const url = props.url\r\n if (url === '' || url === null) return `url(${noImgUrl})`\r\n else return `url('https://cf.shopee.vn/file/${url}')`\r\n }\r\n\r\n return (\r\n <span\r\n className=\"bg-avatar me-1 rounded-circle\"\r\n style={{ backgroundImage: getImgUrl() }}\r\n ></span>\r\n )\r\n}\r\n\r\nShopeeProductAvatar.propTypes = {\r\n url: PropTypes.string\r\n}\r\n\r\nShopeeProductAvatar.defaultProps = {\r\n url: ''\r\n}\r\n\r\nexport default ShopeeProductAvatar","import React, { Fragment } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst renderStatus = (statusId, className, onClick) => {\r\n if (statusId === 1)\r\n return (\r\n <span className={`badge bg-success ` + className} onClick={onClick}>\r\n Äang bán\r\n </span>\r\n );\r\n else if (statusId === 2)\r\n return (\r\n <span className={`badge bg-danger ` + className} onClick={onClick}>\r\n Ngừng bán\r\n </span>\r\n );\r\n else\r\n return (\r\n <span className={`badge bg-warning ` + className} onClick={onClick}>\r\n Hết hà ng\r\n </span>\r\n );\r\n};\r\n\r\nfunction ProductStatus(props) {\r\n const { statusId, onClick, className } = props;\r\n\r\n return <Fragment>{renderStatus(statusId, className, onClick)}</Fragment>;\r\n}\r\n\r\nProductStatus.propTypes = {\r\n statusId: PropTypes.number,\r\n onClick: PropTypes.func,\r\n className: PropTypes.string,\r\n};\r\n\r\nProductStatus.defaultProps = {\r\n statusId: 0,\r\n onClick: () => {},\r\n className: \"\",\r\n};\r\n\r\nexport default ProductStatus;\r\n","import PropTypes from 'prop-types'\r\nimport { useContext } from 'react'\r\nimport { AppContext } from './../../components'\r\nimport { Fragment } from 'react'\r\n\r\nfunction AuthAdminView(props) {\r\n const { right, children } = props\r\n\r\n const appSettings = useContext(AppContext)\r\n\r\n function renderChildrent() {\r\n if (appSettings.rights.some(n => n === right)) return children\r\n }\r\n\r\n return (\r\n <Fragment>\r\n {renderChildrent()}\r\n </Fragment>\r\n )\r\n}\r\n\r\nAuthAdminView.propTypes = {\r\n right: PropTypes.string,\r\n}\r\n\r\nAuthAdminView.defaultProps = {\r\n right: ''\r\n}\r\n\r\nexport default AuthAdminView","import React from 'react'\r\nimport { IoEllipsisVertical } from 'react-icons/io5'\r\n\r\nfunction ActionRow(props) {\r\n const { children } = props\r\n\r\n return (\r\n <div className=\"dropdown float-end\">\r\n <button className=\"dropdown-toggle arrow-none card-drop btn-drop\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n <IoEllipsisVertical className=\"fs-4 text-primary\" />\r\n </button>\r\n <div className=\"dropdown-menu dropdown-menu-end\">\r\n {children}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ActionRow","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { IoExtensionPuzzleOutline } from 'react-icons/io5'\r\nimport { AuthAdminView } from '..'\r\n\r\nfunction ActionItem(props) {\r\n const { title, icon, onClick, className, right } = props\r\n\r\n return (\r\n <AuthAdminView right={right}>\r\n <button\r\n onClick={onClick}\r\n className={'dropdown-item action-item ' + className}\r\n >\r\n {icon}\r\n {title}\r\n </button>\r\n </AuthAdminView>\r\n )\r\n}\r\n\r\nActionItem.propTypes = {\r\n title: PropTypes.string,\r\n icon: PropTypes.element,\r\n onClick: PropTypes.func,\r\n className: PropTypes.string,\r\n right: PropTypes.string,\r\n}\r\n\r\nActionItem.defaultProps = {\r\n title: 'Title',\r\n icon: <IoExtensionPuzzleOutline />,\r\n onClick: () => { },\r\n className: '',\r\n right: ''\r\n}\r\n\r\nexport default ActionItem","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport Select from 'react-select'\r\n\r\n// const getLevel = (data, parentId, level) => {\r\n// let result = []\r\n// const lst = data.filter(n => n.ParentId === parentId)\r\n// if (lst.length !== 0) {\r\n// const aLevel = level + 1\r\n// lst.forEach((item) => {\r\n// result.push({\r\n// ...item,\r\n// Level: level\r\n// })\r\n// const temp = getLevel(data, item.CategoryId, aLevel)\r\n// temp.forEach(cat => {\r\n// result.push(cat)\r\n// })\r\n// })\r\n// }\r\n// return result\r\n// }\r\n\r\nconst getCategoryLevel = (data, parentId, catName) => {\r\n let result = []\r\n const lst = data.filter(n => n.ParentId === parentId)\r\n if (lst.length !== 0) {\r\n lst.forEach((item) => {\r\n const levelCatName = `${catName !== '' ? `${catName} > ` : ''}${item.CategoryName}`\r\n result.push({\r\n ...item,\r\n Label: `${catName !== '' ? `${catName} > ` : ''}${item.CategoryName}`\r\n })\r\n const temp = getCategoryLevel(data, item.CategoryId, levelCatName)\r\n temp.forEach(cat => {\r\n result.push(cat)\r\n })\r\n })\r\n }\r\n return result\r\n}\r\n\r\n// const getLabel = (catName, level) => {\r\n// let str = ''\r\n// for (let index = 0; index < level; index++) {\r\n// str += '--- '\r\n// }\r\n// str += catName\r\n// return str\r\n// }\r\n\r\nfunction CategoryDropdownTree(props) {\r\n const { options, onChange, value, isClearable } = props\r\n\r\n const [categories, setCategories] = useState([])\r\n\r\n const [category, setCategory] = useState(null)\r\n\r\n useEffect(() => {\r\n if (options.length !== 0) {\r\n // const cats = getLevel(options, 0, 0).map(item => {\r\n // return {\r\n // label: getLabel(item.CategoryName, item.Level),\r\n // value: item.CategoryId\r\n // }\r\n // })\r\n const cats = getCategoryLevel(options, 0, '').map(item => {\r\n return {\r\n label: item.Label,\r\n value: item.CategoryId\r\n }\r\n })\r\n setCategories(cats)\r\n }\r\n }, [options])\r\n\r\n useEffect(() => {\r\n if (categories.length !== 0) {\r\n const tempList = categories.filter(n => n.value === value)\r\n if (tempList.length !== 0) {\r\n const selectedValue = tempList[0]\r\n setCategory(selectedValue)\r\n }\r\n else {\r\n setCategory(0)\r\n }\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [value])\r\n\r\n return (\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={isClearable}\r\n options={categories}\r\n value={category}\r\n onChange={item => {\r\n if (item !== null) {\r\n onChange(item.value)\r\n }\r\n else {\r\n onChange(0)\r\n }\r\n }}\r\n placeholder='Nhóm sản phẩm'\r\n />\r\n )\r\n}\r\n\r\nCategoryDropdownTree.propTypes = {\r\n options: PropTypes.array.isRequired,\r\n onChange: PropTypes.func,\r\n value: PropTypes.number,\r\n isClearable: PropTypes.bool,\r\n}\r\n\r\nCategoryDropdownTree.defaultProps = {\r\n options: [],\r\n onChange: () => { },\r\n value: 0,\r\n isClearable: true\r\n}\r\n\r\nexport default CategoryDropdownTree","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\n\r\nfunction ModalPopup(props) {\r\n const { partnerPopupId, title, content, onSave, onClose, isShow } = props\r\n\r\n function handleSave(e) {\r\n let isChecked = e.target.checked\r\n onSave(isChecked, partnerPopupId)\r\n }\r\n\r\n return (\r\n <Modal show={isShow} onHide={() => onClose(partnerPopupId)} backdrop=\"static\" centered\r\n onExited={() => {\r\n\r\n }}>\r\n <Modal.Header closeButton className=\"border-bottom-0\">\r\n <Modal.Title>{title}</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <div dangerouslySetInnerHTML={{ __html: content }}></div>\r\n </Modal.Body>\r\n <Modal.Footer className=\"border-top-0\">\r\n <div className=\"form-check form-checkbox-success\">\r\n <input type=\"checkbox\" className=\"form-check-input\" id=\"partner-popup\" onChange={e => handleSave(e)} />\r\n <label className=\"form-check-label\" htmlFor=\"partner-popup\">Không hiển thị lại</label>\r\n </div>\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalPopup.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n partnerPopupId: PropTypes.number,\r\n title: PropTypes.string,\r\n content: PropTypes.string,\r\n}\r\n\r\nModalPopup.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n partnerPopupId: 0,\r\n title: '',\r\n content: ''\r\n}\r\n\r\nexport default ModalPopup","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport Select from 'react-select'\r\n\r\nfunction CustomSelect(props) {\r\n const { options, value, onChange, placeholder, noOptionsMessage, isSearchable, isClearable } = props\r\n\r\n const [currentValue, setCurrentValue] = useState(null)\r\n\r\n useEffect(() => {\r\n const newValues = options.filter(n => n.value === value)\r\n if (newValues.length !== 0) {\r\n setCurrentValue(newValues[0])\r\n }\r\n else {\r\n setCurrentValue(null)\r\n }\r\n // eslint-disable-next-line\r\n }, [value])\r\n\r\n return (\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={isSearchable}\r\n isClearable={isClearable}\r\n options={options}\r\n value={currentValue}\r\n onChange={item => {\r\n if (item !== null) {\r\n onChange(item.value)\r\n }\r\n else {\r\n onChange(0)\r\n }\r\n }}\r\n placeholder={placeholder}\r\n noOptionsMessage={() => noOptionsMessage}\r\n />\r\n )\r\n}\r\n\r\nCustomSelect.propTypes = {\r\n options: PropTypes.array,\r\n value: PropTypes.any,\r\n onChange: PropTypes.func,\r\n placeholder: PropTypes.string,\r\n noOptionsMessage: PropTypes.string,\r\n isSearchable: PropTypes.bool,\r\n isClearable: PropTypes.bool,\r\n}\r\n\r\nCustomSelect.detaultProps = {\r\n options: [\r\n {\r\n value: 1,\r\n label: 'Option 1'\r\n },\r\n {\r\n value: 1,\r\n label: 'Option 2'\r\n }\r\n ],\r\n value: 1,\r\n onChange: () => { },\r\n placeholder: '',\r\n noOptionsMessage: '',\r\n isSearchable: true,\r\n isClearable: false\r\n}\r\n\r\nexport default CustomSelect","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nfunction CheckBox(props) {\r\n\r\n const { title, name, className, variant, onChange, checked } = props\r\n\r\n const variantClassName = () => {\r\n return `form-control form-check form-radio-${variant !== undefined ? variant : props.variant} position-relative`\r\n }\r\n\r\n const handleChange = (e) => {\r\n const isChecked = e.target.checked\r\n onChange(isChecked)\r\n }\r\n\r\n\r\n return (\r\n <div\r\n className={className}\r\n >\r\n <div\r\n className={variantClassName()}\r\n >\r\n <input\r\n type=\"checkbox\"\r\n checked={checked}\r\n id={name}\r\n name={name}\r\n className=\"form-check-input input-select-radio\"\r\n onChange={handleChange}\r\n />\r\n <label\r\n className=\"form-check-label input-select-label\"\r\n htmlFor={name}\r\n >\r\n {title}\r\n </label>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nCheckBox.propTypes = {\r\n checked: PropTypes.bool,\r\n name: PropTypes.string,\r\n variant: PropTypes.string,\r\n onChange: PropTypes.func,\r\n title: PropTypes.string,\r\n className: PropTypes.string\r\n}\r\n\r\nCheckBox.defaultProps = {\r\n checked: false,\r\n name: 'input-checkbox',\r\n variant: 'primary',\r\n onChange: () => { },\r\n title: 'Title',\r\n className: ''\r\n}\r\n\r\nexport default CheckBox","import axios from \"axios\";\r\nimport PropTypes from \"prop-types\";\r\nimport React, { Fragment, useRef, useState } from \"react\";\r\nimport { IoCloudUploadOutline } from \"react-icons/io5\";\r\n\r\nconst maxSizeInBute = 5_242_880; // 5MB\r\n\r\nconst apiUrl = window.apiUrl;\r\n\r\nfunction UploadFileButton(props) {\r\n const fileInput = useRef(null);\r\n\r\n const handleTrigger = () => {\r\n fileInput.current.click();\r\n };\r\n\r\n const handleUpload = (e) => {\r\n let files = e.target.files;\r\n if (files.length !== 0) {\r\n let file = files[0];\r\n let name = file.name;\r\n let sizeInByte = file.size;\r\n if (sizeInByte > maxSizeInBute) {\r\n return;\r\n }\r\n const formData = new FormData();\r\n formData.append(\"formFile\", file);\r\n formData.append(\"fileName\", name);\r\n const url = apiUrl + \"/partner/storage/upload-file\";\r\n setIsBusy(true);\r\n axios\r\n .post(url, formData)\r\n .then((res) => {\r\n let data = res.data;\r\n if (props.onCompleted) {\r\n props.onCompleted(data);\r\n }\r\n })\r\n .finally(() => setIsBusy(false));\r\n }\r\n };\r\n\r\n const [isBusy, setIsBusy] = useState(false);\r\n\r\n const renderIcon = () => {\r\n if (isBusy) {\r\n return (\r\n <div\r\n className=\"spinner-border spinner-border-sm me-1\"\r\n role=\"status\"\r\n ></div>\r\n );\r\n } else {\r\n return <IoCloudUploadOutline className=\"mt--3-px me-1 font-17\" />;\r\n }\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <input\r\n style={{ display: \"none\" }}\r\n type=\"file\"\r\n accept=\".pdf\"\r\n ref={fileInput}\r\n onChange={handleUpload}\r\n />\r\n <button\r\n onClick={handleTrigger}\r\n className=\"btn btn-success\"\r\n disabled={isBusy}\r\n type=\"button\"\r\n >\r\n {renderIcon()}\r\n Chá»n file pdf\r\n </button>\r\n </Fragment>\r\n );\r\n}\r\n\r\nUploadFileButton.propTypes = {\r\n onCompleted: PropTypes.func,\r\n};\r\n\r\nexport default UploadFileButton;\r\n","import axios from 'axios'\r\n\r\nconst CategoryService = {\r\n filter: (filters) => {\r\n const url = `/admin/category/filter?keyword=${filters.keyword}`\r\n const request = axios.get(url)\r\n return request\r\n },\r\n getDropdown: () => {\r\n const url = '/admin/category/get-dropdown'\r\n const request = axios.get(url)\r\n return request\r\n },\r\n create: (formData) => {\r\n const url = '/admin/category/create'\r\n return axios.post(url, formData)\r\n },\r\n getById: (categoryId) => {\r\n const url = `/admin/category/get-by-id?id=${categoryId}`\r\n const request = axios.get(url)\r\n return request\r\n },\r\n update: (formData) => {\r\n const url = '/admin/category/update'\r\n return axios.post(url, formData)\r\n },\r\n delete: (categoryId) => {\r\n const url = `/admin/category/delete?id=${categoryId}`\r\n const request = axios.post(url)\r\n return request\r\n }\r\n}\r\n\r\nexport default CategoryService","import axios from 'axios'\r\n\r\nconst AttributeService = {\r\n getAll: () => {\r\n const url = '/admin/attribute/get-all'\r\n return axios.get(url)\r\n },\r\n create: (formData) => {\r\n const url = 'admin/attribute/create'\r\n return axios.post(url, formData)\r\n },\r\n getById: (attributeId) => {\r\n const url = `/admin/attribute/get-by-id?id=${attributeId}`\r\n return axios.get(url)\r\n },\r\n update: (formData) => {\r\n const url = '/admin/attribute/update'\r\n return axios.post(url, formData)\r\n },\r\n delete: (attributeId) => {\r\n const url = `/admin/attribute/delete?id=${attributeId}`\r\n return axios.post(url)\r\n }\r\n}\r\n\r\nexport default AttributeService","import axios from 'axios'\r\n\r\nconst ChildrenAttributeService = {\r\n getByAttribute: attributeId => {\r\n const url = `/admin/children-attribute/get-by-attribute?id=${attributeId}`\r\n return axios.get(url)\r\n },\r\n create: formData => {\r\n const url = '/admin/children-attribute/create'\r\n return axios.post(url, formData)\r\n },\r\n getById: childAttributeId => {\r\n const url = `/admin/children-attribute/get-by-id?id=${childAttributeId}`\r\n return axios.get(url)\r\n },\r\n update: formData => {\r\n const url = '/admin/children-attribute/update'\r\n return axios.post(url, formData)\r\n },\r\n delete: childAttributeId => {\r\n const url = `/admin/children-attribute/delete?id=${childAttributeId}`\r\n return axios.post(url)\r\n }\r\n}\r\n\r\nexport default ChildrenAttributeService","import React, { useState } from 'react'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst filters = {\r\n keyword: ''\r\n}\r\n\r\nconst Filter = props => {\r\n const { onSearch } = props\r\n\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const handleKeywordChange = (e) => {\r\n const value = e.target.value\r\n setKeyword(value)\r\n filters.keyword = value\r\n }\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClearSearch = () => {\r\n setKeyword('')\r\n filters.keyword = ''\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n <input\r\n autoFocus\r\n onChange={handleKeywordChange}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleSearch()\r\n }\r\n }}\r\n value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Tên nhóm\" />\r\n </div>\r\n <div className=\"col-sm-8 col-md-8 col-lg-9 col-xl-9 col-xxl-10\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClearSearch} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, FormatNumber, LoadingRow } from '../../../../../components'\r\n\r\nconst Table = props => {\r\n const renderTable = () => {\r\n let data = props.data\r\n if (data === null) return <LoadingRow colSpan={7} />\r\n else if (data.length === 0) return <EmptyRow colSpan={7} />\r\n else {\r\n return data.map((item, index) => <tr key={item.CategoryId}>\r\n <td className=\"text-center\">{(index + 1)}</td>\r\n <td>{item.Label}</td>\r\n <td>{item.CategoryNote}</td>\r\n <td className=\"text-end text-primary\">\r\n {<FormatNumber>{item.ProductCount}</FormatNumber>}\r\n </td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n </td>\r\n <td>\r\n {renderStatus(item.StatusId)}\r\n </td>\r\n <td>\r\n <ActionRow>\r\n <ActionItem right=\"category_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sá»a' />\r\n <ActionItem right=\"category_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className=\"text-danger\" />\r\n </ActionRow>\r\n </td>\r\n </tr>)\r\n }\r\n }\r\n\r\n const renderStatus = statusId => {\r\n if (statusId === 1) return <span className=\"badge bg-success\">Hoạt động</span>\r\n else return <span className=\"badge bg-warning\">Tạm khóa</span>\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tên nhóm</th>\r\n <th>Ghi chú</th>\r\n <th className='text-end'>Sản phẩm</th>\r\n <th>Ngà y tạo</th>\r\n <th>Trạng thái</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n data: PropTypes.array,\r\n onEdit: PropTypes.func,\r\n onDelete: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n data: null,\r\n onEdit: null,\r\n onDelete: null\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, InputSelect, CategoryDropdownTree } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n CategoryName: yup.string().required('Vui lòng nháºp tên nhóm sản phẩm').max(100, 'Tên nhóm sản phẩm quá dà i'),\r\n ParentId: yup.number().min(0).integer(),\r\n StatusId: yup.number().min(1).max(2).integer(),\r\n Note: yup.string().max(100, 'Ghi chú quá dà i')\r\n})\r\n\r\nconst statusOptions = [\r\n {\r\n value: 1,\r\n label: 'Hoạt động'\r\n },\r\n {\r\n value: 2,\r\n label: 'Tạm khóa'\r\n }\r\n]\r\n\r\nconst ModalAdd = props => {\r\n const { control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema),\r\n defaultValues: {\r\n StatusId: 1\r\n }\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i nhóm sản phẩm</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên nhóm sản phẩm <span className=\"text-danger\">*</span></label>\r\n <input {...register('CategoryName')} type=\"text\" className=\"form-control\" placeholder=\"Tên nhóm sản phẩm\" />\r\n {errors.CategoryName && <div className=\"validation-message\">{errors.CategoryName.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Nhóm cha</label>\r\n <Controller\r\n name=\"ParentId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <CategoryDropdownTree\r\n options={props.parent}\r\n onChange={onChange}\r\n value={value}\r\n />\r\n )\r\n }}\r\n />\r\n {errors.ParentId && <div className=\"validation-message\">{errors.ParentId.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <Controller\r\n name=\"StatusId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <InputSelect\r\n options={statusOptions}\r\n defaultValue={1}\r\n onChange={onChange}\r\n value={value}\r\n variant='success'\r\n />\r\n )\r\n }}\r\n />\r\n {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n parent: PropTypes.array,\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n parent: [],\r\n onSave: null,\r\n onClose: null,\r\n isShow: false\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, InputSelect, CategoryDropdownTree } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n CategoryName: yup.string().required('Vui lòng nháºp tên nhóm sản phẩm').max(100, 'Tên nhóm sản phẩm quá dà i'),\r\n ParentId: yup.number().min(0).integer(),\r\n StatusId: yup.number().min(1).max(2).integer(),\r\n Note: yup.string().max(100, 'Ghi chú quá dà i')\r\n})\r\n\r\nconst statusOptions = [\r\n {\r\n value: 1,\r\n label: 'Hoạt động'\r\n },\r\n {\r\n value: 2,\r\n label: 'Tạm khóa'\r\n }\r\n]\r\n\r\nconst ModalEdit = props => {\r\n const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n let info = props.data\r\n setValue('CategoryId', info.CategoryId)\r\n setValue('CategoryName', info.CategoryName)\r\n setValue('ParentId', info.ParentId)\r\n setValue('StatusId', info.StatusId)\r\n setValue('Note', info.Note)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a nhóm sản phẩm</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên nhóm sản phẩm <span className=\"text-danger\">*</span></label>\r\n <input {...register('CategoryName')} type=\"text\" className=\"form-control\" placeholder=\"Tên nhóm sản phẩm\" />\r\n {errors.CategoryName && <div className=\"validation-message\">{errors.CategoryName.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Nhóm cha</label>\r\n <Controller\r\n name=\"ParentId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <CategoryDropdownTree\r\n options={props.parent}\r\n onChange={onChange}\r\n value={value}\r\n />\r\n )\r\n }}\r\n />\r\n {errors.ParentId && <div className=\"validation-message\">{errors.ParentId.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <Controller\r\n name=\"StatusId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <InputSelect\r\n options={statusOptions}\r\n defaultValue={1}\r\n onChange={onChange}\r\n value={value}\r\n variant='success'\r\n />\r\n )\r\n }}\r\n />\r\n {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n data: PropTypes.object,\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n isBusy: PropTypes.bool\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n data: {},\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n isBusy: false\r\n}\r\n\r\nexport default ModalEdit","import React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { CategoryService } from './../../../services/admin'\r\nimport { AuthAdminView, IconButton, Notification } from './../../../components'\r\nimport { Filter, ModalAdd, ModalEdit, Table } from './components'\r\n\r\nconst getCategoryLevel = (data, parentId, catName) => {\r\n let result = []\r\n const lst = data.filter(n => n.ParentId === parentId)\r\n if (lst.length !== 0) {\r\n lst.forEach((item) => {\r\n const levelCatName = `${catName !== '' ? `${catName} > ` : ''}${item.CategoryName}`\r\n result.push({\r\n ...item,\r\n Label: `${catName !== '' ? `${catName} > ` : ''}${item.CategoryName}`\r\n })\r\n const temp = getCategoryLevel(data, item.CategoryId, levelCatName)\r\n temp.forEach(cat => {\r\n result.push(cat)\r\n })\r\n })\r\n }\r\n return result\r\n}\r\n\r\nconst CategoryPage = () => {\r\n // State lưu danh sách nhóm sản phẩm\r\n const [category, setCategory] = useState()\r\n\r\n // State lưu trạng thái đóng mở modal thêm má»›i nhóm sản phẩm\r\n const [isShowModalCategoryAdd, setIsShowModalCategoryAdd] = useState(false)\r\n\r\n // State lưu trạng thái đóng mở modal chỉnh sá»a nhóm sản phẩm\r\n const [isShowModalCategoryEdit, setEditIsShowModalCategoryEdit] = useState(false)\r\n\r\n // State lưu danh sách nhóm sản phẩm dropdown để chá»n khi thêm hoặc sá»a nhóm san phẩm\r\n const [categoryDropdown, setCategoryDropdown] = useState([])\r\n\r\n // State lưu thông tin nhóm sản phẩm để chỉnh sá»a\r\n const [categoryInfo, setCategoryInfo] = useState({})\r\n\r\n const [filters, setFilters] = useState({\r\n keyword: ''\r\n })\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Nhóm sản phẩm';\r\n loadCategoryDropdown()\r\n }, [])\r\n\r\n useEffect(() => {\r\n CategoryService.filter(filters).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const cats = getCategoryLevel(data.Result, 0, '')\r\n setCategory(cats)\r\n }\r\n })\r\n }, [filters])\r\n\r\n const loadCategoryDropdown = () => {\r\n CategoryService.getDropdown().then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setCategoryDropdown(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const reloadCategory = () => {\r\n setFilters({\r\n ...filters\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={params => {\r\n const newFilters = {\r\n ...filters,\r\n ...params\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <AuthAdminView right=\"category_add\">\r\n <IconButton\r\n className=\"mb-2\"\r\n text=\"Thêm má»›i\"\r\n icon={<IoAddCircleOutline />}\r\n onClick={() => {\r\n setIsShowModalCategoryAdd(true);\r\n }} />\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n <Table\r\n data={category}\r\n onEdit={item => {\r\n CategoryService.getById(item.CategoryId).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setCategoryInfo(data.Result)\r\n setEditIsShowModalCategoryEdit(true)\r\n }\r\n })\r\n }}\r\n onDelete={item => {\r\n Notification.confirmHtml('Bạn có chắc muốn xóa nhóm sản phẩm', item.CategoryName, () => {\r\n CategoryService.delete(item.CategoryId).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadCategory()\r\n loadCategoryDropdown()\r\n Notification.success('Xóa nhóm sản phẩm thà nh công')\r\n }\r\n })\r\n })\r\n }} />\r\n </div>\r\n </div>\r\n\r\n <ModalAdd\r\n parent={categoryDropdown}\r\n isShow={isShowModalCategoryAdd}\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n CategoryService.create(formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadCategory()\r\n loadCategoryDropdown()\r\n setIsShowModalCategoryAdd(false)\r\n Notification.success('Thêm má»›i nhóm sản phẩm thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalCategoryAdd(false)\r\n }} />\r\n\r\n <ModalEdit\r\n data={categoryInfo}\r\n parent={categoryDropdown}\r\n isShow={isShowModalCategoryEdit}\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n CategoryService.update(formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadCategory()\r\n loadCategoryDropdown()\r\n setCategoryInfo({})\r\n setEditIsShowModalCategoryEdit(false)\r\n Notification.success('Chỉnh sá»a nhóm sản phẩm thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setCategoryInfo({})\r\n setEditIsShowModalCategoryEdit(false)\r\n }} />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default CategoryPage","import PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Select from 'react-select'\r\nimport { ClearButton, SearchButton, CategoryDropdownTree } from './../../../../../components'\r\n\r\nconst productTypes = [\r\n {\r\n value: 0,\r\n label: 'Sản phẩm cha con'\r\n },\r\n {\r\n value: 1,\r\n label: 'Chỉ sản phẩm cha'\r\n },\r\n {\r\n value: 2,\r\n label: 'Chỉ sản phẩm con'\r\n }\r\n]\r\n\r\nconst filters = {\r\n keyword: '',\r\n catId: 0,\r\n statusId: 0,\r\n typeId: 0\r\n}\r\n\r\nconst Filter = props => {\r\n const { onSearch } = props\r\n\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const [productStatus, setProductStatus] = useState()\r\n\r\n const [productStatusList, setProductStatusList] = useState([])\r\n\r\n const [productType, setProductType] = useState()\r\n\r\n const [catId, setCatId] = useState(0)\r\n\r\n useEffect(() => {\r\n const proStatusList = props.productStatus.map(item => {\r\n return {\r\n value: item.ProductStatusId,\r\n label: item.ProductStatusName\r\n }\r\n })\r\n setProductStatusList(proStatusList)\r\n }, [props.productStatus])\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-3 col-xxl-2\">\r\n <input value={keyword}\r\n autoFocus\r\n onChange={e => {\r\n const value = e.target.value\r\n setKeyword(value)\r\n filters.keyword = value\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n onSearch(filters)\r\n }\r\n }}\r\n type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Mã, tên sản phẩm\" />\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-3 col-xxl-2\">\r\n <CategoryDropdownTree\r\n options={props.category}\r\n onChange={(value) => {\r\n setCatId(value)\r\n filters.catId = value\r\n }}\r\n value={catId}\r\n />\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-3 col-xxl-2\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={true}\r\n options={productStatusList}\r\n value={productStatus}\r\n onChange={item => {\r\n if (item !== null) {\r\n setProductStatus(item)\r\n filters.statusId = item.value\r\n }\r\n else {\r\n setProductStatus(null)\r\n filters.statusId = 0\r\n }\r\n }}\r\n placeholder='Trạng thái'\r\n />\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-3 col-xxl-2\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={false}\r\n options={productTypes}\r\n value={productType}\r\n onChange={item => {\r\n if (item !== null) {\r\n setProductType(item)\r\n filters.typeId = item.value\r\n }\r\n else {\r\n setProductType(null)\r\n filters.typeId = 0\r\n }\r\n }}\r\n defaultValue={productTypes[0]}\r\n />\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-8 col-xl-12 col-xxl-4\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={() => {\r\n onSearch(filters)\r\n }} />\r\n <ClearButton onClick={() => {\r\n setKeyword('')\r\n filters.keyword = ''\r\n setCatId(0)\r\n filters.catId = 0\r\n setProductStatus(null)\r\n filters.statusId = 0\r\n setProductType(productTypes[0])\r\n filters.typeId = 0\r\n onSearch(filters)\r\n }} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func,\r\n category: PropTypes.array,\r\n productStatus: PropTypes.array\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { },\r\n category: [],\r\n productStatus: []\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoCopyOutline, IoGridOutline, IoReceiptOutline, IoServerOutline, IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, AvatarRow, EmptyRow, FormatNumber, LoadingRow, ProductStatus } from '../../../../../components'\r\n\r\nconst Table = props => {\r\n const { onParentClick, onAvatarClick } = props\r\n\r\n const renderTable = () => {\r\n const data = props.data\r\n if (data === null) return <LoadingRow colSpan={9} />\r\n else if (data.length === 0) return <EmptyRow colSpan={9} />\r\n else return data.map((item, index) => <tr key={item.ProductId}>\r\n <td className=\"text-center\">{(props.pageItem * (props.pageIndex - 1)) + index + 1}</td>\r\n <td>{item.ProductId}</td>\r\n <td>\r\n {item.IsParent ? <IoGridOutline className=\"me-1 text-primary\" /> : <IoCopyOutline className=\"me-1 text-success\" />}\r\n {item.ProductCode}\r\n </td>\r\n <td>\r\n <AvatarRow\r\n url={item.AvatarUrl}\r\n onClick={(urlObj) => {\r\n onAvatarClick(urlObj)\r\n }}\r\n className=\"cursor-zoom\"\r\n />\r\n <span className={item.IsParent ? 'cursor-point text-primary' : ''}\r\n onClick={() => {\r\n if (item.IsParent) {\r\n onParentClick((item))\r\n }\r\n }}\r\n >\r\n {item.ProductName}\r\n </span>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>{item.OutputPrice}</FormatNumber>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>{item.Quantity}</FormatNumber>\r\n </td>\r\n <td>{item.CategoryName}</td>\r\n <td>\r\n <ProductStatus className='cursor-point'\r\n statusId={item.ProductStatusId}\r\n onClick={() => props.onEditStatus(item)}\r\n />\r\n </td>\r\n <td>\r\n <ActionRow>\r\n <ActionItem right=\"product_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sá»a' />\r\n <ActionItem right=\"product_edit_partner_group\" onClick={() => props.onEditPrice(item)} icon={<IoReceiptOutline />} title='Chỉnh sá»a theo nhóm CTV' />\r\n <ActionItem right=\"product_receipt\" onClick={() => props.onEditQty(item)} icon={<IoServerOutline />} title='Cáºp nháºt số lượng' />\r\n <ActionItem right=\"product_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className=\"text-danger\" />\r\n </ActionRow>\r\n </td>\r\n </tr >)\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-avatar mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>ID</th>\r\n <th>Mã</th>\r\n <th>Tên sản phẩm</th>\r\n <th className='text-end'>Giá bán</th>\r\n <th className='text-end'>SL</th>\r\n <th>Nhóm</th>\r\n <th>Trạng thái</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n onEdit: PropTypes.func,\r\n onEditPrice: PropTypes.func,\r\n onEditQty: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n data: PropTypes.array,\r\n pageItem: PropTypes.number,\r\n pageIndex: PropTypes.number,\r\n onParentClick: PropTypes.func,\r\n onAvatarClick: PropTypes.func,\r\n onEditStatus: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n onEdit: () => { },\r\n onEditPrice: () => { },\r\n onEditQty: () => { },\r\n onDelete: () => { },\r\n data: null,\r\n pageItem: 10,\r\n pageIndex: 1,\r\n onParentClick: () => { },\r\n onAvatarClick: () => { },\r\n onEditStatus: () => { }\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport { IoShareSocialOutline } from 'react-icons/io5'\r\nimport NumberFormat from 'react-number-format'\r\nimport ReactQuill from 'react-quill'\r\nimport 'react-quill/dist/quill.snow.css'\r\nimport Select from 'react-select'\r\nimport * as yup from \"yup\"\r\nimport { CategoryDropdownTree, CloseButton, Config, EmptyRow, IconButton, InputSelect, LoadingRow, SaveButton, UploadImg } from './../../../../../components'\r\n\r\nconst invalidValue = 'Giá trị không hợp lệ'\r\n\r\nconst schema = yup.object().shape({\r\n ProductName: yup.string().required('Vui lòng nháºp tên sản phẩm').max(200, 'Tên sản phẩm quá dà i'),\r\n ProductCode: yup.string().required('Vui lòng nháºp mã sản phẩm').max(50, 'Mã sản phẩm quá dà i'),\r\n CategoryId: yup.number().min(1, 'Vui lòng chá»n nhóm sản phẩm'),\r\n InputPrice: yup.number().min(0, invalidValue),\r\n OutputPrice: yup.number().required('Vui lòng nháºp giá bán').min(0, invalidValue),\r\n StatusId: yup.number().oneOf([1, 2, 3], invalidValue),\r\n Detail: yup.string().max(4_000, 'Chi tiết sản phẩm quá dà i'),\r\n AvatarUrl: yup.string().max(2_000, 'ÄÆ°á»ng dẫn ảnh quá dà i'),\r\n ProductPrices: yup.array(),\r\n SubProducts: yup.array(),\r\n ProductChildrentAttribute: yup.array()\r\n})\r\n\r\nconst getCombn = arr => {\r\n if (arr.length === 1) {\r\n return arr[0]\r\n }\r\n else {\r\n var ans = []\r\n var otherCases = getCombn(arr.slice(1));\r\n for (var i = 0; i < otherCases.length; i++) {\r\n for (var j = 0; j < arr[0].length; j++) {\r\n ans.push(arr[0][j] + ' - ' + otherCases[i])\r\n }\r\n }\r\n return ans\r\n }\r\n}\r\n\r\nvar idArr = []\r\n\r\nconst ModalAdd = props => {\r\n const { control, register, handleSubmit, reset, getValues, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema),\r\n defaultValues: {\r\n StatusId: 1,\r\n CategoryId: 0\r\n }\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [productStatus, setProductStatus] = useState([])\r\n\r\n const [childrenProduct, setChildrenProduct] = useState([])\r\n\r\n const [qty, setQty] = useState(0)\r\n\r\n useEffect(() => {\r\n const sttList = props.productStatus.map(item => {\r\n return {\r\n value: item.ProductStatusId,\r\n label: item.ProductStatusName\r\n }\r\n })\r\n setProductStatus(sttList)\r\n }, [props.productStatus])\r\n\r\n const handleGroupPriceChange = (value, groupId) => {\r\n const lst = getValues('ProductPrices')\r\n const index = lst.findIndex(n => n.GroupId === groupId)\r\n lst[index].UnitPrice = parseInt(value)\r\n setValue('ProductPrices', lst)\r\n }\r\n\r\n const renderGroupPrice = () => {\r\n const groupList = props.groupList\r\n return groupList.map((item, index) => {\r\n return <tr key={item.GroupId}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>{item.GroupName}</td>\r\n <td>\r\n <div className=\"input-group\">\r\n <NumberFormat\r\n placeholder='Giá bán'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n onValueChange={val => {\r\n const value = val.value\r\n handleGroupPriceChange(value === '' ? 0 : value, item.GroupId)\r\n }}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n </td>\r\n </tr>\r\n })\r\n }\r\n\r\n const renderChildrenProduct = () => {\r\n if (childrenProduct === null) return <LoadingRow colSpan={4} />\r\n else if (childrenProduct.length === 0) return <EmptyRow colSpan={4} />\r\n else return childrenProduct.map((item, index) => <tr key={index}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>{item.AttrName}</td>\r\n <td>\r\n <input type=\"text\" className=\"form-control\"\r\n value={item.ExtensionName}\r\n onChange={e => onChangeChildExtName(index, e.target.value)}\r\n />\r\n </td>\r\n <td>\r\n <NumberFormat\r\n placeholder='Số lượng'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={item.Quantity}\r\n onValueChange={val => {\r\n const value = val.value\r\n onChangeChildQty(index, value)\r\n }}\r\n />\r\n </td>\r\n </tr>)\r\n }\r\n\r\n const onChangeChildExtName = (index, name) => {\r\n const lst = [...childrenProduct]\r\n lst[index].ExtensionName = name\r\n setChildrenProduct(lst)\r\n }\r\n\r\n const onChangeChildQty = (index, qty) => {\r\n const lst = [...childrenProduct]\r\n lst[index].Quantity = qty\r\n setChildrenProduct(lst)\r\n }\r\n\r\n const initCombn = (val, index) => {\r\n const lst = val.map(n => n.value + '')\r\n idArr[index] = lst\r\n\r\n const idList = []\r\n const combnArr = getCombn(idArr)\r\n combnArr.forEach(str => {\r\n const arr = (str + '').split('-')\r\n arr.forEach(num => {\r\n const id = parseInt(num)\r\n idList.push(id)\r\n })\r\n })\r\n\r\n const reqStr = idList.join('_')\r\n const url = `/admin/children-attribute/get-by-ids?ids=${reqStr}`\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n let temp = []\r\n combnArr.forEach(x => {\r\n let attr_name = ''\r\n let arr = (x + '').split('-')\r\n arr.forEach(num => {\r\n let id = parseInt(num)\r\n let attr = data.Result.filter(n => n.ChildrenAttributeId === id)[0]\r\n if (attr !== null) {\r\n let name = attr.ChildrenAttributeName\r\n attr_name += name + \" - \"\r\n }\r\n })\r\n attr_name = attr_name.trim()\r\n attr_name = attr_name.slice(0, -1)\r\n attr_name = attr_name.trim()\r\n temp.push({\r\n AttrName: attr_name,\r\n ExtensionName: \"- \" + attr_name,\r\n Quantity: 0,\r\n ChildrenAttrList: arr.map(n => parseInt(n))\r\n })\r\n })\r\n setChildrenProduct(temp)\r\n }\r\n })\r\n }\r\n\r\n const renderAttribute = () => {\r\n let allAttr = props.allAttribute\r\n return allAttr.map((item, index) => {\r\n const childAttr = item.Children.map(child => {\r\n return {\r\n value: child.ChildrenAttributeId,\r\n label: child.ChildrenAttributeName\r\n }\r\n })\r\n return <div className=\"col-md-6 col-lg-6\" key={item.AttributeId}>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">{item.AttributeName}</label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={false}\r\n options={childAttr}\r\n // value={value}\r\n // onChange={onChange}\r\n onChange={val => {\r\n initCombn(val, index)\r\n }}\r\n placeholder='Giá trị thuá»™c tÃnh'\r\n isMulti={true}\r\n />\r\n </div>\r\n </div>\r\n })\r\n }\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n onExited={() => {\r\n reset()\r\n idArr = []\r\n setChildrenProduct([])\r\n setQty(0)\r\n }}\r\n onShow={() => {\r\n let lst = props.groupList.map(item => {\r\n return {\r\n GroupId: item.GroupId,\r\n UnitPrice: 0\r\n }\r\n })\r\n setValue('ProductPrices', lst)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i sản phẩm</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n let proChildAttr = []\r\n idArr.forEach(n => {\r\n const temp = n.map(x => parseInt(x))\r\n proChildAttr = proChildAttr.concat(temp)\r\n })\r\n formData.ProductChildrentAttribute = proChildAttr\r\n\r\n const subProArr = []\r\n childrenProduct.forEach(n => {\r\n subProArr.push({\r\n ExtensionName: n.ExtensionName,\r\n Quantity: n.Quantity,\r\n ChildrentAttributes: n.ChildrenAttrList\r\n })\r\n })\r\n formData.SubProducts = subProArr\r\n\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <ul className=\"nav nav-tabs nav-bordered mb-3\">\r\n <li className=\"nav-item\">\r\n <a href=\"#tab-add-1\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link active\">\r\n <i className=\"mdi mdi-home-variant d-md-none d-block\"></i>\r\n <span className=\"d-none d-md-block\">Thông tin</span>\r\n </a>\r\n </li>\r\n <li className=\"nav-item\">\r\n <a href=\"#tab-add-2\" data-bs-toggle=\"tab\" aria-expanded=\"true\" className=\"nav-link\">\r\n <i className=\"mdi mdi-account-circle d-md-none d-block\"></i>\r\n <span className=\"d-none d-md-block\">Giá theo nhóm</span>\r\n </a>\r\n </li>\r\n <li className=\"nav-item\">\r\n <a href=\"#tab-add-3\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link\">\r\n <i className=\"mdi mdi-settings-outline d-md-none d-block\"></i>\r\n <span className=\"d-none d-md-block\">Sản phẩm con</span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <div className=\"tab-content\">\r\n <div className=\"tab-pane show active\" id=\"tab-add-1\">\r\n <div className=\"row\">\r\n <div className=\"col-sm-4 col-md-3 col-lg-3 col-xl-2\">\r\n <Controller\r\n control={control}\r\n name=\"AvatarUrl\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <UploadImg\r\n imgUrl={value}\r\n onCompleted={data => {\r\n onChange(data.Result.ImageUrl)\r\n }}\r\n />\r\n )}\r\n />\r\n {errors.AvatarUrl && <div className=\"validation-message\">{errors.AvatarUrl.message}</div>}\r\n </div>\r\n <div className=\"col-sm-8 col-md-9 col-lg-9 col-xl-10\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên sản phẩm <span className=\"text-danger\">*</span></label>\r\n <input {...register('ProductName')} type=\"text\" className=\"form-control\" placeholder=\"Tên sản phẩm\" />\r\n {errors.ProductName && <div className=\"validation-message\">{errors.ProductName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-3 col-xxl-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Mã sản phẩm <span className=\"text-danger\">*</span></label>\r\n <input {...register('ProductCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã sản phẩm\" />\r\n {errors.ProductCode && <div className=\"validation-message\">{errors.ProductCode.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-4 col-xxl-4\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Mã sản phẩm nhà cung cấp</label>\r\n <input {...register('SupplierProductCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã sản phẩm nhà cung cấp\" />\r\n {errors.SupplierProductCode && <div className=\"validation-message\">{errors.SupplierProductCode.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-5 col-xxl-5\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Nhóm sản phẩm <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"CategoryId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <CategoryDropdownTree\r\n options={props.category}\r\n onChange={onChange}\r\n value={value}\r\n />\r\n )}\r\n />\r\n {errors.CategoryId && <div className=\"validation-message\">{errors.CategoryId.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-6 col-xl-3 col-xxl-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Giá nháºp</label>\r\n <div className=\"input-group\">\r\n <Controller\r\n name=\"InputPrice\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <NumberFormat\r\n placeholder='Giá nháºp'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={value}\r\n onValueChange={val => onChange(val.value)}\r\n />\r\n )\r\n }}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n {errors.InputPrice && <div className=\"validation-message\">{errors.InputPrice.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-6 col-xl-3 col-xxl-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Giá bán <span className=\"text-danger\">*</span></label>\r\n <div className=\"input-group\">\r\n <Controller\r\n name=\"OutputPrice\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <NumberFormat\r\n placeholder='Giá bán'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator=\",\"\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={value}\r\n onValueChange={val => onChange(val.value)}\r\n />\r\n )\r\n }}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n {errors.OutputPrice && <div className=\"validation-message\">{errors.OutputPrice.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-6 col-xxl-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <Controller\r\n name=\"StatusId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <InputSelect\r\n options={productStatus}\r\n value={value}\r\n defaultValue={1}\r\n name='product-add'\r\n variant='success'\r\n onChange={onChange}\r\n />\r\n )\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Chi tiết sản phẩm</label>\r\n <Controller\r\n control={control}\r\n name=\"Detail\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <ReactQuill\r\n value={value}\r\n modules={Config.editorCfg}\r\n onChange={onChange}\r\n />\r\n )}\r\n />\r\n {errors.Detail && <div className=\"validation-message\">{errors.Detail.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"tab-pane\" id=\"tab-add-2\">\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-input mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tên nhóm</th>\r\n <th className=\"w-280-px\">Giá bán</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderGroupPrice()}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div className=\"tab-pane\" id=\"tab-add-3\">\r\n <div className=\"row\">\r\n {renderAttribute()}\r\n </div>\r\n <div className='row'>\r\n <div className='col-3'>\r\n <div className=\"input-group\">\r\n <span className=\"input-group-text\">Số lượng</span>\r\n <NumberFormat\r\n placeholder='Số lượng'\r\n className=\"form-control\"\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={qty}\r\n onValueChange={val => {\r\n setQty(val.value)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className='col-9'>\r\n <IconButton variant='success' icon={<IoShareSocialOutline />} onClick={() => {\r\n const list = [...childrenProduct].map(n => {\r\n return {\r\n ...n,\r\n Quantity: qty\r\n }\r\n })\r\n setChildrenProduct(list)\r\n }}>Äặt số lượng hà ng loạt</IconButton>\r\n </div>\r\n </div>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-input mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Thuá»™c tÃnh</th>\r\n <th>Tên mở rá»™ng</th>\r\n <th className=\"w-280-px\">Số lượng</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderChildrenProduct()}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal >\r\n )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n category: PropTypes.array,\r\n productStatus: PropTypes.array,\r\n groupList: PropTypes.array,\r\n allAttribute: PropTypes.array\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n category: [],\r\n productStatus: [],\r\n groupList: [],\r\n allAttribute: []\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n // IsParent: yup.bool(),\r\n // IsForAllChildrent: yup.bool(),\r\n // ProductId: yup.number,\r\n // Prices: yup.array()\r\n})\r\n\r\nfunction ModalEditPrice(props) {\r\n const { handleSubmit, reset, setValue, getValues } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const renderTable = () => {\r\n return props.data.map((item, index) => <tr key={item.GroupId}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>{item.GroupName}</td>\r\n <td>\r\n <NumberFormat\r\n placeholder='Giá nháºp'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={item.UnitPrice}\r\n onValueChange={val => {\r\n const temp = [...getValues(\"Prices\")]\r\n const index = temp.findIndex(n => n.PartnerGroupId === item.GroupId)\r\n temp[index].UnitPrice = parseInt(val.value)\r\n setValue(\"Prices\", temp)\r\n }}\r\n />\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n let temp = []\r\n temp = props.data.map(item => {\r\n return {\r\n ProductPriceId: item.ProductPriceId,\r\n UnitPrice: item.UnitPrice,\r\n PartnerGroupId: item.GroupId\r\n }\r\n })\r\n setValue(\"Prices\", temp)\r\n setValue(\"IsParent\", props.isParent)\r\n setValue(\"IsForAllChildrent\", true)\r\n setValue(\"ProductId\", props.productId)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a giá theo nhóm cá»™ng tác viên</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-input mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Nhóm cá»™ng tác viên</th>\r\n <th className=\"w-150-px\">ÄÆ¡n giá</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n {\r\n props.isParent && <div className=\"text-center mt-2\">\r\n <div className=\"form-check form-checkbox-success display-inline-block\">\r\n <input type=\"checkbox\" className=\"form-check-input\" id=\"edit-price\" defaultChecked={true} onChange={e => {\r\n setValue('IsForAllChildrent', e.target.checked)\r\n }} />\r\n <label className=\"form-check-label\" htmlFor=\"edit-price\">Ãp dụng cho tất cả các sản phẩm con</label>\r\n </div>\r\n </div>\r\n }\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEditPrice.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n data: PropTypes.array,\r\n isParent: PropTypes.bool,\r\n productId: PropTypes.number\r\n}\r\n\r\nModalEditPrice.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n data: [],\r\n isParent: false,\r\n productId: 0\r\n}\r\n\r\nexport default ModalEditPrice","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n\r\n})\r\n\r\nfunction ModalEditQty(props) {\r\n const { control, handleSubmit, reset, setValue } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const renderTable = () => {\r\n return props.productList.map((item, index) => {\r\n return <tr key={item.ProductId}>\r\n <td className=\"text-cemter\">{index + 1}</td>\r\n <td>{item.ProductName}</td>\r\n <td>\r\n <Controller\r\n control={control}\r\n name={`Products.${index}.Quantity`}\r\n render={({\r\n field: { onChange, onBlur, value, name, ref }\r\n }) => (\r\n <NumberFormat\r\n placeholder='Số lượng'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n value={value}\r\n onValueChange={val => onChange(parseInt(val.value))}\r\n />\r\n )}\r\n />\r\n </td>\r\n </tr>\r\n })\r\n }\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true} size=\"lg\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n const temp = props.productList.map((item, index) => {\r\n return {\r\n ProductId: item.ProductId,\r\n Quantity: item.Quantity\r\n }\r\n })\r\n setValue('Products', temp)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Cáºp nháºt số lượng sản phẩm</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-input mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tên sản phẩm</th>\r\n <th className=\"w-150-px\">Số lượng</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEditQty.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n data: PropTypes.array\r\n}\r\n\r\nModalEditQty.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n productList: []\r\n}\r\n\r\nexport default ModalEditQty","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport ReactQuill from 'react-quill'\r\nimport 'react-quill/dist/quill.snow.css'\r\nimport * as yup from \"yup\"\r\nimport { CategoryDropdownTree, CloseButton, Config, InputSelect, SaveButton, UploadImg } from './../../../../../components'\r\n\r\nconst invalidValue = 'Giá trị không hợp lệ'\r\n\r\nconst schema = yup.object().shape({\r\n ProductName: yup.string().required('Vui lòng nháºp tên sản phẩm').max(200, 'Tên sản phẩm quá dà i'),\r\n ProductCode: yup.string().required('Vui lòng nháºp mã sản phẩm').max(50, 'Mã sản phẩm quá dà i'),\r\n CategoryId: yup.number().min(1, 'Vui lòng chá»n nhóm sản phẩm'),\r\n InputPrice: yup.number().min(0, invalidValue),\r\n OutputPrice: yup.number().required('Vui lòng nháºp giá bán').min(0, invalidValue),\r\n StatusId: yup.number().oneOf([1, 2, 3], invalidValue),\r\n Detail: yup.string().max(4_000, 'Chi tiết sản phẩm quá dà i'),\r\n AvatarUrl: yup.string().max(2_000, 'ÄÆ°á»ng dẫn ảnh quá dà i'),\r\n IsApplyForAll: yup.bool(),\r\n ProductId: yup.number()\r\n})\r\n\r\nfunction ModalEdit(props) {\r\n const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema),\r\n defaultValues: {\r\n StatusId: 1\r\n }\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [productStatus, setProductStatus] = useState([])\r\n\r\n useEffect(() => {\r\n const sttList = props.productStatus.map(item => {\r\n return {\r\n value: item.ProductStatusId,\r\n label: item.ProductStatusName\r\n }\r\n })\r\n setProductStatus(sttList)\r\n }, [props.productStatus])\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n const info = props.info\r\n setValue('ProductName', info.ProductName)\r\n setValue('ProductCode', info.ProductCode)\r\n setValue('InputPrice', info.InputPrice)\r\n setValue('OutputPrice', info.OutputPrice)\r\n setValue('StatusId', info.ProductStatusId)\r\n setValue('Detail', info.Detail == null ? '' : info.Detail)\r\n setValue('AvatarUrl', info.AvatarUrl == null ? '' : info.AvatarUrl)\r\n setValue('CategoryId', info.CategoryId)\r\n setValue('IsApplyForAll', true)\r\n setValue('ProductId', info.ProductId)\r\n\r\n const cat = props.category.filter(n => n.CategoryId === info.CategoryId).map(item => {\r\n return {\r\n value: item.CategoryId,\r\n label: item.CategoryName\r\n }\r\n })[0]\r\n\r\n setValue('CategoryObj', cat)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a sản phẩm</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"row\">\r\n <div className=\"col-sm-4 col-md-3 col-lg-3 col-xl-2\">\r\n <Controller\r\n control={control}\r\n name=\"AvatarUrl\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <UploadImg\r\n imgUrl={value}\r\n onCompleted={data => {\r\n onChange(data.Result.ImageUrl)\r\n }}\r\n />\r\n )}\r\n />\r\n {errors.AvatarUrl && <div className=\"validation-message\">{errors.AvatarUrl.message}</div>}\r\n </div>\r\n <div className=\"col-sm-8 col-md-9 col-lg-9 col-xl-10\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên sản phẩm <span className=\"text-danger\">*</span></label>\r\n <input {...register('ProductName')} type=\"text\" className=\"form-control\" placeholder=\"Tên sản phẩm\" />\r\n {errors.ProductName && <div className=\"validation-message\">{errors.ProductName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-3 col-xxl-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Mã sản phẩm <span className=\"text-danger\">*</span></label>\r\n <input {...register('ProductCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã sản phẩm\" />\r\n {errors.ProductCode && <div className=\"validation-message\">{errors.ProductCode.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-4 col-xxl-4\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Mã sản phẩm nhà cung cấp</label>\r\n <input {...register('SupplierProductCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã sản phẩm nhà cung cấp\" />\r\n {errors.SupplierProductCode && <div className=\"validation-message\">{errors.SupplierProductCode.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-5 col-xxl-5\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Nhóm sản phẩm <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"CategoryId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <CategoryDropdownTree\r\n options={props.category}\r\n onChange={onChange}\r\n value={value}\r\n />\r\n )}\r\n />\r\n {errors.CategoryId && <div className=\"validation-message\">{errors.CategoryId.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-6 col-xl-3 col-xxl-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Giá nháºp</label>\r\n <div className=\"input-group\">\r\n <Controller\r\n name=\"InputPrice\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <NumberFormat\r\n placeholder='Giá nháºp'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={value}\r\n onValueChange={val => onChange(val.value)}\r\n />\r\n )\r\n }}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n {errors.InputPrice && <div className=\"validation-message\">{errors.InputPrice.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-6 col-xl-3 col-xxl-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Giá bán <span className=\"text-danger\">*</span></label>\r\n <div className=\"input-group\">\r\n <Controller\r\n name=\"OutputPrice\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <NumberFormat\r\n placeholder='Giá bán'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator=\",\"\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={value}\r\n onValueChange={val => onChange(val.value)}\r\n />\r\n )\r\n }}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n {errors.OutputPrice && <div className=\"validation-message\">{errors.OutputPrice.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-6 col-xxl-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <Controller\r\n name=\"StatusId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <InputSelect\r\n options={productStatus}\r\n value={value}\r\n defaultValue={1}\r\n name='product-add'\r\n variant='success'\r\n onChange={onChange}\r\n />\r\n )\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Chi tiết sản phẩm</label>\r\n <Controller\r\n control={control}\r\n name=\"Detail\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <ReactQuill\r\n value={value}\r\n modules={Config.editorCfg}\r\n onChange={onChange}\r\n />\r\n )}\r\n />\r\n {errors.Detail && <div className=\"validation-message\">{errors.Detail.message}</div>}\r\n </div>\r\n {\r\n props.info.IsParent && <div className=\"text-center mt-2\">\r\n <div className=\"form-check form-checkbox-success display-inline-block\">\r\n <input type=\"checkbox\" className=\"form-check-input\" id=\"edit-price\" {...register('IsApplyForAll')} />\r\n <label className=\"form-check-label\" htmlFor=\"edit-price\">Ãp dụng cho tất cả các sản phẩm con</label>\r\n </div>\r\n </div>\r\n }\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal >\r\n )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n category: PropTypes.array,\r\n productStatus: PropTypes.array,\r\n groupList: PropTypes.array,\r\n info: PropTypes.object\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n category: [],\r\n productStatus: [],\r\n info: {}\r\n}\r\n\r\nexport default ModalEdit","import PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport NumberFormat from 'react-number-format'\r\nimport 'react-quill/dist/quill.snow.css'\r\nimport { CloseButton, EmptyRow, ReadExcelButton, SaveButton } from './../../../../../components'\r\n\r\nfunction ModalEditQtyExcel(props) {\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [productList, setProductList] = useState([])\r\n\r\n const onNumberChange = (value, productId) => {\r\n const temp = [...productList]\r\n const index = temp.findIndex(n => n.ID === productId)\r\n temp[index].SO_LUONG = value\r\n setProductList(temp)\r\n }\r\n\r\n const renderTable = () => {\r\n if (productList.length === 0) return <EmptyRow colSpan={4} />\r\n else return productList.map((item, index) => <tr key={index}>\r\n <td>{index + 1}</td>\r\n <td>{item.ID}</td>\r\n <td>{item.TEN_SP}</td>\r\n <td>\r\n <NumberFormat\r\n placeholder='Số lượng'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={item.SO_LUONG}\r\n onValueChange={val => onNumberChange(parseInt(val.value), item.ID)}\r\n />\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n onExited={() => {\r\n setProductList([])\r\n }}\r\n onShow={() => {\r\n\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Cáºp nháºt số lượng sản phẩm bằng file excel</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-input mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>ID</th>\r\n <th>Tên sản phẩm</th>\r\n <th className=\"w-150-px\">Số lượng</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <ReadExcelButton\r\n onCompleted={data => {\r\n setProductList(data.Result)\r\n }}\r\n />\r\n <SaveButton type=\"button\" isBusy={isBusy}\r\n onClick={() => {\r\n props.onSave(productList, setIsBusy)\r\n }}\r\n />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </Modal >\r\n )\r\n}\r\n\r\nModalEditQtyExcel.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool\r\n}\r\n\r\nModalEditQtyExcel.defaultPropts = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false\r\n}\r\n\r\nexport default ModalEditQtyExcel","import { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport PropTypes from \"prop-types\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport Modal from \"react-bootstrap/Modal\";\r\nimport { Controller, useForm } from \"react-hook-form\";\r\nimport * as yup from \"yup\";\r\nimport {\r\n CloseButton,\r\n InputSelect,\r\n SaveButton,\r\n} from \"./../../../../../components\";\r\n\r\nconst schema = yup.object().shape({\r\n orderId: yup.number(),\r\n statusId: yup.number(),\r\n});\r\n\r\nconst ModalEditStatus = (props) => {\r\n const { setValue, control, handleSubmit, reset } = useForm({\r\n resolver: yupResolver(schema),\r\n });\r\n\r\n const [isBusy, setIsBusy] = useState(false);\r\n\r\n const { statuses } = props;\r\n\r\n const [productStatuses, setProductStatuses] = useState([]);\r\n\r\n useEffect(() => {\r\n const statusList = statuses.map((item) => {\r\n return {\r\n value: item.ProductStatusId,\r\n label: item.ProductStatusName,\r\n };\r\n });\r\n setProductStatuses(statusList);\r\n }, [statuses]);\r\n\r\n return (\r\n <Modal\r\n show={props.isShow}\r\n onHide={props.onClose}\r\n backdrop=\"static\"\r\n onExited={() => {\r\n reset();\r\n }}\r\n onShow={() => {\r\n setValue(\"productId\", props.productId);\r\n setValue(\"statusId\", props.statusId);\r\n setValue(\"isParent\", props.isParent);\r\n setValue(\"isForAllChildrent\", true);\r\n }}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title>Sá»a trạng thái sản phẩm</Modal.Title>\r\n </Modal.Header>\r\n <form\r\n onSubmit={handleSubmit((formData) => {\r\n props.onSave(formData, setIsBusy);\r\n })}\r\n >\r\n <Modal.Body>\r\n <Controller\r\n name=\"statusId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <InputSelect\r\n isVertical={true}\r\n options={productStatuses}\r\n value={value}\r\n defaultValue={value}\r\n name=\"product-status\"\r\n variant=\"success\"\r\n onChange={onChange}\r\n />\r\n );\r\n }}\r\n />\r\n {props.isParent && (\r\n <div className=\"text-center mt-2\">\r\n <div className=\"form-check form-checkbox-success display-inline-block\">\r\n <input\r\n type=\"checkbox\"\r\n className=\"form-check-input\"\r\n id=\"edit-status\"\r\n defaultChecked={true}\r\n onChange={(e) => {\r\n setValue(\"isForAllChildrent\", e.target.checked);\r\n }}\r\n />\r\n <label className=\"form-check-label\" htmlFor=\"edit-price\">\r\n Ãp dụng cho tất cả các sản phẩm con\r\n </label>\r\n </div>\r\n </div>\r\n )}\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n );\r\n};\r\n\r\nModalEditStatus.propTypes = {\r\n statuses: PropTypes.array,\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n statusId: PropTypes.number,\r\n productId: PropTypes.number,\r\n isParent: PropTypes.bool\r\n};\r\n\r\nexport default ModalEditStatus;\r\n","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Dropdown } from 'react-bootstrap'\r\nimport { IoAddCircleOutline, IoCloudUploadOutline } from 'react-icons/io5'\r\nimport { SiMicrosoftexcel } from 'react-icons/si'\r\nimport { useHistory } from \"react-router-dom\"\r\nimport { IconButton, Notification, Pagination, AuthAdminView } from './../../../components'\r\nimport { Filter, ModalAdd, ModalEdit, ModalEditPrice, ModalEditQty, ModalEditQtyExcel, Table, ModalEditStatus } from './components'\r\nimport ImageViewer from 'react-simple-image-viewer'\r\n\r\nconst downloadFile = (data) => {\r\n const downloadUrl = window.URL.createObjectURL(new Blob([data]))\r\n const link = document.createElement('a')\r\n link.href = downloadUrl\r\n link.setAttribute('download', 'ProductImport.xlsx')\r\n document.body.appendChild(link)\r\n link.click()\r\n link.remove()\r\n}\r\n\r\nconst ProductPage = () => {\r\n const history = useHistory()\r\n\r\n const [category, setCategory] = useState([])\r\n\r\n const [productStatus, setProductStatus] = useState([])\r\n\r\n const [isShowModalProAdd, setIsShowModalProAdd] = useState(false)\r\n\r\n const [modalEditPriceInfo, setModalEditPriceInfo] = useState({\r\n data: [],\r\n isShow: false,\r\n isParent: false,\r\n productId: 0\r\n })\r\n\r\n const [groupList, setGroupList] = useState([])\r\n\r\n const [allAttribute, setAllAttribute] = useState([])\r\n\r\n const [productList, setProductList] = useState(null)\r\n\r\n const [filters, setFilters] = useState({\r\n keyword: '',\r\n catId: 0,\r\n statusId: 0,\r\n typeId: 0,\r\n pageItem: 10,\r\n pageIndex: 1,\r\n parentId: 0\r\n })\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n const [modalEditQtyInfo, setModalEditQtyInfo] = useState({\r\n isShow: false,\r\n productList: []\r\n })\r\n\r\n const [modalEditInfo, setModalEditInfo] = useState({\r\n isShow: false,\r\n data: {}\r\n })\r\n\r\n const [isShowModalEditQtyExcel, setIsShowModalEditQtyExcel] = useState(false)\r\n\r\n const [parent, setParent] = useState(null)\r\n\r\n const [isShowViewer, setIsShowViewer] = useState(false)\r\n\r\n const [isShowModalEditStatus, setisShowModalEditStatus] = useState(false)\r\n\r\n const [editStatusInfo, setEditStatusInfo] = useState(null)\r\n\r\n const [viewerList, setViewerList] = useState([])\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Sản phẩm'\r\n\r\n loadCategory()\r\n loadPropductStatus()\r\n loadPartnerGroup()\r\n loadAllAttrParentChildren()\r\n }, [])\r\n\r\n const getParamString = () => {\r\n const strParam = `keyword=${filters.keyword}&catId=${filters.catId}&statusId=${filters.statusId}&proType=${filters.typeId}&parentId=${filters.parentId}`\r\n return strParam\r\n }\r\n\r\n useEffect(() => {\r\n const strParam = `keyword=${filters.keyword}&catId=${filters.catId}&statusId=${filters.statusId}&proType=${filters.typeId}&parentId=${filters.parentId}`\r\n const url = `/admin/product/filter?${strParam}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPagination(newPagination)\r\n setProductList(data.Result.Data)\r\n }\r\n })\r\n }, [filters])\r\n\r\n const loadCategory = () => {\r\n const url = '/admin/category/get-dropdown'\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n setCategory(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadPropductStatus = () => {\r\n const url = '/admin/product-status/get-all'\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n setProductStatus(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadPartnerGroup = () => {\r\n const url = '/admin/partner-group/get-all'\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n setGroupList(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadAllAttrParentChildren = () => {\r\n const url = '/admin/attribute/get-all-parent-children'\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n setAllAttribute(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const reloadProduct = (isKeepCurrent = false) => {\r\n const newFilters = { ...filters }\r\n if (!isKeepCurrent) {\r\n newFilters.pageIndex = 1\r\n }\r\n setFilters(newFilters)\r\n }\r\n\r\n const renderParent = () => {\r\n if (parent !== null) {\r\n return (\r\n <div className=\"row mb-2\">\r\n <div className=\"col-12\">\r\n <div className=\"alert alert-primary alert-dismissible fade show mb-0\">\r\n <button type=\"button\" className=\"btn-close\"\r\n onClick={() => {\r\n setParent(null)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: 1,\r\n parentId: 0\r\n }\r\n setFilters(newFilters)\r\n }}\r\n ></button>\r\n <strong>Sản phẩm cha: </strong> {parent.ProductName}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n category={category}\r\n productStatus={productStatus}\r\n onSearch={params => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <div className=\"col-md-6\">\r\n <div className=\"button-list mb-2\">\r\n <AuthAdminView right=\"product_add\">\r\n <IconButton\r\n text=\"Thêm má»›i\"\r\n icon={<IoAddCircleOutline />}\r\n onClick={() => {\r\n setIsShowModalProAdd(true)\r\n }} />\r\n <IconButton\r\n variant='info'\r\n text=\"Thêm từ file excel\"\r\n icon={<IoAddCircleOutline />}\r\n onClick={() => {\r\n history.push('/admin/product/create-from-excel')\r\n }} />\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n <div className=\"col-md-6\">\r\n <div className=\"button-list mb-2 text-end\">\r\n <AuthAdminView right=\"product_edit\">\r\n <IconButton\r\n variant='success'\r\n text=\"Cáºp nháºt số lượng\"\r\n icon={<IoCloudUploadOutline />}\r\n onClick={() => {\r\n setIsShowModalEditQtyExcel(true)\r\n }}\r\n />\r\n </AuthAdminView>\r\n <AuthAdminView right=\"product_export\">\r\n <Dropdown className=\"display-inline-block\">\r\n <Dropdown.Toggle variant=\"danger\">\r\n <SiMicrosoftexcel className=\"font-17 mt--2-px me-1\" />\r\n Xuất excel\r\n </Dropdown.Toggle>\r\n <Dropdown.Menu>\r\n <Dropdown.Item onClick={() => {\r\n const strParam = getParamString()\r\n const url = `/admin/product/export?${strParam}&pageItem=10&pageIndex=1`\r\n axios.get(url, { responseType: 'blob' }).then(({ data }) => {\r\n downloadFile(data)\r\n })\r\n }}>Mặc định trang hiện tại</Dropdown.Item>\r\n <Dropdown.Item onClick={() => {\r\n const strParam = getParamString()\r\n const url = `/admin/product/export?${strParam}&pageItem=10&pageIndex=0`\r\n axios.get(url, { responseType: 'blob' }).then(({ data }) => {\r\n downloadFile(data)\r\n })\r\n }}>Mặc định tất cả các trang</Dropdown.Item>\r\n <Dropdown.Item onClick={() => {\r\n const strParam = getParamString()\r\n const url = `/admin/product/export-quantity-update?${strParam}&pageItem=10&pageIndex=1`\r\n axios.get(url, { responseType: 'blob' }).then(({ data }) => {\r\n downloadFile(data)\r\n })\r\n }}>Cáºp nháºt số lượng trang hiện tại</Dropdown.Item>\r\n <Dropdown.Item onClick={() => {\r\n const strParam = getParamString()\r\n const url = `/admin/product/export-quantity-update?${strParam}&pageItem=10&pageIndex=0`\r\n axios.get(url, { responseType: 'blob' }).then(({ data }) => {\r\n downloadFile(data)\r\n })\r\n }}>Cáºp nháºt số lượng tất cả các trang</Dropdown.Item>\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n </div>\r\n {renderParent()}\r\n <Table\r\n pageItem={filters.pageItem}\r\n pageIndex={filters.pageIndex}\r\n data={productList}\r\n onEdit={item => {\r\n const url = `/admin/product/get-by-id?id=${item.ProductId}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalEditInfo({\r\n isShow: true,\r\n data: data.Result\r\n })\r\n }\r\n })\r\n }}\r\n onEditPrice={item => {\r\n const url = `/admin/product/get-price?id=${item.ProductId}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalEditPriceInfo({\r\n data: data.Result,\r\n isShow: true,\r\n isParent: item.IsParent,\r\n productId: item.ProductId\r\n })\r\n }\r\n })\r\n }}\r\n onEditQty={item => {\r\n let url = ''\r\n if (item.IsParent) {\r\n url = `/admin/product/get-children?parentId=${item.ProductId}`\r\n }\r\n else {\r\n url = `/admin/product/get-detail?id=${item.ProductId}`\r\n }\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalEditQtyInfo({\r\n isShow: true,\r\n productList: (item.IsParent ? data.Result : [data.Result])\r\n })\r\n }\r\n })\r\n }}\r\n onDelete={item => {\r\n Notification.confirmHtml('Bạn có chắc muốn xóa sản phẩm', item.ProductName, () => {\r\n const url = `/admin/product/delete?id=${item.ProductId}`\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadProduct()\r\n Notification.success('Xóa sản phẩm thà nh công')\r\n }\r\n })\r\n })\r\n }}\r\n onParentClick={(item) => {\r\n setParent(item)\r\n const newFilter = {\r\n ...filters,\r\n parentId: item.ProductId,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilter)\r\n }}\r\n onAvatarClick={(urlObj) => {\r\n setIsShowViewer(true)\r\n setViewerList([urlObj.fullUrl])\r\n }}\r\n onEditStatus={product => {\r\n setEditStatusInfo({\r\n productId: product.ProductId,\r\n statusId: product.ProductStatusId,\r\n isParent: product.IsParent\r\n })\r\n setisShowModalEditStatus(true)\r\n }}\r\n />\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex }\r\n setPagination(newPagination)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <ModalAdd\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/product/create'\r\n axios.post(url, formData).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n reloadProduct()\r\n setIsShowModalProAdd(false)\r\n Notification.success('Thêm má»›i sản phẩm thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalProAdd(false)\r\n }}\r\n isShow={isShowModalProAdd}\r\n category={category}\r\n productStatus={productStatus}\r\n groupList={groupList}\r\n allAttribute={allAttribute}\r\n />\r\n <ModalEditPrice\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/product/update-price'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalEditPriceInfo({\r\n data: [],\r\n isShow: false\r\n })\r\n Notification.success('Chỉnh sá»a giá theo nhóm cá»™ng tác viên thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setModalEditPriceInfo({\r\n data: [],\r\n isShow: false\r\n })\r\n }}\r\n isShow={modalEditPriceInfo.isShow}\r\n data={modalEditPriceInfo.data}\r\n isParent={modalEditPriceInfo.isParent}\r\n productId={modalEditPriceInfo.productId}\r\n />\r\n <ModalEditQty\r\n onSave={(formData, setIsBusy) => {\r\n const url = '/admin/product/update-quantity'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadProduct(true)\r\n setModalEditQtyInfo({\r\n isShow: false,\r\n productList: []\r\n })\r\n Notification.success('Cáºp nháºt số lượng sản phẩm thà nh công')\r\n }\r\n })\r\n }}\r\n onClose={() => {\r\n setModalEditQtyInfo({\r\n isShow: false,\r\n productList: []\r\n })\r\n }}\r\n isShow={modalEditQtyInfo.isShow}\r\n productList={modalEditQtyInfo.productList}\r\n />\r\n <ModalEdit\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/product/update'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadProduct(true)\r\n setModalEditInfo({\r\n isShow: false,\r\n date: {}\r\n })\r\n Notification.success('Chỉnh sá»a sản phẩm thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setModalEditInfo({\r\n isShow: false,\r\n data: {}\r\n })\r\n }}\r\n isShow={modalEditInfo.isShow}\r\n productStatus={productStatus}\r\n category={category}\r\n info={modalEditInfo.data}\r\n />\r\n <ModalEditQtyExcel\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const products = formData.map(item => {\r\n return {\r\n ProductId: item.ID,\r\n Quantity: item.SO_LUONG\r\n }\r\n })\r\n const url = '/admin/product/import-quantity'\r\n axios.post(url, {\r\n ProductList: products\r\n }).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadProduct(true)\r\n setIsShowModalEditQtyExcel(false)\r\n Notification.success('Cáºp nháºt số lượng sản phẩm bằng file excel thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalEditQtyExcel(false)\r\n }}\r\n isShow={isShowModalEditQtyExcel}\r\n />\r\n <ModalEditStatus\r\n productId={editStatusInfo?.productId}\r\n statusId={editStatusInfo?.statusId}\r\n isParent={editStatusInfo?.isParent}\r\n statuses={productStatus} onSave={(params, setIsBusy) => {\r\n let url = `/admin/product/update-status?productId=${params.productId}&statusId=${params.statusId}&isParent=${params.isParent}`\r\n if (params.isParent) {\r\n url += `&isAllowForChildrent=${params.isForAllChildrent}`\r\n }\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadProduct(true)\r\n Notification.success('Cáºp nháºt trạng thái sản phẩm thà nh công')\r\n setisShowModalEditStatus(false)\r\n setEditStatusInfo(null)\r\n }\r\n })\r\n }} onClose={() => {\r\n setisShowModalEditStatus(false)\r\n setEditStatusInfo(null)\r\n }} isShow={isShowModalEditStatus} />\r\n {isShowViewer && (\r\n <ImageViewer\r\n src={viewerList}\r\n currentIndex={0}\r\n disableScroll={false}\r\n closeOnClickOutside={true}\r\n onClose={() => {\r\n setIsShowViewer(false)\r\n }}\r\n />\r\n )}\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default ProductPage","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { ActionItem, ActionRow, EmptyRow, FormatNumber, LoadingRow } from '../../../../../components'\r\n\r\nconst renderTable = (props) => {\r\n let data = props.data\r\n if (data === null) return <LoadingRow colSpan={7} />\r\n else if (data.length !== 0) {\r\n return (\r\n data.map(item => {\r\n return (\r\n <tr key={item.GroupId}>\r\n <td>{item.GroupId}</td>\r\n <td>{item.GroupName}</td>\r\n <td>{item.Note}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.TotalPartner}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.DropShipFee}\r\n </FormatNumber>\r\n </td>\r\n <td>\r\n {renderStatus(item.StatusId)}\r\n </td>\r\n <td className=\"text-center\">\r\n <ActionRow>\r\n <ActionItem right=\"role_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sá»a' />\r\n </ActionRow>\r\n </td>\r\n </tr>\r\n )\r\n })\r\n )\r\n }\r\n else return <EmptyRow colSpan=\"7\" />\r\n}\r\n\r\nconst renderStatus = (statusId) => {\r\n if (statusId === 1) return <span className=\"badge bg-success\">Hoạt động</span>\r\n else return <span className=\"badge bg-warning\">Tạm khóa</span>\r\n}\r\n\r\nconst Table = props => {\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">ID</th>\r\n <th>Tên nhóm</th>\r\n <th>Ghi chú</th>\r\n <th className='text-end'>Cá»™ng tác viên</th>\r\n <th className='text-end'>Phà dropship</th>\r\n <th>Trạng thái</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable(props)}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n data: PropTypes.array\r\n}\r\n\r\nTable.defaultProps = {\r\n data: null\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, InputSelect } from './../../../../../components'\r\n\r\nconst invalidValue = 'Giá trị không hợp lệ'\r\n\r\nconst schema = yup.object().shape({\r\n GroupName: yup.string().required('Vui lòng nháºp tên nhóm').max(100, 'Tên nhóm quá dà i'),\r\n DropShipFee: yup.number().transform((_value, originalValue) => Number(originalValue.replaceAll('.', '')))\r\n .negative(invalidValue)\r\n .integer(invalidValue)\r\n .min(0, invalidValue)\r\n .max(2_000_000_000, invalidValue),\r\n StatusId: yup.number(),\r\n Note: yup.string().max(200, 'Ghi chú quá dà i')\r\n})\r\n\r\nconst statusOptions = [\r\n {\r\n value: 1,\r\n label: 'Hoạt động'\r\n },\r\n {\r\n value: 2,\r\n label: 'Tạm khóa'\r\n }\r\n]\r\n\r\nconst ModalAdd = props => {\r\n const { control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema),\r\n defaultValues: {\r\n StatusId: 1\r\n }\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n onExited={() => {\r\n reset()\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i nhóm cá»™ng tác viên</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên nhóm <span className=\"text-danger\">*</span></label>\r\n <input {...register('GroupName')} type=\"text\" className=\"form-control\" placeholder=\"Tên nhóm\" />\r\n {errors.GroupName && <div className=\"validation-message\">{errors.GroupName.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Phà dropship <span className=\"text-danger\">*</span></label>\r\n <div className=\"input-group\">\r\n <Controller\r\n name=\"DropShipFee\"\r\n control={control}\r\n render={({ field }) => {\r\n return (\r\n <NumberFormat\r\n {...field}\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator=\",\"\r\n allowNegative={false}\r\n defaultValue={0}\r\n onValueChange={(c) => {\r\n field.onChange(c.value)\r\n }}\r\n decimalScale={0}\r\n />\r\n )\r\n }}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n {errors.DropShipFee && <div className=\"validation-message\">{errors.DropShipFee.message}</div>}\r\n </div>\r\n\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <Controller\r\n name=\"StatusId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <InputSelect\r\n options={statusOptions}\r\n defaultValue={1}\r\n onChange={onChange}\r\n value={value}\r\n variant='success'\r\n />\r\n )\r\n }}\r\n />\r\n {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, InputSelect } from './../../../../../components'\r\n\r\nconst invalidValue = 'Giá trị không hợp lệ'\r\n\r\nconst schema = yup.object().shape({\r\n GroupName: yup.string().required('Vui lòng nháºp tên nhóm').max(100, 'Tên nhóm quá dà i'),\r\n DropShipFee: yup.number()\r\n .negative(invalidValue)\r\n .integer(invalidValue)\r\n .min(0, invalidValue)\r\n .max(2_000_000_000, invalidValue),\r\n StatusId: yup.number(),\r\n Note: yup.string().max(200, 'Ghi chú quá dà i')\r\n})\r\n\r\nconst statusOptions = [\r\n {\r\n value: 1,\r\n label: 'Hoạt động'\r\n },\r\n {\r\n value: 2,\r\n label: 'Tạm khóa'\r\n }\r\n]\r\n\r\nconst ModalEdit = props => {\r\n const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [val, setVal] = useState(0)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n onExited={() => {\r\n reset()\r\n setVal(0)\r\n }}\r\n onShow={() => {\r\n let data = props.data\r\n setValue('GroupName', data.GroupName)\r\n setValue('DropShipFee', data.DropShipFee)\r\n setValue('StatusId', data.StatusId)\r\n setValue('Note', data.Note)\r\n\r\n setVal(data.DropShipFee)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a nhóm cá»™ng tác viên</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên nhóm <span className=\"text-danger\">*</span></label>\r\n <input {...register('GroupName')} type=\"text\" className=\"form-control\" placeholder=\"Tên nhóm\" />\r\n {errors.GroupName && <div className=\"validation-message\">{errors.GroupName.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Phà dropship <span className=\"text-danger\">*</span></label>\r\n <div className=\"input-group\">\r\n <NumberFormat\r\n className=\"form-control\"\r\n // thousandSeparator=\".\"\r\n // decimalSeparator=\",\"\r\n allowNegative={false}\r\n defaultValue={0}\r\n value={val}\r\n onValueChange={(c) => {\r\n let num = c.vallue !== '' ? c.value : 0\r\n setVal(num)\r\n setValue('DropShipFee', num)\r\n }}\r\n decimalScale={0}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n {errors.DropShipFee && <div className=\"validation-message\">{errors.DropShipFee.message}</div>}\r\n </div>\r\n\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <Controller\r\n name=\"StatusId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <InputSelect\r\n options={statusOptions}\r\n defaultValue={1}\r\n onChange={onChange}\r\n value={value}\r\n variant='success'\r\n />\r\n )\r\n }}\r\n />\r\n {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n data: PropTypes.object,\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n isBusy: PropTypes.bool\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n data: {},\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n isBusy: false\r\n}\r\n\r\nexport default ModalEdit","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { IconButton, Notification, AuthAdminView } from '../../../components'\r\nimport { ModalAdd, ModalEdit, Table } from './components'\r\n\r\nconst PartnerGroupPage = () => {\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Nhóm cá»™ng tác viên'\r\n loadPartnerGroup()\r\n }, [])\r\n\r\n // State danh sách nhóm CTV\r\n const [partnerGroup, setPartnerGroup] = useState(null)\r\n\r\n // State lưu data sá»a nhóm CTV\r\n const [editValue, setEditValue] = useState({})\r\n\r\n // State đóng mở modal sá»a nhóm CTV\r\n const [isShowModalPartnerGroupEdit, setIsShowModalPartnerGroupEdit] = useState(false)\r\n\r\n // State lưu trạng thái đóng mở modal thêm má»›i nhóm CTV\r\n const [isShowModalPartnerGroupAdd, setIsShowModalPartnerGroupAdd] = useState(false)\r\n\r\n // Load danh sách nhóm cá»™ng tác viên\r\n const loadPartnerGroup = () => {\r\n let url = '/admin/partner-group/get-all'\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setPartnerGroup(data.Result)\r\n }\r\n });\r\n }\r\n\r\n // Mở modal sá»a nhóm cá»™ng tác viên và load chi tiết\r\n const handleOpenModalEdit = (item) => {\r\n let url = `/admin/partner-group/get-by-id?id=${item.GroupId}`\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n setEditValue(data.Result)\r\n setIsShowModalPartnerGroupEdit(true)\r\n })\r\n }\r\n\r\n // Äóng modal sá»a nhóm cá»™ng tác viên\r\n const handleCloseModalEdit = () => setIsShowModalPartnerGroupEdit(false)\r\n\r\n // Lưu sá»a nhóm cá»™ng tác viên\r\n const handleSavePartnerGroupEdit = (formVal, setIsBusy) => {\r\n setIsBusy(true)\r\n let url = '/admin/partner-group/update'\r\n axios.post(url, {\r\n GroupId: editValue.GroupId,\r\n GroupName: formVal.GroupName,\r\n DropShipFee: formVal.DropShipFee,\r\n StatusId: formVal.StatusId,\r\n Note: formVal.Note\r\n }).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n loadPartnerGroup()\r\n setIsShowModalPartnerGroupEdit(false)\r\n Notification.success('Chỉnh sá»a nhóm cá»™ng tác viên thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <AuthAdminView right=\"partner_group_add\">\r\n <IconButton\r\n className=\"mb-2\"\r\n text=\"Thêm má»›i\"\r\n icon={<IoAddCircleOutline />}\r\n onClick={() => {\r\n setIsShowModalPartnerGroupAdd(true)\r\n }}\r\n />\r\n </AuthAdminView>\r\n\r\n </div>\r\n </div>\r\n <Table\r\n data={partnerGroup}\r\n onEdit={handleOpenModalEdit} />\r\n </div>\r\n </div>\r\n\r\n <ModalAdd\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n if (formData.DropShipFee === undefined) {\r\n formData.DropShipFee = 0\r\n }\r\n const url = '/admin/partner-group/create'\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n loadPartnerGroup()\r\n setIsShowModalPartnerGroupAdd(false)\r\n Notification.success('Thêm má»›i nhóm cá»™ng tác viên thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalPartnerGroupAdd(false)\r\n }}\r\n isShow={isShowModalPartnerGroupAdd}\r\n data={editValue} />\r\n\r\n <ModalEdit\r\n onSave={handleSavePartnerGroupEdit}\r\n onClose={handleCloseModalEdit}\r\n isShow={isShowModalPartnerGroupEdit}\r\n data={editValue} />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default PartnerGroupPage","import React, { useEffect, useState } from 'react'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\nimport Select from 'react-select'\r\n\r\nconst statusOptions = [\r\n {\r\n value: 1,\r\n label: 'Hoạt động'\r\n },\r\n {\r\n value: 2,\r\n label: 'Tạm khóa'\r\n }\r\n]\r\n\r\nconst filters = {\r\n keyword: '',\r\n groupId: 0,\r\n statusId: 0\r\n}\r\n\r\nconst Filter = props => {\r\n const { onSearch } = props\r\n\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const [groupOptions, setGroupOptions] = useState([])\r\n\r\n useEffect(() => {\r\n let lst = props.partnerGroup.map(item => {\r\n return {\r\n value: item.GroupId,\r\n label: item.GroupName\r\n }\r\n })\r\n setGroupOptions(lst)\r\n }, [props.partnerGroup])\r\n\r\n const [group, setGroup] = useState(0)\r\n\r\n const [status, setStatus] = useState(0)\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClearSearch = () => {\r\n setKeyword('')\r\n filters.keyword = ''\r\n setGroup(null)\r\n filters.groupId = 0\r\n setStatus(null)\r\n filters.statusId = 0\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-4 col-md-4 col-lg-4 col-xl-3 col-xxl-2\">\r\n <input\r\n autoFocus\r\n onChange={e => {\r\n const value = e.target.value\r\n setKeyword(value)\r\n filters.keyword = value\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleSearch()\r\n }\r\n }}\r\n value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Há» tên, email, Ä‘iện thoại\" />\r\n </div>\r\n <div className=\"col-sm-4 col-md-8 col-lg-4 col-xl-4 col-xxl-3\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={true}\r\n placeholder='Nhóm cá»™ng tác viên'\r\n options={groupOptions}\r\n value={group}\r\n onChange={item => {\r\n if (item !== null) {\r\n setGroup(item)\r\n filters.groupId = item.value\r\n }\r\n else {\r\n setGroup(item)\r\n filters.groupId = 0\r\n }\r\n }}\r\n />\r\n </div>\r\n <div className=\"col-sm-4 col-md-4 col-lg-4 col-xl-3 col-xxl-2\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={true}\r\n placeholder='Trạng thái'\r\n options={statusOptions}\r\n value={status}\r\n onChange={item => {\r\n if (item !== null) {\r\n setStatus(item)\r\n filters.statusId = item.value\r\n }\r\n else {\r\n setStatus(null)\r\n filters.statusId = 0\r\n }\r\n }}\r\n />\r\n </div>\r\n <div className=\"col-sm-12 col-md-8 col-lg-12 col-xl-12 col-xxl-5\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClearSearch} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n partnerGroup: PropTypes.array,\r\n onSearch: PropTypes.func,\r\n onClear: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n partnerGroup: [],\r\n onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import React, { Fragment } from 'react'\r\nimport { AiOutlineKey } from 'react-icons/ai'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport {\r\n IoLogOutOutline, IoTrashOutline, IoWalletOutline,\r\n IoListOutline, IoReceiptOutline,\r\n IoStorefrontOutline, IoBagHandleOutline, IoLayersOutline\r\n} from 'react-icons/io5'\r\nimport { AiOutlineHistory } from 'react-icons/ai'\r\nimport { AvatarRow, CloseButton, EmptyRow, FormatNumber, LoadingRow, AuthAdminView } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\nimport { BalanceTable, OrderTable, Detail, ShopeeTable } from './../'\r\n\r\nconst Table = props => {\r\n const { onShowChildren } = props\r\n\r\n const renderTable = () => {\r\n let data = props.data;\r\n if (data === null) return <LoadingRow colSpan={6} />\r\n else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n else return data.map(item => {\r\n return (\r\n <Fragment key={item.PartnerId}>\r\n <tr onClick={() => props.onOpenDetail(item)} className={(item.isSelected ? 'row-master' : '')}>\r\n <td>\r\n <AvatarRow url={item.AvatarUrl} />\r\n {item.FullName}\r\n </td>\r\n <td>{item.Email}</td>\r\n <td>{item.Phone}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>{item.Balance}</FormatNumber>\r\n </td>\r\n <td className={item.GroupId === 0 ? 'text-danger' : ''}>{item.GroupName}</td>\r\n <td>\r\n {renderStatus(item.StatusId)}\r\n </td>\r\n </tr>\r\n {renderDetail(item)}\r\n </Fragment>\r\n )\r\n })\r\n }\r\n\r\n const renderStatus = (statusId) => {\r\n if (statusId === 1) return <span className=\"badge bg-success\">Hoạt động</span>\r\n else return <span className=\"badge bg-warning\">Tạm khóa</span>\r\n }\r\n\r\n const renderDetail = item => {\r\n if (item.isSelected) {\r\n return (\r\n <tr className=\"row-detail\">\r\n <td colSpan=\"6\" className=\"ps-1 pt-0 pe-1 pb-1\">\r\n <div className=\"card mb-0 cursor-default\">\r\n <div className=\"card-body\">\r\n <ul className=\"nav nav-tabs nav-bordered mb-3\">\r\n <li className=\"nav-item\">\r\n <a href=\"#tab-1\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link active\">\r\n <IoListOutline className='d-md-none d-block' />\r\n <span className=\"d-none d-md-block\">Chi tiết</span>\r\n </a>\r\n </li>\r\n <AuthAdminView right=\"partner_order_filter\">\r\n <li className=\"nav-item\">\r\n <a href=\"#tab-2\" data-bs-toggle=\"tab\" aria-expanded=\"true\" className=\"nav-link\">\r\n <IoReceiptOutline className='d-md-none d-block' />\r\n <span className=\"d-none d-md-block\">ÄÆ¡n hà ng</span>\r\n </a>\r\n </li>\r\n </AuthAdminView>\r\n <AuthAdminView right=\"partner_balance_history\">\r\n <li className=\"nav-item\">\r\n <a href=\"#tab-3\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link\">\r\n <AiOutlineHistory className='d-md-none d-block' />\r\n <span className=\"d-none d-md-block\">Lịch sá» số dư</span>\r\n </a>\r\n </li>\r\n </AuthAdminView>\r\n <AuthAdminView right=\"partner_shopee_list\">\r\n <li className=\"nav-item\">\r\n <a href=\"#tab-4\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link\">\r\n <IoStorefrontOutline className='d-md-none d-block' />\r\n <span className=\"d-none d-md-block\">Shopee</span>\r\n </a>\r\n </li>\r\n </AuthAdminView>\r\n <AuthAdminView right='partner_freeship_his'>\r\n <li className=\"nav-item\">\r\n <a href=\"#tab-5\" data-bs-toggle=\"tab\" aria-expanded=\"false\" className=\"nav-link\">\r\n <IoBagHandleOutline className='d-md-none d-block' />\r\n <span className=\"d-none d-md-block\">Lịch sá» miá»…n phà đóng gói</span>\r\n </a>\r\n </li>\r\n </AuthAdminView>\r\n </ul>\r\n\r\n <div className=\"tab-content\">\r\n <div className=\"tab-pane show active\" id=\"tab-1\">\r\n <Detail\r\n detail={props.detail}\r\n />\r\n </div>\r\n <AuthAdminView right=\"partner_order_filter\">\r\n <div className=\"tab-pane\" id=\"tab-2\">\r\n <OrderTable\r\n orders={props.partnerOrders}\r\n pagination={props.partnerOrderPagination}\r\n onPageChange={(pIndex) => {\r\n props.onPartnerOrderPageChange(item.PartnerId, pIndex)\r\n }}\r\n />\r\n </div>\r\n </AuthAdminView>\r\n <AuthAdminView right=\"partner_balance_history\">\r\n <div className=\"tab-pane\" id=\"tab-3\">\r\n <BalanceTable\r\n balanceHistories={props.balanceHistories}\r\n pagination={props.balanceHistoryPagination}\r\n onPageChange={(pIndex) => {\r\n props.onBalanceHistoryPageChange(item.PartnerId, pIndex)\r\n }}\r\n pageItem={props.balancePageItem}\r\n pageIndex={props.balancePageIndex}\r\n />\r\n </div>\r\n </AuthAdminView>\r\n <AuthAdminView right=\"partner_shopee_list\">\r\n <div className=\"tab-pane\" id=\"tab-4\">\r\n <ShopeeTable\r\n shops={props.shopeeShops}\r\n />\r\n </div>\r\n </AuthAdminView>\r\n <AuthAdminView right='partner_freeship_his'>\r\n <div className=\"tab-pane\" id=\"tab-5\">\r\n {props.children}\r\n </div>\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n\r\n <div className=\"p-2 border-top\">\r\n <div className=\"button-list\">\r\n <AuthAdminView right=\"partner_edit\">\r\n <button onClick={() => props.onEdit(item)} className=\"btn btn-primary\"><FiEdit className=\"me-1 mt--2-px font-16\" />Chỉnh sá»a</button>\r\n </AuthAdminView>\r\n <AuthAdminView right=\"partner_recharge\">\r\n <button onClick={() => props.onRecharge(item)} className=\"btn btn-info\"><IoWalletOutline className=\"me-1 mt--2-px font-16\" />Nạp tiá»n</button>\r\n </AuthAdminView>\r\n <AuthAdminView right=\"partner_set_password\">\r\n <button onClick={() => props.onSetPassword(item)} className=\"btn btn-success\"><AiOutlineKey className=\"me-1 mt--2-px font-16\" />Äặt lại máºt khẩu</button>\r\n </AuthAdminView>\r\n <AuthAdminView right=\"partner_logout\">\r\n <button onClick={() => props.onLogOut(item)} className=\"btn btn-warning\"><IoLogOutOutline className=\"me-1 mt--2-px font-16\" />Äăng xuất</button>\r\n </AuthAdminView>\r\n\r\n <button onClick={() => onShowChildren(item)} className=\"btn btn-primary\"><IoLayersOutline className=\"me-1 mt--2-px font-16\" />Äã giá»›i thiệu</button>\r\n\r\n <AuthAdminView right=\"partner_delete\">\r\n <button onClick={() => props.onDelete(item)} className=\"btn btn-danger\"><IoTrashOutline className=\"me-1 mt--2-px font-16\" />Xóa</button>\r\n </AuthAdminView>\r\n <CloseButton onClick={() => props.onCloseDetail(item)} />\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n )\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-point table-avatar mb-0\">\r\n <thead>\r\n <tr>\r\n <th>Há» tên</th>\r\n <th>Email</th>\r\n <th>Äiện thoại</th>\r\n <th className='text-end'>Số dư TK</th>\r\n <th>Nhóm</th>\r\n <th>Trạng thái</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n data: PropTypes.array,\r\n onOpenDetail: PropTypes.func,\r\n onEdit: PropTypes.func,\r\n onRecharge: PropTypes.func,\r\n onSetPassword: PropTypes.func,\r\n onLogOut: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n onCloseDetail: PropTypes.func,\r\n onShowChildren: PropTypes.func,\r\n\r\n detail: PropTypes.object,\r\n\r\n partnerOrders: PropTypes.array,\r\n partnerOrderPagination: PropTypes.object,\r\n\r\n balanceHistories: PropTypes.array,\r\n balanceHistoryPagination: PropTypes.object,\r\n onBalanceHistoryPageChange: PropTypes.func,\r\n balancePageItem: PropTypes.number,\r\n balancePageIndex: PropTypes.number,\r\n\r\n shopeeShops: PropTypes.array\r\n}\r\n\r\nTable.defaultProps = {\r\n data: null,\r\n onOpenDetail: null,\r\n onEdit: null,\r\n onRecharge: null,\r\n onSetPassword: null,\r\n onLogOut: null,\r\n onDelete: null,\r\n onCloseDetail: null,\r\n onShowChildren: () => { },\r\n\r\n detail: {},\r\n\r\n partnerOrders: [],\r\n partnerOrderPagination: {},\r\n onPartnerOrderPageChange: () => { },\r\n\r\n balanceHistories: [],\r\n balanceHistoryPagination: {},\r\n onBalanceHistoryPageChange: () => { },\r\n balancePageItem: 0,\r\n balancePageIndex: 0,\r\n\r\n shopeeShops: [],\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, UploadImg } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n GroupId: yup.number().min(1, 'Vui lòng chá»n nhóm'),\r\n WardId: yup.number(),\r\n FullName: yup.string().required('Vui lòng nháºp tên nhóm').max(100, 'Tên nhóm quá dà i').nullable(),\r\n ShopName: yup.string().max(100, 'Tên shop quá dà i').nullable(),\r\n Phone: yup.string().required('Vui lòng nháºp số Ä‘iện thoại').max(20, 'Số Ä‘iện thoại quá dà i').nullable(),\r\n Email: yup.string().required('Vui lòng nháºp email').max(70, 'Email quá dà i').email('Email không đúng').nullable(),\r\n Password: yup.string().required('Vui lòng nháºp máºt khẩu').max(100, 'Máºt khẩu quá dà i').nullable(),\r\n Address: yup.string().nullable(),\r\n StatusId: yup.number(),\r\n ShipFeeId: yup.number(),\r\n Note: yup.string().max(200, 'Ghi chú quá dà i').nullable(),\r\n GHTKToken: yup.string().max(500, 'Token quá dà i').nullable(),\r\n AvatarUrl: yup.string().max(2_000, 'ÄÆ°á»ng dẫn ảnh quá dà i').nullable()\r\n})\r\n\r\nconst ModalAdd = props => {\r\n const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n size=\"lg\"\r\n onExited={() => {\r\n reset()\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i cá»™ng tác viên</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"row row-cols-1 row-cols-lg-3\">\r\n <div className=\"col-sm-4 col-md-3\">\r\n <Controller\r\n control={control}\r\n name=\"AvatarUrl\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <UploadImg\r\n imgUrl={value}\r\n onCompleted={data => {\r\n onChange(data.Result.ImageUrl)\r\n }}\r\n />\r\n )}\r\n />\r\n </div>\r\n <div className=\"col-sm-8 col-md-9\">\r\n <div className=\"row\">\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Há» tên <span className=\"text-danger\">*</span></label>\r\n <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Há» tên\" />\r\n {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên shop</label>\r\n <input {...register('ShopName')} type=\"text\" className=\"form-control\" placeholder=\"Tên shop\" />\r\n {errors.ShopName && <div className=\"validation-message\">{errors.ShopName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Äiện thoại <span className=\"text-danger\">*</span></label>\r\n <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Äiện thoại\" />\r\n {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n <input {...register('Email')} type=\"text\" className=\"form-control\" placeholder=\"Email\" />\r\n {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Nhóm cá»™ng tác viên <span className=\"text-danger\">*</span></label>\r\n <select {...register('GroupId')} className=\"form-select\">\r\n <option value=\"0\">Nhóm cá»™ng tác viên</option>\r\n {\r\n props.partnerGroup.map(item => {\r\n return (\r\n <option key={item.GroupId} value={item.GroupId}>{item.GroupName}</option>\r\n )\r\n })\r\n }\r\n </select>\r\n {errors.GroupId && <div className=\"validation-message\">{errors.GroupId.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Máºt khẩu <span className=\"text-danger\">*</span></label>\r\n <input {...register('Password')} type=\"Password\" className=\"form-control\" placeholder=\"Máºt khẩu\" />\r\n {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tỉnh/Tp</label>\r\n <select className=\"form-select\" onChange={e => {\r\n let provinceId = e.target.value\r\n props.onProvinceChange(provinceId)\r\n setValue('WardId', 0)\r\n }}>\r\n <option value=\"0\">Chá»n Tỉnh/Tp</option>\r\n {\r\n props.province.map(item => {\r\n return (\r\n <option key={item.ProvinceId} value={item.ProvinceId}>{item.Prefix} {item.ProvinceName}</option>\r\n )\r\n })\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n <div className=\"col\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Quáºn/Huyện</label>\r\n <select className=\"form-select\" onChange={e => {\r\n let districtId = e.target.value\r\n props.onDistrictChange(districtId)\r\n setValue('WardId', 0)\r\n }}>\r\n <option value=\"0\">Chá»n Quáºn/Huyện</option>\r\n {\r\n props.district.map(item => {\r\n return (\r\n <option key={item.DistrictId} value={item.DistrictId}>{item.Prefix} {item.DistrictName}</option>\r\n )\r\n })\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n <div className=\"col\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Phưá»ng/Xã</label>\r\n <select {...register('WardId')} className=\"form-select\">\r\n <option value=\"0\">Chá»n Phưá»ng/Xã</option>\r\n {\r\n props.ward.map(item => {\r\n return (\r\n <option key={item.WardId} value={item.WardId}>{item.Prefix} {item.WardName}</option>\r\n )\r\n })\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-8\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Äịa chỉ</label>\r\n <input {...register('Address')} type=\"text\" className=\"form-control\" placeholder=\"Äịa chỉ\" />\r\n {errors.Address && <div className=\"validation-message\">{errors.Address.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <select {...register('StatusId')} className=\"form-select\">\r\n <option value=\"1\">Hoạt động</option>\r\n <option value=\"2\">Tạm khóa</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div className=\"col-12\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">GHTK token</label>\r\n <input {...register('GHTKToken')} type=\"text\" className=\"form-control\" placeholder=\"GHTK token\" />\r\n {errors.GHTKToken && <div className=\"validation-message\">{errors.GHTKToken.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-12\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n province: PropTypes.array,\r\n district: PropTypes.array,\r\n ward: PropTypes.array,\r\n partnerGroup: PropTypes.array,\r\n onProvinceChange: PropTypes.func,\r\n onDistrictChange: PropTypes.func\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n province: [],\r\n district: [],\r\n ward: [],\r\n partnerGroup: [],\r\n onProvinceChange: () => { },\r\n onDistrictChange: () => { }\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, UploadImg } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n GroupId: yup.number().min(1, 'Vui lòng chá»n nhóm'),\r\n WardId: yup.number(),\r\n FullName: yup.string().required('Vui lòng nháºp tên nhóm').max(100, 'Tên nhóm quá dà i').nullable(),\r\n ShopName: yup.string().max(100, 'Tên shop quá dà i').nullable(),\r\n Phone: yup.string().required('Vui lòng nháºp số Ä‘iện thoại').max(20, 'Số Ä‘iện thoại quá dà i').nullable(),\r\n Email: yup.string().required('Vui lòng nháºp email').max(70, 'Email quá dà i').email('Email không đúng').nullable(),\r\n Address: yup.string().nullable(),\r\n StatusId: yup.number(),\r\n ShipFeeId: yup.number(),\r\n Note: yup.string().max(200, 'Ghi chú quá dà i').nullable(),\r\n GHTKToken: yup.string().max(500, 'Token quá dà i').nullable(),\r\n AvatarUrl: yup.string().max(2_000, 'ÄÆ°á»ng dẫn ảnh quá dà i').nullable()\r\n})\r\n\r\nconst ModalEdit = props => {\r\n const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [ProvinceId, setProvinceId] = useState(0)\r\n\r\n const [DistrictId, setDistrictId] = useState(0)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n size=\"lg\"\r\n onExited={() => {\r\n reset()\r\n // setAvatarUrl('')\r\n }}\r\n onShow={() => {\r\n let data = props.data\r\n let partner = data.Partner\r\n setProvinceId(partner.ProvinceId)\r\n setDistrictId(partner.DistrictId)\r\n setValue('AvatarUrl', partner.AvatarUrl)\r\n setValue('PartnerId', partner.PartnerId)\r\n setValue('FullName', partner.FullName)\r\n setValue('ShopName', partner.ShopName)\r\n setValue('Phone', partner.Phone)\r\n setValue('Email', partner.Email)\r\n setValue('GroupId', partner.GroupId)\r\n setValue('WardId', partner.WardId)\r\n setValue('Address', partner.Address)\r\n setValue('StatusId', partner.StatusId)\r\n setValue('Note', partner.Note)\r\n setValue('GHTKToken', partner.GHTKToken)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a cá»™ng tác viên</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"row row-cols-1 row-cols-lg-3\">\r\n <div className=\"col-sm-4 col-md-3\">\r\n <Controller\r\n control={control}\r\n name=\"AvatarUrl\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <UploadImg\r\n imgUrl={value}\r\n onCompleted={data => {\r\n onChange(data.Result.ImageUrl)\r\n }}\r\n />\r\n )}\r\n />\r\n </div>\r\n <div className=\"col-sm-8 col-md-9\">\r\n <div className=\"row\">\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Há» tên <span className=\"text-danger\">*</span></label>\r\n <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Há» tên\" />\r\n {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên shop</label>\r\n <input {...register('ShopName')} type=\"text\" className=\"form-control\" placeholder=\"Tên shop\" />\r\n {errors.ShopName && <div className=\"validation-message\">{errors.ShopName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Äiện thoại <span className=\"text-danger\">*</span></label>\r\n <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Äiện thoại\" />\r\n {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n <input {...register('Email')} type=\"text\" className=\"form-control\" placeholder=\"Email\" />\r\n {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Nhóm cá»™ng tác viên <span className=\"text-danger\">*</span></label>\r\n <select {...register('GroupId')} className=\"form-select\">\r\n <option value=\"0\">Nhóm cá»™ng tác viên</option>\r\n {\r\n props.partnerGroup.map(item => {\r\n return (\r\n <option key={item.GroupId} value={item.GroupId}>{item.GroupName}</option>\r\n )\r\n })\r\n }\r\n </select>\r\n {errors.GroupId && <div className=\"validation-message\">{errors.GroupId.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tỉnh/Tp</label>\r\n <select className=\"form-select\" value={ProvinceId} onChange={e => {\r\n let provinceId = e.target.value\r\n props.onProvinceChange(provinceId)\r\n setValue('WardId', 0)\r\n }}>\r\n <option value=\"0\">Chá»n Tỉnh/Tp</option>\r\n {\r\n props.province.map(item => {\r\n return (\r\n <option key={item.ProvinceId} value={item.ProvinceId}>{item.Prefix} {item.ProvinceName}</option>\r\n )\r\n })\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n <div className=\"col\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Quáºn/Huyện</label>\r\n <select className=\"form-select\" value={DistrictId} onChange={e => {\r\n let districtId = e.target.value\r\n props.onDistrictChange(districtId)\r\n setValue('WardId', 0)\r\n }}>\r\n <option value=\"0\">Chá»n Quáºn/Huyện</option>\r\n {\r\n props.district.map(item => {\r\n return (\r\n <option key={item.DistrictId} value={item.DistrictId}>{item.Prefix} {item.DistrictName}</option>\r\n )\r\n })\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n <div className=\"col\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Phưá»ng/Xã</label>\r\n <select {...register('WardId')} className=\"form-select\">\r\n <option value=\"0\">Chá»n Phưá»ng/Xã</option>\r\n {\r\n props.ward.map(item => {\r\n return (\r\n <option key={item.WardId} value={item.WardId}>{item.Prefix} {item.WardName}</option>\r\n )\r\n })\r\n }\r\n </select>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-8\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Äịa chỉ</label>\r\n <input {...register('Address')} type=\"text\" className=\"form-control\" placeholder=\"Äịa chỉ\" />\r\n {errors.Address && <div className=\"validation-message\">{errors.Address.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <select {...register('StatusId')} className=\"form-select\">\r\n <option value=\"1\">Hoạt động</option>\r\n <option value=\"2\">Tạm khóa</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div className=\"col-12\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">GHTK token</label>\r\n <input {...register('GHTKToken')} type=\"text\" className=\"form-control\" placeholder=\"GHTK token\" />\r\n {errors.GHTKToken && <div className=\"validation-message\">{errors.GHTKToken.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-12\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n data: PropTypes.object,\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n province: PropTypes.array,\r\n district: PropTypes.array,\r\n ward: PropTypes.array,\r\n partnerGroup: PropTypes.array,\r\n onProvinceChange: PropTypes.func,\r\n onDistrictChange: PropTypes.func\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n data: {},\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n province: [],\r\n district: [],\r\n ward: [],\r\n partnerGroup: [],\r\n onProvinceChange: () => { },\r\n onDistrictChange: () => { }\r\n}\r\n\r\nexport default ModalEdit","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n NewPassword: yup.string().required('Vui lòng nháºp máºt khẩu má»›i').max(70, 'Máºt khẩu má»›i quá dà i'),\r\n})\r\n\r\nexport default function ModalSetPwd(props) {\r\n const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n setValue(\"PartnerId\", props.partnerId)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Äặt lại máºt khẩu</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Máºt khẩu má»›i <span className=\"text-danger\">*</span></label>\r\n <input {...register('NewPassword')} type=\"password\" className=\"form-control\" placeholder=\"Máºt khẩu má»›i\" />\r\n {errors.NewPassword && <div className=\"validation-message\">{errors.NewPassword.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalSetPwd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n partnerId: PropTypes.number\r\n}\r\n\r\nModalSetPwd.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n partnerId: 0\r\n}","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst invalidValue = 'Giá trị không hợp lệ'\r\n\r\nconst schema = yup.object().shape({\r\n RechargeTypeId: yup.number().min(1, invalidValue).max(2, invalidValue),\r\n Amount: yup.number().min(1, invalidValue).max(2_000_000_000, invalidValue),\r\n Note: yup.string().max(100, 'Ghi chú quá dà i'),\r\n})\r\n\r\nfunction ModalRecharge(props) {\r\n const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [val, setVal] = useState(0)\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n setVal(0)\r\n }}\r\n onShow={() => {\r\n setValue(\"PartnerId\", props.partnerId)\r\n setValue(\"Amount\", 0)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Nạp tiá»n</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Loại</label>\r\n <select {...register('RechargeTypeId')} className=\"form-select\">\r\n <option value={2}>Cá»™ng tiá»n</option>\r\n <option value={1}>Trừ tiá»n</option>\r\n </select>\r\n {errors.RechargeTypeId && <div className=\"validation-message\">{errors.RechargeTypeId.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Số tiá»n <span className=\"text-danger\">*</span></label>\r\n <div className=\"input-group\">\r\n <NumberFormat\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator=\",\"\r\n allowNegative={false}\r\n defaultValue={0}\r\n onValueChange={(c) => {\r\n setValue('Amount', c.value)\r\n setVal(c.value)\r\n }}\r\n value={val}\r\n decimalScale={0}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n {errors.Amount && <div className=\"validation-message\">{errors.Amount.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalRecharge.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n partnerId: PropTypes.number\r\n}\r\n\r\nModalRecharge.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n partnerId: 0\r\n}\r\n\r\nexport default ModalRecharge\r\n\r\n","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { EmptyRow, FormatNumber, LoadingRow, Pagination } from '../../../../../components'\r\n\r\nfunction BalanceTable(props) {\r\n const { balanceHistories, pagination } = props\r\n\r\n function renderTable() {\r\n if (balanceHistories === null) return <LoadingRow colSpan={6} />\r\n else if (balanceHistories.length === 0) return <EmptyRow colSpan={6} />\r\n else return balanceHistories.map((item, index) => <tr key={item.PartnerBalanceHistoryId}>\r\n <td className=\"text-center\">\r\n <FormatNumber>\r\n {(props.pageItem * (props.pageIndex - 1)) + index + 1}\r\n </FormatNumber>\r\n </td>\r\n <td>\r\n {item.Detail}\r\n {renderObjectValue(item.ObjectValue)}\r\n </td>\r\n <td>{item.Note}</td>\r\n <td className={item.Amount >= 0 ? 'text-end text-primary' : 'text-end text-danger'}>\r\n <FormatNumber>\r\n {item.Amount}\r\n </FormatNumber>\r\n </td>\r\n <td>\r\n {renderType(item.Amount)}\r\n </td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n const renderObjectValue = (objectValue) => {\r\n if (objectValue !== '') return <span className=\"text-primary\"> #{objectValue}</span>\r\n else return ''\r\n }\r\n\r\n const renderType = (amount) => {\r\n if (amount >= 0) return <span className=\"badge bg-success min-w-50-px\">Cá»™ng</span>\r\n else return <span className=\"badge bg-warning min-w-50-px\">Trừ</span>\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Giao dịch</th>\r\n <th>Ghi chú</th>\r\n <th className='text-end'>Số tiá»n</th>\r\n <th>Loại</th>\r\n <th>Ngà y giao dịch</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n props.onPageChange(pIndex)\r\n }}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nBalanceTable.propTypes = {\r\n balanceHistories: PropTypes.array,\r\n pagination: PropTypes.object,\r\n onPageChange: PropTypes.func,\r\n pageItem: PropTypes.number,\r\n pageIndex: PropTypes.number,\r\n}\r\n\r\nBalanceTable.defaultProps = {\r\n balanceHistories: [],\r\n pagination: {},\r\n onPageChange: () => { },\r\n pageItem: 0,\r\n pageIndex: 0\r\n}\r\n\r\nexport default BalanceTable","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { EmptyRow, FormatNumber, LoadingRow, Pagination } from '../../../../../components'\r\n\r\nconst OrderTable = (props) => {\r\n const { orders, pagination } = props\r\n\r\n const renderTable = () => {\r\n if (orders === null) return <LoadingRow colSpan={7} />\r\n else if (orders.length === 0) return <EmptyRow colSpan={7} />\r\n else return orders.map(order => <tr key={order.OrderId}>\r\n <td>{order.OrderId}</td>\r\n <td>{order.CustomerName}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {order.Products.length}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {order.SumOutputPrice}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {order.SumPartnerPrice}\r\n </FormatNumber>\r\n <span> + </span>\r\n <span className=\"text-success\">\r\n <FormatNumber>\r\n {order.PartnerDropShipFee}\r\n </FormatNumber>\r\n </span>\r\n </td>\r\n <td>\r\n {renderStatus(order.OrderStatusId, order.OrderStatusName)}\r\n </td>\r\n <td>\r\n {order.CreatedDate}\r\n <small className=\"text-muted\"> {order.CreatedTime}</small>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n const renderStatus = (orderStatusId, orderStatusName) => {\r\n let className = ''\r\n if (orderStatusId !== 5) {\r\n className = orderStatusId === 1 ? 'badge bg-success min-w-50-px' : 'badge bg-danger min-w-50-px'\r\n }\r\n else {\r\n className = orderStatusId === 1 ? 'badge bg-success min-w-50-px' : 'badge bg-danger min-w-50-px'\r\n }\r\n return <span className={className}>{orderStatusName}</span>\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th>ID</th>\r\n <th>Ngưá»i nháºn</th>\r\n <th className='text-end'>Số lượng</th>\r\n <th className='text-end'>Tổng</th>\r\n <th className='text-end'>Thu CTV</th>\r\n <th>Trạng thái</th>\r\n <th>Ngà y</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n props.onPageChange(pIndex)\r\n }}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nOrderTable.propTypes = {\r\n orders: PropTypes.array,\r\n pagination: PropTypes.object,\r\n onPageChange: PropTypes.func,\r\n}\r\n\r\nOrderTable.defaultProps = {\r\n orders: [],\r\n pagination: {},\r\n onPageChange: () => { }\r\n}\r\n\r\nexport default OrderTable","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { LoadingRow, EmptyRow, ShopeeProductAvatar } from './../../../../../components'\r\n\r\nfunction ShopeeTable(props) {\r\n const { shops } = props\r\n\r\n function renderTable() {\r\n if (shops === null) return <LoadingRow colSpan={5} />\r\n else if (shops.length === 0) return <EmptyRow colSpan={5} />\r\n else return shops.map((item, index) => <tr key={item.PartnerShopId}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>\r\n <ShopeeProductAvatar\r\n url={item.Portrait}\r\n />\r\n {item.ShopName}\r\n </td>\r\n <td>{item.ShopId}</td>\r\n <td>{item.UserName}</td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tên shop</th>\r\n <th>ID shop</th>\r\n <th>Tà i khoản</th>\r\n <th>Ngà y tạo</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nShopeeTable.propTypes = {\r\n shops: PropTypes.array\r\n}\r\n\r\nShopeeTable.defaultProps = {\r\n shops: []\r\n}\r\n\r\nexport default ShopeeTable","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { DetailRow, FormatNumber } from './../../../../../components'\r\n\r\nfunction Detail(props) {\r\n const { detail } = props\r\n\r\n function renderDetail() {\r\n if (detail !== {}) {\r\n return (\r\n <Fragment>\r\n <DetailRow title=\"Há» tên\">{detail.FullName}</DetailRow>\r\n <DetailRow title=\"Email\">{detail.Email}</DetailRow>\r\n <DetailRow title=\"Phone\">{detail.Email}</DetailRow>\r\n <DetailRow title=\"Số dư\">\r\n <span className=\"text-primary\">\r\n <FormatNumber>\r\n {detail.Balance}\r\n </FormatNumber>\r\n </span>\r\n </DetailRow>\r\n <DetailRow title=\"Nhóm\"><span className={detail.GroupId === 0 ? 'text-danger' : ''}>{detail.GroupName}</span></DetailRow>\r\n <DetailRow title=\"Trạng thái\">{detail.StatusId === 1 ? <span className=\"text-primary\">Hoạt động</span> : <span className=\"text-danger\">Tạm khóa</span>}</DetailRow>\r\n <DetailRow title=\"Äịa chỉ\">{detail.Address}</DetailRow>\r\n <DetailRow title=\"Ngà y tạo\">{detail.CreatedDate}<small className=\"text-muted\"> {detail.CreatedTime}</small></DetailRow>\r\n <DetailRow title=\"Tên shop\">{detail.ShopName}</DetailRow>\r\n <DetailRow title=\"Ghi chú\">{detail.Note}</DetailRow>\r\n <DetailRow title=\"GHTK token\">{detail.GHTKToken}</DetailRow>\r\n <DetailRow title=\"Miá»…n phà đóng gói\"><span className='text-primary'>{detail.FreeShipQty}</span></DetailRow>\r\n <DetailRow className='col-sm-12 col-md-6 col-lg-6 col-xl-8' title=\"Mã giá»›i thiệu\"><span className='text-primary'>{detail.PartnerCode}</span></DetailRow>\r\n <DetailRow className='col-sm-12 col-md-6 col-lg-6 col-xl-4' title=\"Ngưá»i giá»›i thiệu\"><span className='text-primary'>{detail.RefFullName}</span></DetailRow>\r\n </Fragment>\r\n )\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"row\">\r\n {renderDetail()}\r\n </div>\r\n )\r\n}\r\n\r\nDetail.propTypes = {\r\n detail: PropTypes.object,\r\n}\r\n\r\nDetail.defaultProps = {\r\n detail: {}\r\n}\r\n\r\nexport default Detail","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { FormatNumber } from './../../../../../components'\r\nimport { IoExtensionPuzzleOutline } from 'react-icons/io5'\r\n\r\nfunction InfoBlock(props) {\r\n const { icon, value, title } = props\r\n\r\n return (\r\n <div className=\"card widget-flat mb-0\">\r\n <div className=\"card-body\">\r\n <div className=\"float-end\">\r\n <span className=\"widget-icon\">\r\n {icon}\r\n </span>\r\n </div>\r\n <h5 className=\"text-muted fw-normal mt-0\" title=\"Growth\">{title}</h5>\r\n <h3 className=\"mt-3 mb-3\">\r\n <FormatNumber>{value}</FormatNumber>\r\n </h3>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nInfoBlock.propTypes = {\r\n icon: PropTypes.element,\r\n value: PropTypes.number,\r\n title: PropTypes.string,\r\n}\r\n\r\nInfoBlock.defaultProps = {\r\n icon: <IoExtensionPuzzleOutline />,\r\n value: 0,\r\n title: 'Title'\r\n}\r\n\r\nexport default InfoBlock","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { EmptyRow, FormatNumber, LoadingRow, Pagination } from '../../../../../components'\r\nimport { IoEllipseSharp } from 'react-icons/io5'\r\n\r\nfunction FreeShipTable(props) {\r\n\r\n const { data, pagination, onPageChange, pageItem } = props\r\n\r\n const renderTable = () => {\r\n\r\n const { pageIndex } = pagination\r\n\r\n if (data === null) return <LoadingRow colSpan={6} />\r\n else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n else return data.map((item, index) => <tr key={item.FreeShipHistoryId}>\r\n <td className=\"text-primary\">\r\n <FormatNumber>\r\n {(pageItem * (pageIndex - 1)) + index + 1}\r\n </FormatNumber>\r\n </td>\r\n <td>\r\n {renderType(item.TypeId)}\r\n </td>\r\n <td className={item.Qty > -1 ? 'text-end text-primary' : 'text-end text-danger'}>\r\n <FormatNumber>\r\n {item.Qty}\r\n </FormatNumber>\r\n </td>\r\n <td>\r\n {item.FreeShipTitle}\r\n </td>\r\n <td>\r\n {item.OrderId !== null ? item.OrderId : ''}\r\n </td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className='text-muted'> {item.CreatedTime}</small>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n function renderType(typeId) {\r\n if (typeId === 1) return <><IoEllipseSharp className=\"text-info mt--3-px\" /> Admin cá»™ng</>\r\n else if (typeId === 2) return <><IoEllipseSharp className=\"text-primary mt--3-px\" /> Trừ khi đặt hà ng</>\r\n else return <><IoEllipseSharp className=\"text-warning mt--3-px\" /> Cá»™ng từ há»§y đơn hà ng</>\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Loại</th>\r\n <th className='text-end'>Số lượng</th>\r\n <th>Miá»…n phà váºn chuyển</th>\r\n <th>ID đơn hà ng</th>\r\n <th>Ngà y tạo</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n onPageChange(pagination.partnerId, pIndex)\r\n }}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nFreeShipTable.propTypes = {\r\n data: PropTypes.array,\r\n pagination: PropTypes.object,\r\n onPageChange: PropTypes.func,\r\n pageItem: PropTypes.number\r\n}\r\n\r\nFreeShipTable.defaultProps = {\r\n data: [],\r\n pagination: {},\r\n onPageChange: () => { },\r\n pageItem: 0\r\n}\r\n\r\nexport default FreeShipTable","import PropTypes from \"prop-types\";\r\nimport React from \"react\";\r\nimport Modal from \"react-bootstrap/Modal\";\r\nimport { CloseButton, EmptyRow } from \"./../../../../../components\";\r\n\r\nfunction ModalChildren(props) {\r\n const { partners } = props;\r\n\r\n function renderTable() {\r\n if (partners.length === 0) return <EmptyRow colSpan={5} />;\r\n else\r\n return partners.map((item, index) => (\r\n <tr key={index}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>{item.FullName}</td>\r\n <td>{item.Email}</td>\r\n <td>{item.Phone}</td>\r\n <td>{item.GroupName}</td>\r\n </tr>\r\n ));\r\n }\r\n\r\n return (\r\n <Modal\r\n show={props.isShow}\r\n onHide={props.onClose}\r\n backdrop=\"static\"\r\n size=\"xl\"\r\n onExited={() => {}}\r\n onShow={() => {}}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title>Cá»™ng tác viên đã giá»›i thiệu</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Há» tên</th>\r\n <th>Äiện thoại</th>\r\n <th>Email</th>\r\n <th>Nhóm</th>\r\n </tr>\r\n </thead>\r\n <tbody>{renderTable()}</tbody>\r\n </table>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </Modal>\r\n );\r\n}\r\n\r\nModalChildren.propTypes = {\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n partners: PropTypes.array,\r\n};\r\n\r\nModalChildren.defaultProps = {\r\n onClose: () => {},\r\n isShow: false,\r\n partners: [],\r\n};\r\n\r\nexport default ModalChildren;\r\n","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline, IoPeopleOutline, IoPersonAddOutline, IoPersonRemoveOutline, IoWalletOutline } from 'react-icons/io5'\r\nimport { IconButton, Notification, Pagination, AuthAdminView } from '../../../components'\r\nimport {\r\n Filter, InfoBlock, ModalAdd,\r\n ModalEdit, ModalRecharge, ModalSetPwd, Table,\r\n FreeShipTable, ModalChildren\r\n} from './components'\r\n\r\nconst freeShipPageItem = 5\r\n\r\nconst PartnerPage = () => {\r\n // State lưu danh sách CTV\r\n const [partner, setPartner] = useState(null);\r\n\r\n // State lưu danh sách Tỉnh/Tp\r\n const [province, setProvince] = useState([]);\r\n\r\n // State lưu danh sách Quáºn/Huyện\r\n const [district, setDistrict] = useState([]);\r\n\r\n // State lưu danh sách Phưá»ng/Xã\r\n const [ward, setWard] = useState([]);\r\n\r\n // State lưu danh sách nhóm CTV\r\n const [partnerGroup, setPartnerGroup] = useState([]);\r\n\r\n // State mở, đóng modal thêm CTV\r\n const [isShowModalPartnerAdd, setIsShowModalPartnerAdd] = useState(false);\r\n\r\n // State mở, đóng modal thêm CTV\r\n const [isShowModalPartnerEdit, setIsShowModalPartnerEdit] = useState(false);\r\n\r\n // State lưu thông tin cáºp nháºt CTV\r\n const [partnerEdit, setPartnerEdit] = useState({});\r\n\r\n // State đóng mở modal và PartnerId set lại máºt khẩu\r\n const [partnerSetPwd, setPartnerSetPwd] = useState({\r\n isShow: false,\r\n partnerId: 0\r\n })\r\n\r\n // State đóng mở modal và ParnerId nạp tiá»n\r\n const [partnerRecharge, setPartnerRecharge] = useState({\r\n isShow: false,\r\n partnerId: 0\r\n })\r\n\r\n const [info, setInfo] = useState({\r\n allPartner: 0,\r\n activePartner: 0,\r\n inActivePartner: 0,\r\n balance: 0\r\n })\r\n\r\n const [isShowModalChildren, setIsShowModalChildren] = useState(false)\r\n\r\n const [childrenPartners, setChildrenPartners] = useState([])\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Cá»™ng tác viên'\r\n\r\n loadInfo()\r\n\r\n loadProvince()\r\n loadPartnerGroup()\r\n }, [])\r\n\r\n const [filters, setFilters] = useState({\r\n keyword: '',\r\n groupId: 0,\r\n statusId: 0,\r\n pageItem: 10,\r\n pageIndex: 1\r\n })\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n const [partnerOrderPagination, setPartnerOrderPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n const [balanceHistoryPatination, setBalanceHistoryPatination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n const [freeShipPatination, setFreeShipPatination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1,\r\n partnerId: 0\r\n })\r\n\r\n useEffect(() => {\r\n let url = `/admin/partner/filter?keyword=${filters.keyword}&groupId=${filters.groupId}&statusId=${filters.statusId}&pageItem=10&pageIndex=${filters.pageIndex}`;\r\n axios.get(url).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPagination(newPagination)\r\n setPartner(data.Result.Data);\r\n }\r\n })\r\n }, [filters])\r\n\r\n const [partnerOrders, setPartnerOrders] = useState([])\r\n\r\n const [balanceHistories, setBalanceHistories] = useState([])\r\n\r\n const [partnerDetail, setPartnerDetail] = useState({})\r\n\r\n const [shopeeShops, setShopeeShops] = useState([])\r\n\r\n const [freeShips, setFreeShips] = useState([])\r\n\r\n // Load danh sách nhóm CTV\r\n const loadPartnerGroup = () => {\r\n const url = '/admin/partner-group/get-all';\r\n axios.get(url).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n setPartnerGroup(data.Result);\r\n }\r\n })\r\n }\r\n\r\n // Load danh sách Tỉnh/Tp\r\n const loadProvince = () => {\r\n const url = '/admin/province/get-all';\r\n axios.get(url).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n setProvince(data.Result);\r\n }\r\n });\r\n }\r\n\r\n // Load danh sách Quáºn/Huyện theo Tỉnh/Tp\r\n const loadDistrict = (provinceId) => {\r\n const url = `/admin/district/get-by-province?id=${provinceId}`;\r\n axios.get(url).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n setDistrict(data.Result);\r\n setWard([]);\r\n }\r\n })\r\n }\r\n\r\n //Load danh sách Phưá»ng/Xã theo Quáºn/Huyện\r\n const loadWard = (districtId) => {\r\n const url = `/admin/ward/get-by-district?id=${districtId}`;\r\n axios.get(url).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n setWard(data.Result);\r\n }\r\n })\r\n }\r\n\r\n //Thá»±c hiện mở hoặc đóng detail table\r\n const handleRowClick = item => {\r\n const partnerId = item.PartnerId\r\n let lst = [...partner];\r\n let newindex = lst.findIndex(n => n.PartnerId === item.PartnerId);\r\n let newItem = lst[newindex];\r\n let prevIndex = lst.findIndex(n => n.isSelected);\r\n if (prevIndex > -1) {\r\n let prev = lst[prevIndex];\r\n if (prev.PartnerId === newItem.PartnerId) {\r\n clearDetail()\r\n newItem.isSelected = false;\r\n }\r\n else {\r\n loadDetail(partnerId)\r\n prev.isSelected = false;\r\n newItem.isSelected = true;\r\n }\r\n }\r\n else {\r\n loadDetail(partnerId)\r\n newItem.isSelected = true;\r\n }\r\n setPartner(lst);\r\n }\r\n\r\n const loadDetail = (partnerId) => {\r\n loadPartnerDetail(partnerId)\r\n loadPartnerOrders(partnerId, 1)\r\n loadBalanceHistory(partnerId, 1)\r\n loadShopeeShop(partnerId)\r\n loadFreeShip(partnerId, 1)\r\n }\r\n\r\n const clearDetail = () => {\r\n setPartnerDetail({})\r\n setPartnerOrders([])\r\n setBalanceHistories([])\r\n setShopeeShops([])\r\n setFreeShips([])\r\n }\r\n\r\n // Sá»± kiện đóng hoặc mở chi tiết table\r\n function onOpenDetail(item) {\r\n handleRowClick(item);\r\n }\r\n\r\n const loadPartnerOrders = (partnerId, pageIndex) => {\r\n const url = `/admin/partner/order-filter?partnerId=${partnerId}&pageItem=5&pageIndex=${pageIndex}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPartnerOrderPagination(newPagination)\r\n setPartnerOrders(data.Result.Data)\r\n }\r\n })\r\n }\r\n\r\n const loadBalanceHistory = (partnerId, pageIndex) => {\r\n const url = `/admin/partner/balance-history?partnerId=${partnerId}&pageItem=5&pageIndex=${pageIndex}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setBalanceHistoryPatination(newPagination)\r\n setBalanceHistories(data.Result.Data)\r\n }\r\n })\r\n }\r\n\r\n const loadPartnerDetail = (partnerId) => {\r\n const url = `/admin/partner/detail?id=${partnerId}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setPartnerDetail(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadShopeeShop = (partnerId) => {\r\n const url = `/admin/partner/shopee-shops?partnerId=${partnerId}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setShopeeShops(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadFreeShip = (partnerId, pageIndex) => {\r\n const url = `/admin/partner/freeship-histories?partnerId=${partnerId}&pageItem=${freeShipPageItem}&pageIndex=${pageIndex}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex,\r\n partnerId: partnerId\r\n }\r\n setFreeShipPatination(newPagination)\r\n setFreeShips(data.Result.Data)\r\n }\r\n })\r\n }\r\n\r\n const onEdit = item => {\r\n const url = `/admin/partner/get-by-id?id=${item.PartnerId}`\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setProvince(data.Result.Provinces)\r\n setDistrict(data.Result.Districts)\r\n setWard(data.Result.Wards)\r\n setPartnerEdit(data.Result)\r\n setIsShowModalPartnerEdit(true)\r\n }\r\n })\r\n }\r\n\r\n const onRecharge = item => {\r\n setPartnerRecharge({\r\n isShow: true,\r\n partnerId: item.PartnerId\r\n })\r\n }\r\n\r\n const onSetPassword = item => {\r\n setPartnerSetPwd({\r\n isShow: true,\r\n partnerId: item.PartnerId\r\n })\r\n }\r\n\r\n const onLogOut = item => {\r\n Notification.confirmHtml('Bạn có chắc muốn đăng xuất cá»™ng tác viên', item.FullName, () => {\r\n const url = `/admin/partner/logout?id=${item.PartnerId}`\r\n axios.post(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n Notification.success('Äăng xuất cá»™ng tác viên thà nh công')\r\n }\r\n })\r\n })\r\n }\r\n\r\n const onDelete = item => {\r\n Notification.confirmHtml('Bạn có chắc muốn xóa cá»™ng tác viên', item.FullName, () => {\r\n const url = `/admin/partner/delete?id=${item.PartnerId}`\r\n axios.post(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n reloadPartner()\r\n loadInfo()\r\n Notification.success('Xóa cá»™ng tác viên thà nh công')\r\n }\r\n })\r\n })\r\n }\r\n\r\n // Sá»± kiện đóng chi tiết table\r\n const onCloseDetail = (item) => {\r\n handleRowClick(item);\r\n }\r\n\r\n const reloadPartner = () => {\r\n setFilters({\r\n ...filters,\r\n pageIndex: 1\r\n })\r\n }\r\n\r\n const loadInfo = () => {\r\n const url = '/admin/partner/info'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setInfo({\r\n allPartner: data.Result.AllPartner,\r\n activePartner: data.Result.ActivePartner,\r\n inActivePartner: data.Result.InActivePartner,\r\n balance: data.Result.Balance\r\n })\r\n }\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n {/* Bá»™ lá»c CTV */}\r\n <Filter\r\n onSearch={params => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n partnerGroup={partnerGroup}\r\n />\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <AuthAdminView right=\"partner_add\">\r\n <IconButton\r\n className=\"mb-2\"\r\n text=\"Thêm má»›i\"\r\n icon={<IoAddCircleOutline />}\r\n onClick={() => {\r\n setIsShowModalPartnerAdd(true)\r\n }} />\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n\r\n <Table\r\n data={partner}\r\n onOpenDetail={onOpenDetail}\r\n onEdit={onEdit}\r\n onRecharge={onRecharge}\r\n onSetPassword={onSetPassword}\r\n onLogOut={onLogOut}\r\n onDelete={onDelete}\r\n onCloseDetail={onCloseDetail}\r\n onShowChildren={(partner) => {\r\n const url = `/admin/partner/get-children?partnerId=${partner.PartnerId}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setChildrenPartners(data.Result)\r\n setIsShowModalChildren(true)\r\n }\r\n })\r\n }}\r\n\r\n detail={partnerDetail}\r\n\r\n partnerOrders={partnerOrders}\r\n partnerOrderPagination={partnerOrderPagination}\r\n onPartnerOrderPageChange={(partnerId, pIndex) => {\r\n const newPagination = { ...partnerOrderPagination, pageIndex: pIndex }\r\n setPartnerOrderPagination(newPagination)\r\n loadPartnerOrders(partnerId, pIndex)\r\n }}\r\n\r\n balanceHistories={balanceHistories}\r\n balanceHistoryPagination={balanceHistoryPatination}\r\n onBalanceHistoryPageChange={(partnerId, pIndex) => {\r\n const newPagination = { ...balanceHistoryPatination, pageIndex: pIndex }\r\n setBalanceHistoryPatination(newPagination)\r\n loadBalanceHistory(partnerId, pIndex)\r\n }}\r\n balancePageItem={5}\r\n balancePageIndex={balanceHistoryPatination.pageIndex}\r\n\r\n shopeeShops={shopeeShops}\r\n >\r\n <FreeShipTable\r\n data={freeShips}\r\n pagination={freeShipPatination}\r\n onPageChange={(partnerId, pIndex) => {\r\n const newPagination = { ...freeShipPatination, pageIndex: pIndex }\r\n setFreeShipPatination(newPagination)\r\n loadFreeShip(partnerId, pIndex)\r\n }}\r\n pageItem={freeShipPageItem}\r\n />\r\n </Table>\r\n\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex }\r\n setPagination(newPagination)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"mb-3\">\r\n <div className=\"row row-cols-1 row-cols-sm-2 row-cols-md-4 gy-2\">\r\n <div className=\"col\">\r\n <InfoBlock icon={<IoPeopleOutline />} value={info.allPartner} title=\"Số cá»™ng tác viên\" />\r\n </div>\r\n <div className=\"col\">\r\n <InfoBlock icon={<IoPersonAddOutline />} value={info.activePartner} title=\"Cá»™ng tác viên hoạt động\" />\r\n </div>\r\n <div className=\"col\">\r\n <InfoBlock icon={<IoPersonRemoveOutline />} value={info.inActivePartner} title=\"Cá»™ng tác viên tạm khóa\" />\r\n </div>\r\n <div className=\"col\">\r\n <InfoBlock icon={<IoWalletOutline />} value={info.balance} title=\"Tổng số dư\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Modal thêm má»›i CTV */}\r\n <ModalAdd\r\n onClose={() => {\r\n setIsShowModalPartnerAdd(false);\r\n }}\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = 'admin/partner/create';\r\n let reqInfo = formData;\r\n reqInfo.ShipFeeId = 1;\r\n axios.post(url, reqInfo).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n reloadPartner()\r\n loadInfo()\r\n setIsShowModalPartnerAdd(false);\r\n Notification.success('Thêm má»›i cá»™ng tác viên thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n isShow={isShowModalPartnerAdd}\r\n province={province}\r\n district={district}\r\n ward={ward}\r\n partnerGroup={partnerGroup}\r\n onProvinceChange={loadDistrict}\r\n onDistrictChange={loadWard} />\r\n\r\n {/* Modal chỉnh sá»a CTV */}\r\n <ModalEdit\r\n data={partnerEdit}\r\n onClose={() => {\r\n setIsShowModalPartnerEdit(false);\r\n }}\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = 'admin/partner/update';\r\n let reqInfo = formData;\r\n reqInfo.ShipFeeId = 1;\r\n axios.post(url, reqInfo).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n reloadPartner()\r\n loadInfo()\r\n setIsShowModalPartnerEdit(false)\r\n setPartnerEdit({})\r\n Notification.success('Chỉnh sá»a cá»™ng tác viên thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n isShow={isShowModalPartnerEdit}\r\n province={province}\r\n district={district}\r\n ward={ward}\r\n partnerGroup={partnerGroup}\r\n onProvinceChange={loadDistrict}\r\n onDistrictChange={loadWard} />\r\n\r\n {/* Modal set lại máºt khẩu */}\r\n <ModalSetPwd\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/partner/set-password'\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setPartnerSetPwd({\r\n isShow: false,\r\n partnerId: 0\r\n })\r\n Notification.success('Äặt lại máºt khẩu thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setPartnerSetPwd({\r\n isShow: false,\r\n partnerId: 0\r\n })\r\n }}\r\n isShow={partnerSetPwd.isShow}\r\n partnerId={partnerSetPwd.partnerId}\r\n />\r\n\r\n {/* Modal nạp tiá»n */}\r\n <ModalRecharge\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/partner/recharge'\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n const newPartnerDetail = { ...partnerDetail }\r\n if (formData.RechargeTypeId === 2) {\r\n newPartnerDetail.Balance += formData.Amount\r\n }\r\n else {\r\n newPartnerDetail.Balance -= formData.Amount\r\n }\r\n setPartnerDetail(newPartnerDetail)\r\n\r\n loadInfo()\r\n loadBalanceHistory(formData.PartnerId, 1)\r\n setPartnerRecharge({\r\n isShow: false,\r\n partnerId: 0\r\n })\r\n Notification.success('Nạp tiá»n thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setPartnerRecharge({\r\n isShow: false,\r\n partnerId: 0\r\n })\r\n }}\r\n isShow={partnerRecharge.isShow}\r\n partnerId={partnerRecharge.partnerId}\r\n />\r\n\r\n <ModalChildren\r\n isShow={isShowModalChildren}\r\n onClose={() => {\r\n setIsShowModalChildren(false)\r\n setChildrenPartners([])\r\n }}\r\n partners={childrenPartners}\r\n />\r\n </Fragment>\r\n\r\n );\r\n};\r\n\r\nexport default PartnerPage;","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { LoadingRow, EmptyRow, FormatNumber, AvatarRow } from './../../../../../components'\r\n\r\nfunction BestSellingProduct(props) {\r\n const { products } = props\r\n\r\n function renderTable() {\r\n if (products === null) return <LoadingRow colSpan={5} />\r\n else if (products.length === 0) return <EmptyRow colSpan={5} />\r\n else return products.map(item => <tr key={item.ProductId}>\r\n <td style={{ width: '60.38px' }}>\r\n <AvatarRow url={item.AvatarUrl} me={0} />\r\n </td>\r\n <td>\r\n <p className=\"mb-1\">{item.ProductName}</p>\r\n <p className=\"text-muted mb-0\">{item.CategoryName}</p>\r\n </td>\r\n <td className=\"text-end\">\r\n <p className=\"mb-1 text-primary\"><FormatNumber>{item.OutputPrice}</FormatNumber></p>\r\n <p className=\"text-muted mb-0\">Giá đỠxuất</p>\r\n </td>\r\n <td className=\"text-end\">\r\n <p className=\"mb-1 text-primary\"><FormatNumber>{item.Quantity}</FormatNumber></p>\r\n <p className=\"text-muted mb-0\">Số lượng</p>\r\n </td>\r\n <td className=\"text-end\">\r\n <p className=\"mb-1 text-primary\"><FormatNumber>{item.OutputPrice * item.Quantity}</FormatNumber></p>\r\n <p className=\"text-muted mb-0\">Thà nh tiá»n</p>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\" style={{ paddingBottom: '1.7rem' }}>\r\n <h5 className=\"card-title mb-2\">SẢN PHẨM BÃN CHẠY TRONG THÃNG</h5>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nBestSellingProduct.propTypes = {\r\n products: PropTypes.array,\r\n}\r\n\r\nBestSellingProduct.defaultProps = {\r\n products: []\r\n}\r\n\r\nexport default BestSellingProduct","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { IoExtensionPuzzleOutline, IoArrowUpOutline, IoArrowDownOutline } from 'react-icons/io5'\r\nimport { FormatNumber } from './../../../../../components'\r\n\r\nfunction OrderBlock(props) {\r\n const { icon, header, val, percent } = props\r\n\r\n function renderUpDown() {\r\n if (val < 0) return <IoArrowDownOutline className=\"mt--2-px\" />\r\n else return <IoArrowUpOutline className=\"mt--2-px\" />\r\n }\r\n\r\n return (\r\n <div className=\"card widget-flat\">\r\n <div className=\"card-body\">\r\n <div className=\"float-end\">\r\n <span className=\"widget-icon\">\r\n {icon}\r\n </span>\r\n </div>\r\n <h5 className=\"text-muted fw-normal mt-0\">{header}</h5>\r\n <h3 className=\"mt-3 mb-3\">\r\n <FormatNumber maxDigit={2}>\r\n {val}\r\n </FormatNumber>\r\n </h3>\r\n <p className=\"mb-0 text-muted\">\r\n <span className={val < 0 ? 'text-danger me-2' : 'text-success me-2'}>\r\n {renderUpDown()}\r\n <FormatNumber maxDigit={2}>{percent}</FormatNumber>\r\n %\r\n </span>\r\n <span className=\"text-nowrap\">So vá»›i hôm trước</span>\r\n </p>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nOrderBlock.propTypes = {\r\n icon: PropTypes.element,\r\n header: PropTypes.string,\r\n val: PropTypes.number,\r\n percent: PropTypes.number,\r\n}\r\n\r\nOrderBlock.defaultProps = {\r\n icon: <IoExtensionPuzzleOutline />,\r\n header: 'Title',\r\n val: 0,\r\n percent: 0\r\n}\r\n\r\nexport default OrderBlock","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport ReactApexChart from 'react-apexcharts'\r\nimport { IoSquare } from 'react-icons/io5'\r\nimport { FormatNumber } from './../../../../../components'\r\n\r\nfunction PartnerChart(props) {\r\n const { data, colors } = props\r\n\r\n function renderLabel() {\r\n return data.partnerGroups.map((item, index) => {\r\n return (\r\n <p key={index} className={data.partnerGroups.length - 1 === index ? 'mb-0' : ''}>\r\n <IoSquare className=\"me-1\" style={{ color: colors[index] }} />\r\n {item.PartnerGroupName}\r\n <span className=\"float-end\"><FormatNumber>{item.CountPartner}</FormatNumber></span>\r\n </p>\r\n )\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title mb-2\">Sá» CỘNG TÃC VIÊN</h5>\r\n <ReactApexChart options={data.options} series={data.series} type=\"donut\" />\r\n <div className=\"chart-widget-list\">\r\n {renderLabel()}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nPartnerChart.propTypes = {\r\n data: PropTypes.object,\r\n colors: PropTypes.array,\r\n}\r\n\r\nPartnerChart.defaultProps = {\r\n data: {},\r\n colors: []\r\n}\r\n\r\nexport default PartnerChart","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport ReactApexChart from 'react-apexcharts'\r\n\r\nfunction RevenueProfit(props) {\r\n const { data } = props\r\n\r\n const [series, setSeries] = useState(\r\n [{\r\n name: 'Doanh thu',\r\n data: []\r\n }]\r\n )\r\n\r\n const [options, setOptions] = useState(\r\n {\r\n chart: {\r\n height: 350,\r\n type: 'bar',\r\n toolbar: {\r\n show: false\r\n }\r\n },\r\n plotOptions: {\r\n bar: {\r\n borderRadius: 0,\r\n dataLabels: {\r\n position: 'top', // top, center, bottom\r\n },\r\n }\r\n },\r\n dataLabels: {\r\n enabled: true,\r\n formatter: function (val) {\r\n return val + \"%\";\r\n },\r\n offsetY: -20,\r\n style: {\r\n fontSize: '12px',\r\n colors: [\"#304758\"]\r\n }\r\n },\r\n xaxis: {\r\n categories: [],\r\n position: '',\r\n axisBorder: {\r\n show: false\r\n },\r\n axisTicks: {\r\n show: false\r\n },\r\n crosshairs: {\r\n fill: {\r\n type: 'gradient',\r\n gradient: {\r\n colorFrom: '#D8E3F0',\r\n colorTo: '#BED1E6',\r\n stops: [0, 100],\r\n opacityFrom: 0.4,\r\n opacityTo: 0.5,\r\n }\r\n }\r\n },\r\n tooltip: {\r\n enabled: false,\r\n }\r\n },\r\n yaxis: {\r\n axisBorder: {\r\n show: false\r\n },\r\n axisTicks: {\r\n show: false,\r\n },\r\n labels: {\r\n show: true,\r\n formatter: function (val) {\r\n return val.toLocaleString('vi-VN');\r\n }\r\n }\r\n },\r\n title: {\r\n text: 'Title',\r\n floating: true,\r\n offsetY: 330,\r\n align: 'center',\r\n style: {\r\n color: '#444'\r\n }\r\n }\r\n }\r\n )\r\n\r\n useEffect(() => {\r\n const valueList = data.map(item => {\r\n return item.Value\r\n })\r\n setSeries(\r\n [{\r\n name: 'Doanh thu',\r\n data: valueList\r\n }]\r\n )\r\n\r\n const dateList = data.map(item => {\r\n return item.Date\r\n })\r\n setOptions({\r\n ...options,\r\n xaxis: {\r\n ...options.xaxis,\r\n categories: dateList\r\n }\r\n })\r\n // eslint-disable-next-line\r\n }, [data])\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <ReactApexChart options={options} series={series} type=\"bar\" height={279} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nRevenueProfit.propTypes = {\r\n data: PropTypes.array,\r\n}\r\n\r\nRevenueProfit.defaultProps = {\r\n data: []\r\n}\r\n\r\nexport default RevenueProfit","import React, { useEffect, useState } from 'react'\r\nimport { OrderBlock, RevenueProfit, BestSellingProduct, PartnerChart } from './..'\r\nimport { IoCubeOutline, IoFileTrayOutline, IoReloadOutline } from 'react-icons/io5'\r\nimport { BiRun } from 'react-icons/bi'\r\nimport axios from 'axios'\r\n\r\nconst colors = [\"#727cf5\", \"#fa5c7c\", \"#0acf97\", \"#ffbc00\"]\r\n\r\nconst MainBlock = () => {\r\n const [newOrder, setNewOrder] = useState({\r\n value: 0,\r\n percent: 0\r\n })\r\n\r\n const [inProcessOrder, setInProcessOrder] = useState({\r\n value: 0,\r\n percent: 0\r\n })\r\n\r\n const [shippingOrder, setShippingOrder] = useState({\r\n value: 0,\r\n percent: 0\r\n })\r\n\r\n const [countProduct, setCountProduct] = useState({\r\n value: 0,\r\n percent: 0\r\n })\r\n\r\n const [revenueProfit, setRevenueProfit] = useState([])\r\n\r\n const [products, setProducts] = useState(null)\r\n\r\n const [partnerGroupChart, setPartnerGroupChart] = useState({\r\n series: [],\r\n options: {\r\n chart: {\r\n type: 'donut',\r\n },\r\n labels: [],\r\n legend: {\r\n show: !1\r\n },\r\n colors: colors,\r\n responsive: [{\r\n breakpoint: 480,\r\n options: {\r\n chart: {\r\n width: 200\r\n },\r\n legend: {\r\n position: 'bottom'\r\n }\r\n }\r\n }]\r\n },\r\n partnerGroups: []\r\n })\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Tổng quan'\r\n loadNewOrder()\r\n loadInProcessOrder()\r\n loadShippingOrder()\r\n loadProductCount()\r\n loadRevenueProfit()\r\n loadBestSellingProduct()\r\n loadPartnerGroup()\r\n }, [])\r\n\r\n function loadNewOrder() {\r\n const url = '/admin/dashboard/new-order'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setNewOrder({\r\n value: data.Result.Value,\r\n percent: data.Result.Percent\r\n })\r\n }\r\n })\r\n }\r\n\r\n function loadInProcessOrder() {\r\n const url = '/admin/dashboard/in-process-order'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setInProcessOrder({\r\n value: data.Result.Value,\r\n percent: data.Result.Percent\r\n })\r\n }\r\n })\r\n }\r\n\r\n function loadShippingOrder() {\r\n const url = '/admin/dashboard/shipping-order'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setShippingOrder({\r\n value: data.Result.Value,\r\n percent: data.Result.Percent\r\n })\r\n }\r\n })\r\n }\r\n\r\n function loadProductCount() {\r\n const url = '/admin/dashboard/count-product'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setCountProduct({\r\n value: data.Result.Value,\r\n percent: data.Result.Percent\r\n })\r\n }\r\n })\r\n }\r\n\r\n function loadRevenueProfit() {\r\n const url = `/admin/dashboard/total-revenue`\r\n const request = axios.get(url)\r\n request.then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setRevenueProfit(data.Result)\r\n }\r\n })\r\n }\r\n\r\n function loadBestSellingProduct() {\r\n const url = `/admin/dashboard/best-selling`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setProducts(data.Result)\r\n }\r\n })\r\n }\r\n\r\n function loadPartnerGroup() {\r\n const url = `/admin/dashboard/partner-group`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const series = data.Result.map(item => item.CountPartner)\r\n const labels = data.Result.map(item => item.PartnerGroupName)\r\n setPartnerGroupChart({\r\n series: series,\r\n options: {\r\n chart: {\r\n type: 'donut',\r\n },\r\n labels: labels,\r\n legend: {\r\n show: !1\r\n },\r\n colors: colors,\r\n responsive: [{\r\n breakpoint: 480,\r\n options: {\r\n chart: {\r\n width: 200\r\n },\r\n legend: {\r\n position: 'bottom'\r\n }\r\n }\r\n }]\r\n },\r\n partnerGroups: data.Result\r\n })\r\n }\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"row\">\r\n <div className=\"col-xl-5 col-lg-6\">\r\n <div className=\"row\">\r\n <div className=\"col-lg-6\">\r\n <OrderBlock\r\n icon={<IoFileTrayOutline />}\r\n header=\"ÄÆ¡n tạo má»›i\"\r\n val={newOrder.value}\r\n percent={newOrder.percent}\r\n />\r\n </div>\r\n <div className=\"col-lg-6\">\r\n <OrderBlock\r\n icon={<IoReloadOutline />}\r\n header=\"Äang xá» lý\"\r\n val={inProcessOrder.value}\r\n percent={inProcessOrder.percent}\r\n />\r\n </div>\r\n <div className=\"col-lg-6\">\r\n <OrderBlock\r\n icon={<BiRun />}\r\n header=\"Äã gá»i váºn chuyển\"\r\n val={shippingOrder.value}\r\n percent={shippingOrder.percent}\r\n />\r\n </div>\r\n <div className=\"col-lg-6\">\r\n <OrderBlock\r\n icon={<IoCubeOutline />}\r\n header=\"Số lượng sản phẩm\"\r\n val={countProduct.value}\r\n percent={countProduct.percent}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-xl-7 col-lg-6\">\r\n <RevenueProfit\r\n data={revenueProfit}\r\n />\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-9\">\r\n <BestSellingProduct\r\n products={products}\r\n />\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-3\">\r\n <PartnerChart\r\n data={partnerGroupChart}\r\n colors={colors}\r\n />\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default MainBlock","import React from 'react'\r\n\r\nfunction Welcome(props) {\r\n return (\r\n <div className=\"row justify-content-center\">\r\n <div className=\"col-lg-4\">\r\n <div className=\"text-center mt-5\">\r\n <img src=\"/assets/images/file-searching.svg\" height=\"90\" alt=\"\" />\r\n <h4 className=\"text-uppercase text-danger mt-3\">Chà o mừng</h4>\r\n <p className=\"text-muted mt-3\">Bạn đến vá»›i hệ thống quản lý đơn hà ng Rado Vietnam</p>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Welcome","import React, { useContext } from 'react'\r\nimport { MainBlock, Welcome } from './components'\r\nimport { AppContext } from './../../../components'\r\n\r\nconst DashboardPage = () => {\r\n const appSettings = useContext(AppContext)\r\n\r\n return (\r\n <>\r\n {\r\n appSettings.rights.some(n => n === 'other_dashboard') ? <MainBlock /> : <Welcome />\r\n }\r\n </>\r\n )\r\n}\r\n\r\nexport default DashboardPage","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, LoadingRow } from './../../../../../components'\r\n\r\nconst TableAttr = props => {\r\n const onEdit = (item, e) => {\r\n e.stopPropagation()\r\n props.onEdit(item);\r\n }\r\n\r\n const onDelete = (item, e) => {\r\n e.stopPropagation()\r\n props.onDelete(item)\r\n }\r\n\r\n const renderTable = () => {\r\n let data = props.data;\r\n if (data === null) return <LoadingRow colSpan={3} />\r\n else if (data.length === 0) return <EmptyRow colSpan={3} />\r\n else return data.map((item, index) => <tr key={item.AttributeId} onClick={() => props.onSelect(item)} className={item.isSelected ? 'table-primary' : ''}>\r\n <td className=\"text-center\">{(index + 1)}</td>\r\n <td>{item.AttributeName}</td>\r\n <td>\r\n <ActionRow>\r\n <ActionItem right=\"attribute_edit\" onClick={e => onEdit(item, e)} icon={<FiEdit />} title='Chỉnh sá»a' />\r\n <ActionItem right=\"attribute_delete\" onClick={e => onDelete(item, e)} icon={<IoTrashOutline />} title='Xóa' className=\"text-danger\" />\r\n </ActionRow>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-point mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tên thuá»™c tÃnh</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTableAttr.propTypes = {\r\n data: PropTypes.array,\r\n onEdit: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n onSelect: PropTypes.func\r\n}\r\n\r\nTableAttr.defaultProps = {\r\n data: null,\r\n onEdit: () => { },\r\n onDelete: () => { },\r\n onSelect: () => { }\r\n}\r\n\r\nexport default TableAttr","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, FormatNumber, LoadingRow } from '../../../../../components'\r\n\r\nconst TableAttrChild = props => {\r\n const renderTable = () => {\r\n let data = props.data\r\n if (data === null) return <LoadingRow colSpan={5} />\r\n else if (data.length === 0) return <EmptyRow colSpan={5} />\r\n else return data.map((item, index) => <tr key={item.ChildrenAttributeId}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>{item.ChildrenAttributeName}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.TotalUsing}\r\n </FormatNumber>\r\n </td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n </td>\r\n <td>\r\n <ActionRow>\r\n <ActionItem right=\"attribute_edit_child\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sá»a' />\r\n <ActionItem right=\"attribute_delete_child\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className=\"text-danger\" />\r\n </ActionRow>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Giá trị</th>\r\n <th className='text-end'>Sá» dụng</th>\r\n <th>Ngà y tạo</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTableAttrChild.propTypes = {\r\n onEdit: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n data: PropTypes.array\r\n}\r\n\r\nTableAttrChild.defaultProps = {\r\n onEdit: () => { },\r\n onDelete: () => { },\r\n data: null\r\n}\r\n\r\nexport default TableAttrChild","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { yupResolver } from '@hookform/resolvers/yup'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Modal from 'react-bootstrap/Modal'\r\n\r\nconst schema = yup.object().shape({\r\n AttributeName: yup.string().required('Vui lòng nháºp tên thuá»™c tÃnh').max(50, 'Tên thuá»™c tÃnh quá dà i')\r\n})\r\n\r\nconst ModalAddAttr = props => {\r\n const { register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i thuá»™c tÃnh</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Tên thuá»™c tÃnh <span className=\"text-danger\">*</span></label>\r\n <input {...register('AttributeName')} type=\"text\" className=\"form-control\" placeholder=\"Tên thuá»™c tÃnh\" />\r\n {errors.AttributeName && <div className=\"validation-message\">{errors.AttributeName.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAddAttr.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool\r\n}\r\n\r\nModalAddAttr.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false\r\n}\r\n\r\nexport default ModalAddAttr","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { yupResolver } from '@hookform/resolvers/yup'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Modal from 'react-bootstrap/Modal'\r\n\r\nconst schema = yup.object().shape({\r\n ChildrenAttributeName: yup.string().required('Vui lòng nháºp tên thuá»™c tÃnh').max(50, 'Tên giá trị quá dà i')\r\n})\r\n\r\nconst ModalAddAttrChild = props => {\r\n const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n setValue(\"AttributeId\", props.attrId)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i giá trị thuá»™c tÃnh</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Giá trị thuá»™c tÃnh <span className=\"text-danger\">*</span></label>\r\n <input {...register('ChildrenAttributeName')} type=\"text\" className=\"form-control\" placeholder=\"Giá trị thuá»™c tÃnh\" />\r\n {errors.ChildrenAttributeName && <div className=\"validation-message\">{errors.ChildrenAttributeName.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAddAttrChild.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n attrId: PropTypes.number\r\n}\r\n\r\nModalAddAttrChild.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n attrId: 0\r\n}\r\n\r\nexport default ModalAddAttrChild","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { yupResolver } from '@hookform/resolvers/yup'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Modal from 'react-bootstrap/Modal'\r\n\r\nconst schema = yup.object().shape({\r\n AttributeName: yup.string().required('Vui lòng nháºp tên thuá»™c tÃnh').max(50, 'Tên thuá»™c tÃnh quá dà i')\r\n})\r\n\r\nconst ModalEditAttr = props => {\r\n const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n let data = props.data\r\n setValue(\"AttributeId\", data.AttributeId)\r\n setValue(\"AttributeName\", data.AttributeName)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a thuá»™c tÃnh</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Tên thuá»™c tÃnh <span className=\"text-danger\">*</span></label>\r\n <input {...register('AttributeName')} type=\"text\" className=\"form-control\" placeholder=\"Tên thuá»™c tÃnh\" />\r\n {errors.AttributeName && <div className=\"validation-message\">{errors.AttributeName.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEditAttr.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n data: PropTypes.object\r\n}\r\n\r\nModalEditAttr.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n data: {}\r\n}\r\n\r\nexport default ModalEditAttr","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { yupResolver } from '@hookform/resolvers/yup'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Modal from 'react-bootstrap/Modal'\r\n\r\nconst schema = yup.object().shape({\r\n ChildrenAttributeName: yup.string().required('Vui lòng nháºp tên thuá»™c tÃnh').max(50, 'Tên giá trị quá dà i')\r\n})\r\n\r\nconst ModalEditAttrChild = props => {\r\n const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n setValue(\"ChildrenAttributeId\", props.data.ChildrenAttributeId)\r\n setValue(\"ChildrenAttributeName\", props.data.ChildrenAttributeName)\r\n setValue(\"AttributeId\", props.data.AttributeId)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a giá trị thuá»™c tÃnh</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Giá trị thuá»™c tÃnh <span className=\"text-danger\">*</span></label>\r\n <input {...register('ChildrenAttributeName')} type=\"text\" className=\"form-control\" placeholder=\"Giá trị thuá»™c tÃnh\" />\r\n {errors.ChildrenAttributeName && <div className=\"validation-message\">{errors.ChildrenAttributeName.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEditAttrChild.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n data: PropTypes.object\r\n}\r\n\r\nModalEditAttrChild.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n data: {}\r\n}\r\n\r\nexport default ModalEditAttrChild","import React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { AuthAdminView, IconButton, Notification } from '../../../components'\r\nimport { AttributeService, ChildrenAttributeService } from './../../../services/admin'\r\nimport { ModalAddAttr, ModalAddAttrChild, ModalEditAttr, ModalEditAttrChild, TableAttr, TableAttrChild } from './components'\r\n\r\nconst AttributePage = () => {\r\n const [attribute, setAttribute] = useState(null)\r\n\r\n const [childrenAttribute, setChildrenAttribute] = useState(null)\r\n\r\n const [isShowModalAttrAdd, setIsShowModalAttrAdd] = useState(false)\r\n\r\n const [isShowModalAttrEdit, setIsShowModalAttrEdit] = useState(false)\r\n\r\n const [isShowModalChildAttrAdd, setIsShowModalChildAttrAdd] = useState(false)\r\n\r\n const [isShowModalChildAttrEdit, setIsShowModalChildAttrEdit] = useState(false)\r\n\r\n const [attrEditInfo, setAttrEditInfo] = useState({})\r\n\r\n const [attributeId, setAttributeId] = useState(0)\r\n\r\n const [childAttrEditInfo, setChildAttrEditInfo] = useState({})\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Thuá»™c tÃnh'\r\n loadAttribute()\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (attribute !== null) {\r\n if (attribute.length !== 0) {\r\n let index = attribute.findIndex(obj => obj.isSelected)\r\n let item = attribute[index];\r\n loadChildrenAttribute(item.AttributeId)\r\n }\r\n }\r\n }, [attribute])\r\n\r\n const loadAttribute = () => {\r\n AttributeService.getAll().then(({ data }) => {\r\n if (data.IsSuccess) {\r\n if (data.Result.length !== 0) {\r\n let firstAttribute = data.Result[0]\r\n let firstAttributeId = firstAttribute.AttributeId\r\n let lst = [...data.Result]\r\n let index = lst.findIndex(obj => obj.AttributeId === firstAttributeId)\r\n lst[index].isSelected = true\r\n setAttribute(lst)\r\n }\r\n else {\r\n setAttribute(data.Result)\r\n setChildrenAttribute([])\r\n }\r\n }\r\n })\r\n }\r\n\r\n const loadChildrenAttribute = (attributeId) => {\r\n ChildrenAttributeService.getByAttribute(attributeId).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setChildrenAttribute(data.Result)\r\n }\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div className=\"row\">\r\n <div className=\"col-xl-4 col-xxl-3\">\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title mb-0\">Thuá»™c tÃnh</h5>\r\n {/* Table thuá»™c tÃnh cha */}\r\n <TableAttr\r\n onSelect={item => {\r\n let lst = [...attribute]\r\n let prevIndex = lst.findIndex(obj => obj.isSelected)\r\n let nextIndex = lst.findIndex(obj => obj.AttributeId === item.AttributeId)\r\n if (prevIndex !== nextIndex) {\r\n if (prevIndex > -1) {\r\n lst[prevIndex].isSelected = false\r\n }\r\n lst[nextIndex].isSelected = true\r\n loadChildrenAttribute(item.AttributeId)\r\n }\r\n\r\n }}\r\n onEdit={item => {\r\n AttributeService.getById(item.AttributeId).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setAttrEditInfo(data.Result)\r\n setIsShowModalAttrEdit(true)\r\n }\r\n })\r\n }}\r\n onDelete={item => {\r\n Notification.confirmHtml('Bạn có chắc muốn xóa thuá»™c tÃnh', item.AttributeName, () => {\r\n AttributeService.delete(item.AttributeId).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n loadAttribute()\r\n Notification.success('Xóa thuá»™c tÃnh thà nh công')\r\n }\r\n })\r\n })\r\n }}\r\n data={attribute} />\r\n <div className=\"mt-2\">\r\n {/* Button thêm má»›i thuá»™c tÃnh cha */}\r\n <AuthAdminView right=\"attribute_add\">\r\n <IconButton\r\n icon={<IoAddCircleOutline />}\r\n text=\"Thêm má»›i\"\r\n onClick={() => {\r\n setIsShowModalAttrAdd(true)\r\n }} />\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-xl-8 col-xxl-9\">\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title mb-0\">Giá trị thuá»™c tÃnh {isShowModalChildAttrAdd}</h5>\r\n {/* Table thuá»™c tÃnh con */}\r\n <TableAttrChild\r\n onEdit={item => {\r\n ChildrenAttributeService.getByAttribute(item.ChildrenAttributeId).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setChildAttrEditInfo(data.Result)\r\n setIsShowModalChildAttrEdit(true)\r\n }\r\n })\r\n }}\r\n onDelete={item => {\r\n Notification.confirmHtml('Bạn có chắc muốn xóa giá trị thuá»™c tÃnh', item.ChildrenAttributeName, () => {\r\n ChildrenAttributeService.delete(item.ChildrenAttributeId).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n loadChildrenAttribute(item.AttributeId)\r\n Notification.success('Xóa giá trị thuá»™c tÃnh thà nh công')\r\n }\r\n })\r\n })\r\n }}\r\n data={childrenAttribute}\r\n />\r\n <div className=\"mt-2\">\r\n {/* Button thêm má»›i thuá»™c tÃnh con */}\r\n <AuthAdminView right=\"attribute_add_child\">\r\n <IconButton\r\n icon={<IoAddCircleOutline />}\r\n text=\"Thêm má»›i\"\r\n onClick={() => {\r\n let selectedAttrIndex = attribute.findIndex(obj => obj.isSelected)\r\n if (selectedAttrIndex > -1) {\r\n let attrId = attribute[selectedAttrIndex].AttributeId\r\n setAttributeId(attrId)\r\n }\r\n setIsShowModalChildAttrAdd(true)\r\n }} />\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Modal thêm má»›i thuá»™c tÃnh cha */}\r\n <ModalAddAttr\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n AttributeService.create(formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n loadAttribute()\r\n setIsShowModalAttrAdd(false)\r\n Notification.success('Thêm má»›i thuá»™c tÃnh thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalAttrAdd(false)\r\n }}\r\n isShow={isShowModalAttrAdd}\r\n />\r\n\r\n {/* Modal chỉnh sá»a thuá»™c tÃnh cha */}\r\n <ModalEditAttr\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n AttributeService.update(formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n loadAttribute()\r\n setIsShowModalAttrEdit(false)\r\n Notification.success('Chỉnh sá»a thuá»™c tÃnh thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalAttrEdit(false)\r\n }}\r\n isShow={isShowModalAttrEdit}\r\n data={attrEditInfo}\r\n />\r\n\r\n {/* Modal thêm má»›i thuá»™c tÃnh con */}\r\n <ModalAddAttrChild\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n ChildrenAttributeService.create(formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n loadChildrenAttribute(formData.AttributeId)\r\n setIsShowModalChildAttrAdd(false)\r\n setAttrEditInfo({})\r\n Notification.success('Thêm má»›i giá trị thuá»™c tÃnh thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalChildAttrAdd(false)\r\n setAttrEditInfo({})\r\n }}\r\n isShow={isShowModalChildAttrAdd}\r\n attrId={attributeId}\r\n />\r\n\r\n {/* Modal chỉnh sá»a thuá»™c tÃnh con */}\r\n <ModalEditAttrChild\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n ChildrenAttributeService.update(formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n loadChildrenAttribute(formData.AttributeId)\r\n setIsShowModalChildAttrEdit(false)\r\n setChildAttrEditInfo({})\r\n Notification.success('Chỉnh sá»a giá trị thuá»™c tÃnh thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setChildAttrEditInfo({})\r\n setIsShowModalChildAttrEdit(false)\r\n }}\r\n isShow={isShowModalChildAttrEdit}\r\n data={childAttrEditInfo}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default AttributePage","import React, { useEffect, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport DatePicker from 'react-datepicker'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\nimport Select from 'react-select'\r\nimport AsyncSelect from 'react-select/async'\r\nimport axios from 'axios'\r\nimport { debounce } from 'lodash'\r\n\r\nconst filters = {\r\n orderId: '',\r\n partnerId: 0,\r\n wayBillCode: '',\r\n fromDate: '',\r\n toDate: '',\r\n statusId: 0,\r\n orderFromId: 0\r\n}\r\n\r\nconst loadOptions = (inputValue, callback) => {\r\n const url = `/admin/partner/dropdown-filter?keyword=${inputValue}&pageItem=5&pageIndex=1`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n let partnerLst = data.Result.Data.map(item => {\r\n return {\r\n value: item.PartnerId,\r\n label: item.FullName + ` (${item.Email})`\r\n }\r\n })\r\n callback(partnerLst)\r\n }\r\n })\r\n}\r\n\r\nconst Filter = (props) => {\r\n const { onSearch, statuses, orderFroms } = props\r\n\r\n const [orderId, setOrderId] = useState('')\r\n\r\n const [partner, setPartner] = useState(null)\r\n\r\n const [wayBillCode, setWayBillCode] = useState('')\r\n\r\n const [fromDate, setFromDate] = useState()\r\n\r\n const [toDate, setToDate] = useState()\r\n\r\n const [statusOptions, setStatusOptions] = useState([])\r\n\r\n const [status, setStatus] = useState(null)\r\n\r\n const [orderFromOptions, setOrderFromOptions] = useState([])\r\n\r\n const [orderFrom, setOrderFrom] = useState(null)\r\n\r\n useEffect(() => {\r\n const statusList = statuses.map(item => {\r\n return {\r\n value: item.OrderStatusId,\r\n label: item.OrderStatusName\r\n }\r\n })\r\n setStatusOptions(statusList)\r\n }, [statuses])\r\n\r\n useEffect(() => {\r\n const orderFromList = orderFroms.map(item => {\r\n return {\r\n value: item.OrderFromId,\r\n label: item.OrderFromName\r\n }\r\n })\r\n setOrderFromOptions(orderFromList)\r\n }, [orderFroms])\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClear = () => {\r\n setOrderId('')\r\n filters.orderId = ''\r\n setPartner(null)\r\n filters.partnerId = 0\r\n setWayBillCode('')\r\n filters.wayBillCode = ''\r\n setFromDate(null)\r\n filters.fromDate = ''\r\n setToDate(null)\r\n filters.toDate = ''\r\n setStatus(null)\r\n filters.statusId = 0\r\n setOrderFrom(null)\r\n filters.orderFromId = 0\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-6 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n <input value={orderId}\r\n autoFocus\r\n onChange={e => {\r\n const value = e.target.value\r\n setOrderId(value)\r\n filters.orderId = value\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleSearch()\r\n }\r\n }}\r\n type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"ID đơn hà ng\" />\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n <input value={wayBillCode}\r\n onChange={e => {\r\n const value = e.target.value\r\n setWayBillCode(value)\r\n filters.wayBillCode = value\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleSearch()\r\n }\r\n }}\r\n type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Mã váºn đơn\" />\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-6 col-xxl-4\">\r\n <AsyncSelect\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n placeholder='Cá»™ng tác viên'\r\n cacheOptions\r\n defaultOptions\r\n isSearchable={true}\r\n isClearable={true}\r\n value={partner}\r\n loadOptions={debounce(loadOptions, 250)}\r\n onChange={item => {\r\n if (item !== null) {\r\n filters.partnerId = item.value\r\n setPartner(item)\r\n }\r\n else {\r\n setPartner(null)\r\n filters.partnerId = 0\r\n }\r\n }}\r\n loadingMessage={() => \"Äang tìm kiếm\"}\r\n noOptionsMessage={() => \"Không tìm thấy dữ liệu\"}\r\n />\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n <div className=\"input-group flex-nowrap\">\r\n <span className=\"input-group-text\">Từ ngà y</span>\r\n <DatePicker\r\n className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n placeholderText=\"dd/mm/yyyy\"\r\n dateFormat=\"dd/MM/yyyy\"\r\n selected={fromDate}\r\n onChange={date => {\r\n if (date !== null) {\r\n const day = date.getDate()\r\n const month = date.getMonth() + 1\r\n const year = date.getFullYear()\r\n const strDate = `${day}/${month}/${year}`\r\n filters.fromDate = strDate\r\n }\r\n setFromDate(date)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n <div className=\"input-group flex-nowrap\">\r\n <span className=\"input-group-text\">Äến ngà y</span>\r\n <DatePicker\r\n className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n placeholderText=\"dd/mm/yyyy\"\r\n dateFormat=\"dd/MM/yyyy\"\r\n selected={toDate}\r\n onChange={date => {\r\n if (date !== null) {\r\n const day = date.getDate()\r\n const month = date.getMonth() + 1\r\n const year = date.getFullYear()\r\n const strDate = `${day}/${month}/${year}`\r\n filters.toDate = strDate\r\n }\r\n setToDate(date)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={true}\r\n options={statusOptions}\r\n value={status}\r\n onChange={item => {\r\n if (item !== null) {\r\n setStatus(item)\r\n filters.statusId = item.value\r\n }\r\n else {\r\n setStatus(null)\r\n filters.statusId = 0\r\n }\r\n }}\r\n placeholder='Trạng thái'\r\n />\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={true}\r\n options={orderFromOptions}\r\n value={orderFrom}\r\n onChange={item => {\r\n if (item !== null) {\r\n setOrderFrom(item)\r\n filters.orderFromId = item.value\r\n }\r\n else {\r\n setOrderFrom(null)\r\n filters.orderFromId = 0\r\n }\r\n }}\r\n placeholder='ÄÆ¡n nguồn'\r\n />\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-8 col-xl-8 col-xxl-8\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClear} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func,\r\n statuses: PropTypes.array,\r\n orderFrom: PropTypes.array\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { },\r\n statuses: [],\r\n orderFroms: []\r\n}\r\n\r\nexport default Filter","import PropTypes from \"prop-types\";\r\nimport React, { Fragment } from \"react\";\r\nimport { FiEdit } from \"react-icons/fi\";\r\nimport {\r\n IoCloudDownloadOutline,\r\n IoEllipsisHorizontalSharp,\r\n IoSwapHorizontalOutline,\r\n IoTrashOutline,\r\n IoReloadOutline,\r\n} from \"react-icons/io5\";\r\nimport {\r\n ActionItem,\r\n ActionRow,\r\n AvatarRow,\r\n EmptyRow,\r\n FormatNumber,\r\n LoadingRow,\r\n} from \"./../../../../../components\";\r\n\r\nconst Table = (props) => {\r\n const {\r\n data,\r\n onEdit,\r\n onDelete,\r\n onUpdateStatus,\r\n onDownloadWaybill,\r\n onAvatarClick,\r\n onGetWaybill,\r\n onDownloadAttachWaybill,\r\n } = props;\r\n\r\n const renderTable = () => {\r\n if (data === null) return <LoadingRow colSpan={9} />;\r\n else if (data.length === 0) return <EmptyRow colSpan={9} />;\r\n else\r\n return data.map((item) => {\r\n const rowSpan = item.Products.length;\r\n const firstProduct = item.Products[0];\r\n return (\r\n <Fragment key={item.OrderId}>\r\n <tr>\r\n <td className=\"text-center\" rowSpan={rowSpan}>\r\n {item.OrderId}\r\n <br />\r\n <span className=\"text-success\">{item.CreatedDate}</span>\r\n <br />\r\n <small className=\"text-muted\">{item.CreatedTime}</small>\r\n </td>\r\n <td rowSpan={rowSpan}>{item.PartnerFullName}</td>\r\n <td>\r\n <p className=\"mb-1\">\r\n <AvatarRow\r\n url={firstProduct.AvatarUrl}\r\n onClick={(urlObj) => {\r\n onAvatarClick(urlObj);\r\n }}\r\n className=\"cursor-zoom\"\r\n />\r\n {firstProduct.ProductName}\r\n </p>\r\n <p className=\"mb-0\">\r\n <span>\r\n Giá:{\" \"}\r\n <span className=\"text-danger fw-bold\">\r\n <FormatNumber>\r\n {firstProduct.CustomerUnitPrice}\r\n </FormatNumber>\r\n </span>\r\n </span>\r\n <span className=\"float-end\">\r\n Số lượng:{\" \"}\r\n <span className=\"text-danger fw-bold\">\r\n <FormatNumber>{firstProduct.Quantity}</FormatNumber>\r\n </span>\r\n </span>\r\n </p>\r\n </td>\r\n <td className=\"text-end text-primary\" rowSpan={rowSpan}>\r\n <FormatNumber>{item.SumOutputPrice}</FormatNumber>\r\n </td>\r\n <td rowSpan={rowSpan}>\r\n <p className=\"mb-1\">{item.WaybillCode}</p>\r\n <p className=\"mb-0\">{item.ShippingUnitName}</p>\r\n </td>\r\n <td className=\"text-end\" rowSpan={rowSpan}>\r\n <p className=\"text-primary fw-bold mb-1\">\r\n <FormatNumber>{item.SumPartnerPrice}</FormatNumber>\r\n </p>\r\n <p className=\"text-success mb-0\">\r\n +<FormatNumber>{item.DropshipFee}</FormatNumber>\r\n </p>\r\n </td>\r\n <td className=\"text-center text-primary\" rowSpan={rowSpan}>\r\n <IoEllipsisHorizontalSharp\r\n className=\"cursor-point fs-4\"\r\n onClick={() => {\r\n props.onEditWarehouseNote(item);\r\n }}\r\n />\r\n </td>\r\n <td rowSpan={rowSpan}>{renderStatus(item)}</td>\r\n <td rowSpan={rowSpan}>\r\n <ActionRow>\r\n {renderDownloadWaybill(item)}\r\n {renderUpdateCmd(item)}\r\n {renderGetWaybill(item)}\r\n {renderDownloadAttachWaybill(item)}\r\n <ActionItem\r\n right=\"order_edit\"\r\n onClick={() => onUpdateStatus(item)}\r\n icon={<IoSwapHorizontalOutline />}\r\n title=\"Cáºp nháºt trạng thái\"\r\n />\r\n <ActionItem\r\n right=\"order_delete\"\r\n onClick={() => onDelete(item)}\r\n icon={<IoTrashOutline />}\r\n title=\"Xóa\"\r\n className=\"text-danger\"\r\n />\r\n </ActionRow>\r\n </td>\r\n </tr>\r\n {renderChildrenProduct(item.Products)}\r\n </Fragment>\r\n );\r\n });\r\n };\r\n\r\n const renderDownloadAttachWaybill = (order) => {\r\n if (order.FileUrl !== \"\")\r\n return (\r\n <ActionItem\r\n right=\"order_waybill_attach_download\"\r\n onClick={() => onDownloadAttachWaybill(order)}\r\n icon={<IoCloudDownloadOutline />}\r\n title=\"Tải váºn đơn (Ä‘Ãnh kèm)\"\r\n />\r\n );\r\n };\r\n\r\n const renderGetWaybill = (order) => {\r\n if (order.OrderFromId === 1)\r\n // ÄÆ¡n hà ng từ shopee\r\n return (\r\n <ActionItem\r\n right=\"order_waybill_get\"\r\n onClick={() => onGetWaybill(order)}\r\n icon={<IoReloadOutline />}\r\n title=\"Tải lại váºn đơn\"\r\n />\r\n );\r\n };\r\n\r\n const renderUpdateCmd = (item) => {\r\n if (item.OrderStatusId === 1) {\r\n <ActionItem\r\n right=\"order_edit\"\r\n onClick={() => onEdit(item)}\r\n icon={<FiEdit />}\r\n title=\"Chỉnh sá»a\"\r\n />;\r\n }\r\n };\r\n\r\n const renderDownloadWaybill = (order) => {\r\n if (order.WaybillUrl !== null && order.WaybillUrl !== \"\")\r\n return (\r\n <ActionItem\r\n right=\"order_waybill_download\"\r\n onClick={() => onDownloadWaybill(order)}\r\n icon={<IoCloudDownloadOutline />}\r\n title=\"Tải váºn đơn\"\r\n />\r\n );\r\n };\r\n\r\n const renderStatus = (order) => {\r\n const statusId = order.OrderStatusId;\r\n const statusName = order.OrderStatusName;\r\n let className = \"\";\r\n if (statusId !== 5) {\r\n className =\r\n statusId === 1\r\n ? \"badge bg-success min-w-50-px cursor-point\"\r\n : \"badge bg-danger min-w-50-px cursor-point\";\r\n } else {\r\n className =\r\n statusId === 1\r\n ? \"badge bg-success min-w-50-px\"\r\n : \"badge bg-danger min-w-50-px\";\r\n }\r\n return (\r\n <span className={className} onClick={() => handleChangeStatus(order)}>\r\n {statusName}\r\n </span>\r\n );\r\n };\r\n\r\n const handleChangeStatus = (order) => {\r\n if (order.OrderStatusId !== 5) {\r\n onUpdateStatus(order);\r\n }\r\n };\r\n\r\n const renderChildrenProduct = (products) => {\r\n const html = [];\r\n const productLength = products.length;\r\n for (let i = 1; i < productLength; i++) {\r\n const product = products[i];\r\n html.push(\r\n <tr key={product.ProductId}>\r\n <td>\r\n <p className=\"mb-1\">\r\n <AvatarRow\r\n url={product.AvatarUrl}\r\n onClick={(urlObj) => {\r\n onAvatarClick(urlObj);\r\n }}\r\n className=\"cursor-zoom\"\r\n />\r\n {product.ProductName}\r\n </p>\r\n <p className=\"mb-0\">\r\n <span>\r\n Giá:{\" \"}\r\n <span className=\"text-danger fw-bold\">\r\n <FormatNumber>{product.CustomerUnitPrice}</FormatNumber>\r\n </span>\r\n </span>\r\n <span className=\"float-end\">\r\n Số lượng:{\" \"}\r\n <span className=\"text-danger fw-bold\">\r\n <FormatNumber>{product.Quantity}</FormatNumber>\r\n </span>\r\n </span>\r\n </p>\r\n </td>\r\n </tr>\r\n );\r\n }\r\n return html;\r\n };\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-avatar mb-0\">\r\n <thead>\r\n <tr>\r\n <th>ID</th>\r\n <th>CTV</th>\r\n <th>Tên sản phẩm</th>\r\n <th className=\"text-end\">Tổng</th>\r\n <th>Váºn chuyển</th>\r\n <th className=\"text-end\">Thu CTV</th>\r\n <th>Ghi chú</th>\r\n <th>Trạng thái</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>{renderTable()}</tbody>\r\n </table>\r\n </div>\r\n );\r\n};\r\n\r\nTable.propTypes = {\r\n data: PropTypes.array,\r\n onEdit: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n onUpdateStatus: PropTypes.func,\r\n onEditWarehouseNote: PropTypes.func,\r\n onDownloadWaybill: PropTypes.func,\r\n onAvatarClick: PropTypes.func,\r\n onGetWaybill: PropTypes.func,\r\n onDownloadAttachWaybill: PropTypes.func,\r\n};\r\n\r\nTable.defaultProps = {\r\n data: [],\r\n onEdit: () => {},\r\n onDelete: () => {},\r\n onUpdateStatus: () => {},\r\n onEditWarehouseNote: () => {},\r\n onDownloadWaybill: () => {},\r\n onAvatarClick: () => {},\r\n onGetWaybill: () => {},\r\n onDownloadAttachWaybill: () => {},\r\n};\r\n\r\nexport default Table;\r\n","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, InputSelect, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n orderId: yup.number(),\r\n statusId: yup.number()\r\n})\r\n\r\nconst ModalUpdateStatus = (props) => {\r\n const { setValue, control, handleSubmit, reset } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [orderStatuses, setOrderStatuses] = useState([])\r\n\r\n useEffect(() => {\r\n const statusList = props.statuses.map(item => {\r\n return {\r\n value: item.OrderStatusId,\r\n label: item.OrderStatusName\r\n }\r\n })\r\n setOrderStatuses(statusList)\r\n }, [props.statuses])\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n setValue('orderId', props.orderId)\r\n setValue('statusId', props.statusId)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Sá»a trạng thái đơn hà ng</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <Controller\r\n name=\"statusId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <InputSelect\r\n isVertical={true}\r\n options={orderStatuses}\r\n value={value}\r\n defaultValue={value}\r\n name='order-status'\r\n variant='success'\r\n onChange={onChange}\r\n />\r\n )\r\n }}\r\n />\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalUpdateStatus.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n statuses: PropTypes.array,\r\n statusId: PropTypes.number,\r\n orderId: PropTypes.number,\r\n isShow: PropTypes.bool\r\n}\r\n\r\nModalUpdateStatus.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n statuses: [],\r\n statusId: 0,\r\n orderId: 0,\r\n isShow: false\r\n}\r\n\r\nexport default ModalUpdateStatus","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n OrderId: yup.number(),\r\n WarehouseNote: yup.string().max(1_000, 'Ghi chú gá»i kho quá dà i')\r\n})\r\n\r\nconst ModalEditWarehouseNote = (props) => {\r\n const { setValue, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [isEnableEdit, setIsEnableEdit] = useState(true)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"lg\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n const data = props.data\r\n if (data !== null) {\r\n setValue('OrderId', data.OrderId)\r\n setValue('WarehouseNote', data.WarehouseNote)\r\n setIsEnableEdit(data.OrderStatusId === 1) // Chỉ cho phép sá»a ghi chú gá»i kho đơn hà ng má»›i\r\n }\r\n }\r\n }>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a ghi chú gá»i kho</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú gá»i kho</label>\r\n <textarea {...register('WarehouseNote')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú gá»i kho\" disabled={!isEnableEdit}></textarea>\r\n {errors.WarehouseNote && <div className=\"validation-message\">{errors.WarehouseNote.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n {isEnableEdit ? <SaveButton isBusy={isBusy} /> : ''}\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEditWarehouseNote.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n data: PropTypes.object\r\n}\r\n\r\nModalEditWarehouseNote.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n data: {}\r\n}\r\n\r\nexport default ModalEditWarehouseNote","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport NumberFormat from 'react-number-format'\r\nimport * as yup from \"yup\"\r\nimport {\r\n AvatarRow, CloseButton, Config, CustomSelect, EmptyRow,\r\n FormatNumber, InputSelect, LoadingRow, Notification, SaveButton\r\n} from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n OrderId: yup.number(),\r\n CustomerName: yup.string().max(100, 'Tên ngưá»i nháºn quá dà i'),\r\n CustomerPhone: yup.string().max(20, 'Số Ä‘iện thoại quá dà i'),\r\n CustomerAddress: yup.string().max(200, 'Äịa chỉ quá dà i'),\r\n CustomerWardId: yup.number().nullable(),\r\n WarehouseNote: yup.string().max(1_000, 'Ghi chú gá»i kho quá dà i'),\r\n ShippingUnitId: yup.number().required('Vui lòng chá»n đơn vị giao hà ng'),\r\n WaybillCode: yup.string().required('Vui lòng nháºp mã đơn hà ng').max(50, 'Mã đơn hà ng quá dà i'),\r\n ShippingWeight: yup.number().max(2_000_000_000, 'Trá»ng lượng quá lá»›n'),\r\n ShippingMethodId: yup.number().required('Vui lòng chá»n phương thức váºn chuyển'),\r\n ShippingFeeTypeId: yup.number().required('Vui lòng chá»n phà váºn chuyển'),\r\n ShippingFeeAmount: yup.number().max(2_000_000_000, 'Phà váºn chuyển quá lá»›n'),\r\n ShippingNote: yup.string().max(1_000, 'Ghi chú váºn chuyển quá dà i'),\r\n OrderTypeId: yup.number().required('Vui lòng chá»n loại đơn hà ng'),\r\n Products: yup.array()\r\n})\r\n\r\nconst orderTypes = Config.orderTypes\r\n\r\nconst shippingTypes = Config.shippingTypes\r\n\r\nfunction ModalEdit(props) {\r\n const { setValue, control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema),\r\n defaultValues: {\r\n ShippingNote: '',\r\n OrderTypeId: 1,\r\n ShippingFeeTypeId: 1,\r\n ShippingFeeAmount: 0,\r\n ShippingWeight: 0\r\n }\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [provinces, setProvinces] = useState([])\r\n\r\n const [provinceId, setProvinceId] = useState(0)\r\n\r\n const [districts, setDistricts] = useState([])\r\n\r\n const [districtId, setDistrictId] = useState(0)\r\n\r\n const [wards, setWards] = useState([])\r\n\r\n const [shippingUnits, setShippingUnits] = useState([])\r\n\r\n const [shippingMethods, setShippingMethods] = useState([])\r\n\r\n const [tienHang, setTienHang] = useState()\r\n\r\n useEffect(() => {\r\n const provinceArray = props.provinces.map(item => {\r\n return {\r\n value: item.ProvinceId,\r\n label: `${item.Prefix} ${item.ProvinceName}`\r\n }\r\n })\r\n setProvinces(provinceArray)\r\n }, [props.provinces])\r\n\r\n useEffect(() => {\r\n const districtArray = props.districts.map(item => {\r\n return {\r\n value: item.DistrictId,\r\n label: `${item.Prefix} ${item.DistrictName}`\r\n }\r\n })\r\n setDistricts(districtArray)\r\n }, [props.districts])\r\n\r\n useEffect(() => {\r\n const wardArray = props.wards.map(item => {\r\n return {\r\n value: item.WardId,\r\n label: `${item.Prefix} ${item.WardName}`\r\n }\r\n })\r\n setWards(wardArray)\r\n }, [props.wards])\r\n\r\n useEffect(() => {\r\n const shippingUnitArray = props.shippingUnits.map(item => {\r\n return {\r\n value: item.ShippingUnitId,\r\n label: item.ShippingUnitName\r\n }\r\n })\r\n setShippingUnits(shippingUnitArray)\r\n }, [props.shippingUnits])\r\n\r\n useEffect(() => {\r\n const shippingMethodArray = props.shippingMethods.map(item => {\r\n return {\r\n value: item.ShippingMethodId,\r\n label: item.ShippingMethodName\r\n }\r\n })\r\n setShippingMethods(shippingMethodArray)\r\n }, [props.shippingMethods])\r\n\r\n const renderProduct = () => {\r\n const products = props.detail.Products\r\n if (products === null || products === undefined) return <LoadingRow colSpan={6} />\r\n else if (products.length === 0) return <EmptyRow colSpan={6} />\r\n else return products.map((item, index) => <tr key={item.ProductId}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>\r\n <AvatarRow\r\n url={item.AvatarUrl}\r\n />\r\n {item.ProductName}\r\n </td>\r\n <td className=\"text-end text-primary\">{item.Quantity}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.PartnerUnitPrice}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.TotalAmount}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-danger\">\r\n <IoTrashOutline className=\"cursor-point\" onClick={() => props.removeProduct(item.ProductId)} />\r\n </td>\r\n </tr>)\r\n }\r\n\r\n useEffect(() => {\r\n const products = props.detail.Products\r\n if (products !== undefined && products !== null) {\r\n const tien_hang = products.reduce((prev, current) => prev + current.TotalAmount, 0)\r\n setTienHang(tien_hang)\r\n\r\n const formProducts = products.map(item => {\r\n return {\r\n ProductId: item.ProductId,\r\n Quantity: item.Quantity\r\n }\r\n })\r\n setValue('Products', formProducts)\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [props.detail.Products])\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n const detail = props.detail\r\n setValue('OrderId', detail.OrderId)\r\n setValue('CustomerName', detail.ReceiverName)\r\n setValue('CustomerPhone', detail.CustomerPhone)\r\n setValue('CustomerAddress', detail.CustomerAddress)\r\n setValue('CustomerWardId', detail.CustomerWardId)\r\n setValue('WarehouseNote', detail.WarehouseNote)\r\n setValue('ShippingUnitId', detail.ShippingUnitId)\r\n setValue('WaybillCode', detail.WaybillCode)\r\n setValue('ShippingWeight', detail.WeightInGram)\r\n setValue('ShippingMethodId', detail.ShippingMethodId)\r\n setValue('ShippingFeeTypeId', detail.ShippingFeeTypeId)\r\n setValue('ShippingFeeAmount', detail.ShippingFree)\r\n setValue('ShippingNote', detail.ShippingNote)\r\n setValue('OrderTypeId', detail.OrderTypeId)\r\n setProvinceId(detail.CustomerProvinceId)\r\n setDistrictId(detail.CustomerDistrictId)\r\n setValue('CustomerWardId', detail.CustomerWardId)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Äặt hà ng</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n if (props.detail.Products.length === 0) {\r\n Notification.warning('Vui lòng chá»n sản phẩm trước khi đặt hà ng')\r\n return\r\n }\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"card border-primary border\">\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title text-primary\">Thông tin khách hà ng</h5>\r\n <div className=\"row\">\r\n <div className=\"col-md-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Ngưá»i nháºn</label>\r\n <input {...register('CustomerName')} type=\"text\" className=\"form-control\" placeholder=\"Ngưá»i nháºn\" />\r\n {errors.CustomerName && <div className=\"validation-message\">{errors.CustomerName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Äiện thoại</label>\r\n <input {...register('CustomerPhone')} type=\"text\" className=\"form-control\" placeholder=\"Äiện thoại\" />\r\n {errors.CustomerPhone && <div className=\"validation-message\">{errors.CustomerPhone.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Äịa chỉ</label>\r\n <input {...register('CustomerAddress')} type=\"text\" className=\"form-control\" placeholder=\"Äịa chỉ\" />\r\n {errors.CustomerAddress && <div className=\"validation-message\">{errors.CustomerAddress.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Tỉnh/Tp</label>\r\n <CustomSelect\r\n options={provinces}\r\n isSearchable={true}\r\n isClearable={true}\r\n value={provinceId}\r\n onChange={val => {\r\n setProvinceId(val)\r\n setDistrictId(null)\r\n setValue('CustomerWardId', null)\r\n props.onProvinceChange(val)\r\n }}\r\n placeholder='Tỉnh/Tp'\r\n noOptionsMessage='Tỉnh/Tp'\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Quáºn/Huyện</label>\r\n <CustomSelect\r\n options={districts}\r\n isSearchable={true}\r\n isClearable={false}\r\n value={districtId}\r\n onChange={val => {\r\n setDistrictId(val)\r\n setValue('CustomerWardId', null)\r\n props.onDistrictChange(val)\r\n }}\r\n placeholder='Quáºn/Huyện'\r\n noOptionsMessage='Quáºn/Huyện'\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Phưá»ng/Xã</label>\r\n <Controller\r\n control={control}\r\n name=\"CustomerWardId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <CustomSelect\r\n options={wards}\r\n isSearchable={true}\r\n isClearable={false}\r\n value={value}\r\n onChange={onChange}\r\n placeholder='Phưá»ng/Xã'\r\n noOptionsMessage='noOptionsMessage'\r\n />\r\n )}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"card border-primary border\">\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title text-primary\">Danh sách sản phẩm</h5>\r\n <div className=\"relative-position\">\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-avatar mb-2\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tên sản phẩm</th>\r\n <th>Số lượng</th>\r\n <th>Giá CTV</th>\r\n <th>Thà nh tiá»n</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderProduct()}\r\n <tr>\r\n <td colSpan={4} className=\"text-end fw-bold\">Tổng thà nh tiá»n</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {tienHang}\r\n </FormatNumber>\r\n </td>\r\n <td></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Cá»™ng tác viên thanh toán vá»›i kho</label>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered\">\r\n <tbody>\r\n <tr>\r\n <td className=\"text-end w-50-pc\">Tiá»n hà ng</td>\r\n <td className=\"text-primary\">\r\n <FormatNumber>\r\n {tienHang}\r\n </FormatNumber>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td className=\"text-end\">Phà dropship</td>\r\n <td className=\"text-primary\">\r\n <FormatNumber>\r\n {props.detail.DropshipFee}\r\n </FormatNumber>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td className=\"text-end fw-bold\">Cá»™ng tác viên thanh toán</td>\r\n <td className=\"text-primary\">\r\n <FormatNumber>\r\n {props.detail.DropshipFee + tienHang}\r\n </FormatNumber>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú gá»i kho</label>\r\n <textarea {...register('WarehouseNote')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú gá»i kho\"></textarea>\r\n {errors.WarehouseNote && <div className=\"validation-message\">{errors.WarehouseNote.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"card border-primary border mb-0\">\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title text-primary mb-2\">Váºn chuyển</h5>\r\n <div className=\"row\">\r\n <div className=\"col-md-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">ÄÆ¡n vị giao hà ng <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"ShippingUnitId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <CustomSelect\r\n options={shippingUnits}\r\n isSearchable={false}\r\n isClearable={false}\r\n value={value}\r\n onChange={onChange}\r\n placeholder=\"ÄÆ¡n vị giao hà ng\"\r\n noOptionsMessage=\"ÄÆ¡n vị giao hà ng\"\r\n />\r\n )}\r\n />\r\n {errors.ShippingUnitId && <div className=\"validation-message\">{errors.ShippingUnitId.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Mã váºn đơn <span className=\"text-danger\">*</span></label>\r\n <input {...register('WaybillCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã váºn đơn\" />\r\n {errors.WaybillCode && <div className=\"validation-message\">{errors.WaybillCode.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trá»ng lượng</label>\r\n <div className=\"input-group\">\r\n <Controller\r\n control={control}\r\n name=\"ShippingWeight\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <NumberFormat\r\n placeholder='Trá»ng lượng'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={value}\r\n onValueChange={val => onChange(val.value)}\r\n />\r\n )}\r\n />\r\n <span className=\"input-group-text\">Gram</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-md-5\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Loại đơn <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"OrderTypeId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <InputSelect\r\n options={orderTypes}\r\n value={value}\r\n defaultValue={1}\r\n name='order-type'\r\n variant='success'\r\n onChange={onChange}\r\n />\r\n )}\r\n />\r\n {errors.OrderTypeId && <div className=\"validation-message\">{errors.OrderTypeId.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-7\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Phương thức váºn chuyển <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"ShippingMethodId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <CustomSelect\r\n options={shippingMethods}\r\n isSearchable={false}\r\n isClearable={false}\r\n value={value}\r\n onChange={onChange}\r\n placeholder=\"Phương thức váºn chuyển\"\r\n noOptionsMessage=\"Phương thức váºn chuyển\"\r\n />\r\n )}\r\n />\r\n {errors.ShippingMethodId && <div className=\"validation-message\">{errors.ShippingMethodId.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-8\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Loại phà váºn chuyển <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"ShippingFeeTypeId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <InputSelect\r\n options={shippingTypes}\r\n value={value}\r\n defaultValue={1}\r\n name='shipping-fee-type'\r\n variant='success'\r\n onChange={onChange}\r\n />\r\n )}\r\n />\r\n {errors.ShippingFeeTypeObj && <div className=\"validation-message\">{errors.ShippingFeeTypeObj.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Phà váºn chuyển thá»a thuáºn</label>\r\n <div className=\"input-group\">\r\n <Controller\r\n control={control}\r\n name=\"ShippingFeeAmount\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <NumberFormat\r\n placeholder='Phà váºn chuyển thá»a thuáºn'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={value}\r\n onValueChange={val => onChange(val.value)}\r\n />\r\n )}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n {errors.ShippingFeeAmount && <div className=\"validation-message\">{errors.ShippingFeeAmount.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú váºn chuyển</label>\r\n <textarea {...register('ShippingNote')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú váºn chuyển\"></textarea>\r\n {errors.ShippingNote && <div className=\"validation-message\">{errors.ShippingNote.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n isShow: PropTypes.bool,\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n provinces: PropTypes.array,\r\n onProvinceChange: PropTypes.func,\r\n districts: PropTypes.array,\r\n onDistrictChange: PropTypes.func,\r\n wards: PropTypes.array,\r\n shippingUnits: PropTypes.array,\r\n shippingMethods: PropTypes.array,\r\n detail: PropTypes.object,\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n isShow: false,\r\n onSave: () => { },\r\n onClose: () => { },\r\n provinces: [],\r\n onProvinceChange: () => { },\r\n districts: [],\r\n onDistrictChange: () => { },\r\n wards: [],\r\n shippingUnits: [],\r\n shippingMethods: [],\r\n detail: {}\r\n}\r\n\r\nexport default ModalEdit","import axios from \"axios\";\r\nimport React, { Fragment, useEffect, useState } from \"react\";\r\nimport {\r\n Filter,\r\n Table,\r\n ModalUpdateStatus,\r\n ModalEditWarehouseNote,\r\n ModalEdit,\r\n} from \"./components\";\r\nimport { Pagination, Notification } from \"./../../../components\";\r\nimport ImageViewer from \"react-simple-image-viewer\";\r\n\r\nconst downloadFile = (data, fileName) => {\r\n const downloadUrl = window.URL.createObjectURL(new Blob([data]));\r\n const link = document.createElement(\"a\");\r\n link.href = downloadUrl;\r\n link.setAttribute(\"download\", fileName);\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n};\r\n\r\nconst OrderPage = () => {\r\n const [orderStatuses, setOrderStatuses] = useState([]);\r\n\r\n const [orderFroms, setOrderFroms] = useState([]);\r\n\r\n const [filters, setFilters] = useState({\r\n orderId: \"\",\r\n partnerId: 0,\r\n wayBillCode: \"\",\r\n fromDate: \"\",\r\n toDate: \"\",\r\n statusId: 0,\r\n orderFromId: 0,\r\n pageItem: 10,\r\n pageIndex: 1,\r\n });\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1,\r\n });\r\n\r\n const [orders, setOrders] = useState(null);\r\n\r\n const [modalStatus, setModalStatus] = useState({\r\n isShow: false,\r\n statusId: 0,\r\n orderId: 0,\r\n });\r\n\r\n const [modalEditWarehouseNote, setModalEditWarehouseNote] = useState({\r\n isShow: false,\r\n data: {},\r\n });\r\n\r\n const [modalOrderEditInfo, setModalOrderEditInfo] = useState({\r\n isShow: false,\r\n detail: {},\r\n });\r\n\r\n const [isShowViewer, setIsShowViewer] = useState(false);\r\n\r\n const [viewerList, setViewerList] = useState([]);\r\n\r\n useEffect(() => {\r\n let url = `/admin/order/filter?orderId=${filters.orderId}&partnerId=${filters.partnerId}&waybillCode=${filters.wayBillCode}`;\r\n url += `&fromDate=${filters.fromDate}&toDate=${filters.toDate}&orderStatusId=${filters.statusId}`;\r\n url += `&paymentStatusId=0&orderFromId=${filters.orderFromId}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`;\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex,\r\n };\r\n setPagination(newPagination);\r\n setOrders(data.Result.Data);\r\n }\r\n });\r\n }, [filters]);\r\n\r\n useEffect(() => {\r\n document.getElementById(\"page-header\").innerText = \"ÄÆ¡n hà ng\";\r\n\r\n loadOrderStatus();\r\n loadOrderFrom();\r\n\r\n loadShippingUnit();\r\n loadProvince();\r\n loadShippingMethod();\r\n }, []);\r\n\r\n const loadOrderStatus = () => {\r\n const url = \"/admin/order-status/get-dropdown\";\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setOrderStatuses(data.Result);\r\n }\r\n });\r\n };\r\n\r\n const loadOrderFrom = () => {\r\n const url = \"/admin/order-from/get-dropdown\";\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setOrderFroms(data.Result);\r\n }\r\n });\r\n };\r\n\r\n const [provinceList, setProvinceList] = useState([]);\r\n\r\n const [districtList, setDistrictList] = useState([]);\r\n\r\n const [wardList, setWardList] = useState([]);\r\n\r\n const [shippingUnits, setShippingUnits] = useState([]);\r\n\r\n const [shippingMethods, setShippingMethods] = useState([]);\r\n\r\n const loadProvince = () => {\r\n const url = \"/admin/province/get-all\";\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setProvinceList(data.Result);\r\n }\r\n });\r\n };\r\n\r\n const loadDistrict = (provinceId) => {\r\n const url = `/admin/province/${provinceId}/districts`;\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setDistrictList(data.Result);\r\n }\r\n });\r\n };\r\n\r\n const loadWard = (wardId) => {\r\n const url = `/admin/district/${wardId}/wards`;\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setWardList(data.Result);\r\n }\r\n });\r\n };\r\n\r\n const loadShippingUnit = () => {\r\n const url = \"/admin/shipping-unit/get-dropdown\";\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setShippingUnits(data.Result);\r\n }\r\n });\r\n };\r\n\r\n const loadShippingMethod = () => {\r\n const url = \"/admin/shipping-method/get-dropdown\";\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setShippingMethods(data.Result);\r\n }\r\n });\r\n };\r\n\r\n const reloadOrder = () => {\r\n setFilters({\r\n ...filters,\r\n pageIndex: 1,\r\n });\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={(params) => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1,\r\n };\r\n setFilters(newFilters);\r\n }}\r\n statuses={orderStatuses}\r\n orderFroms={orderFroms}\r\n />\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <Table\r\n data={orders}\r\n onDownloadWaybill={(order) => {\r\n const url = `/admin/order/download-waybill?orderId=${order.OrderId}`;\r\n axios.get(url, { responseType: \"blob\" }).then(({ data }) => {\r\n const fileName = `${order.ShopeeOrderSn}.pdf`;\r\n downloadFile(data, fileName);\r\n });\r\n }}\r\n onEdit={(order) => {\r\n const url = `/admin/order/detail?orderId=${order.OrderId}`;\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const districts = data.Result.Districts;\r\n setDistrictList(districts);\r\n const wards = data.Result.Wards;\r\n setWardList(wards);\r\n setModalOrderEditInfo({\r\n isShow: true,\r\n detail: data.Result,\r\n });\r\n }\r\n });\r\n }}\r\n onEditWarehouseNote={(order) => {\r\n const url = `/admin/order/get-warehouse-note?id=${order.OrderId}`;\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalEditWarehouseNote({\r\n isShow: true,\r\n data: data.Result,\r\n });\r\n }\r\n });\r\n }}\r\n onDelete={(order) => {\r\n Notification.confirmHtml(\r\n \"Bạn có chắc muốn xóa đơn hà ng\",\r\n order.OrderId,\r\n () => {\r\n const url = `/admin/order/delete?id=${order.OrderId}`;\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadOrder();\r\n Notification.success(\"Xóa đơn hà ng thà nh công\");\r\n }\r\n });\r\n }\r\n );\r\n }}\r\n onUpdateStatus={(order) => {\r\n setModalStatus({\r\n isShow: true,\r\n statusId: order.OrderStatusId,\r\n orderId: order.OrderId,\r\n });\r\n }}\r\n onAvatarClick={(urlObj) => {\r\n setIsShowViewer(true);\r\n setViewerList([urlObj.fullUrl]);\r\n }}\r\n onGetWaybill={(order) => {\r\n const url = `/admin/order/get-waybill?orderId=${order.OrderId}`;\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n Notification.success(\"Tải lại váºn đơn thà nh công\");\r\n }\r\n });\r\n }}\r\n onDownloadAttachWaybill={(order) => {\r\n const url = `${window.apiUrl}${order.FileUrl}`;\r\n window.open(url);\r\n }}\r\n />\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex };\r\n setPagination(newPagination);\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex,\r\n };\r\n setFilters(newFilters);\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <ModalUpdateStatus\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true);\r\n const url = `/admin/order/update-status?orderId=${formData.orderId}&statusId=${formData.statusId}`;\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const orderList = [...orders];\r\n const index = orderList.findIndex(\r\n (n) => n.OrderId === formData.orderId\r\n );\r\n orderList[index].OrderStatusId = formData.statusId;\r\n orderList[index].OrderStatusName = data.Result.OrderStatusName;\r\n setOrders(orderList);\r\n setModalStatus({\r\n isShow: false,\r\n statusId: 0,\r\n orderId: 0,\r\n });\r\n Notification.success(\"Sá»a trạng thái đơn hà ng thà nh công\");\r\n }\r\n setIsBusy(false);\r\n });\r\n }}\r\n onClose={() => {\r\n setModalStatus({\r\n isShow: false,\r\n statusId: 0,\r\n orderId: 0,\r\n });\r\n }}\r\n statuses={orderStatuses}\r\n statusId={modalStatus.statusId}\r\n orderId={modalStatus.orderId}\r\n isShow={modalStatus.isShow}\r\n />\r\n <ModalEditWarehouseNote\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true);\r\n const url = \"/admin/order/update-warehouse-note\";\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalEditWarehouseNote({\r\n isShow: false,\r\n data: {},\r\n });\r\n Notification.success(\"Chỉnh sá»a ghi chú gá»i kho thà nh công\");\r\n }\r\n setIsBusy(false);\r\n });\r\n }}\r\n onClose={() => {\r\n setModalEditWarehouseNote({\r\n isShow: false,\r\n data: {},\r\n });\r\n }}\r\n isShow={modalEditWarehouseNote.isShow}\r\n data={modalEditWarehouseNote.data}\r\n />\r\n <ModalEdit\r\n isShow={modalOrderEditInfo.isShow}\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true);\r\n const url = \"/admin/order/update\";\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadOrder();\r\n setModalOrderEditInfo({\r\n isShow: false,\r\n detail: {},\r\n });\r\n Notification.success(\"Chỉnh sá»a đơn hà ng thà nh công\");\r\n }\r\n setIsBusy(false);\r\n });\r\n }}\r\n onClose={() => {\r\n setModalOrderEditInfo({\r\n isShow: false,\r\n detail: {},\r\n });\r\n }}\r\n provinces={provinceList}\r\n onProvinceChange={(provinceId) => {\r\n loadDistrict(provinceId);\r\n }}\r\n districts={districtList}\r\n onDistrictChange={(districtId) => {\r\n loadWard(districtId);\r\n }}\r\n wards={wardList}\r\n shippingUnits={shippingUnits}\r\n shippingMethods={shippingMethods}\r\n dropShipFee={0}\r\n detail={modalOrderEditInfo.detail}\r\n removeProduct={(productId) => {\r\n const products = [...modalOrderEditInfo.detail.Products];\r\n const newProducts = products.filter((n) => n.ProductId !== productId);\r\n setModalOrderEditInfo({\r\n ...modalOrderEditInfo,\r\n detail: {\r\n ...modalOrderEditInfo.detail,\r\n Products: newProducts,\r\n },\r\n });\r\n }}\r\n />\r\n {isShowViewer && (\r\n <ImageViewer\r\n src={viewerList}\r\n currentIndex={0}\r\n disableScroll={false}\r\n closeOnClickOutside={true}\r\n onClose={() => {\r\n setIsShowViewer(false);\r\n }}\r\n />\r\n )}\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default OrderPage;\r\n","import PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport DatePicker from 'react-datepicker'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\n\r\nconst dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' }\r\n\r\nconst now = new Date()\r\n\r\nconst filters = {\r\n fromDate: new Date(now.getFullYear(), now.getMonth(), 1).toLocaleDateString('vi-VN', dateOptions),\r\n toDate: new Date(now.getFullYear(), now.getMonth() + 1, 0).toLocaleDateString('vi-VN', dateOptions)\r\n}\r\n\r\nconst Filter = (props) => {\r\n const { onSearch } = props\r\n\r\n const [fromDate, setFromDate] = useState(() => {\r\n const day = 1\r\n const month = now.getMonth()\r\n const year = now.getFullYear()\r\n const date = new Date(year, month, day)\r\n return date\r\n })\r\n\r\n const [toDate, setToDate] = useState(() => {\r\n const day = 0\r\n const month = now.getMonth()\r\n const year = now.getFullYear()\r\n const date = new Date(year, month + 1, day)\r\n return date\r\n })\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClear = () => {\r\n setFromDate(null)\r\n filters.fromDate = ''\r\n setToDate(null)\r\n filters.toDate = ''\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n <div className=\"input-group flex-nowrap\">\r\n <span className=\"input-group-text\">Từ ngà y</span>\r\n <DatePicker\r\n className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n placeholderText=\"dd/mm/yyyy\"\r\n dateFormat=\"dd/MM/yyyy\"\r\n selected={fromDate}\r\n onChange={date => {\r\n if (date !== null) {\r\n const day = date.getDate()\r\n const month = date.getMonth() + 1\r\n const year = date.getFullYear()\r\n const strDate = `${day}/${month}/${year}`\r\n filters.fromDate = strDate\r\n }\r\n setFromDate(date)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n <div className=\"input-group flex-nowrap\">\r\n <span className=\"input-group-text\">Äến ngà y</span>\r\n <DatePicker\r\n className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n placeholderText=\"dd/mm/yyyy\"\r\n dateFormat=\"dd/MM/yyyy\"\r\n selected={toDate}\r\n onChange={date => {\r\n if (date !== null) {\r\n const day = date.getDate()\r\n const month = date.getMonth() + 1\r\n const year = date.getFullYear()\r\n const strDate = `${day}/${month}/${year}`\r\n filters.toDate = strDate\r\n }\r\n setToDate(date)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-12 col-xxl-8\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClear} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { EmptyRow, LoadingRow, FormatNumber, AvatarRow, DetailRow } from '../../../../../components'\r\n\r\nfunction Table(props) {\r\n const { data, onOpenDetail, detail } = props\r\n\r\n function renderTable() {\r\n if (data === null) return <LoadingRow colSpan={6} />\r\n else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n else return data.map((item, index) => {\r\n return (\r\n <Fragment key={item.PartnerId}>\r\n <tr onClick={() => onOpenDetail(item)} className={(item.isSelected ? 'row-master' : '')}>\r\n <td className=\"text-center\">{(props.pageItem * (props.pageIndex - 1)) + index + 1}</td>\r\n <td>\r\n <AvatarRow\r\n url={item.AvatarUrl}\r\n />\r\n {item.FullName}\r\n </td>\r\n <td>{item.Email}</td>\r\n <td>{item.Phone}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.CountOrder}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.TotalMoney}\r\n </FormatNumber>\r\n </td>\r\n </tr>\r\n {rederDetail(item)}\r\n </Fragment>\r\n )\r\n })\r\n }\r\n\r\n function rederDetail(item) {\r\n if (item.isSelected) {\r\n return (\r\n <tr className=\"row-detail\">\r\n <td colSpan={6} className=\"ps-1 pt-0 pe-1 pb-1\">\r\n <div className=\"card mb-0 cursor-default\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <DetailRow title=\"Tổng đơn\">\r\n <span className=\"text-primary\">\r\n <FormatNumber>\r\n {detail.CountOrder}\r\n </FormatNumber>\r\n </span>\r\n </DetailRow>\r\n <DetailRow title=\"ÄÆ¡n há»§y\">\r\n <span className=\"text-primary\">\r\n <FormatNumber>\r\n {detail.CountCancel}\r\n </FormatNumber>\r\n </span>\r\n </DetailRow>\r\n <DetailRow title=\"Doanh thu\">\r\n <span className=\"text-primary\">\r\n <FormatNumber>\r\n {detail.TotalMoney}\r\n </FormatNumber>\r\n </span>\r\n </DetailRow>\r\n <DetailRow title=\"Tổng nạp\">\r\n <span className=\"text-primary\">\r\n <FormatNumber>\r\n {detail.TotalRecharge}\r\n </FormatNumber>\r\n </span>\r\n </DetailRow>\r\n <DetailRow title=\"Số lượng sản phẩm\">\r\n <span className=\"text-primary\">\r\n <FormatNumber>\r\n {detail.CountProduct}\r\n </FormatNumber>\r\n </span>\r\n </DetailRow>\r\n <DetailRow title=\"Tổng phà dropship\">\r\n <span className=\"text-primary\">\r\n <FormatNumber>\r\n {detail.TotalDropshipFee}\r\n </FormatNumber>\r\n </span>\r\n </DetailRow>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n )\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-avatar table-point mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Há» tên</th>\r\n <th>Email</th>\r\n <th>Äiện thoại</th>\r\n <th className='text-end'>Số đơn hà ng</th>\r\n <th className='text-end'>Doanh thu</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n data: PropTypes.array,\r\n pageItem: PropTypes.number,\r\n pageIndex: PropTypes.number,\r\n onOpenDetail: PropTypes.func,\r\n detail: PropTypes.object,\r\n}\r\n\r\nTable.defaultProps = {\r\n data: [],\r\n pageItem: 10,\r\n pageIndex: 1,\r\n onOpenDetail: () => { },\r\n detail: {}\r\n}\r\n\r\nexport default Table","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Pagination } from '../../../components'\r\nimport { Filter, Table } from './components'\r\n\r\nconst dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' }\r\n\r\nconst now = new Date()\r\n\r\nconst StatisticPartnerOrder = () => {\r\n const [partners, setPartners] = useState(null)\r\n\r\n const [filters, setFilters] = useState({\r\n fromDate: new Date(now.getFullYear(), now.getMonth(), 1).toLocaleDateString('vi-VN', dateOptions),\r\n toDate: new Date(now.getFullYear(), now.getMonth() + 1, 0).toLocaleDateString('vi-VN', dateOptions),\r\n pageItem: 10,\r\n pageIndex: 1\r\n })\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n const [detail, setDetail] = useState({})\r\n\r\n useEffect(() => {\r\n const url = `/admin/statistic/order-by-partner?fromDate=${filters.fromDate}&toDate=${filters.toDate}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPagination(newPagination)\r\n setPartners(data.Result.Data)\r\n }\r\n })\r\n }, [filters])\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Thống kê đơn hà ng'\r\n }, []);\r\n\r\n const handleRowClick = item => {\r\n const partnerId = item.PartnerId\r\n let lst = [...partners];\r\n let newindex = lst.findIndex(n => n.PartnerId === item.PartnerId);\r\n let newItem = lst[newindex];\r\n let prevIndex = lst.findIndex(n => n.isSelected);\r\n if (prevIndex > -1) {\r\n let prev = lst[prevIndex];\r\n if (prev.PartnerId === newItem.PartnerId) {\r\n clearDetail()\r\n newItem.isSelected = false;\r\n }\r\n else {\r\n loadDetail(partnerId)\r\n prev.isSelected = false;\r\n newItem.isSelected = true;\r\n }\r\n }\r\n else {\r\n loadDetail(partnerId)\r\n newItem.isSelected = true;\r\n }\r\n setPartners(lst);\r\n }\r\n\r\n function loadDetail(partnerId) {\r\n const url = `/admin/statistic/order-by-partner-detail?partnerId=${partnerId}&fromDate=${filters.fromDate}&toDate=${filters.toDate}`\r\n const request = axios.get(url)\r\n request.then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setDetail(data.Result)\r\n }\r\n })\r\n }\r\n\r\n function clearDetail() {\r\n setDetail({})\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={(params) => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <Table\r\n pageItem={filters.pageItem}\r\n pageIndex={filters.pageIndex}\r\n data={partners}\r\n onOpenDetail={(item) => {\r\n handleRowClick(item)\r\n }}\r\n detail={detail}\r\n />\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex }\r\n setPagination(newPagination)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default StatisticPartnerOrder;","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, LoadingRow } from './../../../../../components'\r\n\r\nconst Table = props => {\r\n const renderTable = () => {\r\n let data = props.data\r\n if (data === null) return <LoadingRow colSpan={6} />\r\n else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n else {\r\n return data.map((item, index) => {\r\n return <tr key={item.ShippingUnitId}>\r\n <td className=\"text-center\">{(index + 1)}</td>\r\n <td>{item.ShippingUnitName}</td>\r\n <td>\r\n {renderStatus(item.ShippingUnitStatusId)}\r\n </td>\r\n <td>{item.Note}</td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n </td>\r\n <td>\r\n <ActionRow>\r\n <ActionItem right=\"shipping_unit_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sá»a' />\r\n <ActionItem right=\"shipping_unit_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className=\"text-danger\" />\r\n </ActionRow>\r\n </td>\r\n </tr>\r\n })\r\n }\r\n }\r\n\r\n const renderStatus = statusId => {\r\n if (statusId === 1) return <span className=\"badge bg-success\">Hoạt động</span>\r\n else return <span className=\"badge bg-warning\">Tạm khóa</span>\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>ÄÆ¡n vị váºn chuyển</th>\r\n <th>Trạng thái</th>\r\n <th>Ghi chú</th>\r\n <th>Ngà y tạo</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n data: PropTypes.array,\r\n onEdit: PropTypes.func,\r\n onDelete: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n data: null,\r\n onEdit: () => { },\r\n onDelete: () => { }\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst schema = yup.object().shape({\r\n ShippingUnitName: yup.string().required('Vui lòng nháºp tên đơn vị giao hà ng').max(100, 'Tên quá dà i'),\r\n StatusId: yup.number(),\r\n Note: yup.string().max(200, 'Ghi chú quá dà i')\r\n})\r\n\r\nconst ModalAdd = props => {\r\n const { register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i đơn vị váºn chuyển</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên đơn vị giao hà ng <span className=\"text-danger\">*</span></label>\r\n <input {...register('ShippingUnitName')} type=\"text\" className=\"form-control\" placeholder=\"Tên đơn vị giao hà ng\" />\r\n {errors.ShippingUnitName && <div className=\"validation-message\">{errors.ShippingUnitName.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <select {...register('StatusId')} className=\"form-select\">\r\n <option value=\"1\">Hoạt động</option>\r\n <option value=\"2\">Tạm khóa</option>\r\n </select>\r\n {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst schema = yup.object().shape({\r\n ShippingUnitName: yup.string().required('Vui lòng nháºp tên đơn vị giao hà ng').max(100, 'Tên quá dà i'),\r\n StatusId: yup.number(),\r\n Note: yup.string().max(200, 'Ghi chú quá dà i')\r\n})\r\n\r\nconst ModalEdit = props => {\r\n const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n setValue('ShippingUnitId', props.data.ShippingUnitId)\r\n setValue('ShippingUnitName', props.data.ShippingUnitName)\r\n setValue('StatusId', props.data.ShippingUnitStatusId)\r\n setValue('Note', props.data.Note)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a đơn vị váºn chuyển</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên đơn vị giao hà ng <span className=\"text-danger\">*</span></label>\r\n <input {...register('ShippingUnitName')} type=\"text\" className=\"form-control\" placeholder=\"Tên đơn vị giao hà ng\" />\r\n {errors.ShippingUnitName && <div className=\"validation-message\">{errors.ShippingUnitName.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <select {...register('StatusId')} className=\"form-select\">\r\n <option value=\"1\">Hoạt động</option>\r\n <option value=\"2\">Tạm khóa</option>\r\n </select>\r\n {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n );\r\n};\r\n\r\nModalEdit.propTypes = {\r\n data: PropTypes.object,\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n data: {},\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false\r\n}\r\n\r\nexport default ModalEdit","import axios from 'axios';\r\nimport React, { Fragment, useEffect, useState } from 'react';\r\nimport { IoAddCircleOutline } from 'react-icons/io5';\r\nimport { Notification, AuthAdminView, IconButton } from '../../../components';\r\nimport { ModalAdd, ModalEdit, Table } from './components';\r\n\r\nconst ShippingUnitPage = props => {\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'ÄÆ¡n vị váºn chuyển';\r\n loadShippingUnit();\r\n }, []);\r\n\r\n // State trạng thái đóng mở modal thêm má»›i đơn vị váºn chuyển\r\n const [isShowModalShippingUnitAdd, setIsShowModalShippingUnitAdd] = useState(false);\r\n\r\n // State trạng thái đóng mở modal chỉnh sá»a đơn vị váºn chuyển\r\n const [isShowModalShippingUnitEdit, setIsShowModalShippingUnitEdit] = useState(false);\r\n\r\n // State lưu danh sách đơn vị váºn chuyển\r\n const [shippingUnit, setShippingUnit] = useState(null);\r\n\r\n // State lưu thông tin chi tiết đơn vị giao hà ng cho chỉnh sá»a\r\n const [shippingUnitEditInfo, setShippingUnitEditInfo] = useState({});\r\n\r\n // Load danh sách đơn vị váºn chuyển\r\n const loadShippingUnit = () => {\r\n const url = '/admin/shipping-unit/get-all';\r\n axios.get(url).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n setShippingUnit(data.Result);\r\n }\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <AuthAdminView right=\"shipping_unit_add\">\r\n <IconButton\r\n className=\"mb-2\"\r\n text=\"Thêm má»›i\"\r\n icon={<IoAddCircleOutline />}\r\n onClick={() => {\r\n setIsShowModalShippingUnitAdd(true)\r\n }}\r\n />\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n <Table\r\n data={shippingUnit}\r\n onEdit={item => {\r\n const url = `/admin/shipping-unit/get-by-id?id=${item.ShippingUnitId}`;\r\n axios.get(url).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n setShippingUnitEditInfo(data.Result);\r\n setIsShowModalShippingUnitEdit(true);\r\n }\r\n })\r\n }}\r\n onDelete={item => {\r\n Notification.confirmHtml('Bạn có chắc muốn xóa đơn vị váºn chuyển', item.ShippingUnitName, () => {\r\n const url = `/admin/shipping-unit/delete?id=${item.ShippingUnitId}`;\r\n axios.post(url).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n loadShippingUnit();\r\n Notification.success('Xóa đơn vị giao hà ng thà nh công');\r\n }\r\n })\r\n })\r\n }} />\r\n </div>\r\n </div>\r\n\r\n {/* Modal thêm má»›i đơn vị giao hà ng */}\r\n <ModalAdd\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/shipping-unit/create';\r\n axios.post(url, formData).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n loadShippingUnit();\r\n setIsShowModalShippingUnitAdd(false);\r\n Notification.success('Thêm má»›i đơn vị giao hà ng thà nh công');\r\n }\r\n setIsBusy(false)\r\n });\r\n }}\r\n onClose={() => {\r\n setIsShowModalShippingUnitAdd(false)\r\n }}\r\n isShow={isShowModalShippingUnitAdd} />\r\n\r\n {/* Modal chỉnh sá»a đơn vị giao hà ng */}\r\n <ModalEdit\r\n data={shippingUnitEditInfo}\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/shipping-unit/update';\r\n axios.post(url, formData).then(res => {\r\n let data = res.data;\r\n if (data.IsSuccess) {\r\n setShippingUnitEditInfo({});\r\n loadShippingUnit();\r\n setIsShowModalShippingUnitEdit(false);\r\n Notification.success('Chỉnh sá»a đơn vị giao hà ng thà nh công');\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setShippingUnitEditInfo({});\r\n setIsShowModalShippingUnitEdit(false);\r\n }}\r\n isShow={isShowModalShippingUnitEdit} />\r\n </Fragment>\r\n );\r\n}\r\n\r\nexport default ShippingUnitPage;","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, CustomSelect, InputSelect } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst schema = yup.object().shape({\r\n FullName: yup.string().required('Vui lòng nháºp há» tên').max(100, 'Há» tên quá dà i'),\r\n UserName: yup.string().required('Vui lòng nháºp tà i khoản').max(70, 'Tà i khoản quá dà i'),\r\n Password: yup.string().required('Vui lòng nháºp máºt khẩu').max(70, 'Máºt khẩu quá dà i'),\r\n Email: yup.string().required('Vui lòng nháºp email').email('Email không đúng').max(70, 'Email quá dà i'),\r\n Phone: yup.string().required('Vui lòng nháºp số Ä‘iện thoại').max(20, 'Số Ä‘iện thoại quá dà i'),\r\n StatusId: yup.number(),\r\n RoleId: yup.number().required('Vui lòng chá»n vai trò')\r\n})\r\n\r\nconst statusOptions = [\r\n {\r\n value: 1,\r\n label: 'Hoạt động'\r\n },\r\n {\r\n value: 2,\r\n label: 'Tạm khóa'\r\n }\r\n]\r\n\r\nfunction ModalAddUser(props) {\r\n const { control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema),\r\n defaultValues: {\r\n StatusId: 1\r\n }\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [roleOptions, setRoleOptions] = useState([])\r\n\r\n useEffect(() => {\r\n const roles = props.role.map(item => {\r\n return {\r\n value: item.RoleId,\r\n label: item.RoleName\r\n }\r\n })\r\n setRoleOptions(roles)\r\n }, [props.role])\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i thà nh viên</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Há» tên <span className=\"text-danger\">*</span></label>\r\n <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Há» tên\" />\r\n {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tà i khoản <span className=\"text-danger\">*</span></label>\r\n <input {...register('UserName')} type=\"text\" className=\"form-control\" placeholder=\"Tà i khoản\" />\r\n {errors.UserName && <div className=\"validation-message\">{errors.UserName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Máºt khẩu <span className=\"text-danger\">*</span></label>\r\n <input {...register('Password')} type=\"password\" className=\"form-control\" placeholder=\"Máºt khẩu\" />\r\n {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n <input {...register('Email')} type=\"text\" className=\"form-control\" placeholder=\"Email\" />\r\n {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Äiện thoại <span className=\"text-danger\">*</span></label>\r\n <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Äiện thoại\" />\r\n {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Vai trò <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"RoleId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <CustomSelect\r\n isClearable={false}\r\n isSearchable={false}\r\n options={roleOptions}\r\n value={value}\r\n onChange={onChange}\r\n placeholder='Vai trò'\r\n />\r\n )}\r\n />\r\n {errors.RoleId && <div className=\"validation-message\">{errors.RoleId.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <Controller\r\n control={control}\r\n name=\"StatusId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <InputSelect\r\n variant='success'\r\n options={statusOptions}\r\n value={value}\r\n onChange={onChange}\r\n />\r\n )}\r\n />\r\n {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAddUser.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n role: PropTypes.array\r\n}\r\n\r\nModalAddUser.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n role: []\r\n}\r\n\r\nexport default ModalAddUser","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton, CustomSelect, InputSelect } from './../../../../../components'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst schema = yup.object().shape({\r\n UserId: yup.number(),\r\n FullName: yup.string().required('Vui lòng nháºp há» tên').max(100, 'Há» tên quá dà i'),\r\n UserName: yup.string().required('Vui lòng nháºp tà i khoản').max(70, 'Tà i khoản quá dà i'),\r\n Email: yup.string().required('Vui lòng nháºp email').email('Email không đúng').max(70, 'Email quá dà i'),\r\n Phone: yup.string().required('Vui lòng nháºp số Ä‘iện thoại').max(20, 'Số Ä‘iện thoại quá dà i'),\r\n StatusId: yup.number(),\r\n RoleId: yup.number().required('Vui lòng chá»n vai trò')\r\n})\r\n\r\nconst statusOptions = [\r\n {\r\n value: 1,\r\n label: 'Hoạt động'\r\n },\r\n {\r\n value: 2,\r\n label: 'Tạm khóa'\r\n }\r\n]\r\n\r\nfunction ModalEditUser(props) {\r\n const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [roleOptions, setRoleOptions] = useState([])\r\n\r\n useEffect(() => {\r\n const roles = props.role.map(item => {\r\n return {\r\n value: item.RoleId,\r\n label: item.RoleName\r\n }\r\n })\r\n setRoleOptions(roles)\r\n }, [props.role])\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n let info = props.info\r\n setValue('UserId', info.UserId)\r\n setValue('FullName', info.FullName)\r\n setValue('UserName', info.UserName)\r\n setValue('Email', info.Email)\r\n setValue('Phone', info.Phone)\r\n setValue('StatusId', info.StatusId)\r\n setValue('RoleId', info.RoleId)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a thà nh viên</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Há» tên <span className=\"text-danger\">*</span></label>\r\n <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Há» tên\" />\r\n {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tà i khoản <span className=\"text-danger\">*</span></label>\r\n <input {...register('UserName')} type=\"text\" className=\"form-control\" placeholder=\"Tà i khoản\" />\r\n {errors.UserName && <div className=\"validation-message\">{errors.UserName.message}</div>}\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n <input {...register('Email')} type=\"text\" className=\"form-control\" placeholder=\"Email\" />\r\n {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Äiện thoại <span className=\"text-danger\">*</span></label>\r\n <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Äiện thoại\" />\r\n {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Vai trò <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"RoleId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <CustomSelect\r\n isClearable={false}\r\n isSearchable={false}\r\n options={roleOptions}\r\n value={value}\r\n onChange={onChange}\r\n placeholder='Vai trò'\r\n />\r\n )}\r\n />\r\n {errors.RoleId && <div className=\"validation-message\">{errors.RoleId.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <Controller\r\n control={control}\r\n name=\"StatusId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <InputSelect\r\n variant='success'\r\n options={statusOptions}\r\n value={value}\r\n onChange={onChange}\r\n />\r\n )}\r\n />\r\n {errors.StatusId && <div className=\"validation-message\">{errors.StatusId.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEditUser.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n role: PropTypes.array,\r\n info: PropTypes.object\r\n}\r\n\r\nModalEditUser.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n role: [],\r\n info: {}\r\n}\r\n\r\nexport default ModalEditUser","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoKeyOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, LoadingRow } from './../../../../../components'\r\n\r\nfunction Table(props) {\r\n const renderTable = () => {\r\n let data = props.data\r\n if (data === null) return <LoadingRow colSpan={8} />\r\n else if (data.length === 0) return <EmptyRow colSpan={8} />\r\n else return data.map((item, index) => <tr key={item.UserId}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>{item.FullName}</td>\r\n <td>{item.UserName}</td>\r\n <td>{item.Phone}</td>\r\n <td>{item.Email}</td>\r\n <td>{item.RoleName}</td>\r\n <td>\r\n {renderStatus(item.StatusId)}\r\n </td>\r\n <td>\r\n <ActionRow>\r\n <ActionItem right=\"user_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sá»a' />\r\n <ActionItem right=\"user_set_password\" onClick={() => props.onSetPwd(item)} icon={<IoKeyOutline />} title='Äặt lại máºt khẩu' />\r\n </ActionRow>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n const renderStatus = statusId => {\r\n if (statusId === 1) return <span className=\"badge bg-success\">Hoạt động</span>\r\n else return <span className=\"badge bg-warning\">Tạm khóa</span>\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Há» tên</th>\r\n <th>Tà i khoản</th>\r\n <th>Äiện thoại</th>\r\n <th>Email</th>\r\n <th>Vai trò</th>\r\n <th>Trạng thái</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n data: PropTypes.array,\r\n onEdit: PropTypes.func,\r\n onSetPwd: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n data: null,\r\n onEdit: () => { },\r\n onSetPwd: () => { }\r\n}\r\n\r\nexport default Table","import PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\nimport Select from 'react-select'\r\n\r\nconst filters = {\r\n keyword: '',\r\n roleId: 0\r\n}\r\n\r\nfunction Filter(props) {\r\n const { onSearch, roles } = props\r\n\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const [role, setRole] = useState(null)\r\n\r\n const [roleOptions, setRoleOptions] = useState([])\r\n\r\n useEffect(() => {\r\n let data = roles.map(item => {\r\n return {\r\n value: item.RoleId,\r\n label: item.RoleName\r\n }\r\n })\r\n setRoleOptions(data)\r\n }, [roles])\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClear = () => {\r\n setKeyword('')\r\n filters.keyword = ''\r\n setRole(null)\r\n filters.roleId = 0\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n <input value={keyword}\r\n autoFocus\r\n onChange={e => {\r\n setKeyword(e.target.value)\r\n }} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Há» tên, email, Ä‘iện thoại\" />\r\n </div>\r\n <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={true}\r\n placeholder='Vai trò'\r\n options={roleOptions}\r\n value={role}\r\n onChange={item => {\r\n if (item !== null) {\r\n setRole(item)\r\n filters.roleId = item.value\r\n }\r\n else {\r\n setRole(null)\r\n filters.roleId = 0\r\n }\r\n }}\r\n />\r\n </div>\r\n <div className=\"col-sm-4 col-md-4 col-lg-6 col-xl-6 col-xxl-8\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClear} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func,\r\n roles: PropTypes.array\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { },\r\n roles: []\r\n}\r\n\r\nexport default Filter","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n NewPassword: yup.string().required('Vui lòng nháºp máºt khẩu má»›i').max(70, 'Máºt khẩu quá dà i')\r\n})\r\n\r\nfunction ModalUserSetPwd(props) {\r\n const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n setValue('UserId', props.userId)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Äặt lại máºt khẩu</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => props.onSave(formData, setIsBusy))}>\r\n <Modal.Body>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Máºt khẩu má»›i <span className=\"text-danger\">*</span></label>\r\n <input {...register('NewPassword')} type=\"password\" className=\"form-control\" placeholder=\"Máºt khẩu má»›i\" />\r\n {errors.NewPassword && <div className=\"validation-message\">{errors.NewPassword.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalUserSetPwd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n userId: PropTypes.number\r\n}\r\n\r\nModalUserSetPwd.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n userId: 0\r\n}\r\n\r\nexport default ModalUserSetPwd\r\n\r\n","import React, { Fragment, useEffect, useState } from 'react'\r\nimport { Filter } from './components'\r\nimport { IconButton, Notification, AuthAdminView } from './../../../components'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { Table, ModalAddUser, ModalEditUser, ModalUserSetPwd } from './components'\r\nimport axios from 'axios'\r\n\r\nfunction UserPage(props) {\r\n const [userList, setUserList] = useState(null)\r\n\r\n const [isShowModalUserAdd, setIsShowModalUserAdd] = useState(false)\r\n\r\n const [isShowModalUserEdit, setIsShowModalUserEdit] = useState(false)\r\n\r\n const [infoModalUserSetPwd, setInfoModalUserSetPwd] = useState({\r\n isShow: false,\r\n userId: 0\r\n })\r\n\r\n const [roleList, setRoleList] = useState([])\r\n\r\n const [userEditInfo, setUserEditInfo] = useState({})\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Thà nh viên'\r\n\r\n loadRole()\r\n }, [])\r\n\r\n const [filters, setFilters] = useState({\r\n keyword: '',\r\n roleId: 0\r\n })\r\n\r\n useEffect(() => {\r\n const url = `/admin/user/filter?keyword=${filters.keyword}&roleId=${filters.roleId}`\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setUserList(data.Result)\r\n }\r\n })\r\n }, [filters])\r\n\r\n const loadRole = () => {\r\n const url = '/admin/role/get-dropdown'\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setRoleList(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const reloadUser = () => [\r\n setFilters({\r\n ...filters\r\n })\r\n ]\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={params => {\r\n const newFilters = {\r\n ...filters,\r\n ...params\r\n }\r\n setFilters(newFilters)\r\n }}\r\n roles={roleList}\r\n />\r\n\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <AuthAdminView right=\"user_add\">\r\n <IconButton\r\n className=\"mb-2\"\r\n icon={<IoAddCircleOutline />}\r\n text=\"Thêm má»›i\"\r\n onClick={() => {\r\n setIsShowModalUserAdd(true)\r\n }} />\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n <Table\r\n data={userList}\r\n onEdit={item => {\r\n const url = `/admin/user/get-by-id?id=${item.UserId}`\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setUserEditInfo(data.Result)\r\n setIsShowModalUserEdit(true)\r\n }\r\n })\r\n }}\r\n onSetPwd={item => {\r\n setInfoModalUserSetPwd({\r\n isShow: true,\r\n userId: item.UserId\r\n })\r\n }}\r\n />\r\n </div>\r\n </div>\r\n\r\n <ModalAddUser\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/user/create'\r\n axios.post(url, formData).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n reloadUser()\r\n setIsShowModalUserAdd(false)\r\n Notification.success('Thêm má»›i thà nh viên thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalUserAdd(false)\r\n }}\r\n isShow={isShowModalUserAdd}\r\n role={roleList}\r\n />\r\n\r\n <ModalEditUser\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/user/update'\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n reloadUser()\r\n setIsShowModalUserEdit(false)\r\n Notification.success('Chỉnh sá»a thà nh viên thà nh công')\r\n setUserEditInfo({})\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setUserEditInfo({})\r\n setIsShowModalUserEdit(false)\r\n }}\r\n isShow={isShowModalUserEdit}\r\n role={roleList}\r\n info={userEditInfo}\r\n />\r\n\r\n <ModalUserSetPwd\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/user/set-password'\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setInfoModalUserSetPwd({\r\n isShow: false,\r\n userId: 0\r\n })\r\n Notification.success('Äặt lại máºt khẩu thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setInfoModalUserSetPwd({\r\n isShow: false,\r\n userId: 0\r\n })\r\n }}\r\n isShow={infoModalUserSetPwd.isShow}\r\n userId={infoModalUserSetPwd.userId}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default UserPage","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { yupResolver } from '@hookform/resolvers/yup'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n RoleName: yup.string().required('Vui lòng nháºp tên vai trò').max(50, 'Tên vai trò quá dà i'),\r\n RoleNote: yup.string().max(100, 'Ghi chú quá dà i')\r\n})\r\n\r\nfunction ModalAdd(props) {\r\n const { register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i vai trò</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên vai trò <span className=\"text-danger\">*</span></label>\r\n <input {...register('RoleName')} type=\"text\" className=\"form-control\" placeholder=\"Tên vai trò\" />\r\n {errors.RoleName && <div className=\"validation-message\">{errors.RoleName.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('RoleNote')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.RoleNote && <div className=\"validation-message\">{errors.RoleNote.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n RoleId: yup.number(),\r\n RoleName: yup.string().required('Vui lòng nháºp tên vai trò').max(50, 'Tên vai trò quá dà i'),\r\n RoleNote: yup.string().max(100, 'Ghi chú quá dà i')\r\n})\r\n\r\nfunction ModalEdit(props) {\r\n const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n let info = props.info\r\n setValue('RoleId', info.RoleId)\r\n setValue('RoleName', info.RoleName)\r\n setValue('RoleNote', info.RoleNote)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i vai trò</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên vai trò <span className=\"text-danger\">*</span></label>\r\n <input {...register('RoleName')} type=\"text\" className=\"form-control\" placeholder=\"Tên vai trò\" />\r\n {errors.RoleName && <div className=\"validation-message\">{errors.RoleName.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('RoleNote')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.RoleNote && <div className=\"validation-message\">{errors.RoleNote.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n info: PropTypes.object\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n info: {}\r\n}\r\n\r\nexport default ModalEdit","import PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nfunction ModalPermission(props) {\r\n const [rightList, setRightList] = useState([])\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n function onRightChange(rightId, e) {\r\n let isChecked = e.target.checked\r\n if (isChecked) {\r\n\r\n let newList = [...rightList]\r\n let index = newList.indexOf(rightId)\r\n if (index < 0) {\r\n newList.push(rightId)\r\n setRightList(newList)\r\n }\r\n }\r\n else {\r\n let newList = [...rightList]\r\n let index = newList.indexOf(rightId)\r\n if (index > -1) {\r\n newList.splice(index, 1)\r\n setRightList(newList)\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"lg\"\r\n onExited={() => {\r\n setRightList([])\r\n }}\r\n onShow={() => {\r\n let groups = props.info\r\n let inputList = []\r\n groups.forEach(item => {\r\n const rightCheckedList = item.Rights.filter(x => x.IsAllow)\r\n const arrRight = rightCheckedList.map(x => x.RightId)\r\n inputList = inputList.concat(arrRight);\r\n })\r\n setRightList(inputList)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Phân quyá»n vai trò</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <div className=\"row\">\r\n {\r\n props.info.map(item => <div className=\"col-md-3\" key={item.RightGroupId}>\r\n <label className=\"fw-bold mb-1\">{item.RightGroupName}</label>\r\n <div className=\"form-group ms-1\">\r\n {\r\n item.Rights.map(right => <div className=\"form-check form-checkbox-success mb-1\" key={right.RightId}>\r\n <input type=\"checkbox\" className=\"form-check-input\"\r\n defaultChecked={right.IsAllow}\r\n id={right.RightId}\r\n onChange={e => onRightChange(right.RightId, e)}\r\n />\r\n <label className=\"form-check-label\" htmlFor={right.RightId}>{right.RightName}</label>\r\n </div>)\r\n }\r\n </div>\r\n </div>)\r\n }\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton type=\"button\" isBusy={isBusy}\r\n onClick={() => {\r\n props.onSave(rightList, props.roleId, setIsBusy)\r\n }} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalPermission.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n info: PropTypes.array,\r\n roleId: PropTypes.number\r\n}\r\n\r\nModalPermission.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n info: [],\r\n roleId: 0\r\n}\r\n\r\nexport default ModalPermission","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoTicketOutline, IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, FormatNumber, LoadingRow } from './../../../../../components'\r\n\r\nfunction Table(props) {\r\n const renderTable = () => {\r\n let data = props.data\r\n if (data === null) return <LoadingRow colSpan={6} />\r\n else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n else return data.map((item, index) => <tr key={item.RoleId}>\r\n <td>{index + 1}</td>\r\n <td>{item.RoleName}</td>\r\n <td>{item.RoleNote}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.UserCount}\r\n </FormatNumber>\r\n </td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n </td>\r\n <td>\r\n <ActionRow>\r\n <ActionItem right=\"role_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sá»a' />\r\n <ActionItem right=\"role_permission\" onClick={() => props.onPermission(item)} icon={<IoTicketOutline />} title='Phân quyá»n' />\r\n <ActionItem right=\"role_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className='text-danger' />\r\n </ActionRow>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <div className=\"table-responseive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Vai trò</th>\r\n <th>Ghi chú</th>\r\n <th className='text-end'>Thà nh viên</th>\r\n <th>Ngà y tạo</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n onEdit: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n onPermission: PropTypes.func,\r\n data: PropTypes.array\r\n}\r\n\r\nTable.defaultProps = {\r\n onSave: () => { },\r\n onDelete: () => { },\r\n onPermission: () => { },\r\n data: null\r\n}\r\n\r\nexport default Table","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { IconButton, Notification, AuthAdminView } from './../../../components'\r\nimport { ModalAdd, ModalEdit, ModalPermission, Table } from './components'\r\n\r\nfunction RolePage(props) {\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Vai trò'\r\n loadRole()\r\n }, [])\r\n\r\n const [isShowModalRoleAdd, setIsShowModalRoleAdd] = useState(false)\r\n\r\n const [infoModalRoleEdit, setInfoModalRoleEdit] = useState({\r\n isShow: false,\r\n info: {}\r\n })\r\n\r\n const [infoModalPer, setInfoModalPer] = useState({\r\n isShow: false,\r\n info: [],\r\n roleId: 0\r\n })\r\n\r\n const [roleList, setRoleList] = useState(null)\r\n\r\n const loadRole = () => {\r\n const url = '/admin/role/get-all'\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setRoleList(data.Result)\r\n }\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <AuthAdminView right=\"role_add\">\r\n <IconButton\r\n className=\"mb-2\"\r\n text=\"Thêm má»›i\"\r\n icon={<IoAddCircleOutline />}\r\n onClick={() => {\r\n setIsShowModalRoleAdd(true)\r\n }}\r\n />\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n <Table\r\n onEdit={item => {\r\n const url = `/admin/role/get-by-id?id=${item.RoleId}`\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setInfoModalRoleEdit({\r\n isShow: true,\r\n info: data.Result\r\n })\r\n }\r\n })\r\n\r\n }}\r\n onPermission={item => {\r\n const url = `/admin/role/get-permission?id=${item.RoleId}`\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setInfoModalPer({\r\n isShow: true,\r\n info: data.Result,\r\n roleId: item.RoleId\r\n })\r\n }\r\n })\r\n }}\r\n onDelete={item => {\r\n Notification.confirmHtml('Bạn có chắc muốn xóa vai trò', item.RoleName, () => {\r\n const url = `/admin/role/delete?id=${item.RoleId}`\r\n axios.post(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n loadRole()\r\n Notification.success('Xóa vai trò thà nh công')\r\n }\r\n })\r\n })\r\n }}\r\n data={roleList}\r\n />\r\n </div>\r\n </div>\r\n\r\n <ModalAdd\r\n onSave={(formData, setIsBusy) => {\r\n const url = '/admin/role/create'\r\n setIsBusy(true)\r\n axios.post(url, formData).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n loadRole()\r\n setIsShowModalRoleAdd(false)\r\n Notification.success('Thêm má»›i vai trò thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalRoleAdd(false)\r\n }}\r\n isShow={isShowModalRoleAdd}\r\n />\r\n\r\n <ModalEdit\r\n onSave={(formData, setIsBusy) => {\r\n const url = '/admin/role/update'\r\n setIsBusy(true)\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n loadRole()\r\n setInfoModalRoleEdit({\r\n isShow: false,\r\n info: {}\r\n })\r\n Notification.success('Chỉnh sá»a vai trò thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setInfoModalRoleEdit({\r\n isShow: false,\r\n info: {}\r\n })\r\n }}\r\n isShow={infoModalRoleEdit.isShow}\r\n info={infoModalRoleEdit.info}\r\n />\r\n\r\n <ModalPermission\r\n onSave={(rightList, roleId, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/role/update-permission'\r\n const reqInfo = {\r\n RoleId: roleId,\r\n Rights: rightList\r\n }\r\n axios.post(url, reqInfo).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n setInfoModalPer({\r\n isShow: false,\r\n info: [],\r\n roleId: 0\r\n })\r\n Notification.success('Phân quyá»n vai trò thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setInfoModalPer({\r\n isShow: false,\r\n info: [],\r\n roleId: 0\r\n })\r\n }}\r\n isShow={infoModalPer.isShow}\r\n info={infoModalPer.info}\r\n roleId={infoModalPer.roleId}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default RolePage","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n keyword: ''\r\n}\r\n\r\nfunction Filter(props) {\r\n const { onSearch } = props\r\n\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClear = () => {\r\n setKeyword('')\r\n filters.keyword = ''\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n <input value={keyword}\r\n autoFocus\r\n onChange={e => {\r\n const value = e.target.value\r\n setKeyword(value)\r\n filters.keyword = value\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleSearch()\r\n }\r\n }}\r\n type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Tiêu Ä‘á»\" />\r\n </div>\r\n <div className=\"col-sm-8 col-md-8 col-lg-9 col-xl-9 col-xxl-8\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClear} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoEllipseSharp, IoTrashOutline } from 'react-icons/io5'\r\nimport { ActionItem, ActionRow, EmptyRow, FormatNumber, LoadingRow } from '../../../../../components'\r\n\r\nfunction Table(props) {\r\n\r\n function renderTable() {\r\n let data = props.data\r\n if (data === null) return <LoadingRow colSpan={6} />\r\n else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n else return data.map((item, index) => <tr key={item.PopupId}>\r\n <td className=\"text-center\">\r\n <FormatNumber>\r\n {(props.pageItem * (props.pageIndex - 1)) + index + 1}\r\n </FormatNumber>\r\n </td>\r\n <td>{item.Title}</td>\r\n <td>{renderType(item.TypeId)}</td>\r\n <td className='text-end text-primary'>\r\n <FormatNumber>\r\n {item.CountPartner}\r\n </FormatNumber>\r\n </td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\">{item.CreatedTime}</small>\r\n </td>\r\n <td>\r\n <ActionRow>\r\n <ActionItem right=\"popup_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sá»a' />\r\n <ActionItem right=\"popup_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className='text-danger' />\r\n </ActionRow>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n function renderType(typeId) {\r\n if (typeId === 1) return <><IoEllipseSharp className=\"text-info mt--3-px\" /> Cá»™ng tác viên</>\r\n else if (typeId === 2) return <><IoEllipseSharp className=\"text-primary mt--3-px\" /> Cá»™ng tác viên chưa kÃch hoạt</>\r\n else return <><IoEllipseSharp className=\"text-warning mt--3-px\" /> Nhóm cá»™ng tác viên</>\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tiêu Ä‘á»</th>\r\n <th>Loại</th>\r\n <th className='text-end'>CTV nháºn</th>\r\n <th>Ngà y tạo</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n onEdit: PropTypes.func,\r\n onDelete: PropTypes.func,\r\n data: PropTypes.array,\r\n pageItem: PropTypes.number,\r\n pageIndex: PropTypes.number,\r\n}\r\n\r\nTable.defaultProps = {\r\n onEdit: () => { },\r\n onDelete: () => { },\r\n data: null,\r\n pageItem: 0,\r\n pageIndex: 0,\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport Select from 'react-select'\r\nimport AsyncSelect from 'react-select/async'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport { debounce } from 'lodash'\r\n\r\nconst schema = yup.object().shape({\r\n Title: yup.string().required('Vui lòng nháºp tiêu Ä‘á»').max(200, 'Tiêu đỠquá dà i'),\r\n PopupTypeId: yup.mixed().oneOf([1, 2, 3], 'Vui lòng chá»n loại popup'),\r\n PartnerId: yup.number().when('PopupTypeId', {\r\n is: 1,\r\n then: yup.number().required('Vui lòng chá»n cá»™ng tác viên')\r\n }),\r\n GroupId: yup.number().when('PopupTypeId', {\r\n is: 3,\r\n then: yup.number().required('Vui lòng chá»n nhóm cá»™ng tác viên')\r\n }),\r\n Content: yup.string().required('Vui lòng nháºp ná»™i dung').max(4_000, 'Ná»™i dung quá dà i')\r\n})\r\n\r\nconst poupTypes = [\r\n { value: 0, label: 'Loại popup' },\r\n { value: 1, label: 'Cá»™ng tác viên' },\r\n { value: 2, label: 'Cá»™ng tác viên chưa kÃch hoạt' },\r\n { value: 3, label: 'Nhóm cá»™ng tác viên' }\r\n]\r\n\r\nconst loadOptions = (inputValue, callback) => {\r\n const url = `/admin/partner/dropdown-filter?keyword=${inputValue}&pageItem=5&pageIndex=1`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n let partnerLst = data.Result.Data.map(item => {\r\n return {\r\n value: item.PartnerId,\r\n label: item.FullName + ` (${item.Email})`\r\n }\r\n })\r\n callback(partnerLst)\r\n }\r\n })\r\n}\r\n\r\nconst ModalAdd = props => {\r\n const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [popupType, setPopupType] = useState(0)\r\n\r\n const [isShowCTV, setIsShowCTV] = useState(false)\r\n\r\n const [isShowGroup, setIsShowGroup] = useState(false)\r\n\r\n useEffect(() => {\r\n if (popupType !== 0) {\r\n switch (popupType) {\r\n case 1:\r\n setIsShowCTV(true)\r\n setIsShowGroup(false)\r\n break\r\n case 2:\r\n setIsShowCTV(false)\r\n setIsShowGroup(false)\r\n break\r\n default: // 3\r\n setIsShowCTV(false)\r\n setIsShowGroup(true)\r\n break\r\n }\r\n }\r\n else {\r\n setIsShowCTV(false)\r\n setIsShowGroup(false)\r\n }\r\n }, [popupType])\r\n\r\n const renderPartner = () => {\r\n if (isShowCTV) {\r\n return <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Cá»™ng tác viên <span className=\"text-danger\">*</span></label>\r\n <AsyncSelect\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n placeholder='Cá»™ng tác viên'\r\n cacheOptions\r\n defaultOptions\r\n loadOptions={debounce(loadOptions, 250)}\r\n onChange={item => setValue('PartnerId', item.value)}\r\n loadingMessage={() => \"Äang tìm kiếm\"}\r\n noOptionsMessage={() => \"Không tìm thấy dữ liệu\"}\r\n />\r\n {errors.PartnerId && <div className=\"validation-message\">{errors.PartnerId.message}</div>}\r\n </div>\r\n }\r\n }\r\n\r\n const renderGroup = () => {\r\n if (isShowGroup) {\r\n const partnerGroup = props.partnerGroup.map(item => {\r\n return {\r\n value: item.GroupId,\r\n label: item.GroupName\r\n }\r\n })\r\n return <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Nhóm cá»™ng tác viên <span className=\"text-danger\">*</span></label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n defaultValue={partnerGroup[0]}\r\n isSearchable={false}\r\n options={partnerGroup}\r\n onChange={item => {\r\n setValue('GroupId', item.value)\r\n }}\r\n />\r\n </div>\r\n }\r\n }\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n onExited={() => {\r\n reset()\r\n setIsShowCTV(false)\r\n setIsShowGroup(false)\r\n }}\r\n onShow={() => {\r\n setValue(\"PopupTypeId\", 0)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i popup</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tiêu đỠ<span className=\"text-danger\">*</span></label>\r\n <input {...register('Title')} type=\"text\" className=\"form-control\" placeholder=\"Tiêu Ä‘á»\" />\r\n {errors.Title && <div className=\"validation-message\">{errors.Title.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Loại popup <span className=\"text-danger\">*</span></label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n defaultValue={poupTypes[0]}\r\n isSearchable={false}\r\n options={poupTypes}\r\n onChange={item => {\r\n setPopupType(item.value)\r\n setValue(\"PopupTypeId\", item.value)\r\n }}\r\n />\r\n {errors.PopupTypeId && <div className=\"validation-message\">{errors.PopupTypeId.message}</div>}\r\n </div>\r\n {renderPartner()}\r\n {renderGroup()}\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ná»™i dung <span className=\"text-danger\">*</span></label>\r\n <textarea {...register('Content')} rows=\"3\" className=\"form-control\" placeholder=\"Ná»™i dung\"></textarea>\r\n {errors.Content && <div className=\"validation-message\">{errors.Content.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n partnerGroup: PropTypes.array\r\n}\r\n\r\nModalAdd.defaultPropts = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n partnerGroup: []\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n Title: yup.string().required('Vui lòng nháºp tiêu Ä‘á»').max(200, 'Tiêu đỠquá dà i'),\r\n Content: yup.string().required('Vui lòng nháºp ná»™i dung').max(4_000, 'Ná»™i dung quá dà i')\r\n})\r\n\r\nconst ModalEdit = props => {\r\n const { register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n let info = props.info\r\n setValue('PopupId', info.PopupId)\r\n setValue('Title', info.Title)\r\n setValue('Content', info.Content)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a popup</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tiêu đỠ<span className=\"text-danger\">*</span></label>\r\n <input {...register('Title')} type=\"text\" className=\"form-control\" placeholder=\"Tiêu Ä‘á»\" />\r\n {errors.Title && <div className=\"validation-message\">{errors.Title.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ná»™i dung <span className=\"text-danger\">*</span></label>\r\n <textarea {...register('Content')} rows=\"3\" className=\"form-control\" placeholder=\"Ná»™i dung\"></textarea>\r\n {errors.Content && <div className=\"validation-message\">{errors.Content.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n info: PropTypes.object\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n info: {}\r\n}\r\n\r\nexport default ModalEdit\r\n\r\n","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { IconButton, Notification, Pagination, AuthAdminView } from './../../../components'\r\nimport { Filter, Table, ModalAdd, ModalEdit } from './components'\r\n\r\nfunction PopupPage(props) {\r\n const [popupList, setPopupList] = useState(null)\r\n\r\n const [isShowModalPopupAdd, setIsShowModalPopupAdd] = useState(false)\r\n\r\n const [partnerGoupList, setPartnerGroupList] = useState([])\r\n\r\n const [popupEditInfo, setPopupEditInfo] = useState({\r\n isShow: false,\r\n info: {}\r\n })\r\n\r\n const [filters, setFilters] = useState({\r\n keyword: '',\r\n pageItem: 10,\r\n pageIndex: 1\r\n })\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Popup'\r\n loadPartnerGroup()\r\n }, [])\r\n\r\n useEffect(() => {\r\n const url = `/admin/popup/filter?keyword=${filters.keyword}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPagination(newPagination)\r\n setPopupList(data.Result.Data)\r\n }\r\n })\r\n }, [filters])\r\n\r\n const loadPartnerGroup = () => {\r\n const url = '/admin/partner-group/get-all'\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n setPartnerGroupList(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const reloadPopup = () => {\r\n setFilters({\r\n ...filters,\r\n pageIndex: 1\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={params => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <AuthAdminView right=\"popup_add\">\r\n <IconButton\r\n className=\"mb-2\"\r\n text=\"Thêm má»›i\"\r\n icon={<IoAddCircleOutline />}\r\n onClick={() => {\r\n setIsShowModalPopupAdd(true)\r\n }} />\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n\r\n <Table\r\n pageItem={filters.pageItem}\r\n pageIndex={filters.pageIndex}\r\n onEdit={item => {\r\n const url = `/admin/popup/get-by-id?popupId=${item.PopupId}`\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n setPopupEditInfo({\r\n isShow: true,\r\n info: data.Result\r\n })\r\n }\r\n })\r\n }}\r\n onDelete={item => {\r\n Notification.confirmHtml('Bạn có chắc muốn xóa popup', item.Title, () => {\r\n const url = `/admin/popup/delete?popupId=${item.PopupId}`\r\n axios.post(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n reloadPopup()\r\n Notification.success('Xóa popup thà nh công')\r\n }\r\n })\r\n })\r\n }}\r\n data={popupList}\r\n />\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex }\r\n setPagination(newPagination)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n\r\n <ModalAdd\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/popup/create'\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n reloadPopup()\r\n setIsShowModalPopupAdd(false)\r\n Notification.success('Thêm má»›i popup thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalPopupAdd(false)\r\n }}\r\n isShow={isShowModalPopupAdd}\r\n partnerGroup={partnerGoupList}\r\n />\r\n\r\n <ModalEdit\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/popup/update'\r\n axios.post(url, formData).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n reloadPopup()\r\n setPopupEditInfo({\r\n isShow: false,\r\n info: {}\r\n })\r\n Notification.success('Chỉnh sá»a popup thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setPopupEditInfo({\r\n isShow: false,\r\n info: {}\r\n })\r\n }}\r\n isShow={popupEditInfo.isShow}\r\n info={popupEditInfo.info}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default PopupPage","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n FullName: yup.string().required('Vui lòng nháºp há» tên').max(100, 'Há» tên quá dà i'),\r\n Email: yup.string().required('Vui lòng nháºp email').max(70, 'Email quá dà i').email('Email không đúng'),\r\n Phone: yup.string().required('Vui lòng nháºp số Ä‘iện thoại').max(20, 'Số Ä‘iện thoại quá dà i')\r\n})\r\n\r\nconst Profile = props => {\r\n const { register, handleSubmit, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n useEffect(() => {\r\n const data = props.data\r\n const fields = ['FullName', 'Email', 'Phone']\r\n fields.forEach(item => {\r\n setValue(item, data[item])\r\n })\r\n // eslint-disable-next-line\r\n }, [props.data])\r\n\r\n return (\r\n <div className=\"card\">\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title mb-2\">Chỉnh sá»a thông tin</h5>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Há» tên <span className=\"text-danger\">*</span></label>\r\n <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Há» tên\" />\r\n {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n <input {...register('Email')} type=\"text\" className=\"form-control\" placeholder=\"Email\" />\r\n {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Äiện thoại <span className=\"text-danger\">*</span></label>\r\n <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Äiện thoại\" />\r\n {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"card-footer\">\r\n <SaveButton isBusy={isBusy} />\r\n </div>\r\n </form>\r\n </div>\r\n )\r\n}\r\n\r\nProfile.propTypes = {\r\n onSave: PropTypes.func,\r\n data: PropTypes.object\r\n}\r\n\r\nProfile.defaultProps = {\r\n onSave: () => { },\r\n data: {}\r\n}\r\n\r\nexport default Profile","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n CurrentPassword: yup.string().required('Vui lòng nháºp máºt khẩu hiện tại').max(70, 'Máºt khẩu hiện tại quá dà i'),\r\n NewPassword: yup.string().required('Vui lòng nháºp máºt khẩu má»›i').max(70, 'Máºt khẩu má»›i quá dà i'),\r\n NewPasswordConfirm: yup.string().required('Vui lòng nháºp lại máºt khẩu má»›i').max(70, 'Nháºp lại máºt khẩu má»›i quá dà i')\r\n .oneOf([yup.ref('NewPassword')], 'Nháºp lại máºt khẩu không chÃnh xác')\r\n})\r\n\r\nconst Password = props => {\r\n const { register, reset, handleSubmit, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <div className=\"card\">\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, () => {\r\n reset()\r\n }, setIsBusy)\r\n })}>\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title mb-2\">Äổi máºt khẩu</h5>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Máºt khẩu hiện tại <span className=\"text-danger\">*</span></label>\r\n <input {...register('CurrentPassword')} type=\"password\" className=\"form-control\" placeholder=\"Máºt khẩu hiện tại\" />\r\n {errors.CurrentPassword && <div className=\"validation-message\">{errors.CurrentPassword.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Máºt khẩu má»›i <span className=\"text-danger\">*</span></label>\r\n <input {...register('NewPassword')} type=\"password\" className=\"form-control\" placeholder=\"Máºt khẩu má»›i\" />\r\n {errors.NewPassword && <div className=\"validation-message\">{errors.NewPassword.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Nháºp lại máºt khẩu má»›i <span className=\"text-danger\">*</span></label>\r\n <input {...register('NewPasswordConfirm')} type=\"password\" className=\"form-control\" placeholder=\"Nháºp lại máºt khẩu má»›i\" />\r\n {errors.NewPasswordConfirm && <div className=\"validation-message\">{errors.NewPasswordConfirm.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"card-footer\">\r\n <SaveButton isBusy={isBusy} title=\"Äổi máºt khẩu\" />\r\n </div>\r\n </form>\r\n </div>\r\n )\r\n}\r\n\r\nPassword.propTypes = {\r\n onSave: PropTypes.func\r\n}\r\n\r\nPassword.defaultProps = {\r\n onSave: () => { }\r\n}\r\n\r\nexport default Password","import axios from 'axios'\r\nimport React, { useEffect, useState, useContext } from 'react'\r\nimport { Notification, AuthAdminView, AppContext } from '../../../components'\r\nimport { Password, Profile } from './components'\r\n\r\nconst UserInfoPage = props => {\r\n const appSettings = useContext(AppContext)\r\n\r\n const [userInfo, setUserInfo] = useState({})\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Thông tin cá nhân'\r\n loadUserInfo()\r\n }, [])\r\n\r\n const loadUserInfo = () => {\r\n const url = '/admin/user/profile-detail'\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n setUserInfo(data.Result)\r\n }\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"row\">\r\n <AuthAdminView right=\"account_edit_profile\">\r\n <div className=\"col-md-6\">\r\n <Profile\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/user/update-profile'\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n appSettings.setAdminFullName(formData.FullName)\r\n localStorage.setItem('a-fullName', formData.FullName)\r\n appSettings.setAdminAvatarUrl(formData.AvatarUrl)\r\n localStorage.setItem('a-avatarUrl', formData.AvatarUrl)\r\n Notification.success('Thay đổi thông tin thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n data={userInfo}\r\n />\r\n </div>\r\n </AuthAdminView>\r\n <AuthAdminView right=\"account_change_password\">\r\n <div className=\"col-md-6\">\r\n <Password\r\n onSave={(formData, callBack, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/user/change-password'\r\n axios.post(url, formData).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n Notification.success('Thay đổi máºt khẩu thà nh công')\r\n callBack()\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n />\r\n </div>\r\n </AuthAdminView>\r\n </div>\r\n )\r\n}\r\n\r\nexport default UserInfoPage","import { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport axios from \"axios\";\r\nimport React, { useState } from \"react\";\r\nimport { Controller, useForm } from \"react-hook-form\";\r\nimport NumberFormat from \"react-number-format\";\r\nimport * as yup from \"yup\";\r\nimport { SaveButton, Notification } from \"../../../../../components\";\r\nimport { useEffect } from \"react\";\r\n\r\nconst invalidValue = \"Giá trị không hợp lệ\";\r\n\r\nconst schema = yup.object().shape({\r\n AffAmount: yup\r\n .number()\r\n .required(\"Vui lòng nháºp giá bán\")\r\n .min(0, invalidValue)\r\n .max(2_000_000_000, invalidValue),\r\n});\r\n\r\nexport default function SettingAffiliate(props) {\r\n const {\r\n control,\r\n handleSubmit,\r\n setValue,\r\n formState: { errors },\r\n } = useForm({\r\n resolver: yupResolver(schema),\r\n defaultValues: {\r\n AffAmount: 0,\r\n },\r\n });\r\n\r\n const { setting } = props;\r\n\r\n const [isBusy, setIsBusy] = useState(false);\r\n\r\n useEffect(() => {\r\n if (setting !== null) {\r\n setValue('AffAmount', setting.AffAmount);\r\n }\r\n // eslint-disable-next-line\r\n }, [setting]);\r\n\r\n return (\r\n <div className=\"card\">\r\n {/* Begin form */}\r\n <form\r\n onSubmit={handleSubmit((formData) => {\r\n setIsBusy(true);\r\n const url = \"/admin/setting/update-aff\";\r\n axios\r\n .post(url, formData)\r\n .then(({ data }) => {\r\n if (data.IsSuccess) {\r\n Notification.success(\"Chỉnh sá»a cấu hình affiliate thà nh công\");\r\n // reset();\r\n }\r\n })\r\n .finally(() => setIsBusy(false));\r\n })}\r\n >\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title\">Cấu affiliate</h5>\r\n <div className=\"row\">\r\n <div className=\"col-12 col-sm-6 col-md-6 col-lg-6 col-xl-4 position-relative\">\r\n <label className=\"form-label\">\r\n Tiá»n thưởng <span className=\"text-danger\">*</span>\r\n </label>\r\n <div className=\"input-group\">\r\n <Controller\r\n name=\"AffAmount\"\r\n control={control}\r\n render={({ field }) => {\r\n return (\r\n <NumberFormat\r\n {...field}\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n onValueChange={(c) => {\r\n field.onChange(c.value);\r\n }}\r\n decimalScale={0}\r\n />\r\n );\r\n }}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n {errors.AffAmount && (\r\n <div className=\"validation-message\">\r\n {errors.AffAmount.message}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"card-footer\">\r\n <div className=\"button-list\">\r\n <SaveButton type=\"submit\" isBusy={isBusy} />\r\n </div>\r\n </div>\r\n </form>\r\n {/* End form */}\r\n </div>\r\n );\r\n}\r\n","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport { IoClose } from 'react-icons/io5'\r\nimport ReactQuill from 'react-quill'\r\nimport 'react-quill/dist/quill.snow.css'\r\nimport * as yup from \"yup\"\r\nimport { Config, IconButton, InputSelect, Notification, SaveButton } from '../../../components'\r\nimport { SettingAffiliate } from './components'\r\n\r\nconst statusOptions = [\r\n {\r\n value: 1,\r\n label: 'Hoạt động'\r\n },\r\n {\r\n value: 2,\r\n label: 'Tạm khóa'\r\n }\r\n]\r\n\r\nconst emailStatusOptions = [\r\n { value: 1, label: 'Gá»i email' },\r\n { value: 2, label: 'Không gá»i' }\r\n]\r\n\r\nconst schema = yup.object().shape({\r\n EmailToAddress: yup.string().max(100, 'Äịa chỉ email quá dà i').email('Email không đúng định dạng'),\r\n SendingEmailStatusId: yup.number(),\r\n EmailSubject: yup.string().max(100, 'Chá»§ đỠemail quá dà i')\r\n})\r\n\r\nfunction SettingPage(props) {\r\n const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [content, setContent] = useState('')\r\n\r\n const [status, setStatus] = useState(0)\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [isBusyEmail, setIsBusyEmail] = useState(false)\r\n\r\n const [setting, setSetting] = useState(null)\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Cấu hình'\r\n loadSetting()\r\n\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n const loadSetting = () => {\r\n const url = '/admin/setting/get-all'\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n setContent(data.Result.Message)\r\n const resStatus = statusOptions.filter(x => x.value === data.Result.StatusId)[0]?.value ?? 2\r\n setStatus(resStatus)\r\n\r\n setSetting(data.Result)\r\n\r\n setValue('EmailSubject', data.Result.EmailSubject)\r\n setValue('EmailToAddress', data.Result.EmailToAddress)\r\n setValue('SendingEmailStatusId', data.Result.SendingEmailStatusId)\r\n }\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title\">Cấu hình Thông báo</h5>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Ná»™i dung thông báo</label>\r\n <ReactQuill\r\n value={content}\r\n modules={Config.editorCfg}\r\n onChange={setContent}\r\n />\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-sm-12 col-md-12 col-lg-6 col-xl-5 col-xxl-4\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <InputSelect\r\n name=\"msg-status\"\r\n variant='success'\r\n options={statusOptions}\r\n value={status}\r\n onChange={val => {\r\n setStatus(val)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"card-footer\">\r\n <div className=\"button-list\">\r\n <SaveButton\r\n isBusy={isBusy}\r\n onClick={() => {\r\n setIsBusy(true)\r\n const url = '/admin/setting/update'\r\n axios.post(url, {\r\n Message: content,\r\n StatusId: status\r\n }).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n Notification.success('Chỉnh sá»a cấu hình thông báo thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }} />\r\n <IconButton onClick={() => {\r\n setStatus(statusOptions[1])\r\n setContent('')\r\n }} text=\"Xóa hết\" variant=\"warning\" icon={<IoClose />} />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"card\">\r\n <form onSubmit={handleSubmit(formData => {\r\n setIsBusyEmail(true)\r\n const url = '/admin/setting/update-email'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n Notification.success('Chỉnh sá»a cấu hình email thà nh công')\r\n reset();\r\n }\r\n setIsBusyEmail(false)\r\n })\r\n })}>\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title\">Cấu hình email</h5>\r\n <div className=\"row gy-2\">\r\n <div className=\"col-12 col-sm-6 col-md-6 col-lg-6 col-xl-4 position-relative\">\r\n <label className=\"form-label\">Email nháºn</label>\r\n <input {...register('EmailToAddress')} type=\"text\" className=\"form-control\" placeholder=\"Email nháºn\" />\r\n {errors.EmailToAddress && <div className=\"validation-message\">{errors.EmailToAddress.message}</div>}\r\n </div>\r\n <div className=\"col-12 col-sm-6 col-md-6 col-lg-6 col-xl-4 position-relative\">\r\n <label className=\"form-label\">Chá»§ đỠemail</label>\r\n <input {...register('EmailSubject')} type=\"text\" className=\"form-control\" placeholder=\"Chá»§ đỠemail\" />\r\n {errors.EmailSubject && <div className=\"validation-message\">{errors.EmailSubject.message}</div>}\r\n </div>\r\n <div className=\"col-12 col-sm-12 col-md-12 col-lg-12 col-xl-4 position-relative\">\r\n <label className=\"form-label\">Trạng thái</label>\r\n <Controller\r\n control={control}\r\n name=\"SendingEmailStatusId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <InputSelect\r\n name=\"email-status\"\r\n variant='success'\r\n options={emailStatusOptions}\r\n value={value}\r\n onChange={val => {\r\n onChange(val)\r\n }}\r\n />\r\n )}\r\n />\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"card-footer\">\r\n <div className=\"button-list\">\r\n <SaveButton\r\n type=\"submit\"\r\n isBusy={isBusyEmail}\r\n />\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <SettingAffiliate setting={setting} />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default SettingPage","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoCloudDownloadOutline, IoSaveOutline } from 'react-icons/io5'\r\nimport { useHistory } from 'react-router-dom'\r\nimport {\r\n CloseButton, EmptyRow, FormatNumber, IconButton, LoadingRow, Notification, ProductStatus, ReadExcelButton, UploadProductImg\r\n} from './../../../components'\r\n\r\nconst downloadFile = (data) => {\r\n const downloadUrl = window.URL.createObjectURL(new Blob([data]))\r\n const link = document.createElement('a')\r\n link.href = downloadUrl\r\n link.setAttribute('download', 'ProductExport.xlsx')\r\n document.body.appendChild(link)\r\n link.click()\r\n link.remove()\r\n}\r\n\r\nfunction renderGroupPrice(groups) {\r\n return groups.map((item, index) => {\r\n const mbClass = groups.length - 1 === index ? 'mb-0' : 'mb-1'\r\n return (\r\n <p key={item.GroupId} className={mbClass}>{item.GroupName} <span className=\"text-primary float-end\"><FormatNumber>{item.UnitPrice}</FormatNumber></span></p>\r\n )\r\n })\r\n}\r\n\r\nfunction ProductFromExcel(props) {\r\n const history = useHistory()\r\n\r\n const [products, setProducts] = useState([])\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Thêm má»›i sản phẩm từ file excel'\r\n }, [])\r\n\r\n function onUploadComplete(product, imgInfo) {\r\n if (imgInfo.IsSuccess) {\r\n const imgUrl = imgInfo.Result.ImageUrl\r\n if (product.IsParent) {\r\n const newProducts = [...products]\r\n const parentIndex = newProducts.findIndex(n => n.Id === product.Id)\r\n newProducts[parentIndex].AvatarUrl = imgUrl\r\n\r\n const children = newProducts.filter(n => n.ParentId === product.Id)\r\n children.forEach(child => {\r\n const childIndex = newProducts.findIndex(n => n.Id === child.Id)\r\n newProducts[childIndex].AvatarUrl = imgUrl\r\n })\r\n setProducts(newProducts)\r\n }\r\n else {\r\n const newProducts = [...products]\r\n const index = newProducts.findIndex(n => n.Id === product.Id)\r\n newProducts[index].AvatarUrl = imgUrl\r\n setProducts(newProducts)\r\n }\r\n }\r\n }\r\n\r\n function renderTable() {\r\n if (products === null) return <LoadingRow colSpan={6} />\r\n else if (products.length === 0) return <EmptyRow colSpan={6} />\r\n else return products.map((item, index) => <tr key={index}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>{item.ProductCode}</td>\r\n <td>{item.SupplierProductCode}</td>\r\n <td>\r\n <div className=\"d-flex flex-row align-items-center\">\r\n <UploadProductImg\r\n imgUrl={item.AvatarUrl}\r\n onCompleted={(data) => onUploadComplete(item, data)}\r\n />\r\n <div className=\"d-flex flex-column flex-fill\">\r\n <p className={item.IsParent ? 'mb-1 text-primary' : 'mb-1'}>{item.ProductName}</p>\r\n <p className=\"mb-0 d-block\">\r\n Bán lẻ: <span className=\"text-primary\"><FormatNumber>{item.OutputPrice}</FormatNumber></span>\r\n <span className=\"float-end\">Danh mục: <span className=\"text-success\">{item.CategoryName}</span></span>\r\n </p>\r\n </div>\r\n\r\n </div>\r\n </td>\r\n <td>\r\n {renderGroupPrice(item.PartnerGroupPrices)}\r\n </td>\r\n <td>\r\n <ProductStatus\r\n statusId={item.StatusId}\r\n />\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"button-list\">\r\n <IconButton\r\n icon={<IoCloudDownloadOutline />}\r\n variant=\"info\"\r\n text=\"Tải file mẫu\"\r\n onClick={(setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/admin/product/import-template'\r\n axios.get(url, { responseType: 'blob' }).then(({ data }) => {\r\n downloadFile(data)\r\n setIsBusy(false)\r\n })\r\n }}\r\n />\r\n <ReadExcelButton\r\n variant=\"success\"\r\n onCompleted={(data) => {\r\n if (data.IsSuccess) {\r\n const url = '/admin/product/generate-import'\r\n axios.post(url, {\r\n Json: JSON.stringify(data.Result)\r\n }).then(res => {\r\n if (res.data.IsSuccess) {\r\n setProducts(res.data.Result)\r\n }\r\n })\r\n }\r\n }}\r\n />\r\n <IconButton\r\n icon={<IoSaveOutline />}\r\n text=\"Lưu\"\r\n onClick={(setIsBusy) => {\r\n if (products.length === 0) {\r\n Notification.warning('Vui lòng chá»n file excel (.xlsx) có chứa dữ liệu theo mẫu')\r\n return\r\n }\r\n Notification.confirm('Bạn có chắc chắn muốn thêm sản phẩm không?', () => {\r\n setIsBusy(true)\r\n const formData = products.filter(n => n.IsParent).map(item => {\r\n return {\r\n ProductName: item.ProductName,\r\n ProductCode: item.ProductCode,\r\n SupplierProductCode: item.SupplierProductCode,\r\n CategoryId: item.CategoryId,\r\n InputPrice: 0,\r\n OutputPrice: item.OutputPrice,\r\n StatusId: item.StatusId,\r\n Detail: item.Detail,\r\n AvatarUrl: item.AvatarUrl,\r\n ProductPrices: item.PartnerGroupPrices.map(group => {\r\n return {\r\n GroupId: group.GroupId,\r\n UnitPrice: group.UnitPrice\r\n }\r\n }),\r\n SubProducts: products.filter(n => !n.IsParent).map(n => {\r\n return {\r\n ChildrentAttributes: n.AttributeList,\r\n ExtensionName: n.ExtensionName,\r\n Quantity: 0\r\n }\r\n }),\r\n ProductChildrentAttribute: item.AttributeList\r\n }\r\n })\r\n const url = '/admin/product/import-create'\r\n axios.post(url, {\r\n ProductList: formData\r\n }).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n Notification.success('Thêm má»›i sản phẩm từ file excel thà nh công')\r\n history.replace('/admin/product')\r\n }\r\n setIsBusy(false)\r\n })\r\n })\r\n }}\r\n />\r\n <CloseButton\r\n onClick={() => {\r\n history.replace('/admin/product')\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-avatar mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Mã SP</th>\r\n <th>Mã SP NCC</th>\r\n <th>Tên sản phẩm</th>\r\n <th>Giá theo nhóm CTV</th>\r\n <th>Trạng thái</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </Fragment>\r\n )\r\n}\r\n\r\nProductFromExcel.propTypes = {\r\n\r\n}\r\n\r\nProductFromExcel.defaultProps = {\r\n\r\n}\r\n\r\nexport default ProductFromExcel","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport React, { useEffect, useState, useContext } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport { IoKeyOutline } from 'react-icons/io5'\r\nimport { useHistory, useLocation } from 'react-router-dom'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton, AppContext, Config } from './../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n UserName: yup.string().required('Vui lòng nháºp tà i khoản').max(70, 'Äịa chỉ email quá dà i'),\r\n Password: yup.string().required('Vui lòng nháºp máºt khẩu').max(70, 'Máºt khẩu quá dà i')\r\n})\r\n\r\nfunction LoginPage(props) {\r\n const { register, handleSubmit, setFocus, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [message, setMessage] = useState('')\r\n\r\n const history = useHistory()\r\n\r\n const [isBusy, setIsBusy] = useState(() => {\r\n const a_token = localStorage.getItem('a-token')\r\n if (a_token === null || a_token === '') return false\r\n else return true\r\n })\r\n\r\n let location = useLocation();\r\n\r\n let { from } = location.state || { from: { pathname: \"/admin/dashboard\" } };\r\n\r\n const appSettings = useContext(AppContext)\r\n\r\n const setInfo = (data) => {\r\n localStorage.setItem('a-right', data.Result.Rights)\r\n localStorage.setItem('a-roleName', data.Result.RoleName)\r\n localStorage.setItem('a-fullName', data.Result.FullName)\r\n localStorage.setItem('a-token', data.Result.Token)\r\n localStorage.setItem('a-avatarUrl', data.Result.AvatarUrl)\r\n axios.defaults.headers.common['A-Token'] = data.Result.Token\r\n\r\n const rights = data.Result.Rights.split(';')\r\n appSettings.setRights(rights)\r\n\r\n appSettings.setAdminFullName(data.Result.FullName)\r\n appSettings.setAdminAvatarUrl(data.Result.AvatarUrl)\r\n appSettings.setAdminRole(data.Result.RoleName)\r\n }\r\n\r\n useEffect(() => {\r\n setFocus('UserName')\r\n }, [setFocus])\r\n\r\n useEffect(() => {\r\n const a_token = localStorage.getItem('a-token')\r\n if (a_token !== null && a_token !== '') {\r\n const url = '/admin/user/login-token'\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setInfo(data)\r\n history.replace(from);\r\n }\r\n else {\r\n setIsBusy(false)\r\n }\r\n })\r\n }\r\n else {\r\n setIsBusy(false)\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n const onLogin = (formData) => {\r\n setIsBusy(true)\r\n const url = '/admin/user/login'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setInfo(data)\r\n history.replace(from)\r\n }\r\n else {\r\n if (data.Message !== '' || data.Message !== null) {\r\n setMessage(data.Message)\r\n setTimeout(() => {\r\n setMessage('')\r\n }, 3_000)\r\n }\r\n }\r\n setIsBusy(false)\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"authentication-bg\">\r\n\r\n <div className=\"account-pages mb-5\" style={{ marginTop: '7.5rem' }}>\r\n <div className=\"container\">\r\n <div className=\"row justify-content-center\">\r\n <div className=\"col-xxl-4 col-lg-5\">\r\n <div className=\"card\">\r\n\r\n <div className=\"card-header pt-3 pb-3 text-center bg-light\">\r\n <span>\r\n <span><img src=\"/assets/images/logo-dark.png\" alt=\"Logo\" height={Config.adminLoginLogoHeight} /></span>\r\n </span>\r\n </div>\r\n\r\n <div className=\"card-body p-4\">\r\n\r\n <div className=\"text-center w-75 m-auto\">\r\n <h4 className=\"text-dark-50 text-center mt-0 font-weight-bold\">Äăng nháºp</h4>\r\n </div>\r\n\r\n <form onSubmit={handleSubmit(formData => onLogin(formData))}>\r\n\r\n <div className=\"position-relative mb-2\">\r\n <label className=\"form-label\">Tà i khoản</label>\r\n <input {...register('UserName')} className=\"form-control\" placeholder=\"Tà i khoản\" autoComplete=\"off\"\r\n disabled={isBusy} />\r\n {errors.UserName && <div className=\"validation-message\">{errors.UserName.message}</div>}\r\n </div>\r\n\r\n <div className=\"position-relative mb-2\">\r\n <label className=\"form-label\">Máºt khẩu</label>\r\n <input {...register('Password')} type=\"password\" className=\"form-control\" placeholder=\"Máºt khẩu\" autoComplete=\"off\"\r\n disabled={isBusy} />\r\n {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n </div>\r\n\r\n {\r\n message !== '' ? <div>\r\n <div className=\"alert alert-danger alert-dismissible fade show\">\r\n <button type=\"button\" className=\"btn-close\"\r\n onClick={() => {\r\n setMessage('')\r\n }}\r\n ></button>\r\n {message}\r\n </div>\r\n </div> : ''\r\n }\r\n\r\n <div className=\"form-group mb-0 text-center\">\r\n <SaveButton\r\n title=\"Äăng nháºp\"\r\n isBusy={isBusy}\r\n icon={<IoKeyOutline className=\"mt--3-px me-1 font-17\" />}\r\n />\r\n </div>\r\n </form>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div >\r\n </div >\r\n\r\n <footer className=\"footer footer-alt\">\r\n Copyright © {new Date().getFullYear()} Rado Vietnam\r\n </footer>\r\n </div >\r\n )\r\n}\r\n\r\nexport default LoginPage","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n keyword: ''\r\n}\r\n\r\nfunction Filter(props) {\r\n\r\n const { onSearch } = props\r\n\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClear = () => {\r\n setKeyword('')\r\n filters.keyword = ''\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n <input value={keyword}\r\n autoFocus\r\n onChange={e => {\r\n const value = e.target.value\r\n setKeyword(value)\r\n filters.keyword = value\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleSearch()\r\n }\r\n }}\r\n type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Tiêu Ä‘á»\" />\r\n </div>\r\n <div className=\"col-sm-8 col-md-8 col-lg-9 col-xl-9 col-xxl-8\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClear} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: () => { }\r\n}\r\n\r\nexport default Filter\r\n","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport { debounce } from 'lodash'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport NumberFormat from 'react-number-format'\r\nimport Select from 'react-select'\r\nimport AsyncSelect from 'react-select/async'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, InputSelect, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n Title: yup.string().required('Vui lòng nháºp tiêu Ä‘á»').max(100, 'Tiêu đỠquá dà i'),\r\n TypeId: yup.mixed().oneOf([1, 2], 'Vui lòng chá»n loại'),\r\n PartnerId: yup.number().when('TypeId', {\r\n is: 1,\r\n then: yup.number().required('Vui lòng chá»n cá»™ng tác viên')\r\n }),\r\n GroupId: yup.number().when('TypeId', {\r\n is: 2,\r\n then: yup.number().required('Vui lòng chá»n nhóm cá»™ng tác viên')\r\n }),\r\n Note: yup.string().max(200, 'Ghi chú quá dà i'),\r\n Qty: yup.number().required('Vui lòng nháºp số lượng').min(1, 'Số lượng tối thiá»u 1').max(10_000, 'Số lượng tối Ä‘a 10.000')\r\n})\r\n\r\nconst types = [\r\n { value: 1, label: 'Cá»™ng tác viên' },\r\n { value: 2, label: 'Nhóm cá»™ng tác viên' }\r\n]\r\n\r\nconst loadPartner = (inputValue, callback) => {\r\n const url = `/admin/partner/dropdown-filter?keyword=${inputValue}&pageItem=5&pageIndex=1`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n let partnerLst = data.Result.Data.map(item => {\r\n return {\r\n value: item.PartnerId,\r\n label: item.FullName + ` (${item.Email})`\r\n }\r\n })\r\n callback(partnerLst)\r\n }\r\n })\r\n}\r\n\r\nfunction ModalAdd(props) {\r\n\r\n const { control, register, handleSubmit, reset, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema),\r\n defaultValues: {\r\n TypeId: 1\r\n }\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [freeShipType, setFreeShipType] = useState(1)\r\n\r\n const renderPartner = () => {\r\n if (freeShipType === 1) {\r\n return <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Cá»™ng tác viên <span className=\"text-danger\">*</span></label>\r\n <AsyncSelect\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n placeholder='Cá»™ng tác viên'\r\n cacheOptions\r\n defaultOptions\r\n loadOptions={debounce(loadPartner, 250)}\r\n onChange={item => setValue('PartnerId', item.value)}\r\n loadingMessage={() => \"Äang tìm kiếm\"}\r\n noOptionsMessage={() => \"Không tìm thấy dữ liệu\"}\r\n />\r\n {errors.PartnerId && <div className=\"validation-message\">{errors.PartnerId.message}</div>}\r\n </div>\r\n }\r\n }\r\n\r\n const renderGroup = () => {\r\n if (freeShipType === 2) {\r\n return <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Nhóm cá»™ng tác viên <span className=\"text-danger\">*</span></label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n // defaultValue={props.partnerGroups[0]}\r\n placeholder=\"Nhóm cá»™ng tác viên\"\r\n isSearchable={false}\r\n options={props.partnerGroups}\r\n onChange={item => {\r\n setValue('GroupId', item.value)\r\n }}\r\n />\r\n {errors.GroupId && <div className=\"validation-message\">{errors.GroupId.message}</div>}\r\n </div>\r\n }\r\n }\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" animation={true}\r\n onExited={() => {\r\n reset()\r\n setFreeShipType(1)\r\n }}\r\n onShow={() => {\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i miá»…n phà đóng gói</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tiêu đỠ<span className=\"text-danger\">*</span></label>\r\n <input {...register('Title')} type=\"text\" className=\"form-control\" placeholder=\"Tiêu Ä‘á»\" />\r\n {errors.Title && <div className=\"validation-message\">{errors.Title.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Loại <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n name=\"TypeId\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <InputSelect\r\n options={types}\r\n value={value}\r\n defaultValue={1}\r\n name='freeship-type'\r\n variant='success'\r\n onChange={(val) => {\r\n onChange(val)\r\n setFreeShipType(val)\r\n }}\r\n />\r\n )\r\n }}\r\n />\r\n {errors.TypeId && <div className=\"validation-message\">{errors.TypeId.message}</div>}\r\n </div>\r\n {renderPartner()}\r\n {renderGroup()}\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Số lượng</label>\r\n <Controller\r\n name=\"Qty\"\r\n control={control}\r\n render={({ field: { onChange, value } }) => {\r\n return (\r\n <NumberFormat\r\n placeholder='Số lượng'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={value}\r\n onValueChange={val => onChange(val.value)}\r\n />\r\n )\r\n }}\r\n />\r\n {errors.Qty && <div className=\"validation-message\">{errors.Qty.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n partnerGroups: PropTypes.array\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n partnerGroups: []\r\n}\r\n\r\nexport default ModalAdd","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoEllipseSharp } from 'react-icons/io5'\r\nimport { EmptyRow, FormatNumber, LoadingRow } from '../../../../../components'\r\n\r\nfunction renderType(typeId) {\r\n if (typeId === 1) return <><IoEllipseSharp className=\"text-info mt--3-px\" /> Cá»™ng tác viên</>\r\n else if (typeId === 2) return <><IoEllipseSharp className=\"text-primary mt--3-px\" /> Nhóm cá»™ng tác viên</>\r\n}\r\n\r\nfunction Table(props) {\r\n\r\n const { data, pageItem, pageIndex } = props\r\n\r\n const renderTable = () => {\r\n if (data === null) return <LoadingRow colSpan={8} />\r\n else if (data.length === 0) return <EmptyRow colSpan={8} />\r\n else return data.map((item, index) => <tr key={item.FreeShipId}>\r\n <td className=\"text-center\">\r\n <FormatNumber>\r\n {(pageItem * (pageIndex - 1)) + index + 1}\r\n </FormatNumber>\r\n </td>\r\n <td>{item.Title}</td>\r\n <td className='text-end text-primary'>\r\n <FormatNumber>\r\n {item.Qty}\r\n </FormatNumber>\r\n </td>\r\n <td>\r\n {renderType(item.TypeId)}\r\n </td>\r\n <td>\r\n {item.GroupName}\r\n </td>\r\n <td>\r\n {item.PartnerFullName}\r\n </td>\r\n <td className='text-end text-primary'>\r\n <FormatNumber>\r\n {item.TotalPartner}\r\n </FormatNumber>\r\n </td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n </td>\r\n {/* <td>\r\n <ActionRow>\r\n <ActionItem right=\"popup_edit\" onClick={() => props.onEdit(item)} icon={<FiEdit />} title='Chỉnh sá»a' />\r\n <ActionItem right=\"popup_delete\" onClick={() => props.onDelete(item)} icon={<IoTrashOutline />} title='Xóa' className='text-danger' />\r\n </ActionRow>\r\n </td> */}\r\n </tr>)\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tiêu Ä‘á»</th>\r\n <th className='text-end'>Số lượng</th>\r\n <th>Loại</th>\r\n <th>Nhóm</th>\r\n <th>CTV</th>\r\n <th className='text-end'>Số CTV</th>\r\n <th>Ngà y tạo</th>\r\n {/* <th className=\"w-52-px\"></th> */}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n data: PropTypes.array,\r\n pageItem: PropTypes.number,\r\n pageIndex: PropTypes.number,\r\n}\r\n\r\nTable.defaultProps = {\r\n data: null,\r\n pageItem: 0,\r\n pageIndex: 0,\r\n}\r\n\r\nexport default Table\r\n","import React, { Fragment, useEffect, useState } from 'react'\r\nimport axios from 'axios'\r\nimport { Filter, ModalAdd, Table } from './components'\r\nimport { AuthAdminView, IconButton, Notification, Pagination } from './../../../components'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\n\r\nfunction FreeShipPage(props) {\r\n\r\n const [isShowModalAdd, setIsShowModalAdd] = useState(false)\r\n\r\n const [filters, setFilters] = useState({\r\n keyword: '',\r\n pageItem: 10,\r\n pageIndex: 1\r\n })\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n const [partnerGroups, setPartnerGroups] = useState()\r\n\r\n const [freeShips, setFreeShips] = useState(null)\r\n\r\n const loadPartnerGroup = () => {\r\n const url = '/admin/partner-group/get-all'\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n const groups = data.Result.map(item => {\r\n return {\r\n value: item.GroupId,\r\n label: item.GroupName\r\n }\r\n })\r\n setPartnerGroups(groups)\r\n }\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n const url = `/admin/free-ship/filter?keyword=${filters.keyword}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n axios.get(url).then(res => {\r\n let data = res.data\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPagination(newPagination)\r\n setFreeShips(data.Result.Data)\r\n }\r\n })\r\n }, [filters])\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Miá»…n phà đóng gói'\r\n loadPartnerGroup()\r\n }, [])\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={params => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row\">\r\n <div className=\"col-12\">\r\n <AuthAdminView right=\"freeship_add\">\r\n <IconButton\r\n className=\"mb-2\"\r\n text=\"Thêm má»›i\"\r\n icon={<IoAddCircleOutline />}\r\n onClick={() => {\r\n setIsShowModalAdd(true)\r\n }} />\r\n </AuthAdminView>\r\n </div>\r\n </div>\r\n\r\n <Table\r\n pageItem={filters.pageItem}\r\n pageIndex={filters.pageIndex}\r\n data={freeShips}\r\n />\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex }\r\n setPagination(newPagination)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n\r\n <ModalAdd\r\n isShow={isShowModalAdd}\r\n onSave={(formData, setIsBusy) => {\r\n // console.log(formData)\r\n setIsBusy(true)\r\n const url = '/admin/free-ship/create'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n Notification.success('Thêm má»›i miá»…n phà đóng gói thà nh công')\r\n setIsShowModalAdd(false)\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalAdd(false)\r\n }}\r\n partnerGroups={partnerGroups}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default FreeShipPage","import \"animate.css\"\r\nimport axios from 'axios'\r\nimport React, { useContext } from 'react'\r\nimport { MdMenu } from 'react-icons/md'\r\nimport 'react-notifications-component/dist/theme.css'\r\nimport {\r\n BrowserRouter as Router, Redirect, Route, Switch, useHistory\r\n} from \"react-router-dom\"\r\nimport SimpleBar from 'simplebar-react'\r\nimport './App.css'\r\nimport { AdminLeftMenu, AppContext, AuthAdminView, Config, Notification } from './components'\r\nimport {\r\n AttributePage, CategoryPage, DashboardPage, OrderPage, PartnerGroupPage, PartnerPage, PopupPage, ProductFromExcel, ProductPage,\r\n RolePage, SettingPage, ShippingUnitPage, StatisticPartnerOrder, UserInfoPage, UserPage,\r\n FreeShipPage\r\n} from './pages/admin'\r\n\r\nvar collapsed = false\r\n\r\n// Phóng to, thu nhá» left menu\r\nconst handleCollapse = () => {\r\n if (!collapsed) {\r\n document.body.classList.add('sidebar-enable')\r\n document.body.setAttribute('data-leftbar-compact-mode', 'condensed')\r\n }\r\n else {\r\n document.body.classList.remove('sidebar-enable')\r\n document.body.setAttribute('data-leftbar-compact-mode', '')\r\n }\r\n collapsed = !collapsed\r\n}\r\n\r\nfunction App() {\r\n const appSettings = useContext(AppContext)\r\n\r\n const history = useHistory()\r\n\r\n const token = localStorage.getItem('a-token')\r\n\r\n if (token === null || token === '') return <Redirect to='/admin/login' />\r\n else {\r\n const pathName = window.location.pathname\r\n if (pathName === '/admin' || pathName === '/admin/') {\r\n history.replace('/admin/dashboard')\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"wrapper\">\r\n\r\n <Router>\r\n\r\n <div className=\"leftside-menu\">\r\n\r\n <span className=\"logo text-center logo-dark\">\r\n <span className=\"logo-lg\">\r\n <img src=\"/assets/images/logo-dark.png\" alt=\"logo\" height={Config.logoHeight} />\r\n </span>\r\n <span className=\"logo-sm\">\r\n <img src=\"/assets/images/logo_sm_dark.png\" alt=\"logo\" height={Config.logoHeight} />\r\n </span>\r\n </span>\r\n\r\n <SimpleBar className=\"h-100\" id=\"leftside-menu-container\">\r\n <AdminLeftMenu\r\n onLogout={() => {\r\n Notification.confirm('Bạn có chắc chắn muốn đăng xuất không?', () => {\r\n const url = '/admin/user/logout'\r\n axios.post(url).then(({ data }) => {\r\n localStorage.removeItem('a-right')\r\n localStorage.removeItem('a-roleName')\r\n localStorage.removeItem('a-fullName')\r\n localStorage.removeItem('a-token')\r\n localStorage.removeItem('a-avatarUrl')\r\n axios.defaults.headers.common['A-Token'] = ''\r\n appSettings.setRights([])\r\n history.replace('/admin/login')\r\n })\r\n })\r\n }}\r\n />\r\n\r\n <div className=\"clearfix\"></div>\r\n </SimpleBar>\r\n\r\n </div>\r\n\r\n <div className=\"content-page\">\r\n <div className=\"content\">\r\n\r\n <div className=\"navbar-custom\">\r\n <ul className=\"list-unstyled topbar-menu float-end mb-0\">\r\n <li className=\"dropdown notification-list d-lg-none\">\r\n <a className=\"nav-link dropdown-toggle arrow-none\" data-bs-toggle=\"dropdown\" href=\"/\" role=\"button\" aria-haspopup=\"false\" aria-expanded=\"false\">\r\n <i className=\"dripicons-search noti-icon\"></i>\r\n </a>\r\n </li>\r\n <li className=\"dropdown notification-list\">\r\n <span className=\"nav-link dropdown-toggle nav-user arrow-none me-0\">\r\n <span className=\"account-user-avatar\">\r\n <img src=\"/assets/images/users/avatar-2.jpg\" alt=\"user-avatar\" className=\"rounded-circle\" />\r\n </span>\r\n <span>\r\n <span className=\"account-user-name\">{appSettings.adminFullName}</span>\r\n <span className=\"account-position\">Quản trị viên</span>\r\n </span>\r\n </span>\r\n </li>\r\n </ul>\r\n <button className=\"button-menu-mobile open-left\" onClick={handleCollapse}>\r\n <MdMenu style={{ marginTop: '-10px' }} />\r\n </button>\r\n <span className=\"page-title\" id=\"page-header\"></span>\r\n </div>\r\n\r\n <div className=\"container-fluid\">\r\n\r\n <div className=\"row\">\r\n <div className=\"col-12\" style={{ paddingTop: '24px' }}>\r\n <Switch>\r\n <Route path=\"/admin/dashboard\">\r\n <DashboardPage />\r\n </Route>\r\n <Route path=\"/admin/partner-group\">\r\n <AuthAdminView right=\"partner_group_view\">\r\n <PartnerGroupPage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/partner\">\r\n <AuthAdminView right=\"partner_view\">\r\n <PartnerPage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/category\">\r\n <AuthAdminView right=\"category_view\">\r\n <CategoryPage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/product/create-from-excel\">\r\n <AuthAdminView right=\"product_add\">\r\n <ProductFromExcel />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/product\">\r\n <AuthAdminView right=\"product_view\">\r\n <ProductPage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/attribute\">\r\n <AuthAdminView right=\"attribute_view\">\r\n <AttributePage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/shipping-unit\">\r\n <AuthAdminView right=\"shipping_unit_view\">\r\n <ShippingUnitPage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/order\">\r\n <AuthAdminView right=\"order_view\">\r\n <OrderPage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/statistic-partner-order\">\r\n <AuthAdminView right=\"statistic_partner_order\">\r\n <StatisticPartnerOrder />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/popup\">\r\n <AuthAdminView right=\"popup_view\">\r\n <PopupPage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/freeship\">\r\n <AuthAdminView right=\"popup_view\">\r\n <FreeShipPage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/user-info\">\r\n <AuthAdminView right=\"account_view\">\r\n <UserInfoPage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/user\">\r\n <AuthAdminView right=\"user_view\">\r\n <UserPage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/role\">\r\n <AuthAdminView right=\"role_view\">\r\n <RolePage />\r\n </AuthAdminView>\r\n </Route>\r\n <Route path=\"/admin/setting\">\r\n <AuthAdminView right=\"setting_view\">\r\n <SettingPage />\r\n </AuthAdminView>\r\n </Route>\r\n </Switch>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <footer className=\"footer\">\r\n <div className=\"container-fluid\">\r\n <div className=\"row\">\r\n <div className=\"col-md-6\">\r\n Copyright © {new Date().getFullYear()} Drop Viet\r\n </div>\r\n <div className=\"col-md-6\">\r\n <div className=\"text-md-end footer-links d-none d-md-block\">\r\n <span>Version: {Config.version}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </footer>\r\n\r\n </div>\r\n\r\n </Router>\r\n\r\n </div>\r\n )\r\n}\r\n\r\nexport default App","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { SearchButton, ClearButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n keyword: ''\r\n}\r\n\r\nfunction Filter(props) {\r\n const { onSearch } = props\r\n\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClear = () => {\r\n setKeyword('')\r\n filters.keyword = ''\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-12 col-md-12 col-lg-3 col-xl-3 col-xxl-2\">\r\n <input\r\n autoFocus\r\n onChange={e => {\r\n const value = e.target.value\r\n setKeyword(value)\r\n filters.keyword = value\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleSearch()\r\n }\r\n }}\r\n value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Há» tên, Ä‘iện thoại\" />\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-9 col-xl-9 col-xxl-10\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClear} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoEllipsisVertical, IoTrashOutline } from 'react-icons/io5'\r\nimport { EmptyRow, LoadingRow, FormatNumber } from '../../../../../components'\r\n\r\nconst Table = props => {\r\n const renderTable = () => {\r\n const data = props.data\r\n if (data === null) return <LoadingRow colSpan={6} />\r\n else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n else return data.map((item, index) => <tr key={item.CustomerId}>\r\n <td className=\"text-center\">\r\n <FormatNumber>\r\n {(props.pageItem * (props.pageIndex - 1)) + index + 1}\r\n </FormatNumber>\r\n </td>\r\n <td>{item.FullName}</td>\r\n <td>{item.Phone}</td>\r\n <td>{item.Address}</td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n </td>\r\n <td>\r\n <div className=\"dropdown float-end\">\r\n <button className=\"dropdown-toggle arrow-none card-drop btn-drop\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n <IoEllipsisVertical className=\"fs-4 text-primary\" />\r\n </button>\r\n <div className=\"dropdown-menu dropdown-menu-end\">\r\n <button onClick={() => props.onEdit(item)} className=\"dropdown-item\"><FiEdit className=\"mn-btn-icon\" />Chỉnh sá»a</button>\r\n <button onClick={() => props.onDelete(item)} className=\"dropdown-item text-danger\"><IoTrashOutline className=\"mn-btn-icon\" />Xóa</button>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Há» tên</th>\r\n <th>Äiện thoại</th>\r\n <th>Äịa chỉ</th>\r\n <th>Ngà y tạo</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n pageItem: PropTypes.number,\r\n pageIndex: PropTypes.number,\r\n data: PropTypes.array,\r\n onEdit: PropTypes.func,\r\n onDelete: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n pageItem: 0,\r\n pageIndex: 0,\r\n data: null,\r\n onEdit: () => { },\r\n onDelete: () => { }\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Select from 'react-select'\r\n\r\nconst schema = yup.object().shape({\r\n FullName: yup.string().required('Vui lòng nháºp há» tên').max(100, 'Há» tên quá dà i'),\r\n Phone: yup.string().required('Vui lòng nháºp số Ä‘iện thoại').max(20, 'Số Ä‘iện thoại quá dà i'),\r\n WardObj: yup.object().nullable(),\r\n WardId: yup.number().nullable(),\r\n Address: yup.string().max(200, 'Äịa chỉ quá dà i'),\r\n Note: yup.string().max(200, 'Ghi chú quá dà i')\r\n})\r\n\r\nfunction ModalAdd(props) {\r\n const { setValue, getValues, control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [provinceList, setProvinceList] = useState([])\r\n\r\n const [province, setProvince] = useState()\r\n\r\n const [districtList, setDistrictList] = useState([])\r\n\r\n const [district, setDistrict] = useState()\r\n\r\n const [wardList, setWardList] = useState([])\r\n\r\n useEffect(() => {\r\n const provinces = props.provinceList.map(item => {\r\n return {\r\n value: item.ProvinceId,\r\n label: `${item.Prefix} ${item.ProvinceName}`\r\n }\r\n })\r\n setProvinceList(provinces)\r\n }, [props.provinceList])\r\n\r\n useEffect(() => {\r\n const districts = props.districtList.map(item => {\r\n return {\r\n value: item.DistrictId,\r\n label: `${item.Prefix} ${item.DistrictName}`\r\n }\r\n })\r\n setDistrictList(districts)\r\n }, [props.districtList])\r\n\r\n useEffect(() => {\r\n const wards = props.wardList.map(item => {\r\n return {\r\n value: item.WardId,\r\n label: `${item.Prefix} ${item.WardName}`\r\n }\r\n })\r\n setWardList(wards)\r\n }, [props.wardList])\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"lg\"\r\n onExited={() => {\r\n reset()\r\n setProvince(null)\r\n setDistrict(null)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i khách hà ng</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n const wardObj = getValues('WardObj')\r\n formData.WardId = (wardObj !== undefined ? wardObj.value : 0)\r\n delete formData['WardObj']\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"row gy-2\">\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Há» tên <span className=\"text-danger\">*</span></label>\r\n <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Há» tên\" />\r\n {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Äiện thoại <span className=\"text-danger\">*</span></label>\r\n <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Äiện thoại\" />\r\n {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Tỉnh/Tp</label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={true}\r\n options={provinceList}\r\n value={province}\r\n onChange={item => {\r\n setProvince(item)\r\n setDistrict(null)\r\n setValue('WardId', null)\r\n setValue('WardObj', null)\r\n props.onProvinceChange(item !== null ? item.value : 0)\r\n }}\r\n placeholder='Tỉnh/Tp'\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Quáºn/Huyện</label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={false}\r\n options={districtList}\r\n value={district}\r\n onChange={item => {\r\n setDistrict(item)\r\n setValue('WardId', null)\r\n setValue('WardObj', null)\r\n props.onDistrictChange(item.value)\r\n }}\r\n placeholder='Quáºn/Huyện'\r\n noOptionsMessage={() => 'Quáºn/Huyện'}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Phưá»ng/Xã</label>\r\n <Controller\r\n control={control}\r\n name=\"WardObj\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={false}\r\n options={wardList}\r\n value={value}\r\n onChange={item => {\r\n onChange(item)\r\n }}\r\n placeholder='Phưá»ng/Xã'\r\n noOptionsMessage={() => 'Phưá»ng/Xã'}\r\n />\r\n )}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Äịa chỉ</label>\r\n <input {...register('Address')} type=\"text\" className=\"form-control\" placeholder=\"Äịa chỉ\" />\r\n {errors.Address && <div className=\"validation-message\">{errors.Address.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-12\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n provinceList: PropTypes.array,\r\n onProvinceChange: PropTypes.func,\r\n districtList: PropTypes.array,\r\n onDistrictChange: PropTypes.func,\r\n wardList: PropTypes.array\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n provinceList: [],\r\n onProvinceChange: () => { },\r\n districtList: [],\r\n onDistrictChange: () => { },\r\n wardList: []\r\n}\r\n\r\nexport default ModalAdd","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm, Controller } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\nimport Select from 'react-select'\r\n\r\nconst schema = yup.object().shape({\r\n CustomerId: yup.number(),\r\n FullName: yup.string().required('Vui lòng nháºp há» tên').max(100, 'Há» tên quá dà i'),\r\n Phone: yup.string().required('Vui lòng nháºp số Ä‘iện thoại').max(20, 'Số Ä‘iện thoại quá dà i'),\r\n WardObj: yup.object().nullable(),\r\n WardId: yup.number().nullable(),\r\n Address: yup.string().max(200, 'Äịa chỉ quá dà i'),\r\n Note: yup.string().max(200, 'Ghi chú quá dà i')\r\n})\r\n\r\nfunction ModalEdit(props) {\r\n const { setValue, getValues, control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [provinceList, setProvinceList] = useState([])\r\n\r\n const [province, setProvince] = useState()\r\n\r\n const [districtList, setDistrictList] = useState([])\r\n\r\n const [district, setDistrict] = useState()\r\n\r\n const [wardList, setWardList] = useState([])\r\n\r\n useEffect(() => {\r\n const provinces = props.provinceList.map(item => {\r\n return {\r\n value: item.ProvinceId,\r\n label: `${item.Prefix} ${item.ProvinceName}`\r\n }\r\n })\r\n setProvinceList(provinces)\r\n }, [props.provinceList])\r\n\r\n useEffect(() => {\r\n const districts = props.districtList.map(item => {\r\n return {\r\n value: item.DistrictId,\r\n label: `${item.Prefix} ${item.DistrictName}`\r\n }\r\n })\r\n setDistrictList(districts)\r\n }, [props.districtList])\r\n\r\n useEffect(() => {\r\n const wards = props.wardList.map(item => {\r\n return {\r\n value: item.WardId,\r\n label: `${item.Prefix} ${item.WardName}`\r\n }\r\n })\r\n setWardList(wards)\r\n }, [props.wardList])\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"lg\"\r\n onExited={() => {\r\n reset()\r\n setProvince(null)\r\n setDistrict(null)\r\n }}\r\n onShow={() => {\r\n const info = props.info\r\n setValue('CustomerId', info.CustomerId)\r\n setValue('FullName', info.FullName)\r\n setValue('Phone', info.Phone)\r\n setValue('Address', info.Address)\r\n setValue('Note', info.Note)\r\n setValue('WardId', info.WardId)\r\n if (info.WardId !== 0) {\r\n const selectedWard = props.wardList.filter(n => n.WardId === info.WardId)[0]\r\n setValue('WardObj', {\r\n value: info.WardId,\r\n label: `${selectedWard.Prefix} ${selectedWard.WardName}`\r\n })\r\n const selectedProvince = props.provinceList.filter(n => n.ProvinceId === info.ProvinceId)[0]\r\n setProvince({\r\n value: info.ProvinceId,\r\n label: `${selectedProvince.Prefix} ${selectedProvince.ProvinceName}`\r\n })\r\n const selectedDistrict = props.districtList.filter(n => n.DistrictId === info.DistrictId)[0]\r\n setDistrict({\r\n value: info.DistrictId,\r\n label: `${selectedDistrict.Prefix} ${selectedDistrict.DistrictName}`\r\n })\r\n }\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a khách hà ng</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n const wardObj = getValues('WardObj')\r\n if (wardObj !== undefined) {\r\n formData.WardId = (wardObj !== null ? wardObj.value : 0)\r\n delete formData['WardObj']\r\n }\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"row gy-2\">\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Há» tên <span className=\"text-danger\">*</span></label>\r\n <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Há» tên\" />\r\n {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Äiện thoại <span className=\"text-danger\">*</span></label>\r\n <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Äiện thoại\" />\r\n {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Tỉnh/Tp</label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={true}\r\n options={provinceList}\r\n value={province}\r\n onChange={item => {\r\n setProvince(item)\r\n setDistrict(null)\r\n props.onProvinceChange(item !== null ? item.value : 0)\r\n setValue('WardId', null)\r\n setValue('WardObj', null)\r\n }}\r\n placeholder='Tỉnh/Tp'\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Quáºn/Huyện</label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={false}\r\n options={districtList}\r\n value={district}\r\n onChange={item => {\r\n setDistrict(item)\r\n props.onDistrictChange(item.value)\r\n setValue('WardId', null)\r\n setValue('WardObj', null)\r\n }}\r\n placeholder='Quáºn/Huyện'\r\n noOptionsMessage={() => 'Quáºn/Huyện'}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Phưá»ng/Xã</label>\r\n <Controller\r\n control={control}\r\n name=\"WardObj\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={false}\r\n options={wardList}\r\n value={value}\r\n onChange={item => {\r\n onChange(item)\r\n }}\r\n placeholder='Phưá»ng/Xã'\r\n noOptionsMessage={() => 'Phưá»ng/Xã'}\r\n />\r\n )}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Äịa chỉ</label>\r\n <input {...register('Address')} type=\"text\" className=\"form-control\" placeholder=\"Äịa chỉ\" />\r\n {errors.Address && <div className=\"validation-message\">{errors.Address.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-12\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú</label>\r\n <textarea {...register('Note')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú\"></textarea>\r\n {errors.Note && <div className=\"validation-message\">{errors.Note.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n info: PropTypes.object,\r\n provinceList: PropTypes.array,\r\n onProvinceChange: PropTypes.func,\r\n districtList: PropTypes.array,\r\n onDistrictChange: PropTypes.func,\r\n wardList: PropTypes.array\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n info: {},\r\n provinceList: [],\r\n onProvinceChange: () => { },\r\n districtList: [],\r\n onDistrictChange: () => { },\r\n wardList: []\r\n}\r\n\r\nexport default ModalEdit","import React, { Fragment, useEffect, useState } from 'react'\r\nimport { IconButton } from './../../../components'\r\nimport { Filter, Table, ModalAdd, ModalEdit } from './components'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport axios from 'axios'\r\nimport { Notification, Pagination } from './../../../components'\r\n\r\nfunction CustomerPage(props) {\r\n const [customerList, setCustomerList] = useState(null)\r\n\r\n const [isShowModalAdd, setIsShowModalAdd] = useState(false)\r\n\r\n const [modalEditInfo, setModalEditInfo] = useState({\r\n isShow: false,\r\n info: {}\r\n })\r\n\r\n const [provinceList, setProvinceList] = useState([])\r\n\r\n const [districtList, setDistrictList] = useState([])\r\n\r\n const [wardList, setWardList] = useState([])\r\n\r\n const [filters, setFilters] = useState({\r\n keyword: '',\r\n pageItem: 10,\r\n pageIndex: 1\r\n })\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n useEffect(() => {\r\n const url = `/partner/customer/filter?keyword=${filters.keyword}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPagination(newPagination)\r\n setCustomerList(data.Result.Data)\r\n }\r\n })\r\n }, [filters])\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Khách hà ng'\r\n loadProvince()\r\n }, [])\r\n\r\n const loadProvince = () => {\r\n const url = '/partner/province/get-all'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setProvinceList(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadDistrict = (provinceId) => {\r\n const url = `/partner/province/${provinceId}/districts`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setDistrictList(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadWard = (wardId) => {\r\n const url = `/partner/district/${wardId}/wards`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setWardList(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const reloadCustomer = () => {\r\n setFilters({\r\n ...filters,\r\n pageIndex: 1\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={params => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row mb-2\">\r\n <div className=\"col-12\">\r\n <IconButton text=\"Thêm má»›i\" icon={<IoAddCircleOutline />} onClick={() => {\r\n setIsShowModalAdd(true)\r\n }} />\r\n </div>\r\n </div>\r\n <Table\r\n pageItem={filters.pageItem}\r\n pageIndex={filters.pageIndex}\r\n data={customerList}\r\n onEdit={customer => {\r\n const url = `/partner/customer/get-by-id?id=${customer.CustomerId}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n if (data.Result.Districts.length !== 0) {\r\n setDistrictList(data.Result.Districts)\r\n }\r\n if (data.Result.Wards.length !== 0) {\r\n setWardList(data.Result.Wards)\r\n }\r\n setModalEditInfo({\r\n isShow: true,\r\n info: data.Result.CustomerInfo\r\n })\r\n }\r\n })\r\n }}\r\n onDelete={customer => {\r\n Notification.confirmHtml('Bạn có chắc muốn xóa khách hà ng', customer.FullName, () => {\r\n const url = `/partner/customer/delete?id=${customer.CustomerId}`\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadCustomer()\r\n Notification.success('Xóa khách hà ng thà nh công')\r\n }\r\n })\r\n })\r\n }}\r\n />\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex }\r\n setPagination(newPagination)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <ModalAdd\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = `/partner/customer/create`\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadCustomer()\r\n setIsShowModalAdd(false)\r\n Notification.success('Thêm má»›i khách hà ng thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalAdd(false)\r\n }}\r\n isShow={isShowModalAdd}\r\n provinceList={provinceList}\r\n onProvinceChange={(provinceId) => {\r\n loadDistrict(provinceId)\r\n setWardList([])\r\n }}\r\n districtList={districtList}\r\n onDistrictChange={(districtId) => {\r\n loadWard(districtId)\r\n }}\r\n wardList={wardList}\r\n />\r\n <ModalEdit\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = `/partner/customer/update`\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n reloadCustomer()\r\n setModalEditInfo({\r\n isShow: false,\r\n info: {}\r\n })\r\n Notification.success('Chỉnh sá»a khách hà ng thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setModalEditInfo({\r\n isShow: false\r\n })\r\n }}\r\n isShow={modalEditInfo.isShow}\r\n info={modalEditInfo.info}\r\n provinceList={provinceList}\r\n onProvinceChange={(provinceId) => {\r\n loadDistrict(provinceId)\r\n setWardList([])\r\n }}\r\n districtList={districtList}\r\n onDistrictChange={(districtId) => {\r\n loadWard(districtId)\r\n }}\r\n wardList={wardList}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default CustomerPage","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { IoExtensionPuzzleOutline, IoArrowUpOutline, IoArrowDownOutline } from 'react-icons/io5'\r\nimport { FormatNumber } from './../../../../../components'\r\n\r\nfunction OrderBlock(props) {\r\n const { icon, header, val, percent } = props\r\n\r\n function renderUpDown() {\r\n if (val < 0) return <IoArrowDownOutline className=\"mt--2-px\" />\r\n else return <IoArrowUpOutline className=\"mt--2-px\" />\r\n }\r\n\r\n return (\r\n <div className=\"card widget-flat\">\r\n <div className=\"card-body\">\r\n <div className=\"float-end\">\r\n <span className=\"widget-icon\">\r\n {icon}\r\n </span>\r\n </div>\r\n <h5 className=\"text-muted fw-normal mt-0\">{header}</h5>\r\n <h3 className=\"mt-3 mb-3\">\r\n <FormatNumber maxDigit={2}>\r\n {val}\r\n </FormatNumber>\r\n </h3>\r\n <p className=\"mb-0 text-muted\">\r\n <span className={val < 0 ? 'text-danger me-2' : 'text-success me-2'}>\r\n {renderUpDown()}\r\n <FormatNumber maxDigit={2}>{percent}</FormatNumber>\r\n %\r\n </span>\r\n <span className=\"text-nowrap\">So vá»›i hôm trước</span>\r\n </p>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nOrderBlock.propTypes = {\r\n icon: PropTypes.element,\r\n header: PropTypes.string,\r\n val: PropTypes.number,\r\n percent: PropTypes.number,\r\n}\r\n\r\nOrderBlock.defaultProps = {\r\n icon: <IoExtensionPuzzleOutline />,\r\n header: 'Title',\r\n val: 0,\r\n percent: 0\r\n}\r\n\r\nexport default OrderBlock","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoBagHandleOutline, IoPeopleOutline, IoPersonOutline, IoWalletOutline } from 'react-icons/io5'\r\nimport { FormatNumber } from '../../../../../components'\r\n\r\nfunction PartnerInfo(props) {\r\n const { info } = props\r\n\r\n return (\r\n <div className=\"card widget-inline\">\r\n <div className=\"card-body p-0\">\r\n <div className=\"row g-0\">\r\n <div className=\"col-sm-6 col-xl-3\">\r\n <div className=\"card shadow-none m-0\">\r\n <div className=\"card-body text-center\">\r\n <IoWalletOutline className=\"fs-2 text-primary\" />\r\n <h3>\r\n <span>\r\n <FormatNumber>\r\n {info.balance}\r\n </FormatNumber>\r\n </span>\r\n </h3>\r\n <p className=\"text-success font-15 mb-0\">Số dư tà i khoản</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"col-sm-6 col-xl-3\">\r\n <div className=\"card shadow-none m-0 border-start no-border-radius\">\r\n <div className=\"card-body text-center\">\r\n <IoBagHandleOutline className=\"fs-2 text-primary\" />\r\n <h3>\r\n <span>\r\n <FormatNumber>\r\n {info.freeShipQty}\r\n </FormatNumber>\r\n </span>\r\n </h3>\r\n <p className=\"text-success font-15 mb-0\">Miá»…n phà đóng gói</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"col-sm-6 col-xl-3\">\r\n <div className=\"card shadow-none m-0 border-start no-border-radius\">\r\n <div className=\"card-body text-center\">\r\n <IoPersonOutline className=\"fs-2 text-primary\" />\r\n <h3>\r\n <span>\r\n {info.groupName}\r\n </span>\r\n </h3>\r\n <p className=\"text-success font-15 mb-0\">Nhóm cá»™ng tác viên</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"col-sm-6 col-xl-3\">\r\n <div className=\"card shadow-none m-0 border-start no-border-radius\">\r\n <div className=\"card-body text-center\">\r\n <IoPeopleOutline className=\"fs-2 text-primary\" />\r\n <h3>\r\n <span>\r\n <FormatNumber>\r\n {info.countCustomer}\r\n </FormatNumber>\r\n </span>\r\n </h3>\r\n <p className=\"text-success font-15 mb-0\">Số lượng khách hà ng</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nPartnerInfo.propTypes = {\r\n info: PropTypes.objectOf(PropTypes.any)\r\n}\r\n\r\nPartnerInfo.defaultProps = {\r\n info: {\r\n balance: 0,\r\n countCustomer: 0,\r\n orderToday: 0,\r\n groupName: ''\r\n }\r\n}\r\n\r\nexport default PartnerInfo","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nfunction Message(props) {\r\n const { message } = props\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <h4 className=\"header-title mb-3 text-primary\">Thông báo từ hệ thống</h4>\r\n <div dangerouslySetInnerHTML={{ __html: message }} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nMessage.propTypes = {\r\n message: PropTypes.string\r\n}\r\n\r\nMessage.defaultProps = {\r\n message: ''\r\n}\r\n\r\nexport default Message","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport ReactApexChart from 'react-apexcharts'\r\n\r\nfunction Revenue(props) {\r\n const { data } = props\r\n\r\n const [series, setSeries] = useState([{\r\n name: 'Doanh thu',\r\n data: []\r\n }, {\r\n name: 'Lợi nhuáºn',\r\n data: []\r\n }])\r\n\r\n const [options, setOptions] = useState({\r\n chart: {\r\n type: 'bar',\r\n height: 279,\r\n toolbar: {\r\n show: false\r\n }\r\n },\r\n plotOptions: {\r\n bar: {\r\n horizontal: false,\r\n columnWidth: '60%',\r\n endingShape: 'flat'\r\n },\r\n },\r\n dataLabels: {\r\n enabled: false\r\n },\r\n stroke: {\r\n show: true,\r\n width: 2,\r\n colors: ['transparent']\r\n },\r\n xaxis: {\r\n categories: [],\r\n },\r\n yaxis: {\r\n title: {\r\n text: 'Nghìn đồng'\r\n }\r\n },\r\n fill: {\r\n opacity: 1\r\n },\r\n tooltip: {\r\n y: {\r\n formatter: function (val) {\r\n return val + \" nghìn đồng\"\r\n }\r\n }\r\n }\r\n })\r\n\r\n useEffect(() => {\r\n if (data.length !== 0) {\r\n const income = {\r\n name: 'Doanh thu',\r\n data: []\r\n }\r\n income.data = data.map(item => item.Income)\r\n const revenue = {\r\n name: 'Lợi nhuáºn',\r\n data: []\r\n }\r\n revenue.data = data.map(item => item.Revenue)\r\n setSeries([\r\n income,\r\n revenue\r\n ])\r\n const cats = data.map(item => item.Date)\r\n const newOptions = {\r\n ...options,\r\n xaxis: {\r\n categories: cats,\r\n }\r\n }\r\n setOptions(newOptions)\r\n }\r\n // eslint-disable-next-line\r\n }, [data])\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <ReactApexChart options={options} series={series} type=\"bar\" height={279} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nRevenue.propTypes = {\r\n data: PropTypes.array,\r\n}\r\n\r\nRevenue.defaultProps = {\r\n data: []\r\n}\r\n\r\nexport default Revenue","import axios from 'axios'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard'\r\nimport { BiRun } from 'react-icons/bi'\r\nimport { IoCopyOutline, IoCubeOutline, IoFileTrayOutline, IoReloadOutline } from 'react-icons/io5'\r\nimport { Notification } from '../../../components'\r\nimport { Message, OrderBlock, PartnerInfo, Revenue } from './components'\r\n\r\nfunction DashboardPage(props) {\r\n\r\n const [refLink, setRefLink] = useState('')\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Tổng quan'\r\n loadNewOrder()\r\n loadInProcessOrder()\r\n loadShippingOrder()\r\n loadProductCount()\r\n loadRevenue()\r\n loadPartnerInfo()\r\n loadMessage()\r\n }, [])\r\n\r\n const [newOrder, setNewOrder] = useState({\r\n value: 0,\r\n percent: 0\r\n })\r\n\r\n const [inProcessOrder, setInProcessOrder] = useState({\r\n value: 0,\r\n percent: 0\r\n })\r\n\r\n const [shippingOrder, setShippingOrder] = useState({\r\n value: 0,\r\n percent: 0\r\n })\r\n\r\n const [countProduct, setCountProduct] = useState({\r\n value: 0,\r\n percent: 0\r\n })\r\n\r\n const [revenue, setRevenue] = useState([])\r\n\r\n const [partnerInfo, setPartnerInfo] = useState({\r\n balance: 0,\r\n countCustomer: 0,\r\n orderToday: 0,\r\n groupName: '',\r\n freeShipQty: 0\r\n })\r\n\r\n const [message, setMessage] = useState({\r\n isShow: false,\r\n message: ''\r\n })\r\n\r\n function loadNewOrder() {\r\n const url = '/partner/dashboard/new-order'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setNewOrder({\r\n value: data.Result.Value,\r\n percent: data.Result.Percent\r\n })\r\n }\r\n })\r\n }\r\n\r\n function loadInProcessOrder() {\r\n const url = '/partner/dashboard/in-process-order'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setInProcessOrder({\r\n value: data.Result.Value,\r\n percent: data.Result.Percent\r\n })\r\n }\r\n })\r\n }\r\n\r\n function loadShippingOrder() {\r\n const url = '/partner/dashboard/shipping-order'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setShippingOrder({\r\n value: data.Result.Value,\r\n percent: data.Result.Percent\r\n })\r\n }\r\n })\r\n }\r\n\r\n function loadProductCount() {\r\n const url = '/partner/dashboard/count-product'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setCountProduct({\r\n value: data.Result.Value,\r\n percent: data.Result.Percent\r\n })\r\n }\r\n })\r\n }\r\n\r\n function loadRevenue() {\r\n const url = '/partner/dashboard/revenue-income'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setRevenue(data.Result)\r\n }\r\n })\r\n }\r\n\r\n function loadPartnerInfo() {\r\n const url = '/partner/dashboard/info'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setPartnerInfo({\r\n balance: data.Result.Balance,\r\n countCustomer: data.Result.CountCustomer,\r\n orderToday: data.Result.OrderToday,\r\n groupName: data.Result.PartnerGroupName,\r\n freeShipQty: data.Result.FreeShipQty\r\n })\r\n\r\n const link = `${window.location.origin}/partner/register?refcode=${data.Result.PartnerCode.toLowerCase()}`\r\n setRefLink(link)\r\n }\r\n })\r\n }\r\n\r\n function loadMessage() {\r\n const url = '/partner/dashboard/message'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setMessage({\r\n isShow: data.Result.IsShow,\r\n message: data.Result.Message\r\n })\r\n }\r\n })\r\n }\r\n\r\n function renderMessage() {\r\n if (message.isShow === false) return ''\r\n else return <Message message={message.message} />\r\n }\r\n\r\n return (\r\n <div className=\"row\">\r\n <div className=\"col-xl-5 col-lg-6\">\r\n <div className=\"row\">\r\n <div className=\"col-lg-6\">\r\n <OrderBlock\r\n icon={<IoFileTrayOutline />}\r\n header=\"ÄÆ¡n tạo má»›i\"\r\n val={newOrder.value}\r\n percent={newOrder.percent}\r\n />\r\n </div>\r\n <div className=\"col-lg-6\">\r\n <OrderBlock\r\n icon={<IoReloadOutline />}\r\n header=\"Äang xá» lý\"\r\n val={inProcessOrder.value}\r\n percent={inProcessOrder.percent}\r\n />\r\n </div>\r\n <div className=\"col-lg-6\">\r\n <OrderBlock\r\n icon={<BiRun />}\r\n header=\"Äã gá»i váºn chuyển\"\r\n val={shippingOrder.value}\r\n percent={shippingOrder.percent}\r\n />\r\n </div>\r\n <div className=\"col-lg-6\">\r\n <OrderBlock\r\n icon={<IoCubeOutline />}\r\n header=\"Số lượng sản phẩm\"\r\n val={countProduct.value}\r\n percent={countProduct.percent}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-xl-7 col-lg-6\">\r\n <Revenue\r\n data={revenue}\r\n />\r\n </div>\r\n <div className=\"col-12\">\r\n <PartnerInfo\r\n info={partnerInfo}\r\n />\r\n </div>\r\n <div className=\"col-12\">\r\n {renderMessage()}\r\n </div>\r\n <div className='col-12'>\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"input-group flex-nowrap\">\r\n <span className=\"input-group-text\">Link giá»›i thiệu</span>\r\n <input readOnly defaultValue={refLink} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Link giá»›i thiệu\" />\r\n <CopyToClipboard text={refLink} onCopy={() => {\r\n Notification.success('Äã sao chép link giá»›i thiệu')\r\n }}>\r\n <span className=\"input-group-text text-primary\" style={{ cursor: 'pointer' }}><IoCopyOutline className='me-1' />Sao chép</span>\r\n </CopyToClipboard>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default DashboardPage","import PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport { IoCartOutline } from 'react-icons/io5'\r\nimport { CategoryDropdownTree, ClearButton, FormatNumber, IconButton, SearchButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n keyword: '',\r\n catId: 0\r\n}\r\n\r\nfunction Filter(props) {\r\n const { onSearch, categories } = props\r\n\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const [catId, setCatId] = useState(0)\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClear = () => {\r\n setKeyword('')\r\n filters.keyword = ''\r\n setCatId(0)\r\n filters.catId = 0\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n <input\r\n autoFocus\r\n onChange={e => {\r\n const value = e.target.value\r\n setKeyword(value)\r\n filters.keyword = value\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleSearch()\r\n }\r\n }}\r\n value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"Mã, tên sản phẩm\" />\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-3\">\r\n <CategoryDropdownTree\r\n options={categories}\r\n value={catId}\r\n onChange={(value) => {\r\n setCatId(value)\r\n filters.catId = value\r\n }}\r\n />\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-12 col-xxl-7\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClear} />\r\n <IconButton\r\n icon={<IoCartOutline />}\r\n className=\"float-end mb-0\"\r\n onClick={(setIsBusyOrder) => props.onOrder(setIsBusyOrder)}\r\n >\r\n Äặt hà ng <span className=\"badge bg-light text-dark\"><FormatNumber>{props.countCart}</FormatNumber></span>\r\n </IconButton>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func,\r\n onOrder: PropTypes.func,\r\n categories: PropTypes.array,\r\n countCart: PropTypes.number\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { },\r\n onOrder: () => { },\r\n categories: [],\r\n countCart: 0\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { IoCartOutline } from 'react-icons/io5'\r\nimport { FormatNumber, IconButton } from './../../../../../components'\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst List = (props) => {\r\n const onShowDetail = (productId) => {\r\n props.onShowDetail(productId)\r\n }\r\n\r\n const renderList = () => {\r\n if (props.products === null) return <div className=\"col-12 text-center\">\r\n <div className=\"spinner-border text-primary me-1\" role=\"status\"></div>\r\n </div>\r\n else if (props.products.length === 0) return <div className=\"col-12\">\r\n <p className=\"mb-0 text-center\">Không tìm thấy dữ liệu</p>\r\n </div>\r\n else return props.products.map(item => {\r\n const avatarUrl = (item.AvatarUrl === '' || item.AvatarUrl === null ? noImgUrl : `${apiUrl}/admin/storage/thumbnail?url=${item.AvatarUrl}&size=300`)\r\n return <div className=\"col\" key={item.ProductId}>\r\n <p className=\"bg-img cursor-point\" style={{ background: `url('${avatarUrl}')` }} onClick={() => onShowDetail(item.ProductId)}></p>\r\n <p className=\"text-primary cursor-point mb-1 trunk\" onClick={() => onShowDetail(item.ProductId)}>{item.ProductName}</p>\r\n <p className=\"mb-1\">{item.ProductCode}</p>\r\n <p className=\"mb-1\">Giá CTV <span className=\"float-end\"><FormatNumber>{item.UnitPriceByPartnerGroup}</FormatNumber></span></p>\r\n <p className=\"text-danger mb-1\">Bán lẻ đỠxuất <span className=\"float-end\"><FormatNumber>{item.OutputPrice}</FormatNumber></span></p>\r\n <p className=\"mb-1\">Kho hà ng <span className=\"float-end\"><FormatNumber>{item.Quantity}</FormatNumber></span></p>\r\n <IconButton\r\n icon={<IoCartOutline />}\r\n text=\"Thêm và o giá» hà ng\"\r\n variant=\"success\"\r\n className=\"w-100\"\r\n onClick={(setIsBusy) => props.onAddToCart(item.ProductId, setIsBusy)}\r\n />\r\n </div>\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"row gy-3 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 row-cols-xl-4 row-cols-xxl-6\">\r\n {renderList()}\r\n </div>\r\n )\r\n}\r\n\r\nList.propTypes = {\r\n products: PropTypes.array,\r\n onAddToCart: PropTypes.func,\r\n onShowDetail: PropTypes.func\r\n}\r\n\r\nList.defaultProps = {\r\n products: [],\r\n onAddToCart: () => { },\r\n onShowDetail: () => { }\r\n}\r\n\r\nexport default List","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, FormatNumber, Notification, NumberUpDown, SaveButton, AvatarRow } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n Products: yup.array().nullable()\r\n})\r\n\r\nconst ModalAddToCart = (props) => {\r\n const { setValue, control, handleSubmit, reset } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const renderTable = () => {\r\n return props.products.map((item, index) => <tr key={item.ProductId}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>\r\n <AvatarRow\r\n url={item.AvatarUrl}\r\n />\r\n {item.ProductName}\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {renderQty(item)}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"w-220-px\">\r\n {renderNumberInput(item, index)}\r\n </td>\r\n </tr>)\r\n }\r\n\r\n const renderQty = (item) => {\r\n if (item.ProductStatusId !== 1) return 0\r\n else return item.Quantity\r\n }\r\n\r\n const renderNumberInput = (item, index) => {\r\n if (item.Quantity > 0 && item.ProductStatusId === 1) {\r\n return <Controller\r\n control={control}\r\n name={`Products.${index}.Quantity`}\r\n render={({\r\n field: { onChange, onBlur, value, name, ref }\r\n }) => (\r\n <NumberUpDown\r\n onChange={onChange}\r\n />\r\n )}\r\n />\r\n }\r\n }\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n const products = props.products.map(item => {\r\n return {\r\n ProductId: item.ProductId,\r\n Quantity: 0\r\n }\r\n })\r\n setValue('Products', products)\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm và o giá» hà ng</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n const products = formData.Products.filter(n => n.Quantity !== undefined && n.Quantity !== 0)\r\n formData.Products = products\r\n if (formData.Products.length === 0) {\r\n Notification.warning('Vui lòng nháºp số lượng sản phẩm trước khi thêm và o giở hà ng')\r\n return\r\n }\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-input mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tên sản phẩm</th>\r\n <th className='text-end'>Kho hà ng</th>\r\n <th>Số lượng</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAddToCart.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n products: PropTypes.array\r\n}\r\n\r\nModalAddToCart.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n products: []\r\n}\r\n\r\nexport default ModalAddToCart","import React, { useEffect, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { Modal } from 'react-bootstrap'\r\nimport { CloseButton, FormatNumber, NumberUpDown, IconButton, Notification } from './../../../../../components'\r\nimport { IoCartOutline } from 'react-icons/io5'\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst ModalDetail = (props) => {\r\n const [qty, setQty] = useState(0)\r\n\r\n const [productId, setProductId] = useState(0)\r\n\r\n const [parentInfo, setParentInfo] = useState({\r\n detail: '',\r\n avatarUrl: '',\r\n customerPrice: 0,\r\n partnerPrice: 0,\r\n productName: ''\r\n })\r\n\r\n const [children, setChildren] = useState([])\r\n\r\n useEffect(() => {\r\n if (props.data.Parent !== undefined) {\r\n const parent = props.data.Parent\r\n const avatarUrl = (parent.AvatarUrl === '' || parent.AvatarUrl === null ? noImgUrl : `${apiUrl}/admin/storage/thumbnail?url=${parent.AvatarUrl}&size=300`)\r\n setParentInfo({\r\n detail: parent.Detail,\r\n avatarUrl: avatarUrl,\r\n customerPrice: parent.CustomerPrice,\r\n partnerPrice: parent.PartnerPrice,\r\n productName: parent.ProductName\r\n })\r\n }\r\n if (props.data.Children !== undefined) {\r\n const childrenArray = props.data.Children.map(item => {\r\n return {\r\n ProductId: item.ProductId,\r\n ExtensionName: item.ExtensionName,\r\n IsSelected: false,\r\n Quantity: item.Quantity,\r\n StatusId: item.ProductStatusId\r\n }\r\n })\r\n setChildren(childrenArray)\r\n }\r\n }, [props.data])\r\n\r\n const renderChildren = () => {\r\n return children.map(item => {\r\n let extName = item.ExtensionName.trim()\r\n if (extName !== '' || extName != null) {\r\n if (extName.startsWith('-')) {\r\n extName = extName.substring(1).trim()\r\n }\r\n }\r\n const isDisabled = (item.Quantity < 1 || item.StatusId !== 1)\r\n return <button key={item.ProductId}\r\n disabled={isDisabled}\r\n type=\"button\" className={item.IsSelected ? 'btn btn-sm btn-danger' : 'btn btn-sm btn-success'}\r\n onClick={() => {\r\n const childrenArray = [...children]\r\n for (let i = 0; i < childrenArray.length; i++) {\r\n childrenArray[i].IsSelected = false\r\n }\r\n const index = childrenArray.findIndex(n => n.ProductId === item.ProductId)\r\n childrenArray[index].IsSelected = true\r\n setChildren(childrenArray)\r\n setProductId(item.ProductId)\r\n }}\r\n >{extName} - <FormatNumber>{item.Quantity}</FormatNumber></button>\r\n })\r\n }\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n onExited={() => {\r\n setQty(0)\r\n setProductId(0)\r\n }}\r\n onShow={() => {\r\n\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chi tiết sản phẩm</Modal.Title>\r\n </Modal.Header>\r\n <Modal.Body>\r\n <div className=\"row\">\r\n <div className=\"col-md-3\">\r\n <p className=\"bg-img\" style={{ background: `url('${parentInfo.avatarUrl}')` }}></p>\r\n </div>\r\n <div className=\"col-md-9\">\r\n <h3 className=\"mt-0\">{parentInfo.productName}</h3>\r\n <div className=\"row\">\r\n <div className=\"col-6\">\r\n <div className=\"mt-2\">\r\n <h6 className=\"font-14\">Giá đỠxuất</h6>\r\n <h3>\r\n <FormatNumber>\r\n {parentInfo.customerPrice}\r\n </FormatNumber>\r\n </h3>\r\n </div>\r\n </div>\r\n <div className=\"col-6\">\r\n <div className=\"mt-2\">\r\n <h6 className=\"font-14\">Giá cá»™ng tác viên</h6>\r\n <h3>\r\n <FormatNumber>\r\n {parentInfo.partnerPrice}\r\n </FormatNumber>\r\n </h3>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"mt-3 button-list\">\r\n {renderChildren()}\r\n </div>\r\n <div className=\"mt-3\">\r\n <h6 className=\"font-14\">Số lượng</h6>\r\n <div className=\"d-flex\">\r\n <NumberUpDown\r\n className=\"w-150-px me-2\"\r\n value={qty}\r\n onChange={setQty}\r\n />\r\n <IconButton\r\n text=\"Thêm và o giá» hà ng\"\r\n variant=\"primary\"\r\n icon={<IoCartOutline />}\r\n onClick={(setIsBusyBtn) => {\r\n if (productId === 0) {\r\n Notification.warning('Vui lòng chá»n sản phẩm trước khi thêm và o giá» hà ng')\r\n return\r\n }\r\n if (qty < 1) {\r\n Notification.warning('Vui lòng chá»n số lượng sản phẩm trước khi thêm và o giá» hà ng')\r\n return\r\n }\r\n props.onSave({\r\n Products: [\r\n {\r\n ProductId: productId,\r\n Quantity: qty\r\n }\r\n ]\r\n }, setIsBusyBtn)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"mt-3\" dangerouslySetInnerHTML={{ __html: parentInfo.detail }} />\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalDetail.propTypes = {\r\n isShow: PropTypes.bool,\r\n data: PropTypes.object,\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func\r\n}\r\n\r\nModalDetail.defaultProps = {\r\n isShow: false,\r\n data: {},\r\n onSave: () => { },\r\n onClose: () => { }\r\n}\r\n\r\nexport default ModalDetail","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport { IoTrashOutline } from 'react-icons/io5'\r\nimport NumberFormat from 'react-number-format'\r\nimport Select from 'react-select'\r\nimport * as yup from \"yup\"\r\nimport {\r\n AvatarRow, CloseButton, EmptyRow, FormatNumber,\r\n InputSelect, LoadingRow, Notification, SaveButton, Config,\r\n CheckBox, UploadFileButton\r\n} from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n CustomerName: yup.string().max(100, 'Tên ngưá»i nháºn quá dà i'),\r\n CustomerPhone: yup.string().max(20, 'Số Ä‘iện thoại quá dà i'),\r\n CustomerAddress: yup.string().max(200, 'Äịa chỉ quá dà i'),\r\n CustomerWardObj: yup.object().nullable(),\r\n CustomerWardId: yup.number().nullable(),\r\n WarehouseNote: yup.string().max(1_000, 'Ghi chú gá»i kho quá dà i'),\r\n ShippingUnitObj: yup.object().required('Vui lòng chá»n đơn vị giao hà ng'),\r\n ShippingUnitId: yup.number().nullable(),\r\n WaybillCode: yup.string().required('Vui lòng nháºp mã đơn hà ng').max(50, 'Mã đơn hà ng quá dà i'),\r\n ShippingWeight: yup.number().max(2_000_000_000, 'Trá»ng lượng quá lá»›n'),\r\n ShippingMethodObj: yup.object().required('Vui lòng chá»n phương thức váºn chuyển'),\r\n ShippingMethodId: yup.number().nullable(),\r\n ShippingFeeTypeId: yup.number().required('Vui lòng chá»n phà váºn chuyển'),\r\n ShippingFeeAmount: yup.number().max(2_000_000_000, 'Phà váºn chuyển quá lá»›n'),\r\n ShippingNote: yup.string().max(1_000, 'Ghi chú váºn chuyển quá dà i'),\r\n OrderTypeId: yup.number().required('Vui lòng chá»n loại đơn hà ng'),\r\n Products: yup.array(),\r\n IsUseFreeShip: yup.bool()\r\n})\r\n\r\nconst orderTypes = Config.orderTypes\r\n\r\nconst shippingTypes = Config.shippingTypes\r\n\r\nconst ModalOrder = (props) => {\r\n const { setValue, getValues, control, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema),\r\n defaultValues: {\r\n ShippingNote: Config.shippingNote,\r\n OrderTypeId: 1,\r\n ShippingFeeTypeId: 1,\r\n ShippingFeeAmount: 0,\r\n ShippingWeight: 0\r\n }\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [provinces, setProvinces] = useState([])\r\n\r\n const [province, setProvince] = useState()\r\n\r\n const [districts, setDistricts] = useState([])\r\n\r\n const [district, setDistrict] = useState()\r\n\r\n const [wards, setWards] = useState([])\r\n\r\n const [shippingUnits, setShippingUnits] = useState([])\r\n\r\n const [shippingMethods, setShippingMethods] = useState([])\r\n\r\n const [tienHang, setTienHang] = useState(0)\r\n\r\n const [fileName, setFileName] = useState('')\r\n\r\n useEffect(() => {\r\n const provinceArray = props.provinces.map(item => {\r\n return {\r\n value: item.ProvinceId,\r\n label: `${item.Prefix} ${item.ProvinceName}`\r\n }\r\n })\r\n setProvinces(provinceArray)\r\n }, [props.provinces])\r\n\r\n useEffect(() => {\r\n const districtArray = props.districts.map(item => {\r\n return {\r\n value: item.DistrictId,\r\n label: `${item.Prefix} ${item.DistrictName}`\r\n }\r\n })\r\n setDistricts(districtArray)\r\n }, [props.districts])\r\n\r\n useEffect(() => {\r\n const wardArray = props.wards.map(item => {\r\n return {\r\n value: item.WardId,\r\n label: `${item.Prefix} ${item.WardName}`\r\n }\r\n })\r\n setWards(wardArray)\r\n }, [props.wards])\r\n\r\n useEffect(() => {\r\n const shippingUnitArray = props.shippingUnits.map(item => {\r\n return {\r\n value: item.ShippingUnitId,\r\n label: item.ShippingUnitName\r\n }\r\n })\r\n setShippingUnits(shippingUnitArray)\r\n }, [props.shippingUnits])\r\n\r\n useEffect(() => {\r\n const shippingMethodArray = props.shippingMethods.map(item => {\r\n return {\r\n value: item.ShippingMethodId,\r\n label: item.ShippingMethodName\r\n }\r\n })\r\n setShippingMethods(shippingMethodArray)\r\n }, [props.shippingMethods])\r\n\r\n useEffect(() => {\r\n\r\n const tongTienHang = props.products.reduce((prev, current) => {\r\n return prev + current.TotalAmount\r\n }, 0)\r\n setTienHang(tongTienHang)\r\n\r\n const productArray = props.products.map(item => {\r\n return {\r\n ProductId: item.ProductId,\r\n Quantity: item.Quantity\r\n }\r\n })\r\n setValue('Products', productArray)\r\n // eslint-disable-next-line\r\n }, [props.products])\r\n\r\n const renderProduct = () => {\r\n const products = props.products\r\n if (products === null) return <LoadingRow colSpan={6} />\r\n else if (products.length === 0) return <EmptyRow colSpan={6} />\r\n else return products.map((item, index) => <tr key={item.CartId}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>\r\n <AvatarRow\r\n url={item.AvatarUrl}\r\n />\r\n {item.ProductName}\r\n </td>\r\n <td className=\"text-end text-primary\">{item.Quantity}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.UnitPrice}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.TotalAmount}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-danger\">\r\n <IoTrashOutline className=\"cursor-point\" onClick={() => props.onRemoveCart(item.CartId)} />\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\" size=\"xl\"\r\n onExited={() => {\r\n reset()\r\n setFileName('')\r\n }}\r\n onShow={() => {\r\n\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Äặt hà ng</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n\r\n if (props.products.length === 0) {\r\n Notification.warning('Vui lòng chá»n sản phẩm trước khi đặt hà ng')\r\n return\r\n }\r\n\r\n const customerWardObj = getValues('CustomerWardObj')\r\n formData.CustomerWardId = (customerWardObj !== undefined ? customerWardObj.value : 0)\r\n delete formData['CustomerWardObj']\r\n\r\n const shippingUnitObj = getValues('ShippingUnitObj')\r\n formData.ShippingUnitId = (shippingUnitObj !== undefined ? shippingUnitObj.value : 0)\r\n delete formData['ShippingUnitObj']\r\n\r\n const shippingMethodObj = getValues('ShippingMethodObj')\r\n formData.ShippingMethodId = (shippingMethodObj !== undefined ? shippingMethodObj.value : 0)\r\n delete formData['ShippingMethodObj']\r\n\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"card border-primary border\">\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title text-primary\">Thông tin khách hà ng</h5>\r\n <div className=\"row gy-2\">\r\n <div className=\"col-md-3\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ngưá»i nháºn</label>\r\n <input {...register('CustomerName')} type=\"text\" className=\"form-control\" placeholder=\"Ngưá»i nháºn\" />\r\n {errors.CustomerName && <div className=\"validation-message\">{errors.CustomerName.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Äiện thoại</label>\r\n <input {...register('CustomerPhone')} type=\"text\" className=\"form-control\" placeholder=\"Äiện thoại\" />\r\n {errors.CustomerPhone && <div className=\"validation-message\">{errors.CustomerPhone.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-6\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Äịa chỉ</label>\r\n <input {...register('CustomerAddress')} type=\"text\" className=\"form-control\" placeholder=\"Äịa chỉ\" />\r\n {errors.CustomerAddress && <div className=\"validation-message\">{errors.CustomerAddress.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Tỉnh/Tp</label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={true}\r\n options={provinces}\r\n value={province}\r\n onChange={item => {\r\n setProvince(item)\r\n setDistrict(null)\r\n setValue('CustomerWardId', null)\r\n setValue('CustomerWardObj', null)\r\n props.onProvinceChange(item !== null ? item.value : 0)\r\n }}\r\n placeholder='Tỉnh/Tp'\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Quáºn/Huyện</label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={false}\r\n options={districts}\r\n value={district}\r\n onChange={item => {\r\n setDistrict(item)\r\n setValue('CustomerWardId', null)\r\n setValue('CustomerWardObj', null)\r\n props.onDistrictChange(item.value)\r\n }}\r\n placeholder='Quáºn/Huyện'\r\n noOptionsMessage={() => 'Quáºn/Huyện'}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Phưá»ng/Xã</label>\r\n <Controller\r\n control={control}\r\n name=\"CustomerWardObj\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={false}\r\n options={wards}\r\n value={value}\r\n onChange={item => {\r\n onChange(item)\r\n }}\r\n placeholder='Phưá»ng/Xã'\r\n noOptionsMessage={() => 'Phưá»ng/Xã'}\r\n />\r\n )}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"card border-primary border\">\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title text-primary\">Danh sách sản phẩm</h5>\r\n <div className=\"relative-position\">\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-avatar mb-2\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tên sản phẩm</th>\r\n <th>Số lượng</th>\r\n <th>Giá CTV</th>\r\n <th>Thà nh tiá»n</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderProduct()}\r\n <tr>\r\n <td colSpan={4} className=\"text-end fw-bold\">Tổng thà nh tiá»n</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {tienHang}\r\n </FormatNumber>\r\n </td>\r\n <td></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Cá»™ng tác viên thanh toán vá»›i kho</label>\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered\">\r\n <tbody>\r\n <tr>\r\n <td className=\"text-end w-50-pc\">Tiá»n hà ng</td>\r\n <td className=\"text-primary\">\r\n <FormatNumber>\r\n {tienHang}\r\n </FormatNumber>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td className=\"text-end\">Phà dropship</td>\r\n <td className=\"text-primary\">\r\n <FormatNumber>\r\n {props.dropShipFee}\r\n </FormatNumber>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td className=\"text-end fw-bold\">Cá»™ng tác viên thanh toán</td>\r\n <td className=\"text-primary\">\r\n <FormatNumber>\r\n {props.dropShipFee + tienHang}\r\n </FormatNumber>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div className='row gy-2'>\r\n <div className='col-md-4'>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Miá»…n phà đóng gói (Ä‘ang có {props.freeShipQty} lần)</label>\r\n <Controller\r\n control={control}\r\n name=\"IsUseFreeShip\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <CheckBox\r\n className=''\r\n title='Sá» dụng'\r\n onChange={isCheck => {\r\n onChange(isCheck)\r\n props.onFreeShipChange(isCheck)\r\n }}\r\n checked={value}\r\n />\r\n )}\r\n />\r\n </div>\r\n </div>\r\n <div className='col-md-8'>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú gá»i kho</label>\r\n {/* <textarea {...register('WarehouseNote')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú gá»i kho\"></textarea> */}\r\n <input {...register('WarehouseNote')} className=\"form-control\" placeholder=\"Ghi chú gá»i kho\" type='text' />\r\n {errors.WarehouseNote && <div className=\"validation-message\">{errors.WarehouseNote.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"card border-primary border mb-0\">\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title text-primary mb-2\">Váºn chuyển</h5>\r\n <div className=\"row\">\r\n <div className=\"col-md-6\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">ÄÆ¡n vị giao hà ng <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"ShippingUnitObj\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={false}\r\n options={shippingUnits}\r\n value={value}\r\n onChange={item => {\r\n onChange(item)\r\n }}\r\n placeholder='ÄÆ¡n vị giao hà ng'\r\n noOptionsMessage={() => 'ÄÆ¡n vị giao hà ng'}\r\n />\r\n )}\r\n />\r\n {errors.ShippingUnitObj && <div className=\"validation-message\">{errors.ShippingUnitObj.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Mã váºn đơn <span className=\"text-danger\">*</span></label>\r\n <input {...register('WaybillCode')} type=\"text\" className=\"form-control\" placeholder=\"Mã váºn đơn\" />\r\n {errors.WaybillCode && <div className=\"validation-message\">{errors.WaybillCode.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-3\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Trá»ng lượng</label>\r\n <div className=\"input-group\">\r\n <Controller\r\n control={control}\r\n name=\"ShippingWeight\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <NumberFormat\r\n placeholder='Trá»ng lượng'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={value}\r\n onValueChange={val => onChange(val.value)}\r\n />\r\n )}\r\n />\r\n <span className=\"input-group-text\">Gram</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-md-5\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Loại đơn <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"OrderTypeId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <InputSelect\r\n options={orderTypes}\r\n value={value}\r\n defaultValue={1}\r\n name='order-type'\r\n variant='success'\r\n onChange={onChange}\r\n />\r\n )}\r\n />\r\n {errors.OrderTypeId && <div className=\"validation-message\">{errors.OrderTypeId.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-7\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Phương thức váºn chuyển <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"ShippingMethodObj\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={false}\r\n options={shippingMethods}\r\n value={value}\r\n onChange={item => {\r\n onChange(item)\r\n }}\r\n placeholder='Phương thức váºn chuyển'\r\n noOptionsMessage={() => 'Phương thức váºn chuyển'}\r\n />\r\n )}\r\n />\r\n {errors.ShippingMethodObj && <div className=\"validation-message\">{errors.ShippingMethodObj.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"col-md-8\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Loại phà váºn chuyển <span className=\"text-danger\">*</span></label>\r\n <Controller\r\n control={control}\r\n name=\"ShippingFeeTypeId\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <InputSelect\r\n options={shippingTypes}\r\n value={value}\r\n defaultValue={1}\r\n name='shipping-fee-type'\r\n variant='success'\r\n onChange={onChange}\r\n />\r\n )}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-md-4\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Phà váºn chuyển thá»a thuáºn</label>\r\n <div className=\"input-group\">\r\n <Controller\r\n control={control}\r\n name=\"ShippingFeeAmount\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <NumberFormat\r\n placeholder='Phà váºn chuyển thá»a thuáºn'\r\n className=\"form-control\"\r\n // thousandSeparator={\".\"}\r\n // decimalSeparator={\",\"}\r\n allowNegative={false}\r\n defaultValue={0}\r\n decimalScale={0}\r\n value={value}\r\n onValueChange={val => onChange(val.value)}\r\n />\r\n )}\r\n />\r\n <span className=\"input-group-text\">VNÄ</span>\r\n </div>\r\n {errors.ShippingFeeAmount && <div className=\"validation-message\">{errors.ShippingFeeAmount.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú váºn chuyển</label>\r\n <textarea {...register('ShippingNote')} rows=\"2\" className=\"form-control\" placeholder=\"Ghi chú váºn chuyển\"></textarea>\r\n {errors.ShippingNote && <div className=\"validation-message\">{errors.ShippingNote.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <span>{fileName}</span>\r\n <UploadFileButton onCompleted={data => {\r\n if (data.IsSuccess) {\r\n setValue('FileUrl', data.Result.FileUrl)\r\n setFileName(data.Result.FileName)\r\n }\r\n }} />\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalOrder.propTypes = {\r\n isShow: PropTypes.bool,\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n provinces: PropTypes.array,\r\n onProvinceChange: PropTypes.func,\r\n districts: PropTypes.array,\r\n onDistrictChange: PropTypes.func,\r\n wards: PropTypes.array,\r\n products: PropTypes.array,\r\n shippingUnits: PropTypes.array,\r\n shippingMethods: PropTypes.array,\r\n onRemoveCart: PropTypes.func,\r\n dropShipFee: PropTypes.number,\r\n freeShipQty: PropTypes.number,\r\n onFreeShipChange: PropTypes.func\r\n}\r\n\r\nModalOrder.defaultProps = {\r\n isShow: false,\r\n onSave: () => { },\r\n onClose: () => { },\r\n provinces: [],\r\n onProvinceChange: () => { },\r\n districts: [],\r\n onDistrictChange: () => { },\r\n wards: [],\r\n products: [],\r\n shippingUnits: [],\r\n shippingMethods: [],\r\n onRemoveCart: () => { },\r\n dropShipFee: 0,\r\n freeShipQty: 0,\r\n onFreeShipChange: () => { }\r\n}\r\n\r\nexport default ModalOrder","import React, { useEffect, Fragment, useState } from 'react'\r\nimport { Filter, List, ModalAddToCart, ModalDetail, ModalOrder } from './components'\r\nimport axios from 'axios'\r\nimport { Pagination, Notification } from './../../../components'\r\n\r\nconst ProductPage = (props) => {\r\n const [products, setProducts] = useState(null)\r\n\r\n const [categories, setCategories] = useState([])\r\n\r\n const [countCart, setCountCart] = useState(0)\r\n\r\n const [modalAddToCartInfo, setModalAddToCartInfo] = useState({\r\n isShow: false,\r\n products: []\r\n })\r\n\r\n const [modalDetailInfo, setModalDetailInfo] = useState({\r\n isShow: false,\r\n data: {}\r\n })\r\n\r\n const [modalOrderInfo, setModalOrderInfo] = useState({\r\n isShow: false,\r\n products: [],\r\n dropShipFee: 0,\r\n dropShipFeeBase: 0,\r\n freeShipQty: 0\r\n })\r\n\r\n const [filters, setFilters] = useState({\r\n keyword: '',\r\n catId: 0,\r\n pageItem: 24,\r\n pageIndex: 1\r\n })\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n const [provinceList, setProvinceList] = useState([])\r\n\r\n const [districtList, setDistrictList] = useState([])\r\n\r\n const [wardList, setWardList] = useState([])\r\n\r\n const [shippingUnits, setShippingUnits] = useState([])\r\n\r\n const [shippingMethods, setShippingMethods] = useState([])\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Danh sách sản phẩm'\r\n loadCategory()\r\n loadCountCart()\r\n loadShippingUnit()\r\n loadProvince()\r\n loadShippingMethod()\r\n }, [])\r\n\r\n useEffect(() => {\r\n const url = `/partner/product/get-active?keyword=${filters.keyword}&catId=${filters.catId}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPagination(newPagination)\r\n setProducts(data.Result.Data)\r\n }\r\n })\r\n }, [filters])\r\n\r\n const loadCountCart = () => {\r\n const url = `/partner/cart/count`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setCountCart(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadCategory = () => {\r\n const url = '/partner/category/get-active-dropdown'\r\n axios.get(url).then(res => {\r\n const data = res.data\r\n if (data.IsSuccess) {\r\n setCategories(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadProvince = () => {\r\n const url = '/partner/province/get-all'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setProvinceList(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadDistrict = (provinceId) => {\r\n const url = `/partner/province/${provinceId}/districts`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setDistrictList(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadWard = (wardId) => {\r\n const url = `/partner/district/${wardId}/wards`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setWardList(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadShippingUnit = () => {\r\n const url = '/partner/shipping-unit/get-dropdown'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setShippingUnits(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadShippingMethod = () => {\r\n const url = '/partner/shipping-method/get-dropdown'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setShippingMethods(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const reloadProduct = () => {\r\n setFilters({\r\n ...filters,\r\n pageIndex: 1\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={params => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n onOrder={(setIsBusy) => {\r\n if (countCart < 1) {\r\n Notification.warning('Vui lòng chá»n sản phẩm trước khi đặt hà ng')\r\n return\r\n }\r\n setIsBusy(true)\r\n const url = `/partner/cart/product`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalOrderInfo({\r\n isShow: true,\r\n products: data.Result.Products,\r\n dropShipFee: data.Result.DropShipFee,\r\n dropShipFeeBase: data.Result.DropShipFee,\r\n freeShipQty: data.Result.FreeShipQty\r\n })\r\n setIsBusy(false)\r\n }\r\n })\r\n }}\r\n categories={categories}\r\n countCart={countCart}\r\n />\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <List\r\n products={products}\r\n onAddToCart={(productId, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = `/partner/product/get-children?parentId=${productId}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalAddToCartInfo({\r\n isShow: true,\r\n products: data.Result\r\n })\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onShowDetail={(productId) => {\r\n const url = `/partner/product/parent-detail?id=${productId}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalDetailInfo({\r\n isShow: true,\r\n data: data.Result\r\n })\r\n }\r\n })\r\n }}\r\n />\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex }\r\n setPagination(newPagination)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <ModalAddToCart\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = `/partner/cart/create`\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalAddToCartInfo({\r\n isShow: false,\r\n products: []\r\n })\r\n loadCountCart()\r\n Notification.success('Thêm sản phẩm và o giá» hà ng thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setModalAddToCartInfo({\r\n isShow: false,\r\n products: []\r\n })\r\n }}\r\n isShow={modalAddToCartInfo.isShow}\r\n products={modalAddToCartInfo.products}\r\n />\r\n <ModalDetail\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = `/partner/cart/create`\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n loadCountCart()\r\n setModalDetailInfo({\r\n isShow: false,\r\n data: {}\r\n })\r\n Notification.success('Thêm sản phẩm và o giá» hà ng thà nh công')\r\n }\r\n })\r\n }}\r\n onClose={() => {\r\n setModalDetailInfo({\r\n isShow: false,\r\n data: {}\r\n })\r\n }}\r\n isShow={modalDetailInfo.isShow}\r\n data={modalDetailInfo.data}\r\n />\r\n <ModalOrder\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/partner/order/create'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setCountCart(0)\r\n reloadProduct()\r\n setModalOrderInfo({\r\n isShow: false,\r\n products: [],\r\n dropShipFee: 0\r\n })\r\n Notification.success('Äặt hà ng thà nh công')\r\n }\r\n }).finally(() => {\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setModalOrderInfo({\r\n isShow: false,\r\n products: []\r\n })\r\n }}\r\n isShow={modalOrderInfo.isShow}\r\n provinces={provinceList}\r\n onProvinceChange={(provinceId) => {\r\n loadDistrict(provinceId)\r\n }}\r\n districts={districtList}\r\n onDistrictChange={(districtId) => {\r\n loadWard(districtId)\r\n }}\r\n wards={wardList}\r\n products={modalOrderInfo.products}\r\n shippingUnits={shippingUnits}\r\n shippingMethods={shippingMethods}\r\n onRemoveCart={(cartId) => {\r\n const url = `/partner/cart/remove?cartId=${cartId}`\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n loadCountCart()\r\n const temp = modalOrderInfo.products.filter(n => n.CartId !== cartId)\r\n setModalOrderInfo({\r\n isShow: true,\r\n products: temp,\r\n dropShipFee: 0\r\n })\r\n }\r\n })\r\n }}\r\n dropShipFee={modalOrderInfo.dropShipFee}\r\n freeShipQty={modalOrderInfo.freeShipQty}\r\n onFreeShipChange={(isCheck) => {\r\n if (isCheck) {\r\n setModalOrderInfo({\r\n ...modalOrderInfo,\r\n dropShipFee: 0\r\n })\r\n }\r\n else {\r\n setModalOrderInfo({\r\n ...modalOrderInfo,\r\n dropShipFee: modalOrderInfo.dropShipFeeBase\r\n })\r\n }\r\n }}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default ProductPage","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { SearchButton, ClearButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n keyword: ''\r\n}\r\n\r\nfunction Filter(props) {\r\n const { onSearch } = props\r\n\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClear = () => {\r\n setKeyword('')\r\n filters.keyword = ''\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-4 col-md-4 col-lg-3 col-xl-3 col-xxl-2\">\r\n <input\r\n autoFocus\r\n onChange={e => {\r\n const value = e.target.value\r\n setKeyword(value)\r\n filters.keyword = value\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleSearch()\r\n }\r\n }}\r\n value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"ID, tên sản phẩm\" />\r\n </div>\r\n <div className=\"col-sm-8 col-md-8 col-lg-9 col-xl-9 col-xxl-10\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={() => handleSearch()} />\r\n <ClearButton onClick={() => handleClear()} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { LoadingRow, EmptyRow, FormatNumber, AvatarRow } from './../../../../../components'\r\n\r\nfunction Table(props) {\r\n const { onAvatarClick } = props\r\n\r\n const renderTable = () => {\r\n const data = props.data\r\n if (data === null) return <LoadingRow colSpan={4} />\r\n else if (data.length === 0) return <EmptyRow colSpan={4} />\r\n else return data.map((item, index) => {\r\n const rowSpan = item.Children.length\r\n return <Fragment key={item.ProductId}>\r\n <tr>\r\n <td className=\"text-center\" rowSpan={rowSpan}>\r\n <FormatNumber>\r\n {(props.pageItem * (props.pageIndex - 1)) + index + 1}\r\n </FormatNumber>\r\n </td>\r\n <td rowSpan={rowSpan}>\r\n <AvatarRow\r\n url={item.AvatarUrl}\r\n onClick={(urlObj) => {\r\n onAvatarClick(urlObj)\r\n }}\r\n className=\"cursor-zoom\"\r\n />\r\n {item.ProductName}\r\n </td>\r\n {renderFirstChild(item.Children)}\r\n </tr>\r\n {renderChildren(item.Children)}\r\n </Fragment>\r\n })\r\n }\r\n\r\n const renderFirstChild = (children) => {\r\n if (children.length !== 0) {\r\n const child = children[0]\r\n return <Fragment>\r\n <td>\r\n <AvatarRow\r\n url={child.AvatarUrl}\r\n onClick={(urlObj) => {\r\n onAvatarClick(urlObj)\r\n }}\r\n className=\"cursor-zoom\"\r\n />\r\n {child.ProductName}\r\n </td>\r\n <td>{child.ProductId}</td>\r\n </Fragment>\r\n }\r\n else return <Fragment></Fragment>\r\n }\r\n\r\n const renderChildren = (children) => {\r\n const content = []\r\n for (let index = 0; index < children.length; index++) {\r\n const child = children[index];\r\n if (index === 0) {\r\n continue\r\n }\r\n content.push(<tr key={child.ProductId}>\r\n <td>\r\n <AvatarRow\r\n url={child.AvatarUrl}\r\n onClick={(urlObj) => {\r\n onAvatarClick(urlObj)\r\n }}\r\n className=\"cursor-zoom\"\r\n />\r\n {child.ProductName}\r\n </td>\r\n <td>{child.ProductId}</td>\r\n </tr>)\r\n }\r\n return content\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0 table-avatar\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Sản phẩm</th>\r\n <th>Sản phẩm thuá»™c tÃnh</th>\r\n <th>ID</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n pageItem: PropTypes.number,\r\n pageIndex: PropTypes.number,\r\n data: PropTypes.array,\r\n onAvatarClick: PropTypes.func,\r\n}\r\n\r\nTable.defaultPropts = {\r\n pageItem: 0,\r\n pageIndex: 0,\r\n data: null,\r\n onAvatarClick: () => { }\r\n}\r\n\r\nexport default Table","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Filter, Table } from './components'\r\nimport { Pagination } from './../../../components'\r\nimport ImageViewer from 'react-simple-image-viewer'\r\n\r\nfunction ProductCheckingPage(props) {\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Kiểm tra ID sản phẩm'\r\n }, [])\r\n\r\n const [products, setProducts] = useState(null)\r\n\r\n const [filters, setFilters] = useState({\r\n keyword: '',\r\n pageItem: 10,\r\n pageIndex: 1\r\n })\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n const [isShowViewer, setIsShowViewer] = useState(false)\r\n\r\n const [viewerList, setViewerList] = useState([])\r\n\r\n useEffect(() => {\r\n const url = `/partner/product/get-checking?keyword=${filters.keyword}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPagination(newPagination)\r\n setProducts(data.Result.Data)\r\n }\r\n })\r\n }, [filters])\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={params => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <Table\r\n pageItem={filters.pageItem}\r\n pageIndex={filters.pageIndex}\r\n data={products}\r\n onAvatarClick={(urlObj) => {\r\n setIsShowViewer(true)\r\n setViewerList([urlObj.fullUrl])\r\n }}\r\n />\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex }\r\n setPagination(newPagination)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n {isShowViewer && (\r\n <ImageViewer\r\n src={viewerList}\r\n currentIndex={0}\r\n disableScroll={false}\r\n closeOnClickOutside={true}\r\n onClose={() => {\r\n setIsShowViewer(false)\r\n }}\r\n />\r\n )}\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default ProductCheckingPage","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { SearchButton, ClearButton } from './../../../../../components'\r\nimport DatePicker from 'react-datepicker'\r\nimport Select from 'react-select'\r\n\r\nconst filters = {\r\n keyword: '',\r\n fromDate: '',\r\n toDate: '',\r\n statusId: 0,\r\n orderFromId: 0\r\n}\r\n\r\nconst Filter = (props) => {\r\n const { onSearch } = props\r\n\r\n const [keyword, setKeyword] = useState('')\r\n\r\n const [fromDate, setFromDate] = useState()\r\n\r\n const [toDate, setToDate] = useState()\r\n\r\n const [statuses, setStatuses] = useState([])\r\n\r\n const [status, setStatus] = useState()\r\n\r\n const [orderFroms, setOrderFroms] = useState([])\r\n\r\n const [orderFrom, setOrderFrom] = useState()\r\n\r\n useEffect(() => {\r\n const orderStatuses = props.orderStatuses.map(item => {\r\n return {\r\n value: item.OrderStatusId,\r\n label: item.OrderStatusName\r\n }\r\n })\r\n setStatuses(orderStatuses)\r\n }, [props.orderStatuses])\r\n\r\n useEffect(() => {\r\n const froms = props.orderFroms.map(item => {\r\n return {\r\n value: item.OrderFromId,\r\n label: item.OrderFromName\r\n }\r\n })\r\n setOrderFroms(froms)\r\n }, [props.orderFroms])\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClear = () => {\r\n setKeyword('')\r\n filters.keyword = ''\r\n setFromDate(null)\r\n filters.fromDate = ''\r\n setToDate(null)\r\n filters.toDate = ''\r\n setStatus(null)\r\n filters.statusId = 0\r\n setOrderFrom(null)\r\n filters.orderFromId = 0\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-12 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n <input\r\n autoFocus\r\n onChange={e => {\r\n const value = e.target.value\r\n setKeyword(value)\r\n filters.keyword = value\r\n }}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleSearch()\r\n }\r\n }}\r\n value={keyword} type=\"text\" className=\"form-control\" autoComplete=\"off\" placeholder=\"ID đơn hà ng\" />\r\n </div>\r\n <div className=\"col-sm-12 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n <div className=\"input-group flex-nowrap\">\r\n <span className=\"input-group-text\">Từ ngà y</span>\r\n <DatePicker\r\n className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n placeholderText=\"dd/mm/yyyy\"\r\n dateFormat=\"dd/MM/yyyy\"\r\n selected={fromDate}\r\n onChange={date => {\r\n if (date !== null) {\r\n const day = date.getDate()\r\n const month = date.getMonth() + 1\r\n const year = date.getFullYear()\r\n const strDate = `${day}/${month}/${year}`\r\n filters.fromDate = strDate\r\n }\r\n setFromDate(date)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n <div className=\"input-group flex-nowrap\">\r\n <span className=\"input-group-text\">Äến ngà y</span>\r\n <DatePicker\r\n className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n placeholderText=\"dd/mm/yyyy\"\r\n dateFormat=\"dd/MM/yyyy\"\r\n selected={toDate}\r\n onChange={date => {\r\n if (date !== null) {\r\n const day = date.getDate()\r\n const month = date.getMonth() + 1\r\n const year = date.getFullYear()\r\n const strDate = `${day}/${month}/${year}`\r\n filters.toDate = strDate\r\n }\r\n setToDate(date)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={true}\r\n options={statuses}\r\n value={status}\r\n onChange={item => {\r\n if (item !== null) {\r\n setStatus(item)\r\n filters.statusId = item.value\r\n }\r\n else {\r\n setStatus(null)\r\n filters.statusId = 0\r\n }\r\n }}\r\n placeholder='Trạng thái'\r\n />\r\n </div>\r\n <div className=\"col-sm-12 col-md-6 col-lg-3 col-xl-3 col-xxl-2\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={true}\r\n options={orderFroms}\r\n value={orderFrom}\r\n onChange={item => {\r\n if (item !== null) {\r\n setOrderFrom(item)\r\n filters.orderFromId = item.value\r\n }\r\n else {\r\n setOrderFrom(null)\r\n filters.orderFromId = 0\r\n }\r\n }}\r\n placeholder='ÄÆ¡n nguồn'\r\n />\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-9 col-xl-9 col-xxl-10\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClear} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func,\r\n orderStatuses: PropTypes.array,\r\n orderFroms: PropTypes.array\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { },\r\n orderStatuses: [],\r\n orderFroms: []\r\n}\r\n\r\nexport default Filter","import React, { Fragment } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { LoadingRow, EmptyRow, FormatNumber, AvatarRow } from '../../../../../components'\r\nimport { IoEllipsisHorizontalSharp, IoEllipsisVertical, IoTrashOutline } from 'react-icons/io5'\r\n\r\nconst Table = (props) => {\r\n const renderTable = () => {\r\n const data = props.data\r\n if (data === null) return <LoadingRow colSpan={10} />\r\n else if (data.length === 0) return <EmptyRow colSpan={10} />\r\n else return data.map((item, index) => {\r\n const rowSpan = item.Products.length\r\n const firstProduct = item.Products[0]\r\n return (\r\n <Fragment key={item.OrderId}>\r\n <tr>\r\n <td rowSpan={rowSpan} className=\"text-center\">\r\n <FormatNumber>\r\n {(props.pageItem * (props.pageIndex - 1)) + index + 1}\r\n </FormatNumber>\r\n </td>\r\n <td rowSpan={rowSpan}>\r\n <span className=\"fw-bold text-success\">{item.OrderId}</span>\r\n <br />\r\n <span>{item.CreatedDate}</span>\r\n <br />\r\n <small className=\"text-muted\">{item.CreatedTime}</small>\r\n </td>\r\n <td rowSpan={rowSpan}>\r\n <p className=\"mb-1\">{item.Phone}</p>\r\n {renderAddress(item.Address, item.WardName, item.DistrictName, item.ProvinceNam, item.WardPrefix, item.DistrictPrefix, item.ProvincePrefix)}\r\n </td>\r\n <td>\r\n <p className=\"mb-1\">\r\n <AvatarRow\r\n url={firstProduct.AvatarUrl}\r\n />\r\n {firstProduct.ProductName}\r\n </p>\r\n <p className=\"mb-0\">\r\n <span>Giá: <span className=\"fw-bold text-primary\">\r\n <FormatNumber>\r\n {firstProduct.CustomerUnitPrice}\r\n </FormatNumber>\r\n </span></span>\r\n <span className=\"float-end\">Số lượng: <span className=\"fw-bold text-primary\">\r\n <FormatNumber>\r\n {firstProduct.Quantity}\r\n </FormatNumber>\r\n </span></span>\r\n </p>\r\n </td>\r\n <td rowSpan={rowSpan} className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.SumOutputPrice}\r\n </FormatNumber>\r\n </td>\r\n <td rowSpan={rowSpan}>\r\n <p className=\"mb-1\">{item.WaybillCode}</p>\r\n <p className=\"mb-1\">{item.ShippingUnitName}</p>\r\n </td>\r\n <td rowSpan={rowSpan} className=\"text-end\">\r\n <p className=\"mb-1 text-primary fw-bold\">\r\n <FormatNumber>\r\n {item.SumPartnerPrice}\r\n </FormatNumber>\r\n </p>\r\n <p className=\"mb-0 text-success\">\r\n +\r\n <FormatNumber>\r\n {item.PartnerDropShipFee}\r\n </FormatNumber>\r\n </p>\r\n </td>\r\n <td rowSpan={rowSpan} className=\"text-center text-primary\">\r\n <IoEllipsisHorizontalSharp className=\"cursor-point fs-4\" onClick={() => props.onEditWarehouseNote(item)} />\r\n </td>\r\n <td rowSpan={rowSpan}>\r\n {renderStatus(item.OrderStatusId, item.OrderStatusName)}\r\n </td>\r\n <td rowSpan={rowSpan}>\r\n <div className=\"dropdown float-end\">\r\n <button className=\"dropdown-toggle arrow-none card-drop btn-drop\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n <IoEllipsisVertical className=\"fs-4 text-primary\" />\r\n </button>\r\n <div className=\"dropdown-menu dropdown-menu-end\">\r\n <button onClick={() => props.onDelete(item)} className=\"dropdown-item text-danger\"><IoTrashOutline className=\"mn-btn-icon\" />Há»§y đơn</button>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n {renderProduct(item.Products)}\r\n </Fragment>\r\n )\r\n })\r\n }\r\n\r\n const renderAddress = (address, wardName, districtName, provinceName, wardPrefix, districtPrefix, provincePrefix) => {\r\n if (address !== '' && wardName !== null)\r\n return <p>{address !== '' ? `${address}, ` : ''}{wardPrefix} {wardName}, {districtPrefix} {districtName}, {provincePrefix} {provinceName}</p>\r\n }\r\n\r\n const renderStatus = (statusId, statusName) => {\r\n if (statusId === 1) return <span className=\"badge bg-success min-w-50-px\">{statusName}</span>\r\n else return <span className=\"badge bg-warning min-w-50-px\">{statusName}</span>\r\n }\r\n\r\n const renderProduct = (products) => {\r\n if (products.length === 1) return []\r\n const html = []\r\n const countProduct = products.length\r\n for (let i = 1; i < countProduct; i++) {\r\n const item = products[i]\r\n html.push(<tr key={item.ProductId}>\r\n <td>\r\n <p className=\"mb-1\">\r\n <AvatarRow\r\n url={item.AvatarUrl}\r\n />\r\n {item.ProductName}\r\n </p>\r\n <p className=\"mb-0\">\r\n <span>Giá: <span className=\"fw-bold text-primary\">\r\n <FormatNumber>\r\n {item.CustomerUnitPrice}\r\n </FormatNumber>\r\n </span></span>\r\n <span className=\"float-end\">Số lượng: <span className=\"fw-bold text-primary\">\r\n <FormatNumber>\r\n {item.Quantity}\r\n </FormatNumber>\r\n </span></span>\r\n </p>\r\n </td>\r\n </tr>)\r\n }\r\n return html\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-avatar mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>ID</th>\r\n <th>Khách hà ng</th>\r\n <th>Tên sản phẩm</th>\r\n <th className='text-end'>Tổng</th>\r\n <th>Váºn chuyển</th>\r\n <th className='text-end'>Trả NCC</th>\r\n <th>Ghi chú</th>\r\n <th>Trạng thái</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n data: PropTypes.array,\r\n pageItem: PropTypes.number,\r\n pageIndex: PropTypes.number,\r\n onDelete: PropTypes.func,\r\n onEditWarehouseNote: PropTypes.func\r\n}\r\n\r\nTable.defaultProps = {\r\n data: [],\r\n pageItem: 0,\r\n pageIndex: 0,\r\n onDelete: () => { },\r\n onEditWarehouseNote: () => { }\r\n}\r\n\r\nexport default Table","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n OrderId: yup.number(),\r\n WarehouseNote: yup.string().max(1_000, 'Ghi chú gá»i kho quá dà i')\r\n})\r\n\r\nfunction ModalEditWarehouseNote(props) {\r\n const { setValue, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [isEnableEdit, setIsEnableEdit] = useState(true)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={props.onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n const data = props.data\r\n if (data !== null) {\r\n setValue('OrderId', data.OrderId)\r\n setValue('WarehouseNote', data.WarehouseNote)\r\n setIsEnableEdit(data.OrderStatusId === 1) // Chỉ cho phép sá»a ghi chú gá»i kho đơn hà ng má»›i\r\n }\r\n }\r\n }>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a ghi chú gá»i kho</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Ghi chú gá»i kho</label>\r\n <textarea {...register('WarehouseNote')} rows=\"3\" className=\"form-control\" placeholder=\"Ghi chú gá»i kho\" disabled={!isEnableEdit}></textarea>\r\n {errors.WarehouseNote && <div className=\"validation-message\">{errors.WarehouseNote.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n {isEnableEdit ? <SaveButton isBusy={isBusy} /> : ''}\r\n <CloseButton onClick={props.onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEditWarehouseNote.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool\r\n}\r\n\r\nModalEditWarehouseNote.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false\r\n}\r\n\r\nexport default ModalEditWarehouseNote","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Notification, Pagination } from './../../../components'\r\nimport { Filter, ModalEditWarehouseNote, Table } from './components'\r\n\r\nconst OrderPage = (props) => {\r\n const [orderStatuses, setOrderStatuses] = useState([])\r\n\r\n const [orderFroms, setOrderFroms] = useState([])\r\n\r\n const [orders, setOrders] = useState(null)\r\n\r\n const [modalEditWarehouseNoteInfo, setModalEditWarehouseNoteInfo] = useState({\r\n isShow: false,\r\n data: null\r\n })\r\n\r\n const [filters, setFilters] = useState({\r\n keyword: '',\r\n fromDate: '',\r\n toDate: '',\r\n statusId: 0,\r\n orderFromId: 0,\r\n pageItem: 10,\r\n pageIndex: 1\r\n })\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'ÄÆ¡n hà ng'\r\n\r\n const loadOrderStatus = () => {\r\n const url = '/partner/order-status/get-dropdown'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setOrderStatuses(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadOrderFrom = () => {\r\n const url = '/partner/order-from/get-dropdown'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setOrderFroms(data.Result)\r\n }\r\n })\r\n }\r\n\r\n loadOrderStatus()\r\n loadOrderFrom()\r\n }, [])\r\n\r\n useEffect(() => {\r\n let param = `keyword=${filters.keyword}&fromDate=${filters.fromDate}&toDate=${filters.toDate}`\r\n param += `&orderStatusId=${filters.statusId}&paymentStatusId=0&orderFromId=${filters.orderFromId}`\r\n const url = `/partner/order/filter?${param}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPagination(newPagination)\r\n setOrders(data.Result.Data)\r\n }\r\n })\r\n }, [filters])\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={(params) => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n orderStatuses={orderStatuses}\r\n orderFroms={orderFroms}\r\n />\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <Table\r\n pageItem={filters.pageItem}\r\n pageIndex={filters.pageIndex}\r\n data={orders}\r\n onDelete={(item) => {\r\n Notification.confirmHtml('Bạn có chắc muốn há»§y đơn hà ng', item.OrderId, () => {\r\n const url = `/partner/order/cancel?orderId=${item.OrderId}`\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const temp = [...orders]\r\n const index = temp.findIndex(n => n.OrderId === item.OrderId)\r\n temp[index].OrderStatusId = 5 // Trạng thái há»§y\r\n setOrders(temp)\r\n Notification.success('Há»§y đơn hà ng thà nh công')\r\n }\r\n })\r\n })\r\n }}\r\n onEditWarehouseNote={(item) => {\r\n const url = `/partner/order/get-warehouse-note?id=${item.OrderId}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalEditWarehouseNoteInfo({\r\n isShow: true,\r\n data: data.Result\r\n })\r\n }\r\n })\r\n }}\r\n />\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex }\r\n setPagination(newPagination)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <ModalEditWarehouseNote\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/partner/order/update-warehouse-note'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalEditWarehouseNoteInfo({\r\n isShow: false,\r\n data: null\r\n })\r\n Notification.success('Chỉnh sá»a ghi chú gá»i kho thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setModalEditWarehouseNoteInfo({\r\n isShow: false,\r\n data: null\r\n })\r\n }}\r\n isShow={modalEditWarehouseNoteInfo.isShow}\r\n data={modalEditWarehouseNoteInfo.data}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default OrderPage","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { Controller, useForm } from 'react-hook-form'\r\nimport Select from 'react-select'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton, UploadImg } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n FullName: yup.string().required('Vui lòng nháºp há» tên').max(100, 'Há» tên quá dà i'),\r\n ShopName: yup.string().max(100, 'Tên shop quá dà i'),\r\n Phone: yup.string().required('Vui lòng nháºp số Ä‘iện thoại').max(20, 'Số Ä‘iện thoại quá dà i'),\r\n Address: yup.string().max(200, 'Äịa chỉ quá dà i'),\r\n WardObj: yup.object().nullable(),\r\n WardId: yup.number().nullable(),\r\n AvatarUrl: yup.string().max(500, 'ÄÆ°á»ng dẫn ảnh quá dà i')\r\n})\r\n\r\nfunction Profile(props) {\r\n const { provinces, districts, wards, partnerInfo, onSave, onProvinceChange, onDistrictChange } = props\r\n\r\n const { control, register, handleSubmit, setValue, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n const [provinceOptions, setProvinceOptions] = useState([])\r\n\r\n const [province, setProvince] = useState()\r\n\r\n const [districtOptions, setDistrictOptions] = useState([])\r\n\r\n const [district, setDistrict] = useState()\r\n\r\n const [wardOptions, setWardOptions] = useState([])\r\n\r\n useEffect(() => {\r\n const provinceArray = provinces.map(item => {\r\n return {\r\n value: item.ProvinceId,\r\n label: `${item.Prefix} ${item.ProvinceName}`\r\n }\r\n })\r\n setProvinceOptions(provinceArray)\r\n }, [provinces])\r\n\r\n useEffect(() => {\r\n const districtArray = districts.map(item => {\r\n return {\r\n value: item.DistrictId,\r\n label: `${item.Prefix} ${item.DistrictName}`\r\n }\r\n })\r\n setDistrictOptions(districtArray)\r\n }, [districts])\r\n\r\n useEffect(() => {\r\n const wardArray = wards.map(item => {\r\n return {\r\n value: item.WardId,\r\n label: `${item.Prefix} ${item.WardName}`\r\n }\r\n })\r\n setWardOptions(wardArray)\r\n }, [wards])\r\n\r\n useEffect(() => {\r\n if (partnerInfo != null) {\r\n setValue('FullName', partnerInfo.FullName)\r\n setValue('ShopName', partnerInfo.ShopName)\r\n setValue('Phone', partnerInfo.Phone)\r\n setValue('Address', partnerInfo.Address)\r\n setValue('AvatarUrl', partnerInfo.AvatarUrl)\r\n const wardArray = wards.map(item => {\r\n return {\r\n value: item.WardId,\r\n label: `${item.Prefix} ${item.WardName}`\r\n }\r\n })\r\n setWardOptions(wardArray)\r\n if (partnerInfo.WardId !== 0) {\r\n const partnerWard = wards.filter(n => n.WardId === partnerInfo.WardId).map(item => {\r\n return {\r\n value: item.WardId,\r\n label: `${item.Prefix} ${item.WardName}`\r\n }\r\n })[0]\r\n setValue('WardObj', partnerWard)\r\n setValue('WardId', partnerInfo.WardId)\r\n\r\n const partnerDistrict = districts.filter(n => n.DistrictId === partnerInfo.DistrictId).map(item => {\r\n return {\r\n value: partnerInfo.DistrictId,\r\n label: `${item.Prefix} ${item.DistrictName}`\r\n }\r\n })[0]\r\n setDistrict(partnerDistrict)\r\n\r\n const partnerProvince = provinces.filter(n => n.ProvinceId === partnerInfo.ProvinceId).map(item => {\r\n return {\r\n value: item.ProvinceId,\r\n label: `${item.Prefix} ${item.ProvinceName}`\r\n }\r\n })[0]\r\n setProvince(partnerProvince)\r\n }\r\n }\r\n // eslint-disable-next-line\r\n }, [partnerInfo])\r\n\r\n return (\r\n <div className=\"card\">\r\n <form onSubmit={handleSubmit(formData => {\r\n delete formData['WardObj']\r\n onSave(formData, setIsBusy)\r\n })}>\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title mb-2\">Chỉnh sá»a thông tin</h5>\r\n <div className=\"row\">\r\n <div className=\"col-sm-12 col-md-12 col-lg-4 col-xl-4 col-xxl-3\">\r\n <Controller\r\n control={control}\r\n name=\"AvatarUrl\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <UploadImg\r\n imgUrl={value}\r\n onCompleted={data => {\r\n onChange(data.Result.ImageUrl)\r\n }}\r\n isPartner={true}\r\n />\r\n )}\r\n />\r\n {errors.AvatarUrl && <div className=\"validation-message\">{errors.AvatarUrl.message}</div>}\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-8 col-xl-8 col-xxl-9\">\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Há» tên <span className=\"text-danger\">*</span></label>\r\n <input {...register('FullName')} type=\"text\" className=\"form-control\" placeholder=\"Há» tên\" />\r\n {errors.FullName && <div className=\"validation-message\">{errors.FullName.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tên shop</label>\r\n <input {...register('ShopName')} type=\"text\" className=\"form-control\" placeholder=\"Tên shop\" />\r\n {errors.ShopName && <div className=\"validation-message\">{errors.ShopName.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Số Ä‘iện thoại <span className=\"text-danger\">*</span></label>\r\n <input {...register('Phone')} type=\"text\" className=\"form-control\" placeholder=\"Số Ä‘iện thoại\" />\r\n {errors.Phone && <div className=\"validation-message\">{errors.Phone.message}</div>}\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tỉnh/Tp</label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={true}\r\n options={provinceOptions}\r\n value={province}\r\n onChange={item => {\r\n setProvince(item)\r\n setDistrict(null)\r\n setValue('WardId', null)\r\n setValue('WardObj', null)\r\n onProvinceChange(item !== null ? item.value : 0)\r\n }}\r\n placeholder='Tỉnh/Tp'\r\n />\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Quáºn/Huyện</label>\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={false}\r\n options={districtOptions}\r\n value={district}\r\n onChange={item => {\r\n setDistrict(item)\r\n setValue('WardId', null)\r\n setValue('WardObj', null)\r\n onDistrictChange(item.value)\r\n }}\r\n placeholder='Quáºn/Huyện'\r\n noOptionsMessage={() => 'Quáºn/Huyện'}\r\n />\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Phưá»ng/Xã</label>\r\n <Controller\r\n control={control}\r\n name=\"WardObj\"\r\n render={({\r\n field: { onChange, value }\r\n }) => (\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={true}\r\n isClearable={false}\r\n options={wardOptions}\r\n value={value}\r\n onChange={item => {\r\n if (item !== null) {\r\n setValue('WardId', item.value)\r\n }\r\n onChange(item)\r\n }}\r\n placeholder='Phưá»ng/Xã'\r\n noOptionsMessage={() => 'Phưá»ng/Xã'}\r\n />\r\n )}\r\n />\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Äịa chỉ</label>\r\n <input {...register('Address')} type=\"text\" className=\"form-control\" placeholder=\"Äịa chỉ\" />\r\n {errors.Address && <div className=\"validation-message\">{errors.Address.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"card-footer\">\r\n <SaveButton isBusy={isBusy} />\r\n </div>\r\n </form>\r\n </div>\r\n )\r\n}\r\n\r\nProfile.propTypes = {\r\n partnerInfo: PropTypes.object,\r\n onSave: PropTypes.func,\r\n provinces: PropTypes.array,\r\n onProvinceChange: PropTypes.func,\r\n districts: PropTypes.array,\r\n onDistrictChange: PropTypes.func,\r\n wards: PropTypes.array\r\n}\r\n\r\nProfile.defaultProps = {\r\n partnerInfo: {},\r\n onSave: () => { },\r\n provinces: [],\r\n onProvinceChange: () => { },\r\n districts: [],\r\n onDistrictChange: () => { },\r\n wards: []\r\n}\r\n\r\nexport default Profile","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n CurrentPassword: yup.string().required('Vui lòng nháºp máºt khẩu hiện tại').max(70, 'Máºt khẩu hiện tại quá dà i'),\r\n NewPassword: yup.string().required('Vui lòng nháºp máºt khẩu má»›i').max(70, 'Máºt khẩu má»›i quá dà i'),\r\n NewPasswordConfirm: yup.string().required('Vui lòng nháºp lại máºt khẩu má»›i').max(70, 'Nháºp lại máºt khẩu má»›i quá dà i')\r\n .oneOf([yup.ref('NewPassword')], 'Nháºp lại máºt khẩu không chÃnh xác')\r\n})\r\n\r\nfunction Password(props) {\r\n const { register, reset, handleSubmit, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <div className=\"card\">\r\n <form onSubmit={handleSubmit(formData => {\r\n props.onSave(formData, setIsBusy, reset)\r\n })}>\r\n <div className=\"card-body\">\r\n <h5 className=\"card-title mb-2\">Äổi máºt khẩu</h5>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Máºt khẩu hiện tại <span className=\"text-danger\">*</span></label>\r\n <input {...register('CurrentPassword')} type=\"password\" className=\"form-control\" placeholder=\"Máºt khẩu hiện tại\" />\r\n {errors.CurrentPassword && <div className=\"validation-message\">{errors.CurrentPassword.message}</div>}\r\n </div>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Máºt khẩu má»›i <span className=\"text-danger\">*</span></label>\r\n <input {...register('NewPassword')} type=\"password\" className=\"form-control\" placeholder=\"Máºt khẩu má»›i\" />\r\n {errors.NewPassword && <div className=\"validation-message\">{errors.NewPassword.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Nháºp lại máºt khẩu má»›i <span className=\"text-danger\">*</span></label>\r\n <input {...register('NewPasswordConfirm')} type=\"password\" className=\"form-control\" placeholder=\"Nháºp lại máºt khẩu má»›i\" />\r\n {errors.NewPasswordConfirm && <div className=\"validation-message\">{errors.NewPasswordConfirm.message}</div>}\r\n </div>\r\n </div>\r\n <div className=\"card-footer\">\r\n <SaveButton isBusy={isBusy} title=\"Äổi máºt khẩu\" />\r\n </div>\r\n </form>\r\n </div>\r\n )\r\n}\r\n\r\nPassword.propTypes = {\r\n onSave: PropTypes.func\r\n}\r\n\r\nPassword.defaultProps = {\r\n onSave: () => { }\r\n}\r\n\r\nexport default Password","import axios from 'axios'\r\nimport React, { useEffect, useState, useContext } from 'react'\r\nimport { Notification, AppContext } from '../../../components'\r\nimport { Profile, Password } from './components'\r\n\r\nfunction ProfilePage(props) {\r\n const appSettings = useContext(AppContext)\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Lịch sá» giao dịch'\r\n loadProvince()\r\n loadProfile()\r\n }, [])\r\n\r\n const [provinces, setProvinces] = useState([])\r\n\r\n const [districts, setDistricts] = useState([])\r\n\r\n const [wards, setWards] = useState([])\r\n\r\n const [profileInfo, setProfileInfo] = useState(null)\r\n\r\n const loadProvince = () => {\r\n const url = '/partner/province/get-all'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setProvinces(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadDistrict = (provinceId) => {\r\n const url = `/partner/province/${provinceId}/districts`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setDistricts(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadWard = (wardId) => {\r\n const url = `/partner/district/${wardId}/wards`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setWards(data.Result)\r\n }\r\n })\r\n }\r\n\r\n const loadProfile = () => {\r\n const url = '/partner/partner/get-profile'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setWards(data.Result.Wards)\r\n setDistricts(data.Result.Districts)\r\n setProfileInfo(data.Result.Info)\r\n }\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"row\">\r\n <div className=\"col-md-12 col-lg-12 col-xl-6\">\r\n <Profile\r\n partnerInfo={profileInfo}\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/partner/partner/update-profile'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n appSettings.setPartnerFullName(formData.FullName)\r\n localStorage.setItem('p-fullName', formData.FullName)\r\n appSettings.setPartnerAvatarUrl(formData.AvatarUrl)\r\n localStorage.setItem('p-avatarUrl', formData.AvatarUrl)\r\n Notification.success('Chỉnh sá»a thông tin thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n provinces={provinces}\r\n onProvinceChange={(provinceId) => {\r\n loadDistrict(provinceId)\r\n setWards([])\r\n }}\r\n districts={districts}\r\n onDistrictChange={(districtId) => {\r\n loadWard(districtId)\r\n }}\r\n wards={wards}\r\n />\r\n </div>\r\n <div className=\"col-md-12 col-lg-12 col-xl-6\">\r\n <Password\r\n onSave={(formData, setIsBusy, resetForm) => {\r\n setIsBusy(true)\r\n const url = '/partner/partner/change-password'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n resetForm()\r\n Notification.success('Thay đổi máºt khẩu thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n />\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default ProfilePage","import PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport DatePicker from 'react-datepicker'\r\nimport { ClearButton, SearchButton } from './../../../../../components'\r\n\r\nconst filters = {\r\n fromDate: '',\r\n toDate: ''\r\n}\r\n\r\nconst Filter = (props) => {\r\n const { onSearch } = props\r\n\r\n const [fromDate, setFromDate] = useState()\r\n\r\n const [toDate, setToDate] = useState()\r\n\r\n const handleSearch = () => {\r\n onSearch(filters)\r\n }\r\n\r\n const handleClear = () => {\r\n setFromDate(null)\r\n filters.fromDate = ''\r\n setToDate(null)\r\n filters.toDate = ''\r\n onSearch(filters)\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n <div className=\"input-group flex-nowrap\">\r\n <span className=\"input-group-text\">Từ ngà y</span>\r\n <DatePicker\r\n className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n placeholderText=\"dd/mm/yyyy\"\r\n dateFormat=\"dd/MM/yyyy\"\r\n selected={fromDate}\r\n onChange={date => {\r\n if (date !== null) {\r\n const day = date.getDate()\r\n const month = date.getMonth() + 1\r\n const year = date.getFullYear()\r\n const strDate = `${day}/${month}/${year}`\r\n filters.fromDate = strDate\r\n }\r\n setFromDate(date)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-4 col-xxl-2\">\r\n <div className=\"input-group flex-nowrap\">\r\n <span className=\"input-group-text\">Äến ngà y</span>\r\n <DatePicker\r\n className=\"form-control no-border-radius-top-left no-border-radius-bottom-left\"\r\n placeholderText=\"dd/mm/yyyy\"\r\n dateFormat=\"dd/MM/yyyy\"\r\n selected={toDate}\r\n onChange={date => {\r\n if (date !== null) {\r\n const day = date.getDate()\r\n const month = date.getMonth() + 1\r\n const year = date.getFullYear()\r\n const strDate = `${day}/${month}/${year}`\r\n filters.toDate = strDate\r\n }\r\n setToDate(date)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-12 col-xl-12 col-xxl-8\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n <ClearButton onClick={handleClear} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { }\r\n}\r\n\r\nexport default Filter","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { EmptyRow, LoadingRow, FormatNumber } from '../../../../../components'\r\n\r\nconst renderTable = (data, pageItem, pageIndex) => {\r\n if (data === null) return <LoadingRow colSpan={6} />\r\n else if (data.length === 0) return <EmptyRow colSpan={6} />\r\n else return data.map((item, index) => <tr key={item.PartnerBalanceHistoryId}>\r\n <td className=\"text-center\">\r\n <FormatNumber>\r\n {(pageItem * (pageIndex - 1)) + index + 1}\r\n </FormatNumber>\r\n </td>\r\n <td>{item.Detail}</td>\r\n <td>{item.Note}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.Amount}\r\n </FormatNumber>\r\n </td>\r\n <td>{renderType(item.Amount)}</td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n </td>\r\n </tr>)\r\n}\r\n\r\nconst renderType = amount => {\r\n if (amount > 0) return <span className=\"badge bg-success\">Cá»™ng</span>\r\n else return <span className=\"badge bg-danger\">Trừ</span>\r\n}\r\n\r\nconst Table = (props) => {\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Giao dịch</th>\r\n <th>Ghi chú</th>\r\n <th className='text-end'>Số tiá»n</th>\r\n <th>Loại</th>\r\n <th>Ngà y giao dịch</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable(props.data, props.pageItem, props.pageIndex)}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n data: PropTypes.array,\r\n pageItem: PropTypes.number,\r\n pageIndex: PropTypes.number\r\n}\r\n\r\nTable.defaultProps = {\r\n data: null,\r\n pageItem: 0,\r\n pageIndex: 0\r\n}\r\n\r\nexport default Table","import React, { Fragment, useEffect, useState } from 'react'\r\nimport { Filter, Table } from './components'\r\nimport axios from 'axios'\r\nimport { Pagination } from './../../../components'\r\n\r\nfunction BalanceHistoryPage(props) {\r\n const [histories, setHistories] = useState(null)\r\n\r\n const [filters, setFilters] = useState({\r\n fromDate: '',\r\n toDate: '',\r\n pageItem: 10,\r\n pageIndex: 1\r\n })\r\n\r\n const [pagination, setPagination] = useState({\r\n totalRow: 0,\r\n totalPage: 0,\r\n pageIndex: 1\r\n })\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Lịch sá» giao dịch'\r\n }, [])\r\n\r\n useEffect(() => {\r\n const url = `/partner/balance-history/filter?fromDate=${filters.fromDate}&toDate=${filters.toDate}&pageItem=${filters.pageItem}&pageIndex=${filters.pageIndex}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const newPagination = {\r\n totalRow: data.Result.TotalRow,\r\n totalPage: data.Result.TotalPage,\r\n pageIndex: data.Result.PageIndex\r\n }\r\n setPagination(newPagination)\r\n setHistories(data.Result.Data)\r\n }\r\n })\r\n }, [filters])\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={params => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <Table\r\n pageItem={filters.pageItem}\r\n pageIndex={filters.pageIndex}\r\n data={histories}\r\n />\r\n <Pagination\r\n totalPage={pagination.totalPage}\r\n currentPage={pagination.pageIndex}\r\n onPageChange={(pIndex) => {\r\n const newPagination = { ...pagination, pageIndex: pIndex }\r\n setPagination(newPagination)\r\n const newFilters = {\r\n ...filters,\r\n pageIndex: pIndex\r\n }\r\n setFilters(newFilters)\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default BalanceHistoryPage","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n UserName: yup.string().required('Vui lòng nháºp tà i khoản').max(70, 'Tà i khoản quá dà i'),\r\n Password: yup.string().required('Vui lòng nháºp máºt khẩu').max(70, 'Máºt khẩu quá dà i')\r\n})\r\n\r\nfunction ModalEdit(props) {\r\n const { onSave, onClose } = props\r\n\r\n const { register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}>\r\n <Modal.Header closeButton>\r\n <Modal.Title>Thêm má»›i tà i khoản shopee</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tà i khoản <span className=\"text-danger\">*</span></label>\r\n <input {...register('UserName')} type=\"text\" className=\"form-control\" placeholder=\"Tà i khoản\" />\r\n {errors.UserName && <div className=\"validation-message\">{errors.UserName.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Máºt khẩu <span className=\"text-danger\">*</span></label>\r\n <input {...register('Password')} type=\"password\" className=\"form-control\" placeholder=\"Máºt khẩu\" />\r\n {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalEdit.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n}\r\n\r\nModalEdit.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false\r\n}\r\n\r\nexport default ModalEdit","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport PropTypes from 'prop-types'\r\nimport React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport { useForm } from 'react-hook-form'\r\nimport * as yup from \"yup\"\r\nimport { CloseButton, SaveButton } from './../../../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n PartnerShopId: yup.number(),\r\n UserName: yup.string().required('Vui lòng nháºp tà i khoản').max(70, 'Tà i khoản quá dà i'),\r\n Password: yup.string().required('Vui lòng nháºp máºt khẩu').max(70, 'Máºt khẩu quá dà i')\r\n})\r\n\r\nfunction ModalAdd(props) {\r\n const { onSave, onClose, data } = props\r\n\r\n const { setValue, register, handleSubmit, reset, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [isBusy, setIsBusy] = useState(false)\r\n\r\n return (\r\n <Modal show={props.isShow} onHide={onClose} backdrop=\"static\"\r\n onExited={() => {\r\n reset()\r\n }}\r\n onShow={() => {\r\n setValue('PartnerShopId', data.PartnerShopId)\r\n setValue('UserName', data.UserName)\r\n setValue('Password', data.Password)\r\n }}\r\n >\r\n <Modal.Header closeButton>\r\n <Modal.Title>Chỉnh sá»a tà i khoản shopee</Modal.Title>\r\n </Modal.Header>\r\n <form onSubmit={handleSubmit(formData => {\r\n onSave(formData, setIsBusy)\r\n })}>\r\n <Modal.Body>\r\n <div className=\"relative-position mb-2\">\r\n <label className=\"form-label\">Tà i khoản <span className=\"text-danger\">*</span></label>\r\n <input {...register('UserName')} type=\"text\" className=\"form-control\" placeholder=\"Tà i khoản\" />\r\n {errors.UserName && <div className=\"validation-message\">{errors.UserName.message}</div>}\r\n </div>\r\n <div className=\"relative-position\">\r\n <label className=\"form-label\">Máºt khẩu <span className=\"text-danger\">*</span></label>\r\n <input {...register('Password')} type=\"password\" className=\"form-control\" placeholder=\"Máºt khẩu\" />\r\n {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n </div>\r\n </Modal.Body>\r\n <Modal.Footer>\r\n <SaveButton isBusy={isBusy} />\r\n <CloseButton onClick={onClose} />\r\n </Modal.Footer>\r\n </form>\r\n </Modal>\r\n )\r\n}\r\n\r\nModalAdd.propTypes = {\r\n onSave: PropTypes.func,\r\n onClose: PropTypes.func,\r\n isShow: PropTypes.bool,\r\n data: PropTypes.object,\r\n}\r\n\r\nModalAdd.defaultProps = {\r\n onSave: () => { },\r\n onClose: () => { },\r\n isShow: false,\r\n data: {}\r\n}\r\n\r\nexport default ModalAdd","import PropTypes from 'prop-types'\r\nimport React from 'react'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { IoEllipsisVertical } from 'react-icons/io5'\r\nimport { EmptyRow, LoadingRow, ShopeeProductAvatar } from './../../../../../components'\r\n\r\nfunction Table(props) {\r\n const { shops, onEdit } = props\r\n\r\n function renderTable() {\r\n if (shops === null) return <LoadingRow colSpan={6} />\r\n else if (shops.length === 0) return <EmptyRow colSpan={6} />\r\n else return shops.map((item, index) => <tr key={item.PartnerShopId}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>{item.UserName}</td>\r\n <td>\r\n <ShopeeProductAvatar\r\n url={item.Portrait}\r\n />\r\n {item.ShopName}\r\n </td>\r\n <td>{item.ShopId}</td>\r\n <td>\r\n {item.CreatedDate}\r\n <small className=\"text-muted\"> {item.CreatedTime}</small>\r\n </td>\r\n <td>\r\n <div className=\"dropdown float-end\">\r\n <button className=\"dropdown-toggle arrow-none card-drop btn-drop\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n <IoEllipsisVertical className=\"fs-4 text-primary\" />\r\n </button>\r\n <div className=\"dropdown-menu dropdown-menu-end\">\r\n <button onClick={() => onEdit(item)} className=\"dropdown-item\"><FiEdit className=\"mn-btn-icon\" />Chỉnh sá»a</button>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>)\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-avatar mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Tà i khoản</th>\r\n <th>Tên shop</th>\r\n <th>ID shop</th>\r\n <th>Ngà y tạo</th>\r\n <th className=\"w-52-px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n shops: PropTypes.array,\r\n onEdit: PropTypes.func,\r\n}\r\n\r\nTable.defaultProps = {\r\n shops: [],\r\n onEdit: () => { }\r\n}\r\n\r\nexport default Table","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\nimport { IconButton, Notification } from './../../../components'\r\nimport { ModalAdd, ModalEdit, Table } from './components'\r\n\r\nfunction PartnerShopPage(props) {\r\n const [shops, setShops] = useState(null)\r\n\r\n const [isShowModalAdd, setIsShowModalAdd] = useState(false)\r\n\r\n const [modalEditInfo, setModalEditInfo] = useState({\r\n isShow: false,\r\n data: {}\r\n })\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Tà i khoản shopee'\r\n loadShop()\r\n }, [])\r\n\r\n function loadShop() {\r\n const url = '/partner/partner-shop/get-all'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setShops(data.Result)\r\n }\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row mb-2\">\r\n <div className=\"col-12\">\r\n <IconButton text=\"Thêm má»›i\" icon={<IoAddCircleOutline />} onClick={() => {\r\n setIsShowModalAdd(true)\r\n }} />\r\n </div>\r\n </div>\r\n <Table\r\n shops={shops}\r\n onEdit={shop => {\r\n const url = `/partner/partner-shop/get-by-id?id=${shop.PartnerShopId}`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setModalEditInfo({\r\n isShow: true,\r\n data: data.Result\r\n })\r\n }\r\n })\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <ModalAdd\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/partner/partner-shop/create'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n loadShop()\r\n setIsShowModalAdd(false)\r\n Notification.success('Thêm má»›i tà i khoản shop thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setIsShowModalAdd(false)\r\n }}\r\n isShow={isShowModalAdd}\r\n />\r\n <ModalEdit\r\n onSave={(formData, setIsBusy) => {\r\n setIsBusy(true)\r\n const url = '/partner/partner-shop/update'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n loadShop()\r\n setModalEditInfo({\r\n isShow: false,\r\n data: {}\r\n })\r\n Notification.success('Chỉnh sá»a tà i khoản shop thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }}\r\n onClose={() => {\r\n setModalEditInfo({\r\n isShow: false,\r\n data: {}\r\n })\r\n }}\r\n data={modalEditInfo.data}\r\n isShow={modalEditInfo.isShow}\r\n />\r\n </Fragment>\r\n )\r\n}\r\n\r\nPartnerShopPage.propTypes = {\r\n\r\n}\r\n\r\nPartnerShopPage.defaultProps = {\r\n\r\n}\r\n\r\nexport default PartnerShopPage","import PropTypes from 'prop-types'\r\nimport React, { useEffect, useState } from 'react'\r\nimport Select from 'react-select'\r\nimport { SearchButton, Notification } from './../../../../../components'\r\n\r\nconst statusOptions = [\r\n { value: 'unpaid', label: 'Chá» xác nháºn' },\r\n { value: 'toship', label: 'Chá» lấy hà ng' },\r\n { value: 'shipping', label: 'Äang giao' },\r\n { value: 'completed', label: 'Äã giao' }\r\n]\r\n\r\n// sort_by\r\nconst sortOptions = [\r\n { value: 'confirmed_date_asc', label: 'Ngà y xác nháºn đặt đơn: Xa - Gần' },\r\n { value: 'confirmed_date_desc', label: 'Ngà y xác nháºn đặt đơn: Gần - Xa' },\r\n { value: 'ship_by_date_asc', label: 'Hạn giao hà ng: Xa - Gần nhất' },\r\n { value: 'ship_by_date_desc', label: 'Hạn giao hà ng: Gần - Xa nhất' },\r\n { value: 'create_date_asc', label: 'Ngà y đặt: Xa - Gần nhất' },\r\n { value: 'create_date_desc', label: 'Ngà y đặt: Gần - Xa nhất' }\r\n]\r\n\r\nconst filters = {\r\n partnerShopId: 0,\r\n status: 'unpaid',\r\n sortBy: 'confirmed_date_desc'\r\n}\r\n\r\nfunction Filter(props) {\r\n const { onSearch, shopeeShops } = props\r\n\r\n const [shopeeShopOptions, setShopeeShopOptions] = useState([])\r\n\r\n const [shopeeShop, setShopeeShop] = useState(null)\r\n\r\n const [status, setStatus] = useState(statusOptions[0])\r\n\r\n const [sort, setSort] = useState(() => {\r\n return sortOptions[1]\r\n })\r\n\r\n const handleSearch = () => {\r\n if (shopeeShop === null) {\r\n Notification.warning('Vui lòng chá»n shop trước khi tìm kiếm đơn hà ng')\r\n return;\r\n }\r\n onSearch(filters)\r\n }\r\n\r\n useEffect(() => {\r\n const shopeeShopList = shopeeShops.map(item => {\r\n return {\r\n value: item.PartnerShopId,\r\n label: item.ShopName\r\n }\r\n })\r\n setShopeeShopOptions(shopeeShopList)\r\n }, [shopeeShops])\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"row g-2\">\r\n <div className=\"col-sm-6 col-md-6 col-lg-7 col-xl-4 col-xxl-3\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={false}\r\n options={shopeeShopOptions}\r\n value={shopeeShop}\r\n onChange={item => {\r\n if (item !== null) {\r\n setShopeeShop(item)\r\n filters.partnerShopId = item.value\r\n }\r\n else {\r\n setShopeeShop(null)\r\n filters.partnerShopId = 0\r\n }\r\n }}\r\n placeholder='Chá»n shop'\r\n noOptionsMessage={() => 'Chưa thêm tà i khoản shop'}\r\n />\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-5 col-xl-3 col-xxl-2\">\r\n <Select\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={false}\r\n options={statusOptions}\r\n value={status}\r\n onChange={item => {\r\n if (item !== null) {\r\n setStatus(item)\r\n filters.status = item.value\r\n }\r\n else {\r\n setStatus(item)\r\n filters.status = 'unpaid'\r\n }\r\n }}\r\n />\r\n </div>\r\n <div className=\"col-sm-12 col-md-12 col-lg-8 col-xl-5 col-xxl-3\">\r\n <Select\r\n isDisabled={status.value !== 'toship'}\r\n className=\"react-select-container\"\r\n classNamePrefix=\"custom-select\"\r\n isSearchable={false}\r\n isClearable={false}\r\n options={sortOptions}\r\n value={sort}\r\n onChange={item => {\r\n if (item !== null) {\r\n setSort(item)\r\n filters.sortBy = item.value\r\n }\r\n else {\r\n setSort(item)\r\n filters.sortBy = 'confirmed_date_desc'\r\n }\r\n }}\r\n />\r\n </div>\r\n <div className=\"col-sm-6 col-md-6 col-lg-4 col-xl-2 col-xxl-4\">\r\n <div className=\"button-list\">\r\n <SearchButton onClick={handleSearch} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nFilter.propTypes = {\r\n onSearch: PropTypes.func,\r\n shopeeShops: PropTypes.array,\r\n}\r\n\r\nFilter.defaultProps = {\r\n onSearch: () => { },\r\n shopeeShops: []\r\n}\r\n\r\nexport default Filter","import PropTypes from 'prop-types'\r\nimport React, { Fragment } from 'react'\r\nimport { IoCartOutline } from 'react-icons/io5'\r\nimport { EmptyRow, FormatNumber, IconButton, LoadingRow, ShopeeProductAvatar, Notification } from '../../../../../components'\r\n\r\nfunction Table(props) {\r\n const { orders, onOrder, status, partnerShopId } = props\r\n\r\n function handleOrder(order, setIsBusy) {\r\n const productNoSku = order.Order_Items.filter(n => n.Item_Model.Sku === '')\r\n if (productNoSku.length !== 0) {\r\n Notification.warning('Không thể đặt hà ng sản phẩm không có mã Sku')\r\n return\r\n }\r\n onOrder(order, setIsBusy, partnerShopId)\r\n }\r\n\r\n function renderTable() {\r\n if (orders === null) return <LoadingRow colSpan={6} />\r\n else if (orders.length === 0) return <EmptyRow colSpan={6} />\r\n else return orders.map((item, index) => {\r\n const totalProductPrice = item.Order_Items.reduce((prev, current) => {\r\n return prev + (current.Product.Price * current.Amount)\r\n }, 0)\r\n return (\r\n <Fragment key={item.Order_Id}>\r\n <tr>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>{item.Order_Sn}</td>\r\n <td>{item.Buyer_Address_Name}</td>\r\n <td>{item.Buyer_Address_Phone}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {totalProductPrice}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.Shipping_Fee}\r\n </FormatNumber>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colSpan={6} className=\"p-0\">\r\n <div className=\"card mb-0\">\r\n <div className=\"card-body\">\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered table-avatar mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Sản phẩm</th>\r\n <th>Sku</th>\r\n <th>ÄÆ¡n giá</th>\r\n <th>Số lượng</th>\r\n <th>Thà nh tiá»n</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderProduct(item.Order_Items)}\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n {renderFooter(item)}\r\n </div>\r\n </td>\r\n </tr>\r\n </Fragment>\r\n )\r\n })\r\n }\r\n\r\n function renderFooter(item) {\r\n if (status === 'toship') return <div className=\"card-footer\">\r\n <IconButton\r\n icon={<IoCartOutline />}\r\n variant=\"success\"\r\n text=\"Äặt hà ng\"\r\n onClick={(setIsBusy) => {\r\n handleOrder(item, setIsBusy)\r\n }}\r\n />\r\n </div>\r\n else return ''\r\n }\r\n\r\n function renderProduct(orderItems) {\r\n return orderItems.map((item, index) => {\r\n let imgUrl = ''\r\n const imgs = item.Product.Images\r\n if (imgs.length !== 0) {\r\n imgUrl = imgs[0]\r\n }\r\n return (\r\n <tr key={index}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>\r\n <ShopeeProductAvatar\r\n url={imgUrl}\r\n />\r\n {item.Product.Name}\r\n </td>\r\n <td>{item.Item_Model.Sku}</td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.Product.Price}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.Amount}\r\n </FormatNumber>\r\n </td>\r\n <td className=\"text-end text-primary\">\r\n <FormatNumber>\r\n {item.Product.Price * item.Amount}\r\n </FormatNumber>\r\n </td>\r\n </tr>\r\n )\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Mã đơn hà ng</th>\r\n <th>Khách hà ng</th>\r\n <th>Äiện thoại</th>\r\n <th>Tiá»n hà ng</th>\r\n <th>Phà ship</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {renderTable()}\r\n </tbody>\r\n </table>\r\n </div>\r\n )\r\n}\r\n\r\nTable.propTypes = {\r\n orders: PropTypes.array,\r\n onOrder: PropTypes.func,\r\n status: PropTypes.string,\r\n partnerShopId: PropTypes.number,\r\n}\r\n\r\nTable.defaultProps = {\r\n orders: [],\r\n onOrder: () => { },\r\n status: '',\r\n partnerShopId: 0\r\n}\r\n\r\nexport default Table","import axios from 'axios'\r\nimport React, { Fragment, useEffect, useState } from 'react'\r\nimport { Notification } from '../../../components'\r\nimport { Filter, Table } from './components'\r\nimport Swal from 'sweetalert2'\r\n\r\nfunction OrderFromShopee(props) {\r\n const [shopeeShops, setShopeeShops] = useState([])\r\n\r\n const [orders, setOrders] = useState({\r\n orders: [],\r\n status: '',\r\n partnerShopId: 0\r\n })\r\n\r\n const [filters, setFilters] = useState({\r\n partnerShopId: 0,\r\n status: 'unpaid',\r\n sortBy: 'confirmed_date_desc',\r\n pageItem: 10,\r\n pageIndex: 1\r\n })\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'ÄÆ¡n hà ng từ shopee'\r\n loadShop()\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (filters.partnerShopId !== 0) {\r\n setOrders({\r\n ...orders,\r\n orders: null\r\n })\r\n let url = `/partner/partner-shop/order-list-with-detail`\r\n url += `?partnerShopId=${filters.partnerShopId}&source=${filters.status}&sortBy=${filters.sortBy}&pageSize=10&pageNumber=1`\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n if (data.Result === null) {\r\n setOrders([])\r\n return\r\n }\r\n if (data.Result.length === 0) {\r\n setOrders([])\r\n return\r\n }\r\n const orderList = data.Result.Orders.Data.Orders\r\n const status = data.Result.Status\r\n setOrders({\r\n orders: orderList,\r\n status: status,\r\n partnerShopId: filters.partnerShopId\r\n })\r\n }\r\n else {\r\n setOrders({\r\n ...orders,\r\n orders: []\r\n })\r\n }\r\n })\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [filters])\r\n\r\n function loadShop() {\r\n const url = '/partner/partner-shop/get-all'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setShopeeShops(data.Result)\r\n }\r\n })\r\n }\r\n\r\n function processOrder(orderUrl, order, partnerShopId, setIsBusy, isUseFreeShip) {\r\n axios.get(orderUrl).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const isExist = data.Result\r\n const orderUrl = '/partner/order/create-from-shopee'\r\n if (isExist) {\r\n Notification.confirmHtml('ÄÆ¡n hà ng đã được đặt vá»›i kho, bạn có muốn tiếp tục đặt đơn hà ng', order.Order_Sn, () => {\r\n axios.post(orderUrl, {\r\n OrderId: order.Order_Id,\r\n ShopId: order.Shop_Id,\r\n RegionId: 'VN',\r\n PartnerShopId: partnerShopId,\r\n IsUseFreeShip: isUseFreeShip\r\n }).then(orderResponse => {\r\n if (orderResponse.data.IsSuccess) {\r\n Notification.success('Äặt hà ng từ shopee thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n })\r\n }\r\n else {\r\n axios.post(orderUrl, {\r\n OrderId: order.Order_Id,\r\n ShopId: order.Shop_Id,\r\n RegionId: 'VN',\r\n PartnerShopId: partnerShopId,\r\n IsUseFreeShip: isUseFreeShip\r\n }).then(orderResponse => {\r\n if (orderResponse.data.IsSuccess) {\r\n Notification.success('Äặt hà ng từ shopee thà nh công')\r\n }\r\n setIsBusy(false)\r\n })\r\n }\r\n }\r\n setIsBusy(false)\r\n })\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <Filter\r\n onSearch={(params) => {\r\n const newFilters = {\r\n ...filters,\r\n ...params,\r\n pageIndex: 1\r\n }\r\n setFilters(newFilters)\r\n }}\r\n shopeeShops={shopeeShops}\r\n />\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <Table\r\n orders={orders.orders}\r\n status={orders.status}\r\n partnerShopId={orders.partnerShopId}\r\n onOrder={(order, setIsBusy, partnerShopId) => {\r\n Notification.confirmHtml('Bạn có chắc muốn đặt đơn hà ng', order.Order_Sn, () => {\r\n setIsBusy(true)\r\n Swal.fire({\r\n text: 'Bạn có muốn sá» dụng miá»…n phà đóng gói không?',\r\n icon: 'question',\r\n showDenyButton: true,\r\n showCancelButton: true,\r\n confirmButtonText: 'Äồng ý',\r\n denyButtonText: `Không`,\r\n cancelButtonText: 'Bá» qua'\r\n }).then((result) => {\r\n const orderUrl = `/partner/order/is-exist-order-sn?orderSn=${order.Order_Sn}`\r\n if (result.isConfirmed) {\r\n processOrder(orderUrl, order, partnerShopId, setIsBusy, true)\r\n } else if (result.isDenied) {\r\n processOrder(orderUrl, order, partnerShopId, setIsBusy, false)\r\n }\r\n else {\r\n setIsBusy(false)\r\n }\r\n })\r\n })\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport default OrderFromShopee","import { yupResolver } from \"@hookform/resolvers/yup\";\r\nimport axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { IoPersonAddOutline } from \"react-icons/io5\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport * as yup from \"yup\";\r\nimport { Config, SaveButton } from \"./../../../components\";\r\n\r\nconst schema = yup.object().shape({\r\n FullName: yup\r\n .string()\r\n .required(\"Vui lòng nháºp há» tên\")\r\n .max(100, \"Há» tên quá dà i\"),\r\n Phone: yup\r\n .string()\r\n .required(\"Vui lòng nháºp số Ä‘iện thoại\")\r\n .max(20, \"Số Ä‘iện thoại quá dà i\"),\r\n Email: yup\r\n .string()\r\n .required(\"Vui lòng nháºp email\")\r\n .email(\"Äịa chỉ email không đúng\")\r\n .max(70, \"Äịa chỉ email quá dà i\"),\r\n Password: yup\r\n .string()\r\n .required(\"Vui lòng nháºp máºt khẩu\")\r\n .max(70, \"Máºt khẩu quá dà i\"),\r\n});\r\n\r\nfunction useQuery() {\r\n const { search } = useLocation();\r\n return React.useMemo(() => new URLSearchParams(search), [search]);\r\n}\r\n\r\nfunction RegisterPage(props) {\r\n const {\r\n register,\r\n handleSubmit,\r\n formState: { errors },\r\n } = useForm({\r\n resolver: yupResolver(schema),\r\n });\r\n\r\n const query = useQuery();\r\n\r\n const refCode = query.get(\"refcode\");\r\n\r\n const [message, setMessage] = useState(\"\");\r\n\r\n const history = useHistory();\r\n\r\n const [isBusy, setIsBusy] = useState(false);\r\n\r\n const [refPartnerName, setRefPartnerName] = useState(\"\");\r\n\r\n useEffect(() => {\r\n if (refCode !== null && refCode !== \"\") {\r\n const url = `/partner/partner/get-ref?refCode=${refCode}`;\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setRefPartnerName(data.Result);\r\n }\r\n });\r\n }\r\n // eslint-disable-next-line\r\n }, [refCode]);\r\n\r\n return (\r\n <div className=\"auth-fluid\">\r\n <div className=\"auth-fluid-form-box\">\r\n <div className=\"align-items-center d-flex h-100\">\r\n <div className=\"card-body\">\r\n <div className=\"auth-brand left-0 right-0 text-center\">\r\n <span className=\"logo-dark\">\r\n <span>\r\n <img\r\n src=\"/assets/images/partner-logo.png\"\r\n alt=\"Logo\"\r\n height={Config.partnerLoginLogoHeight}\r\n />\r\n </span>\r\n </span>\r\n <span className=\"logo-light\">\r\n <span>\r\n <img\r\n src=\"/assets/images/partner-logo.png\"\r\n alt=\"Logo\"\r\n height={Config.partnerLoginLogoHeight}\r\n />\r\n </span>\r\n </span>\r\n </div>\r\n\r\n <h4 className=\"mt-0\">Äăng ký cá»™ng tác viên</h4>\r\n\r\n <form\r\n onSubmit={handleSubmit((formData) => {\r\n if (message !== \"\") setMessage(\"\");\r\n setIsBusy(true);\r\n let newFormData = null;\r\n if (refCode !== \"\") {\r\n newFormData = {\r\n ...formData,\r\n AffCode: refCode,\r\n };\r\n } else {\r\n newFormData = {\r\n ...formData,\r\n };\r\n }\r\n const url = \"/partner/partner/register\";\r\n axios.post(url, newFormData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n history.replace(\"/\");\r\n } else {\r\n setMessage(data.Message);\r\n }\r\n setIsBusy(false);\r\n });\r\n })}\r\n >\r\n <div className=\"mb-2 position-relative\">\r\n <label className=\"form-label\">\r\n Há» tên <span className=\"text-danger\">*</span>\r\n </label>\r\n <input\r\n {...register(\"FullName\")}\r\n className=\"form-control\"\r\n type=\"text\"\r\n placeholder=\"Há» tên\"\r\n />\r\n {errors.FullName && (\r\n <div className=\"validation-message\">\r\n {errors.FullName.message}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"mb-2 position-relative\">\r\n <label className=\"form-label\">\r\n Äiện thoại <span className=\"text-danger\">*</span>\r\n </label>\r\n <input\r\n {...register(\"Phone\")}\r\n className=\"form-control\"\r\n type=\"text\"\r\n placeholder=\"Äiện thoại\"\r\n />\r\n {errors.Phone && (\r\n <div className=\"validation-message\">\r\n {errors.Phone.message}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"mb-2 position-relative\">\r\n <label className=\"form-label\">\r\n Email <span className=\"text-danger\">*</span>\r\n </label>\r\n <input\r\n {...register(\"Email\")}\r\n className=\"form-control\"\r\n type=\"text\"\r\n placeholder=\"Email\"\r\n />\r\n {errors.Email && (\r\n <div className=\"validation-message\">\r\n {errors.Email.message}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"mb-2 position-relative\">\r\n <label className=\"form-label\">\r\n Máºt khẩu <span className=\"text-danger\">*</span>\r\n </label>\r\n <input\r\n {...register(\"Password\")}\r\n className=\"form-control\"\r\n type=\"password\"\r\n placeholder=\"Máºt khẩu\"\r\n />\r\n {errors.Password && (\r\n <div className=\"validation-message\">\r\n {errors.Password.message}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {refCode !== null ? (\r\n <div className=\"mb-2 position-relative\">\r\n <label className=\"form-label\">Ngưá»i giá»›i thiệu</label>\r\n <input\r\n defaultValue={refPartnerName}\r\n className=\"form-control\"\r\n type=\"text\"\r\n placeholder=\"Ngưá»i giá»›i thiệu\"\r\n readOnly\r\n />\r\n </div>\r\n ) : null}\r\n\r\n {message !== \"\" ? (\r\n <div className=\"mb-2\">\r\n <div className=\"alert alert-danger\" role=\"alert\">\r\n {message}\r\n </div>\r\n </div>\r\n ) : (\r\n \"\"\r\n )}\r\n\r\n <div className=\"text-center\">\r\n <SaveButton\r\n className=\"w-100\"\r\n title=\"Äăng ký\"\r\n isBusy={isBusy}\r\n icon={\r\n <IoPersonAddOutline className=\"mt--3-px me-1 font-17\" />\r\n }\r\n />\r\n </div>\r\n\r\n <footer className=\"footer footer-alt\">\r\n <p className=\"text-muted\">\r\n Bạn đã có tà i khoản? Nhấn{\" \"}\r\n <span\r\n onClick={() => {\r\n history.push(\"/\");\r\n }}\r\n className=\"text-danger cursor-point\"\r\n >\r\n <b>và o đây</b>\r\n </span>{\" \"}\r\n để đăng nháºp\r\n </p>\r\n </footer>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default RegisterPage;\r\n","import { yupResolver } from '@hookform/resolvers/yup'\r\nimport axios from 'axios'\r\nimport React, { useEffect, useState, useContext } from 'react'\r\nimport { useForm } from 'react-hook-form'\r\nimport { IoPersonAddOutline } from 'react-icons/io5'\r\nimport { useHistory, useLocation } from 'react-router-dom'\r\nimport * as yup from \"yup\"\r\nimport { SaveButton, Config, AppContext } from './../../../components'\r\n\r\nconst schema = yup.object().shape({\r\n Email: yup.string().required('Vui lòng nháºp email').email('Äịa chỉ email không đúng').max(70, 'Äịa chỉ email quá dà i'),\r\n Password: yup.string().required('Vui lòng nháºp máºt khẩu').max(70, 'Máºt khẩu quá dà i')\r\n})\r\n\r\nfunction LoginPage(props) {\r\n const { register, handleSubmit, setFocus, formState: { errors } } = useForm({\r\n resolver: yupResolver(schema)\r\n })\r\n\r\n const [message, setMessage] = useState('')\r\n\r\n const history = useHistory()\r\n\r\n const [isBusy, setIsBusy] = useState(() => {\r\n const a_token = localStorage.getItem('p-token')\r\n if (a_token === null || a_token === '') return false\r\n else return true\r\n })\r\n\r\n let location = useLocation();\r\n\r\n let { from } = location.state || { from: { pathname: \"/partner/dashboard\" } };\r\n\r\n const appSettings = useContext(AppContext)\r\n\r\n const setInfo = (data) => {\r\n localStorage.setItem('p-email', data.Result.Email)\r\n localStorage.setItem('p-fullName', data.Result.FullName)\r\n localStorage.setItem('p-token', data.Result.Token)\r\n localStorage.setItem('p-avatarUrl', data.Result.AvatarUrl)\r\n axios.defaults.headers.common['P-Token'] = data.Result.Token\r\n\r\n appSettings.setPartnerFullName(data.Result.FullName)\r\n appSettings.setPartnerAvatarUrl(data.Result.AvatarUrl)\r\n }\r\n\r\n useEffect(() => {\r\n setFocus('Email')\r\n }, [setFocus])\r\n\r\n useEffect(() => {\r\n const p_token = localStorage.getItem('p-token')\r\n if (p_token !== null && p_token !== '') {\r\n const url = '/partner/partner/login-token'\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setInfo(data)\r\n history.replace(from);\r\n }\r\n else {\r\n setIsBusy(false)\r\n }\r\n })\r\n }\r\n else {\r\n setIsBusy(false)\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n const onLogin = (formData) => {\r\n formData.LoginTypeId = 1\r\n if (message !== '') setMessage('')\r\n setIsBusy(true)\r\n const url = '/partner/partner/login'\r\n axios.post(url, formData).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setInfo(data)\r\n history.replace(from)\r\n }\r\n else {\r\n if (data.Message !== '' || data.Message !== null) {\r\n setMessage(data.Message)\r\n setTimeout(() => {\r\n setMessage('')\r\n }, 3_000)\r\n }\r\n }\r\n setIsBusy(false)\r\n })\r\n }\r\n\r\n return (\r\n <div className=\"auth-fluid\">\r\n <div className=\"auth-fluid-form-box\">\r\n <div className=\"align-items-center d-flex h-100\">\r\n <div className=\"card-body\">\r\n\r\n <div className=\"auth-brand left-0 right-0 text-center\">\r\n <span className=\"logo-dark\">\r\n <span><img src=\"/assets/images/partner-logo.png\" alt=\"Logo\" height={Config.partnerLoginLogoHeight} /></span>\r\n </span>\r\n <span className=\"logo-light\">\r\n <span><img src=\"/assets/images/partner-logo.png\" alt=\"Logo\" height={Config.partnerLoginLogoHeight} /></span>\r\n </span>\r\n </div>\r\n\r\n <h4 className=\"mt-0\">Äăng nháºp</h4>\r\n\r\n <p className=\"text-muted mb-4\">Äăng nháºp để bắt đầu phiên là m việc</p>\r\n\r\n <form onSubmit={handleSubmit(formData => onLogin(formData))}>\r\n\r\n <div className=\"mb-2 position-relative\">\r\n <label className=\"form-label\">Email <span className=\"text-danger\">*</span></label>\r\n <input {...register('Email')} className=\"form-control\" type=\"text\" placeholder=\"Email\"\r\n disabled={isBusy}\r\n autoComplete=\"off\" />\r\n {errors.Email && <div className=\"validation-message\">{errors.Email.message}</div>}\r\n </div>\r\n\r\n <div className=\"mb-2 position-relative\">\r\n <label className=\"form-label\">Máºt khẩu <span className=\"text-danger\">*</span></label>\r\n <input {...register('Password')} className=\"form-control\" type=\"password\" placeholder=\"Máºt khẩu\"\r\n disabled={isBusy}\r\n autoComplete=\"off\" />\r\n {errors.Password && <div className=\"validation-message\">{errors.Password.message}</div>}\r\n </div>\r\n\r\n {message !== '' ? <div className=\"mb-2\">\r\n <div className=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\r\n <button type=\"button\" className=\"btn-close\"\r\n onClick={() => {\r\n setMessage('')\r\n }}\r\n ></button>\r\n {message}\r\n </div>\r\n </div> : ''}\r\n\r\n <div className=\"text-center\">\r\n <SaveButton\r\n className=\"w-100\"\r\n title=\"Äăng nháºp\"\r\n isBusy={isBusy}\r\n icon={<IoPersonAddOutline className=\"mt--3-px me-1 font-17\" />}\r\n />\r\n </div>\r\n\r\n <footer className=\"footer footer-alt\">\r\n <p className=\"text-muted\">Bạn chưa có tà i khoản? Nhấn <span onClick={() => {\r\n history.push('/partner/register')\r\n }} className=\"text-danger cursor-point\"><b>và o đây</b></span> để đăng ký tà i khoản cá»™ng tác viên</p>\r\n </footer>\r\n\r\n </form>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div >\r\n )\r\n}\r\n\r\nexport default LoginPage","import React from \"react\";\r\nimport { useEffect, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { EmptyRow, LoadingRow } from \"../../../components\";\r\n\r\nexport default function ChildrenPage() {\r\n const [partners, setPartners] = useState(null);\r\n\r\n useEffect(() => {\r\n document.getElementById('page-header').innerText = 'Äã giá»›i thiệu'\r\n\r\n const url = \"/partner/partner/get-children\";\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n setPartners(data.Result);\r\n }\r\n });\r\n }, []);\r\n\r\n function renderTable() {\r\n if (partners === null) return <LoadingRow colSpan={5} />;\r\n else if (partners.length === 0) return <EmptyRow colSpan={5} />;\r\n else\r\n return partners.map((item, index) => (\r\n <tr key={index}>\r\n <td className=\"text-center\">{index + 1}</td>\r\n <td>{item.FullName}</td>\r\n <td>{item.Email}</td>\r\n <td>{item.Phone}</td>\r\n <td>{item.GroupName}</td>\r\n </tr>\r\n ));\r\n }\r\n\r\n return (\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n <div className=\"table-responsive\">\r\n <table className=\"table table-centered mb-0\">\r\n <thead>\r\n <tr>\r\n <th className=\"w-52-px\">#</th>\r\n <th>Há» tên</th>\r\n <th>Äiện thoại</th>\r\n <th>Email</th>\r\n <th>Nhóm</th>\r\n </tr>\r\n </thead>\r\n <tbody>{renderTable()}</tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n","import \"animate.css\"\r\nimport axios from 'axios'\r\nimport React, { useContext, useEffect, useState } from 'react'\r\nimport { MdMenu } from 'react-icons/md'\r\nimport 'react-notifications-component/dist/theme.css'\r\nimport {\r\n BrowserRouter as Router, Redirect, Route, Switch, useHistory\r\n} from \"react-router-dom\"\r\nimport SimpleBar from 'simplebar-react'\r\nimport './App.css'\r\nimport { AppContext, Config, ModalPopup, Notification, PartnerLeftMenu } from './components'\r\nimport {\r\n BalanceHistoryPage, CustomerPage, DashboardPage, OrderPage,\r\n ProductCheckingPage, ProductPage, ProfilePage,\r\n ChildrenPage,\r\n // OrderFromShopee,\r\n // PartnerShopPage,\r\n} from './pages/partner'\r\n\r\nvar collapsed = false\r\n\r\n// Phóng to, thu nhá» left menu\r\nconst handleCollapse = () => {\r\n if (!collapsed) {\r\n document.body.classList.add('sidebar-enable')\r\n document.body.setAttribute('data-leftbar-compact-mode', 'condensed')\r\n }\r\n else {\r\n document.body.classList.remove('sidebar-enable')\r\n document.body.setAttribute('data-leftbar-compact-mode', '')\r\n }\r\n collapsed = !collapsed\r\n}\r\n\r\nvar globalPopups = []\r\n\r\nconst noImgUrl = '/assets/images/no-img.jpg'\r\n\r\nconst apiUrl = window.apiUrl\r\n\r\nconst renderAvatar = (avatarUrl) => {\r\n let url = ''\r\n if (avatarUrl === null || avatarUrl === '') url = `url(${noImgUrl})`\r\n else url = `url(${apiUrl}/admin/storage/thumbnail?url=${avatarUrl})`\r\n return <span\r\n className=\"bg-avatar me-0 rounded-circle\"\r\n style={{ backgroundImage: url, width: '32px', height: '32px' }}\r\n />\r\n}\r\n\r\nfunction PartnerLayout() {\r\n const appSettings = useContext(AppContext)\r\n\r\n const history = useHistory()\r\n\r\n const [popupInfo, setPopupInfo] = useState({\r\n isShow: false,\r\n partnerPopupId: 0,\r\n title: '',\r\n content: ''\r\n })\r\n\r\n useEffect(() => {\r\n loadPopup()\r\n }, [])\r\n\r\n function loadPopup() {\r\n const url = '/partner/popup/get-partner-popup'\r\n axios.get(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n const popups = data.Result\r\n globalPopups = popups\r\n if (popups.length !== 0) {\r\n const popup = popups[0]\r\n setPopupInfo({\r\n isShow: true,\r\n partnerPopupId: popup.PartnerPopupId,\r\n title: popup.Title,\r\n content: popup.Content\r\n })\r\n }\r\n }\r\n })\r\n }\r\n\r\n const token = localStorage.getItem('p-token')\r\n\r\n if (token === null || token === '') return <Redirect to='/' />\r\n else <Redirect to='/partner/dashboard' />\r\n\r\n return (\r\n <div className=\"wrapper\">\r\n\r\n <Router>\r\n\r\n <div className=\"leftside-menu\">\r\n\r\n <span className=\"logo text-center logo-dark\">\r\n <span className=\"logo-lg\">\r\n <img src=\"/assets/images/logo-dark.png\" alt=\"logo\" height={Config.logoHeight} />\r\n </span>\r\n <span className=\"logo-sm\">\r\n <img src=\"/assets/images/logo_sm_dark.png\" alt=\"logo\" height={Config.logoHeight} />\r\n </span>\r\n </span>\r\n\r\n <SimpleBar className=\"h-100\" id=\"leftside-menu-container\">\r\n <PartnerLeftMenu\r\n onLogout={() => {\r\n Notification.confirm('Bạn có chắc chắn muốn đăng xuất không?', () => {\r\n const url = '/partner/partner/logout'\r\n axios.post(url).then(({ data }) => {\r\n localStorage.removeItem('p-email')\r\n localStorage.removeItem('p-fullName')\r\n localStorage.removeItem('p-token')\r\n localStorage.removeItem('p-avatarUrl')\r\n axios.defaults.headers.common['P-Token'] = ''\r\n history.replace('/')\r\n })\r\n })\r\n }}\r\n />\r\n\r\n <div className=\"clearfix\"></div>\r\n </SimpleBar>\r\n\r\n </div>\r\n\r\n <div className=\"content-page\">\r\n <div className=\"content\">\r\n\r\n <div className=\"navbar-custom\">\r\n <ul className=\"list-unstyled topbar-menu float-end mb-0\">\r\n <li className=\"dropdown notification-list d-lg-none\">\r\n <a className=\"nav-link dropdown-toggle arrow-none\" data-bs-toggle=\"dropdown\" href=\"/\" role=\"button\" aria-haspopup=\"false\" aria-expanded=\"false\">\r\n <i className=\"dripicons-search noti-icon\"></i>\r\n </a>\r\n </li>\r\n <li className=\"dropdown notification-list\">\r\n <span className=\"nav-link dropdown-toggle nav-user arrow-none me-0\">\r\n <span className=\"account-user-avatar\">\r\n {renderAvatar(appSettings.partnerAvatarUrl)}\r\n </span>\r\n <span>\r\n <span className=\"account-user-name\">{appSettings.partnerFullName}</span>\r\n <span className=\"account-position\">Cá»™ng tác viên</span>\r\n </span>\r\n </span>\r\n </li>\r\n </ul>\r\n <button className=\"button-menu-mobile open-left\" onClick={handleCollapse}>\r\n <MdMenu style={{ marginTop: '-10px' }} />\r\n </button>\r\n <span className=\"page-title\" id=\"page-header\"></span>\r\n </div>\r\n\r\n <div className=\"container-fluid\">\r\n\r\n <div className=\"row\">\r\n <div className=\"col-12\" style={{ paddingTop: '24px' }}>\r\n <Switch>\r\n <Route path=\"/partner/dashboard\">\r\n <DashboardPage />\r\n </Route>\r\n <Route path=\"/partner/product\">\r\n <ProductPage />\r\n </Route>\r\n <Route path=\"/partner/product-checking\">\r\n <ProductCheckingPage />\r\n </Route>\r\n <Route path=\"/partner/customer\">\r\n <CustomerPage />\r\n </Route>\r\n <Route path=\"/partner/order\">\r\n <OrderPage />\r\n </Route>\r\n {/* <Route path=\"/partner/shop\">\r\n <PartnerShopPage />\r\n </Route>\r\n <Route path=\"/partner/order-from-shopee\">\r\n <OrderFromShopee />\r\n </Route> */}\r\n <Route path=\"/partner/children\">\r\n <ChildrenPage />\r\n </Route>\r\n <Route path=\"/partner/profile\">\r\n <ProfilePage />\r\n </Route>\r\n <Route path=\"/partner/balance-history\">\r\n <BalanceHistoryPage />\r\n </Route>\r\n </Switch>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <footer className=\"footer\">\r\n <div className=\"container-fluid\">\r\n <div className=\"row\">\r\n <div className=\"col-md-6\">\r\n Copyright © {new Date().getFullYear()} Drop Viet\r\n </div>\r\n <div className=\"col-md-6\">\r\n <div className=\"text-md-end footer-links d-none d-md-block\">\r\n <span>Version: {Config.version}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </footer>\r\n\r\n </div>\r\n\r\n </Router>\r\n\r\n <ModalPopup\r\n onSave={(isChecked, partnerPopupId) => {\r\n if (isChecked) {\r\n const url = `/partner/popup/never-show-again?id=${partnerPopupId}`\r\n axios.post(url).then(({ data }) => {\r\n if (data.IsSuccess) {\r\n\r\n }\r\n })\r\n }\r\n }}\r\n onClose={(partnerPopupId) => {\r\n setPopupInfo({\r\n isShow: false,\r\n partnerPopupId: 0,\r\n title: '',\r\n content: ''\r\n })\r\n setTimeout(() => {\r\n const nextPopups = globalPopups.filter(n => n.PartnerPopupId > partnerPopupId)\r\n if (nextPopups.length !== 0) {\r\n const nextPopup = nextPopups[0]\r\n setPopupInfo({\r\n isShow: true,\r\n partnerPopupId: nextPopup.PopupId,\r\n title: nextPopup.Title,\r\n content: nextPopup.Content\r\n })\r\n }\r\n }, 500)\r\n }}\r\n isShow={popupInfo.isShow}\r\n partnerPopupId={popupInfo.partnerPopupId}\r\n title={popupInfo.title}\r\n content={popupInfo.content}\r\n />\r\n\r\n </div>\r\n )\r\n}\r\n\r\nexport default PartnerLayout","import \"animate.css\"\r\nimport axios from 'axios'\r\nimport vi from 'date-fns/locale/vi'\r\nimport React, { useState } from 'react'\r\nimport { registerLocale, setDefaultLocale } from \"react-datepicker\"\r\nimport \"react-datepicker/dist/react-datepicker.css\"\r\nimport ReactNotification from 'react-notifications-component'\r\nimport 'react-notifications-component/dist/theme.css'\r\nimport {\r\n BrowserRouter as Router, Route, Switch\r\n} from \"react-router-dom\"\r\nimport AdminLayout from './AdminLayout'\r\nimport './App.css'\r\nimport { AppContext, Notification } from './components'\r\nimport { LoginPage, RegisterPage } from './pages/partner'\r\nimport { LoginPage as AdminLoginPage } from './pages/admin'\r\nimport PartnerLayout from './PartnerLayout'\r\nimport { loadProgressBar } from 'axios-progress-bar'\r\nimport 'axios-progress-bar/dist/nprogress.css'\r\n\r\nloadProgressBar()\r\n\r\nregisterLocale('vi', vi)\r\nsetDefaultLocale('vi')\r\n\r\naxios.defaults.baseURL = window.apiUrl\r\n// axios.defaults.baseURL = 'https://api.drop.radovietnam.com'\r\n// axios.defaults.baseURL = 'http://192.168.0.15:8002'\r\n\r\naxios.defaults.timeout = 10_000\r\naxios.defaults.headers.common['A-Token'] = localStorage.getItem('a-token')\r\naxios.defaults.headers.common['P-Token'] = localStorage.getItem('p-token')\r\naxios.interceptors.response.use(function (response) {\r\n try {\r\n const responseType = response.config.responseType\r\n if (responseType !== 'blob') {\r\n if (!response.data.IsSuccess) {\r\n if (response.data.Message !== '') {\r\n Notification.warning(response.data.Message)\r\n\r\n if (response.data.Code === 401) {\r\n const url = response.config.url\r\n const urlArr = url.split('/')\r\n if (urlArr.length > 2) {\r\n const adminOrPartner = urlArr[1]\r\n if (adminOrPartner === 'admin') {\r\n\r\n axios.defaults.headers.common['A-Token'] = ''\r\n\r\n localStorage.removeItem('a-right')\r\n localStorage.removeItem('a-roleName')\r\n localStorage.removeItem('a-fullName')\r\n localStorage.removeItem('a-token')\r\n localStorage.removeItem('a-avatarUrl')\r\n\r\n window.location.reload()\r\n }\r\n else if (adminOrPartner === 'partner') {\r\n\r\n axios.defaults.headers.common['P-Token'] = ''\r\n\r\n localStorage.removeItem('p-email')\r\n localStorage.removeItem('p-fullName')\r\n localStorage.removeItem('p-token')\r\n localStorage.removeItem('p-avatarUrl')\r\n\r\n window.location.reload()\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n catch { }\r\n return response\r\n}, function (error) {\r\n Notification.danger('Có lá»—i xảy ra, vui lòng liên hệ quản trị viên')\r\n return Promise.reject(error)\r\n})\r\n\r\nfunction App(props) {\r\n const [rights, setRights] = useState(() => {\r\n const strRight = localStorage.getItem('a-right')\r\n if (strRight !== null && strRight !== '') return strRight.split(';')\r\n return []\r\n })\r\n\r\n const [adminFullName, setAdminFullName] = useState(() => {\r\n const fullName = localStorage.getItem('a-fullName')\r\n if (fullName === null || fullName === '') return 'Chưa cáºp nháºt'\r\n else return fullName\r\n })\r\n\r\n const [adminAvatarUrl, setAdminAvatarUrl] = useState(() => {\r\n const avatarUrl = localStorage.getItem('a-avatarUrl')\r\n if (avatarUrl === null || avatarUrl === '') return ''\r\n else return avatarUrl\r\n })\r\n\r\n const [adminRole, setAdminRole] = useState(() => {\r\n const roleName = localStorage.getItem('a-roleName')\r\n if (roleName === null || roleName === '') return 'Chưa cáºp nháºt'\r\n else return roleName\r\n })\r\n\r\n const [partnerFullName, setPartnerFullName] = useState(() => {\r\n const fullName = localStorage.getItem('p-fullName')\r\n if (fullName === null || fullName === '') return 'Chưa cáºp nháºt'\r\n else return fullName\r\n })\r\n\r\n const [partnerAvatarUrl, setPartnerAvatarUrl] = useState(() => {\r\n const avatarUrl = localStorage.getItem('p-avatarUrl')\r\n if (avatarUrl === null || avatarUrl === '') return ''\r\n else return avatarUrl\r\n })\r\n\r\n const appSettings = {\r\n rights,\r\n setRights,\r\n adminFullName,\r\n setAdminFullName,\r\n adminAvatarUrl,\r\n setAdminAvatarUrl,\r\n adminRole,\r\n setAdminRole,\r\n partnerFullName,\r\n setPartnerFullName,\r\n partnerAvatarUrl,\r\n setPartnerAvatarUrl\r\n }\r\n\r\n return (\r\n <AppContext.Provider value={appSettings}>\r\n <ReactNotification />\r\n <Router>\r\n <Switch>\r\n <Route path=\"/admin/login\">\r\n <AdminLoginPage />\r\n </Route>\r\n <Route path=\"/admin\">\r\n <AdminLayout />\r\n </Route>\r\n <Route path=\"/partner/register\">\r\n <RegisterPage />\r\n </Route>\r\n <Route path=\"/partner\">\r\n <PartnerLayout />\r\n </Route>\r\n <Route path=\"/\">\r\n <LoginPage />\r\n </Route>\r\n </Switch>\r\n </Router>\r\n </AppContext.Provider>\r\n )\r\n}\r\n\r\nexport default App","const reportWebVitals = onPerfEntry => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport './index.css'\r\nimport App from './App'\r\nimport reportWebVitals from './reportWebVitals'\r\n\r\nReactDOM.render(\r\n <React.StrictMode>\r\n <App />\r\n </React.StrictMode>,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals()\r\n"],"sourceRoot":""}