{"version":3,"sources":["assets/bubble/icon-money.png","assets/bubble/icon-next.png","plugin/wrap-comp.js","services sync nonrecursive //.js$","services/CSRoom.js","services/Client.js","services/adTracking.js","services/canned.js","services/csForm.js","services/csRoomClientSetting.js","services/customer.js","services/faq.js","services/greeting.js","services/groupRoom.js","services/hotsDenys.js","services/login.js","services/monitor.js","services/origin.js","services/others.js","services/platformSetting.js","services/pushNotification.js","services/read.js","services/report.js","services/role.js","services/room.js","services/setting.js","services/tags.js","services/user.js","plugin/theme.js","assets sync /^/.//.*$","assets/order.png","assets/proof-example.jpg","assets/usdt.png","assets/user-avatar1.jpg","assets/user-avatar2.jpg","assets/user-avatar3.jpg","assets/user-avatar4.jpg","assets/wx.png","assets/bubble sync /^/.//.*$","const.js","plugin/sentry.js","store/auth.js","store/global.js","hook/useApi.js","hook/useLogout.js","plugin/ws.js","plugin/apollo.js","plugin/styled.js","store/client.js","store/room.js","store/roomMsg.js","store/subscribe.js","store/index.js","components/Layout/CenterLayout.js","components/Layout/Admin/Container.js","components/Alert.js","views/Login.js","views/Error403.js","views/Error404.js","hook/useList.js","components/QnsTooltip.js","components/Table/DataTable.js","components/Table/CSReportTable.js","views/Dashboard.js","components/DateRangePicker.js","components/SearchBar/index.js","views/ReportCommonUserMgm/index.js","hook/useMerchant.js","components/Table/ConsultingRoomTable.js","views/ReportConsultingRoomMgm/index.js","views/ReportCustomerServiceMgm/index.js","hook/useMe.js","hook/useRecMessage.js","hook/useRoom.js","hook/useRedPoint.js","views/CSRoom/components/ContactToMember.js","views/CSRoom/components/BatchDeactivated.js","components/TabsScrollBlock.js","hook/useFile.js","components/Avatar/AvatarFetch.js","components/CSRoomAdmin/RoomCard/Header.js","components/CSRoomAdmin/RoomCard/RoomInfo.js","hook/useCrypto.js","components/CSRoomAdmin/RoomCard/MsgStatus.js","components/CSRoomAdmin/RoomCard/index.js","views/CSRoom/RoomTabList.js","hook/useEventListener.js","hook/useIframe.js","hook/useRoomMessage.js","components/User/BasicForm/Form.js","components/Avatar/AvatarUpload.js","components/User/BasicForm/index.js","components/User/SpinachInfo/index.js","components/User/LoginInfoList/index.js","components/Button/BtnTooltip.js","components/Button/BtnDeleteConfirm.js","components/User/DeviceList/List.js","components/User/DeviceList/index.js","components/User/SettingForm/Form.js","components/User/SettingForm/index.js","components/Avatar/Avatar.js","components/User/FriendList/List.js","components/User/FriendList/index.js","components/User/RoleList/List.js","components/User/RoleList/index.js","components/User/WhiteList/List.js","components/User/WhiteList/index.js","components/User/UserDetailTabs.js","components/Drawer/UserDetailDrawer.js","components/ChatRoomHeader/AdminHeader.js","components/ChatRoomContent/ScrollDownBtn.js","hook/useBrowser.js","components/ChatRoomContent/index.js","hook/useDragDropFiles.js","hook/useRWD.js","components/InputTextArea.js","components/ChatRoomInputBar/index.js","components/Msg/MsgControlItem.js","components/Icon/DoubleCheckIcon.js","components/Icon/SoundMuteIcon.js","components/Icon/index.js","components/Msg/MsgWrap.js","components/Msg/index.js","components/Msg/MsgText/index.js","components/Msg/MsgSystem/PayList/Icons/index.js","components/Msg/MsgSystem/PayList/Icons/wx.png","components/Msg/MsgSystem/PayList/Icons/alipay.png","components/Msg/MsgSystem/PayList/Icons/bank.png","components/Msg/MsgSystem/PayList/index.js","hook/useOrder.js","components/Drawer/ClientDrawerWrap.js","components/Drawer/ClientOrderDetailDrawer.js","components/Msg/MsgSystem/Oder/index.js","components/Msg/MsgSystem/index.js","components/Msg/MsgImage/index.js","components/Msg/MsgBubble/index.js","components/MsgList/index.js","components/User/OnlineStatusBadge.js","views/CSRoom/components/JoinCustomerServiceDrawer.js","hook/useOrigin.js","components/CSRoomAdmin/RoomDetailDesc.js","components/CSRoomAdmin/RoomUserList.js","components/ChatRoomContent/CSForm.js","views/CSRoom/components/InfoTabsBlock.js","views/CSRoom/components/HeaderBtnGroup.js","hook/useBankData.js","views/CSRoom/components/PaymentListModal.js","views/CSRoom/components/SplitOrderModal.js","views/CSRoom/RoomDetailSection.js","views/CSRoom/index.js","components/PageWrap.js","views/CSRoomDeactivated/InfoTabsBlock.js","views/CSRoomDeactivated/ViewRoomDrawer.js","views/CSRoomDeactivated/ConversationTime.js","views/CSRoomDeactivated/index.js","views/ContactCustomerService/Drawer.js","views/ContactCustomerService/index.js","views/PushMgm/CreateDrawer.js","views/PushMgm/index.js","components/Avatar/AvatarWithText.js","views/MemberMgm/index.js","views/MemberTagMgm/Drawer.js","views/MemberTagMgm/index.js","components/ResetHtmlWrap.js","hook/useEditor.js","views/CSGreeting/Drawer.js","views/CSGreeting/index.js","views/FAQMgm/TreeCard.js","views/FAQMgm/DetailTable.js","views/FAQMgm/Drawer.js","views/FAQMgm/index.js","components/ChatRoomHeader/ClientHeader.js","components/ChatRoomContent/ContentWrap.js","components/ChatRoomContent/Carousel.js","components/CSRoomClient/FullBg.js","components/CSRoomClient/Container.js","components/CSRoomClient/RoomDemo.js","views/CSFormMgm/AddQsBtn.js","views/CSFormMgm/QsOption.js","views/CSFormMgm/QsItem.js","views/CSFormMgm/index.js","views/CannedResponseMgm/CreatedForm.js","views/CannedResponseMgm/index.js","views/CSRoomSettingMgm/ColorBtn.js","views/CSRoomSettingMgm/index.js","components/Table/CSSelectTable.js","views/OriginMgm/OriginSettingDrawer.js","views/OriginMgm/OriginSetting.js","views/OriginMgm/MerchantSettingDrawer.js","views/OriginMgm/MerchantSetting.js","views/OriginMgm/index.js","hook/useBeep.js","views/PlatformSettingMgm/BeepSetting.js","views/PlatformSettingMgm/SettingCard.js","views/PlatformSettingMgm/AutoDistribute.js","views/PlatformSettingMgm/AutoDeactivate.js","views/PlatformSettingMgm/AutoCreatedCS.js","views/PlatformSettingMgm/QueueMaxCount/QusListForm.js","views/PlatformSettingMgm/QueueMaxCount/QusMgm.js","views/PlatformSettingMgm/QueueMaxCount/index.js","views/PlatformSettingMgm/DialogueTimeout.js","views/PlatformSettingMgm/NoResponse.js","views/PlatformSettingMgm/RedirectVerify.js","views/PlatformSettingMgm/index.js","views/HostsDenyMgm/Drawer.js","views/HostsDenyMgm/index.js","views/AdTrackingMgm/Drawer.js","views/AdTrackingMgm/index.js","components/Drawer/CreateUserDrawer.js","views/EmployeeMgm/index.js","views/EmployeeCSMgm/AllowTimeForm.js","views/EmployeeCSMgm/index.js","hook/useMenuList.js","components/AntMenuTree.js","views/EmployeeRoleMgm/Drawer.js","views/EmployeeRoleMgm/TabTable.js","views/EmployeeRoleMgm/index.js","views/MonitorMgm/RoomList.js","views/MonitorMgm/RoomView.js","views/MonitorMgm/RoomViewList.js","views/MonitorMgm/index.js","router/admin.js","hook/useAuthRoutes.js","components/DelayedFallback.js","hook/useNotification.js","views/GlobalAdmin.js","components/Drawer/ReceiveMsgLogDrawer.js","components/WsStatusNotify.js","components/Layout/Admin/Sidebar.js","components/Layout/Admin/Navbar.js","components/Layout/Admin/index.js","AdminApp.js","index.js","services/index.js","services/menuList.js","assets/cs-avatar.jpg","utils/timeFormat.js","utils/storage.js","utils/hardCode.js","utils/errorCode.js","utils/filter.js","utils/url.js","hook/useAlertMessage.js","hook/useCopy.js","services/Fragment.js","assets/alipay.svg","assets/wxUrl.svg","assets/bank.png","assets/ecnyUrl.svg","services/message.js","components/ChatRoomInputBar/FrontDrop.js","assets/alipay-process.jpg","assets/wx-process.jpg"],"names":["theme","require","MainTheme","mapObj","prefix","styleObjFun","reduce","acc","cur","AButtonVariant","styled","variant","variants","val","color","white","black","bg","borderColor","Button","space","background","border","ATagVariant","Tag","ACardVariant","shadow","Card","Space","flexbox","Row","layout","Col","Divider","Box","div","position","typography","bgColor","borderCr","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","LIST_CS_ROOM","gql","CS_DETAIL_FIELD_LESS","COMMENT_USER_ROOMS","LIST_MY_CS_ROOM","CREATED_CS_CONTACT","BATCH_DEACTIVATED_CS_ROOM","LIST_DEACTIVATED_CS_ROOM","CS_DETAIL_FIELD","JOIN_CS_ROOM","PULL_IN_CS_ROOM","DOWNLOAD_CS_ROOM_REPORT","GET_CS_ROOM_SETTING_AND_FORM","CS_SETTING_FIELD","CS_FORM_FIELD","GET_GREETING_AND_FAQ","CS_GREETING_FIELD","GET_ROOM_DETAIL","MSG_REQUIRED","MSG_SYSTEM","CREATED_CS_ROOM","CREATED_CS_DEPOSIT_ROOM","GET_WEB_DEPOSIT_TOKEN","listPaymentChannel","deposit","expireDeposit","cancelDeposit","paidDeposit","consultingOrder","listOrder","listPendingOrder","FAQ_COUNT","AD_TRACKING_FIELD","LIST_AD_TRACKING","GET_AD_TRACKING","CREATE_AD_TRACKING","UPDATE_AD_TRACKING","DELETE_AD_TRACKING","LIST_CANNED","CREATE_CANNED_RES_CAT","UPDATE_CANNED_RES_CAT","DELETE_CANNED_RES_CAT","CREATE_CANNED_RES","UPDATE_CANNED_RES","DELETE_CANNED_RES","GET_CS_FORM","CREATE_CS_FORM","UPDATE_CS_FORM","DELETE_CS_FORM","GET_CS_ROOM_SETTING","LIST_CS_ROOM_SETTING","CREATE_CS_ROOM_SETTING","UPDATE_CS_ROOM_SETTING","LIST_CONTACT_CUS_SVS","GET_CONTACT_CUS_SVS","CREATED_CONTACT_CUS_SVS","UPDATE_CONTACT_CUS_SVS","DELETE_CONTACT_CUS_SVS","LIST_FAQ_KEYS","LIST_FAQ_DETAIL","CREATE_FAQ","UPDATE_FAQ","DELETE_FAQ","LIST_CS_GREETING","CREATE_CS_GREETING","UPDATE_CS_GREETING","DELETE_CS_GREETING","LIST_GROUP_ROOM","CREATE_GROUP","HOSTS_DENY_FIELD","LIST_HOSTS_DENY","CREATE_HOSTS_DENY","UPDATE_HOSTS_DENY","DELETE_HOSTS_DENY","POST_LOGIN","POST_LOGOUT","LIST_USER_LOGIN_INFO","GET_ME","COMMENT_MENU","LIST_MONITOR_CS_ROOM","LIST_CS_ROOM_ORIGIN","CS_ORIGIN_FIELD","CREATE_CS_ROOM_ORIGIN","UPDATE_CS_ROOM_ORIGIN","DELETE_CS_ROOM_ORIGIN","LIST_SPINACH_PLATFORM","SPINACH_FIELD","CREATE_SPINACH_PLATFORM","UPDATE_SPINACH_PLATFORM","DELETE_SPINACH_PLATFORM","MERCHANT_FIELDS","LIST_MERCHANT","CREATE_MERCHANT","UPDATE_MERCHANT","DELETE_MERCHANT","CREATED_UPLOAD_URL","NEW_CREATE_UPLOAD","GET_RED_POINT","LIST_PLATFORM_SETTING","GET_PLATFORM_SETTING","UPDATE_PLATFORM_SETTING","LIST_PLATFORM_MORE_INFO","UPDATE_PLATFORM_MORE_INFO","LIST_CS_QUEUE_QUS","CREATED_CS_QUEUE_QUS","UPDATE_CS_QUEUE_QUS","DELETE_CS_QUEUE_QUS","LIST_PUSH","CREATE_PUSH","CANCEL_PUSH","UPDATE_IN_ROOM","UPDATE_LAST_READ_MSG","REPORT_COMMON_USER","REPORT_CONSULTING_ROOM","REPORT_CONSULTING_ROOM_SERVICE","REPORT_CONSULTING_ROOM_SERVICE_AREA","REPORT_STATISTICS_CONSULTING_ROOM_AREA","REPORT_CUSTOMER_SERVICE","LIST_ROLE","GET_ROLE","CREATED_ROLE","UPDATE_ROLE","DELETE_ROLE","LIST_USER_ROLE","CREATE_USER_ROLE","DELETE_USER_ROLE","LIST_DIRECT_ROOM","UPDATE_ROOM","DELETE_ROOM","UPDATE_ROOM_REMARK","MY_ROOM_LIST","MY_INVITATION_ROOM_LIST","UPDATE_USER_ROOM","GET_ROOM","ACCEPT_INVITE","DELETE_INVITE","INVITE_GROUP","LEAVE_GROUP","GET_USER_SETTING","UPDATE_USER_SETTING","LIST_TAGS","GET_TAG","CREATE_TAG","UPDATE_TAG","DELETE_TAG","USER","SPINACH_COMMON_USER","LIST_USER","INVITE_LIST_USER","GET_USER","GET_USER_SPINACH_INFO","CREATED_USER","UPDATE_USER","DELETE_USER","LIST_USER_WHITE","CREATE_USER_WHITE","UPDATE_USER_WHITE","DELETE_USER_WHITE","LIST_USER_DEVICE","UPDATE_USER_DEVICE","DELETE_USER_DEVICE","LIST_USER_FRIEND","DELETE_USER_FRIEND","UPDATE_USER_PASS","primary","secondary","success","warning","danger","comp","headerHeight","AntTheme","fullDomain","includes","window","location","host","MAIN_DOMAIN","filterSubDomain","document","domain","IS_CLIENT","process","IS_MOBILE","test","navigator","userAgent","HTTP_URI","REACT_APP_DOMAIN_ENABLE","REACT_APP_NEW_DOMAIN","REACT_APP_API_URL_PREFIX","REACT_APP_WS_URL_PREFIX","WS_URI","sentryCaptureErr","errorTitle","extraObj","details","level","Sentry","scope","forEach","key","setExtra","setLevel","authStorageKey","initialState","meInfo","getStorage","authRoutesInfo","authRoutesKey","authSlice","createSlice","name","reducers","setMeInfo","state","payload","setStorage","setAuthRoutesInfo","setAuthRoutesKey","resetAuth","actions","globalStorageKey","isLogin","token","loginInfo","loading","menuList","visibleDrawer","visible","beepEnabled","beepAudioSrc","globalSlice","setIsLogin","setLoginInfo","setLogout","deviceUID","storage","setGLoading","setMenuList","setVisibleDrawer","setBeepEnabled","setBeepAudioSrc","useQueryApi","options","useState","setLoading","useQuery","skip","context","defaultOptions","refetch","fetchData","useCallback","variables","a","data","error","errors","onSuccess","onError","useMutationApi","callback","_options","useMutation","mutate","result","mutateWrap","res","message","isFunction","useLogout","dispatch","useDispatch","apiType","logoutFetch","fetchLogout","err","removeStorage","originalClose","SubscriptionClient","prototype","close","this","client","onopen","onclose","onerror","onmessage","args","apply","wsClient","reconnect","wsLink","WebSocketLink","authMiddleware","ApolloLink","operation","forward","headers","Authorization","getToken","getDeviceId","Math","random","toString","substring","setContext","httpLink","createUploadLink","uri","credentials","splitLink","split","query","definition","getMainDefinition","kind","createErrorLink","ErrorLink","graphQLErrors","networkError","extras","getContext","CusApolloProvider","children","props","onErrorMsg","useAlertMessage","logoutProcess","useLogoutProcess","ApolloClient","link","from","cache","InMemoryCache","typePolicies","Query","fields","listMenu","merge","authority","MsgInvite","keyFields","ListUserRoomResp","ConsultingRoomOrigin","RoomConsultingDetail","createApolloClient","operationName","isShowGeneralError","getError","errCode","console","log","JSON","stringify","isLogoutErrorCode","isSendSentryErrorCode","traceID","getErrorMessage","onLine","ApolloProvider","CusThemeProvider","clientSlice","clientUserInfo","isLoading","gLoading","csRoomSetting","csRoomForm","csRoomQueueList","renew","setClientUserInfo","setIsLoading","setCSRoomSetting","setCSRoomSettingBeepEnabled","setCsRoomForm","setCSRoomQueueList","setRenew","resetClient","roomSlice","currentInRoomID","currentRoomID","roomDetail","roomUsersMap","csTotalUnRead","redPoint","setCurrentInRoomID","setRoomDetail","room","roomID","setRoomUsersMap","setCsTotalUnRead","setRedPoint","roomMsgSlice","roomMsg","lastReadID","hasMoreMsg","currPreRoomIdx","currPreRoomID","setRoomMsg","setLastReadID","setHasMoreMsg","setCurrPreRoomIdx","setCurrPreRoomID","resetRoomMsg","roomMsgTotal","recMsg","wsStatusInfo","status","setRecMsg","setWsStatusInfo","store","configureStore","reducer","global","auth","subscribe","BoxWrap","CenterLayout","handleResize","vh","innerHeight","getElementById","style","setProperty","useEffect","addEventListener","removeEventListener","display","alignItems","justifyContent","width","Container","Content","margin","AntAlert","type","showIcon","marginBottom","Login","useSelector","navigate","useNavigate","onSuccessMsg","errMsg","setErrMsg","useForm","loginForm","loginProcess","loginFetch","onFinish","k","trim","direction","pb","align","Title","p","form","size","Item","rules","required","UserOutlined","className","placeholder","Password","LockOutlined","htmlType","block","Text","Error403","useLogin","routerPush","title","subTitle","extra","onClick","Error404","defaultFilter","baseFilter","sortField","sortType","defaultPagination","perPage","page","useActiveList","api","originFilter","cusFilter","originPagination","handleData","filter","searchFilter","setSearchFilter","pagination","setPagination","fetchPolicy","notifyOnNetworkStatusChange","originData","refetchLoading","setRefetchLoading","refetchHandle","params","useMemo","handleSearchFilter","handleChangePage","QnsTooltip","tip","QuestionCircleOutlined","marginLeft","Table","DataTable","rowKey","columns","dataSource","onChangePage","rowSelection","scroll","footer","tableProps","mb","pageSize","current","total","showTotal","onChange","scrollToFirstRowOnChange","x","CustomerServiceTable","dataIndex","fixed","render","r","commaFormat","secondsToHms","todayDateTime","setDateRanges","defaultTodayFilter","greaterThanEqual","toUnix","start","lessThanEqual","end","consultingRoomServiceOriginFilter","rangeField","rangeType","customerServiceOriginFilter","user","accountType","AccountTypeKeys","columnItemType","alias","config","isStack","xField","yField","seriesField","label","totalDataFields","value","UserAddOutlined","UserSwitchOutlined","SwapOutlined","CommentOutlined","formatter","v","hourInterval","hours","h","push","Dashboard","intervalSeconds","list","listConsultationRoomSummary","consultationRoomSummaries","columnList","isColumnEmpty","existIdx","findIndex","l","formatTime","date","t","dateTime","columnLoading","listRoomDailySummary","el","meta","totalData","roomTotalLoading","listCustomerServiceSummary","customerServiceSummaries","username","tableLoading","Fragment","span","description","gutter","marginTop","valueStyle","DateRangePicker","showTime","isAddDate","formProps","RangePicker","locale","allowClear","ranges","datePickerRanges","objToSelectOptionArr","obj","arr","searchText","disabled","SearchBar","defaultSearch","initialValues","fieldType","dateRange","text","digit","select","optionsObj","spinning","QueryFilter","labelWidth","values","submitter","submitButtonProps","icon","SearchOutlined","Group","flexWrap","f","defaultDateTime","formatSearchDate","searchFields","UsergroupAddOutlined","ReportCommonUserMgm","listUserDailySummary","userDailySummaries","userTotal","roomDailySummaries","roomTotal","metaData","createGroupCount","find","c","formatDate","search","defaultCollapsed","useMerchant","merchantSelectList","setMerchantSelectList","selectListHandle","tempList","merchantType","merchantTableList","setMerchantTableList","merchantTableTotal","setMerchantTableTotal","onCompleted","listMerchant","merchants","ConsultingRoomTable","roomServiceOriginFilter","roomServiceFilter","roomAreaFilter","createdAtGTE","createdAtLTE","legend","barBackground","fill","interactions","enable","ReportConsultingRoomMgm","merchantLoading","statisticsConsultationRoomArea","areaData","statistics","merchantID","consultingRoom","flex","textAlign","UserStatusKey","isDelete","ReportCustomerServiceMgm","useMe","isSystemType","isMonitorType","authorityKeysHandle","concat","Array","isArray","next","fetchMeHandler","Me","menu","authKeys","REC_MSG_COMMON_CONTENT_TYPE","ReceiveMsgContentType","useRecMessage","msgID","meID","hi","join","leave","roomUpdate","bizSystem","typing","userOnlineInfo","lastRead","system","bubble","msgStatusRetract","csRoomStatusActive","csRoomStatusProcessing","csRoomStatusDeactivated","userOrder","payList","systemText","orderStatusCancel","orderStatusPending","orderStatusApproving","msgCommonType","returnCallback","settingIDProcess","settingID","recID","roomUpdateHandle","consultingDetail","csStatusTypeMap","RoomStatusKeys","userID","systemHandle","content","msgSystemTypeMap","MsgSystemType","orderStatus","orderStatusMap","OrderStatusKeys","contentTypeHandleMap","typeHandle","contentType","MsgStatusKeys","propTypes","PropTypes","func","existInRoomUser","userRoom","some","u","deletedAt","ownerUser","ownerUserID","userRooms","ur","roomFormate","extraInfo","isExistInRoom","isPinned","isPinnedRoom","ownerUserData","csType","createdUsersMap","useRoom","getRoomContext","fetchRoom","getRoomLoading","fetchRoomInfo","getRoom","updateInRoom","updateInRoomHandle","SHOW_RED_POINT_MENU_KEYS","useRedPoint","setRedPointHandle","setCsTotalUnReadHandle","getRedPointData","initRedPointNotify","listUserRoom","totalUnRead","tempData","pre","isShow","ControlArea","contactToMember","contactLdg","setVisible","handleVisibleChange","resetFields","filterOption","inputValue","option","toUpperCase","indexOf","optionsSpinachKey","optionsList","ll","MerchantTypeKeys","in","trigger","onVisibleChange","BatchDeactivated","checkedList","indeterminate","onCheckAllChange","checkAll","batchDeactivated","checked","ghost","length","confirm","okText","cancelText","onOk","roomIDs","defaultTabPaneArr","tab","TabsScrollBlock","tabPaneArr","onChangeTab","controlArea","wrapProps","flexDirection","py","px","height","defaultActiveKey","TabPane","overflow","useFile","fetchApi","url","cusHeaders","method","body","resType","fetch","response","json","errorJson","returnType","blob","useFetch","getFileUrl","file","URL","createObjectURL","getBase64Image","img","canvas","createElement","drawImage","ext","src","lastIndexOf","toLowerCase","toDataURL","getDownloadFile","fileUrl","objectURL","resData","getDownloadFiles","avatarsInfo","Promise","all","item","avatarURL","checkBlobStr","str","checkIsFileImage","changeFileToUrl","File","changeUrlToFile","reject","Image","onload","btof","setAttribute","timestamp","Date","getTime","fileName","dataArr","byteString","atob","u8Arr","Uint8Array","i","charCodeAt","endings","getBase64","reader","FileReader","readAsDataURL","AvatarFetch","setSrc","getDownloadFileHandle","Avatar","active","Header","showIsOnline","isOnline","tags","isOnlineState","setIsOnlineState","dot","offset","RoomInfo","ipAddress","country","administrativeArea","pt","overflowWrap","PushpinTwoTone","fontSize","CryptoJS","subStrToken","enc","Utf8","parse","useCrypto","encryptBase64Handle","encrypted","AES","encrypt","mode","ECB","encryptHexHandle","ciphertext","encryptStrHandle","secretKey","base64","hex","decryptBase64","cipherStr","decrypted","decrypt","decryptHex","hexStr","Hex","Base64Str","Base64","decryptStr","padding","pad","NoPadding","decryptStrHandle","MsgStatus","isWaitFirst","isTimeout","showLastMsg","showUnReadCount","unRead","lastMessage","unReadCount","setUnReadCount","isWaitFirstState","setIsWaitFirstState","isTimeoutState","setIsTimeout","lastMsgState","setLastMsgState","typeShow","MsgContentTypeKeys","isEncrypt","lastMsg","lastMsgTime","isFirstRender","useRef","verifyAddUnRead","isWaitFirstResponse","isTimeoutResponse","recRoomStatusProcessing","whiteSpace","textOverflow","count","rotate","keyframes","animationStyles","css","RoomCardStyled","isNewActiveRoom","RoomCard","userData","isActive","borderBottom","tagsRender","isTourist","isProactive","isDeposit","marginRight","AccountTypeDisplay","RoomTabList","currTab","currRoomID","setCurrRoom","onCheckRoom","activeKey","idx","CSRoomTypeKey","useEventListener","eventName","handler","savedHandler","eventListener","event","msgType","isInIframe","frames","parent","useIframe","parentURL","postMsgToParent","postData","postMessage","postUnRead","num","postToBack","recParentListener","origin","useRoomMessage","currUserRooms","currHistoryRooms","MeID","onWarningMsg","historyRooms","reverse","curr","lastReadMessageID","setRoomMsgHandle","msgList","msg","handleType","INITIAL","PUSH","UNSHIFT","UPDATE","m","AFRESH","cusMsg","CusMsgContentType","RESET","pushCusMsg","now","POST_MSG","isClient","postMsg","postSystemMsg","RoomTypeKey","fetchRoomMsg","LIST_MSG","fetchRoomMsgHandle","setMsgType","offsetType","limit","listMessage","messages","updateLastMsg","fetchInRoomMsgHandle","messageID","filterEfficientMsg","loadMoreMsg","efficientMsg","moreMsg","offsetID","loadPreRoomMsg","preRoomID","recLastReadIDHandle","lastReads","recOtherSideMsgHandle","MsgFromTags","pushMsg","lastMessageID","BasicForm","btnUserLoading","updatePassLoading","isEdit","editType","updateUser","updatePass","isFirst","setIsFirst","setInputValue","userForm","d","setFieldsValue","userDataHandle","compact","nativeEvent","target","password","tooltip","autoComplete","accType","selectObj","accountTypeSelect","Option","UserStatusDisplay","kk","TextArea","AvatarUpload","setUploadFile","beforeUploadHandle","baseUrl","shape","beforeUpload","showUploadList","accept","UploadOutlined","UserBasicForm","formColProps","avatarColProps","detailData","setDetailData","getUser","setFile","updateLoading","updateUserHandle","formFields","avatarContent","updateUserPass","updateUserPassHandle","order","SpinachInfo","spinachData","setSpinachData","spinachCommonUserDetail","dataHandle","column","labelStyle","fontWeight","platform","spinachUserID","payLevel","riskControlLevel","rechargeTime","registerAt","formatDateTime","nowLoginIP","lastLoginAt","lastLoginIP","LoginInfoList","userLoginHistory","listUserLoginHistory","userLoginHistories","deviceOSKeys","bordered","bodyStyle","BtnTooltip","tipType","tipTitle","placement","showBtnText","btnText","toolkitTitle","edit","EditTwoTone","delete","DeleteTwoTone","BtnDeleteConfirm","handleOk","btnProps","onConfirm","confirmHandle","onCancel","okButtonProps","stopPropagation","DeviceList","deleteLoading","updateDevice","deleteDevice","renderItem","checkedChildren","unCheckedChildren","isBind","EnableKey","strong","createdAt","updatedAt","UserDeviceList","deviceList","setDeviceList","userDevice","listUserDevice","userDevices","completedConfig","SettingForm","settingData","updateUserSetting","settingForm","formHandle","onChangeHandle","fieldName","valuePropName","UserSettingForm","setSettingData","getUserSetting","allowStrangeMessageEnabled","autoAddFriendEnabled","userSetting","AvatarWrap","slice","FriendList","deleteFriend","CloseOutlined","friend","UserFriendList","friendList","setFriendList","avatars","setAvatars","userFriend","listUserFriend","userFriends","then","cloneDeep","RoleList","changeRole","UserRole","setDataSource","userRolesId","userRoles","role","userRole","listRole","supportAccountType","listUserRole","roleList","roles","createRole","createLoading","deleteRole","roleID","isAdmin","WhiteList","createWhite","updateWhite","deleteWhite","ipEdit","setIpEdit","curEditId","setCurEditId","inputEl","whiteForm","changeIpEditType","filed","CheckCircleTwoTone","ref","defaultValue","onPressEnter","UserWhiteList","whiteList","setWhiteList","userWhitelist","listUserWhitelist","userWhitelists","createWhiteHandle","UserDetailTabs","tabPosition","basicFormProps","BASIC_INFO","SPINACH_INFO","LOGIN_INFO_LIST","USER_SETTING","ROLE_LIST","DEVICE_LIST","WHITE_LIST","FRIEND_LIST","accountTypeRender","TabsData","areEqual","prevProps","nextProps","React","memo","DRAWER_NAME","UserDetailDrawer","closeCallback","visibleData","onClose","paddingBottom","AdminHeader","titleLevel","subtitle","cusSubtitle","btnGroup","ScrollDownBtn","show","hasNewMsg","zIndex","right","bottom","DownOutlined","AGENT","fullScreenHandle","href","click","useBrowser","browser","BrowserType","documentMode","StyleMedia","browserWarningModel","okCallback","cursor","centered","checkIsOldBrowser","accessWarningModal","checkIsAccessAllow","isStorageAccessAllow","EndMsg","showEndMsg","ChatContent","roomMsgLength","controlHeader","controlFooter","bgImg","isSogou","elHeight","setElHeight","roomContentEl","setRoomContentEl","wrapBoxRef","setWrapBoxRef","infiniteScrollNode","setInfiniteScrollNode","scrollToBtnShow","setScrollToBtnShow","setHasNewMsg","sogouBrowserScrollTop","getScrollableTarget","outerDivHeight","clientHeight","getElementsByClassName","resizeObserver","ResizeObserver","entries","requestAnimationFrame","contentRect","observeTimeID","hight","loadMoreMsgHandle","loadPreRoomMsgHandel","getWrapBoxRef","scrollNodeTo","currScrollTop","scrollTo","getInfiniteScrollEl","node","setHasNewMsgHandle","lastScrollTop","initSetHasMoreMsg","offsetHeight","useImperativeHandle","setTimeout","observe","backgroundImage","backgroundSize","backgroundPosition","backgroundRepeat","scrollableTarget","dataLength","endMessage","hasMore","loader","inverse","onScroll","scrollTop","forwardRef","stopEventDefault","preventDefault","checkIsDragIn","dataTransfer","items","DragInDrop","useDragDropFiles","onSetDropFiles","onSetDragInFiles","onSetDragOutFiles","dropElRef","setDropElRef","dragCounter","isDragging","setDrag","handleDragIn","handleDragOut","handleDrag","handleDrop","files","clearData","isWebview","useragent","regex","RegExp","Boolean","match","useRWD","setSize","handleRWD","innerWidth","isMobileSize","isMobileDevice","TextAreaWrapStyle","HintText","InputTextArea","setValue","pasteHandle","onFocus","rows","onKeyDown","keyCode","shiftKey","onPaste","letterSpacing","PreviewFileModal","lazy","lazyRetry","InputPayment","BtnEmojiPicker","BtnUploadFile","InputBar","paymentInputSubmit","paymentBtnLoading","showFrontDrop","onChangeInputValue","frontDropControl","showPaymentCancelBtn","paymentChannelListBtn","showUploadBtn","showEmojiBtn","showPaymentInput","setShowPaymentInput","inputChangeHandle","pushTextHandle","stripHtmlTag","pushFileHandle","upload","showEmojiBox","setShowEmojiBox","previewFileModal","setPreviewFileModal","dropFilesHandle","_files","isImage","clipboardData","fallback","showCancelBtn","onSubmit","onCloseInput","FrontDrop","mt","onClickEmoji","emoji","native","postFile","SendOutlined","MsgControlItem","borderRadius","DoubleCheckSvg","viewBox","xmlSpace","DoubleCheckIcon","Icon","component","SoundMuteSvg","SoundMuteIcon","MsgWrap","showName","isShowMsgStatus","isSend","isRead","isRetract","isError","avatar","mr","LoadingOutlined","CheckOutlined","checkRender","MsgContextMenu","MGM_TYPE","Msg","originalMsg","usersMap","updateMsg","msgWrapNode","setMsgWrapNode","setIsRetract","setMsg","isSystem","isSelf","setIsError","UPDATE_MSG","updateMsgStatus","retractLoading","isTextEncrypt","postMsgHandle","isText","encryptTextObj","postDefaultObj","String","resMsg","encryptPostData","errorMsg","errorLevel","sentryErrorData","resError","tokenKey","originMsg","encryptMsg","resentErr","resentError","resentParams","successResData","retractMsgHandle","n","isOther","userAccountType","userInfo","cloneElement","fileURL","showCopyImage","showRetract","showRetractHandle","onRetract","MsgText","__html","replace","wordBreak","dangerouslySetInnerHTML","imgType","PayType","IconsWrap","payType","alt","Icons","paddingTop","PayList","amount","400000","400002","402001","500002","channelID","mx","useOrder","onCancelSuccess","_","orderNo","cancelDepositConfirm","PopupC","onMaskClick","overflowY","ClientDrawerWrap","Comp","compProps","borderTopLeftRadius","borderTopRightRadius","ClientOrderDetailDrawer","orderDetailDrawerWrapRef","InfoItem","isBlue","my","BankCardContent","bankName","bankCode","branchName","cardNo","accountName","onClickAlipay","onClickWx","_cardNo","PayTypeImg","AliCardContent","QRcodeContent","qUrl","account","RedirectContent","Oder","payMethod","orderAmount","expiredAt","bank","qrcode","redirect","alipayDrawerWrapRef","wxDrawerWrapRef","setStatus","orderContentRender","PayMethod","getNow","ml","alipayProcessUrl","wxProcessUrl","MsgSystem","systemType","MsgImage","layoutMap","BASELINE","HORIZONTAL","VERTICAL","MsgBubble","header","hero","onOrderDetail","compMap","box","separator","weight","button","action","iconAlign","postBackMap","actionTypeMap","MESSAGE","POSTBACK","URI","IconComp","renderIconComp","default","Contents","contents","ContentComp","Bubble","BubbleComp","MsgList","msgSystemRender","msgControlRender","showUserText","msgFileRender","msgTextRender","msgBubbleRender","online","offline","stealth","OnlineStatusBadge","isStealth","JoinCustomerServiceDrawer","submit","selected","setSelected","listLdg","listUser","users","setting","showOnlyOnline","setShowOnlyOnline","filterData","selectedRowKeys","useOrigin","originSelectList","setOriginSelectList","originTableList","setOriginTableList","originTotal","setOriginTotal","listConsultingRoomOrigin","consultingRoomOrigins","accessDomainTextFormate","accessDomain","remark","idexEnd","iconStyle","RoomDetailDesc","sourceDomain","deviceOS","question","updateRemark","remarkVal","setRemarkVal","onBlurRemark","EnvironmentFilled","CompassFilled","RoomStatusDisplay","onBlur","RoomUserList","roomType","userInvitations","inviteBtnText","openInviteDrawer","orientation","useRooms","showUserInRoom","inviteeUser","justify","CSForm","formTitle","formDataList","showVerificationCode","isReadType","cusFormCom","updateQsHandel","submitHandle","updateContentHandle","itemIdx","tempFormDataList","fieldTypeVerify","CSFormFieldVerifyType","rule","validator","Number","verifyTypeHandle","verifyType","inputRender","ItemIdx","tempContent","onChangeInput","radioRender","clickIdx","it","onChangeRadio","checkboxRender","onChangeCheckbox","fieldTypeRender","CSFormFieldType","captchaInputEl","captchaRef","captchaCode","setCaptchaCode","validateStatus","help","captchaError","setCaptchaError","array","temp","floor","clickSubmit","validateFields","fieldTypeInit","checkIdx","initCSForm","initValueObj","charNum","refresh","InfoTabsBlock","setCannedText","visibleJoinDrawer","openUserDetailDrawer","currTabKey","setCurrInfoTabKey","fetchCannedList","cannedTreeData","setCannedTreeData","fetchCannedListHandle","cannedResponseCategories","listCannedResponseCategory","cannedResponses","listCannedResponse","category","resItem","categoryID","onSelectCannedMsg","selectedKeys","info","onSelectFunctionMsg","templateID","tabContentRender","roomInfo","csForm","formData","cannedMsg","treeData","onSelect","functionMsg","defaultExpandedKeys","HeaderBtnGroup","pinRoom","leaveRoom","deactivateRoom","PushpinOutlined","isOperator","checkCanLeave","bankData","ICBC","pc_domain","app_download","sub","CCB","ABC","BOC","COMM","CMB","CITIC","SPDB","CIB","CMBC","BJBANK","SRCB","BGB","SHRCB","WHCCB","BOZK","KORLABANK","SPABANK","SDEB","HURCB","WRCB","BOCY","CZBANK","HDBANK","BOD","ZYCBANK","SXCB","GZRCU","ZJKCCB","BOJZ","BOP","HKB","NXRCU","NYNB","GRCB","BOSZ","HZCB","HSBK","HBC","JXBANK","HRXJB","BODD","AYCB","EGBANK","CDB","TCRCB","NJCB","ZZBANK","DYCB","YBCCB","SCRCU","KLB","LSBANK","YDRCB","CCQTGB","FDB","JSRCU","JNBANK","JINCHB","FXCB","WHRCB","HBYCBANK","TZCB","TACCB","XCYH","CEB","NXBANK","HSBANK","JJBANK","NHQS","MTBANK","LANGFB","ASCB","KSRB","YXCCB","DLB","DRCBCL","GCB","NBBANK","BOYK","SXRCCU","GLBANK","BOQH","CDRCB","QDCCB","HKBEA","HBHSBANK","WZCB","TRCB","QLBANK","GDRCC","ZJTLCB","GZB","GYCB","CQBANK","DAQINGB","CGNB","SCCB","CSRCB","SHBANK","JLBANK","CZRCB","BANKWF","ZRCBANK","FJHXBC","ZJNX","LZYH","JSB","BOHAIB","CZCB","YQCCB","SJBANK","XABANK","BSB","JSBANK","FSCB","HNRCU","XTB","HXBANK","HNRCC","DYCCB","ORBANK","BJRCB","XYBANK","ZGCCB","CDCB","HANABANK","LYBANK","GDB","ZBCB","CBKF","H3CB","CRCBANK","SZSBK","DZBANK","SRBANK","LSCCB","JXRCU","JZBANK","HZCCB","NHB","XXBANK","JRCB","YNRCC","GXRCU","PSBC","BZMD","ARCU","GSRCU","LYCB","JLRCU","URMQCCB","XLBANK","CSCB","JHBANK","BHB","NBYZ","LSBC","BOCD","SDRCU","NCB","TCCB","WJRCB","CBBQS","HBRCU","CSCRCB","ZYBANK","FJNX","HBA","GDRC","CRB","NRC","FRCB","LZCCB","BOW","LNRCC","ZJB","SXB","SRCU","JNMSRB","IMGRCC","JSRCB","SYRCB","ZJRCB","JXB","NYCB","CAB","BOQZ","JXRCB","CSXB","useBankData","bank_code","PaymentListModal","onSubmitManual","currSelectedRow","openModal","setOpenModal","paymentList","setPaymentList","innerPayType","setInnerPayType","setQrcode","uploading","setUploading","isManualConfirmModalVisible","setIsManualConfirmModalVisible","fieldsValue","listLoading","channels","filteredChannels","channel","tester","open","bank_name","isBank","PayTypeMap","newCreateUpload","uploadHandler","imgUrl","onManualConfirm","inputs","innerAmount","timeExpired","credential","open_bank","open_bank_name","open_bank_code","sub_bank","q_url","account_name","checkBankCard","validated","catch","destroyOnClose","Paragraph","selectedRows","wx","alipay","ecny","maxWidth","addonAfter","customRequest","multiple","currentPayType","setCurrentPayType","Toast","time","disConnectedInterID","RoomDetailSection","currRoom","fetchMyConsHandle","inputBarRef","paymentListModalRef","chatRoomContentRef","clientOrderDetailDrawerRef","isDepositRoom","fetchRoomInfoHandle","currInRoomHandle","resetCurrRoomLocation","setTypingTxt","initGetRoom","tabKey","initInRoom","clearDisConnectedInter","wsStatusHandle","joinDrawer","setJoinDrawer","pullInRoom","pullLoading","pullInRoomHandle","userIDs","leaveLdg","leaveRoomHandle","updateRoom","updateRoomLdg","deactivateRoomHandle","updateUserRoom","updateUserRoomLdg","pinRoomHandle","joinConsultingRoom","joinRoom","joinLd","postDeposit","postDepositHandle","payeeID","postDepositHandleManul","typingTxt","recTypingHandle","recMsgCommonType","recNewMsg","clearInterval","onDisconnected","setInterval","disConnectedInterHandle","onReconnected","onConnected","ChatRoomContent","ChatRoomInputBar","SplitOrderModal","userDetailEdit","top","left","TabMyCSHeader","sorUserRoomListIsPinedHandle","sort","b","ConsultationChat","roomList","setRoomList","pinRoomNum","setPinRoomNum","myConsRoomList","fetchMyCons","myRoomLoading","isReserve","pinnedRoomNum","tempDataSource","fetchCons","roomLoading","fetchConsHandle","statusType","0","2","statusIn","consultingRooms","listConsultingRoom","tabs","splice","setCurrTab","specifyRoomID","setSpecifyRoomID","rm","createConsultingRoomWithContact","sortRoomToTop","roomIdx","setUnReadHandle","rr","getActiveRoomHandle","setIndeterminate","setCheckAll","setCheckedList","ContactToMember","PageWrap","xs","md","lg","xl","xxl","INFO_TABS","ViewDrawer","onChangeRoom","onChangeRoomHandle","LeftCircleTwoTone","RightCircleTwoTone","ConversationTime","deactivatedAt","ownerUsername","deactivatedUsername","isEffective","defaultSearchDataFormat","formatSearchDateTime","ConsultationChatDeactivated","deactivatedUserID","currSearch","setCurrSearch","currIdx","setCurrIdx","clickControl","currSearchData","setCurrSearchData","downloadReport","downLoading","downloadReportHandle","downloadConsultingRoomReport","changePageSpecifyDetail","Idx","onChangeDetailRoom","isNext","Unknown","CommonUser","Tourist","Yes","No","record","EyeTwoTone","formatCreatedAt","searchData","DownloadOutlined","ViewRoomDrawer","defaultForm","isDisplayEnabled","Drawer","createdSVS","updateSVS","svsForm","setIsEdit","setAvatarURL","contactCustomerService","closeDrawer","initForm","EnableDisplay","ContactCustomerService","listContactCustomerService","contactCustomerServices","deleteSVS","deleteLdg","createdLdg","updateLdg","detailSource","setDetailSource","setVisibleHandle","onChangeEnabled","PlusOutlined","CreateDrawer","isScheduled","setIsScheduled","pushForm","cerateFetch","scheduledTime","unix","detailDataHandle","moment","disabledDate","startOf","PushMgm","listPushNotification","pushNotifications","createVisible","setCreateVisible","cancelFetch","cancelLdg","cancelFetchHandle","pushNotification","pushTimeRender","pushTime","scheduledTimeRender","row","IsScheduledKeys","PushTargetKey","PushStatusKeys","StopTwoTone","AvatarWithText","email","merchantOptions","optionList","EmployeeMgm","setUser","openDrawer","spinachPlatformKey","handleUser","newTag","updateTag","colorPicker","setColorPicker","tagData","setTagData","tagForm","submitFunc","RGBHex","isEnable","tag","getTag","onChangeComplete","MemberTagMgm","listTag","fetchDetail","detailLdg","setDetailLdg","fetchDetailHandel","deleteTag","deleteTagHandler","openType","TagOutlined","searchParams","ResetHtml","ResetHtmlWrap","html","defaultState","Editor","createEditorState","useEditor","clickPreview","editorState","setEditorState","changeEditorHandle","setHtmlToEditorState","htmlStr","putImageLoading","setPutImageLoading","param","s3_domain","ContentUtils","insertMedias","uploadBtnRender","editHtmlModalVisible","setEditHtmlModalVisible","editHtml","setEditHtml","clickEditHTML","onChangeHtml","clickSubmitHtml","EditHtmlModal","extendControls","toHTML","editorControls","PreviewModal","afterSendSec","source","isEnabled","consultingRoomOriginID","createGreeting","updateGreeting","previewVisible","sourceInputEl","showSecInputEl","setShowSecInputEl","greetingForm","fieldsObj","consultingGreeting","initDrawer","max","controls","ConsultingGreeting","originListLoading","currOriginID","setCurrOriginID","listConsultingGreeting","ConsultingGreetings","onCompletedCallback","deleteGreeting","modalVisible","setModalVisible","previewContent","setPreviewContent","mins","greetingSearch","TreeCard","onLoadData","setSelectedItem","loadData","showLine","showLeafIcon","DetailTable","currentParentItem","groupByParentID","completed","updateFetch","updateFetchHandle","isUp","refer","frequentlyQuestion","sequence","deleteFetch","currID","txt","UpCircleTwoTone","DownCircleTwoTone","editData","deleteFetchHandle","parentList","createFAQ","updateFAQ","faqForm","asked","parentID","initTreeData","isLeaf","defaultSearchBar","updateTreeData","FAQMgm","filterSearch","faqSearch","depth","listFrequentlyQuestion","frequentlyQuestions","tableSearchFilter","tableRefetch","setTreeData","setGroupByParentID","listKeys","byParentIdData","parentIdData","initTreeHandle","treeLoading","treeSearchFilter","treeRefetch","treeSelectedItem","setEditData","itemData","ClientHeader","showBeepBtn","showBackBtn","backUrl","backToHandle","rightExtra","HeaderWrap","LeftOutlined","CustomerServiceOutlined","CsAvatarUrl","SoundFilled","FullscreenOutlined","RightOutlined","ContentWrap","borderSize","borderBottomRightRadius","borderBottomLeftRadius","Carousel","logoList","carouselStyle","effect","autoplay","dots","CSRoomFullBg","bgImgUrl","LogoHeaderWrap","LogoHeader","logoURL","BannerWrap","Banner","imgURL","headerLogoURL","headerBgColor","bannerImgURL","bannerLinkURL","chatRoomHeader","chatRoomContent","chatRoomContentCourse","useReducer","forceUpdate","showLogoHeader","showBanner","wrapStyle","chatRoomHeaderStyle","boxShadow","RoomDemo","headerData","contentData","contentNode","bannerData","FullBg","backgroundImageURL","backgroundColor","imageURL","linkUrl","boxBackgroundColor","boxBackgroundImageURL","contentLogoPosition","contentLogoEnabled","contentLogoURL","unVerifyRule","inputContent","defaultQsData","defaultCusQsData","AddQsBtn","selectQsIDs","setSelectQsIDs","selectItem","Panel","showArrow","qsItem","tempQsItem","clickCusQsHandle","QsOption","updateData","deleteData","labelEl","onChangeLabel","SaveOutlined","EditOutlined","DeleteOutlined","QsItem","addContentOption","updateContentOption","tempOption","onChangeRequire","op","ii","deleteContentOption","multipleOptionsRender","CSFormMgm","originLoading","originID","setOriginID","qsList","setQsList","deleteQsHandle","deleteId","q","setTitle","setIsEnabled","isVerificationCode","setIsVerificationCode","initHandle","detail","CSFormLoading","fetchDataHandle","consultingRoomForm","getConsultingRoomForm","createdForm","updateForm","submitFormHandle","omitTypenameHandle","closable","getFieldValue","qsListRender","CreatedForm","createdHandle","field","resCatList","resList","CannedResponseMgm","tempCatList","catList","catItem","createdCannedCat","createdCatLdg","createdCanned","createdCallback","curCatEditId","setCurCatEditId","editInputEl","updateCallback","updateCannedCat","updateCanned","updateHandle","isCat","cannedResponseCategory","cannedResponse","updateBtnRender","deleteCallback","deleteCannedCat","deleteCatLoading","deleteCanned","deleteBtnRender","forceDelete","titleRender","editId","cat","ColorBtn","showColorPicker","setShowColorPicker","handleInitEnabled","SettingItemRender","headerTxt","FileUpload","showDelete","deleteImgParams","deleteImg","listType","maxCount","RadioBtn","CSRoomSettingMgm","originIDForm","createConsultingRoomClientSetting","createSetting","cLdg","updateConsultingRoomClientSetting","updateSetting","uLdg","isExist","setIsExist","roomSettingData","setRoomSettingData","currCSRoomOriginID","setCurrCSRoomOriginID","clickSubmitHandle","banner","_contentLogoURL","logo","contentLogo","deleteContentLogo","boxBackgroundImage","image","consultingRoomClientSetting","onChangeDataHeader","changeObj","onChangeDataContent","onChangeDataBanner","handleCarousel","deleteCarouselImg","_list","initSettingData","__typename","getConsultingRoomClientSetting","onValuesChange","deleteAvatar","deleteBoxBackgroundImage","round","deleteBackgroundImage","settingList","SelectCSTable","selectChangeHandle","setTotal","OriginSettingDrawer","createOrigin","updateOrigin","originForm","visibleServiceDrawer","setVisibleServiceDrawer","visibleServiceDrawerHandle","consultingRoomOrigin","customerServiceIDs","customerServices","CSSelectTable","OriginSetting","merchantLdg","createdLoading","deleteOrigin","MerchantSettingDrawer","createMerchant","updateMerchant","merchantForm","paymentChannel","queryOrder","merchant","endpoints","setRequired","onChangeRequired","initialValue","MerchantSetting","deleteMerchant","OriginMgm","tabsData","BEEP_FILE_KEY","BEEP_ENABLED_KEY","BEEP_CLIENT_ENABLED_KEY","useBeep","fetchBeepFile","PlatformSetting","getPlatformSetting","updateBeepFile","beepClientEnabled","setClientBeepEnabled","fetchBeepEnabled","call","updateBeepEnabled","playPromise","audioObj","playAudioPromise","play","BeepSetting","audioSrc","uploadSrc","setUploadSrc","uploadFile","beforeAudioUpload","SoundOutlined","SettingCardStyle","hasEnable","defaultChecked","AutoDistribute","AUTO_DISTRIBUTE","configKeysValue","SettingCard","AutoDeactivate","AUTO_DEACTIVATE_ENABLED","AUTO_DEACTIVATE_MIN","DEACTIVATE_TIP_ENABLED","DEACTIVATE_TIP_MANUAL","DEACTIVATE_TIP_AUTO","min","setMin","tipManual","setTipManual","tipAuto","setTipAuto","updatePlatformSetting","update","onChangeEnable","finally","AutoCreatedCS","AUTO_CREATED_CS","QusListForm","qusData","updateQsHandle","hidden","QusMgm","fetchQsList","listConsultingRoomQuestion","consultingRoomQuestions","createQs","createdQsLdg","createQsHandle","updateQs","updateQsLdg","consultingRoomQuestion","deleteQs","deleteQsLdg","minWidth","QueueMaxCount","QUEUE_MAX_COUNT","setCount","DialogueTimeout","DIALOGUE_TIMEOUT_SEC","DIALOGUE_TIMEOUT_SEC_ENABLED","sec","setSec","NoResponse","NO_RESPONSE_ENABLED","NO_RESPONSE_SEC","NO_RESPONSE_TIP","setTip","RedirectVerify","REDIRECT_VERIFY_ENABLED","BEEP","PlatFormSettingKey","PlatformSettingMgm","listPlatformSetting","PlatformSettings","itemCard","itemCardsConfig","configKeys","ck","s","settingCardData","create","hostsDeny","HostsDenyMgm","listHostsDeny","hostsDenys","createHostsDeny","updateHostsDeny","deleteHostsDeny","adTrackingCode","adTracking","adTrackingCodeValid","adTrackingType","AdTrackingType","validType","validateFirst","AdTrackingMgm","listAdTracking","adTrackings","createAdTracking","updateAdTracking","deleteAdTracking","setPreviewVisible","setPreviewVisibleHandel","accTypeConfig","CreateUserDrawer","accountTypes","createUser","createDrawer","setCreateDrawer","deleteUser","merchantRender","tabBarGutter","tabBarExtraContent","tt","tabTableRender","allowStatus","AllowTimeForm","allowForm","dateRequire","setRateRequire","allowLoginEndAt","allowLoginStartAt","toMoment","unixData","EmployeeCSMgm","updateSettingLdg","useMenuList","treeDataHandle","authorityKeysForTreeHandle","tree","GET_MENU_LIST","fetchMenuHandle","authorityDataHandle","AntMenuTree","checkedKeys","setCheckedKeys","autoExpandParent","setAutoExpandParent","checkable","onExpand","onCheck","checkedKeysValue","accTypeArray","roleForm","checkedMenuKeysResult","setCheckedMenuKeysResult","expandedKeys","setExpandedKeys","checkedMenuKeys","setCheckedMenuKeys","roleData","setRoleData","getRole","mutationCallBack","createdRole","updateRole","halfCheckedKeys","TabTable","defaultRoleID","loadingObj","fetchListHandle","deleteRoleHandler","reload","Pagination","clickDeleteRole","initSearch","EmployeeRoleMgm","setLoadingObj","setDefaultSearchData","managerData","setManagerData","customerServiceData","setCustomerServiceData","monitorData","setMonitorData","setReload","fetchList","setData","tableDataHandle","tableRender","forceRender","CSRoomList","merchantList","csRoomList","clickCurrRoom","onChangePanel","accordion","destroyInactivePanel","csRoomTotal","RoomView","minHeight","RoomViewList","isShowAll","roomViewRender","roomItem","MonitorMgm","setCsRoomList","fetchCSRoomList","fetchCSRoomListHandle","tempListSource","formateRoom","setMerchantList","currMerchantID","setCurrMerchantID","onChangeMerchant","mrID","setIsShowAll","mrListRoomTotalHandel","cc","openCurrRoomModal","isOpen","roomData","recRoomUpdateHandle","recMrID","isAdd","mrRoomTotalHandle","RoomList","adminLogin","path","element","index","to","adminContainer","CSRoom","isDefaultKey","authMenu","DelayedFallback","useNotification","handleNotify","settingObj","destroy","handleNotifyType","onNotify","onWarningNotify","onErrorNotify","timeoutSecID","carouselPlayInterID","hasPlayTimeoutID","GlobalAdmin","setRoute","wsStatusNotify","beep","setBeep","Audio","clearTimeoutInterval","setUnReadRoom","unReadRoom","addUnReadRoom","removeUnReadRoom","carouselPlayHandle","clearTimeout","countSec","setSkip","receiveData","useSubscription","RECEIVE_MSG","userAuth","receiveMessage","fetchUserData","fetchUserDataHandle","spinachUserIDs","tagIDs","roleIDs","userInfoRender","MessageOutlined","InfoCircleOutlined","handleTypeKeys","businessSystemNotification","allowLoginNotifyHandle","allowMoment","todayMoment","overDay","ceil","diff","toDefaultAuthPage","pathname","useLocation","routerAuthHandle","pathArr","shift","every","useAuthRoutes","wsStatusCallBack","reason","onConnecting","onReconnecting","ReceiveMsgLogDrawer","bizSystemHandle","pop","arg","MenuOutlined","itemLayout","WsStatusNotify","collapsed","currWsStatus","setCurrWsStatus","wsStatusShowInfo","onElse","alertConfig","iconRender","PieChartOutlined","Chatroom_System","Employee_System","Member_System","TeamOutlined","CustomerService_System","Operating_System","SettingOutlined","Message_System","MailOutlined","Report_System","LineChartOutlined","Surveillance_System","EyeOutlined","menuItemRender","Sidebar","setCollapsed","redPointRender","openKeys","setOpenKeys","authMenuRender","SubMenu","Sider","collapsible","breakpoint","onBreakpoint","broken","defaultSelectedKeys","onOpenChange","ContainerNavbar","onCollapse","logoutHandle","setIsStealth","profiledVisible","setProfiledVisible","profiledVisibleHandel","LogoutOutlined","lineHeight","MenuUnfoldOutlined","MenuFoldOutlined","overlay","dotColor","Admin","Navbar","Footer","AdminApp","routing","useRoutes","initRoutes","Root","environment","dsn","integrations","BrowserTracing","tracesSampleRate","release","ignoreErrors","currFolderFiles","getModuleFiles","APIs","allAPI","apiFuncs","ele","defaultAPIName","utc","extend","dateFormat","timeFormat","format","dateArr","endOf","subtractRange","1","subtract","3","4","addRange","add","今天","最近一週","最近一個月","最近三個月","encode","encodeURIComponent","decodeToJson","decodeURIComponent","decode","storageList","errorInfo","businessSystemMsgLog","localStorage","setItem","getItem","removeItem","showBearer","Manager","CustomerService","System","Monitor","Active","Lock","Delete","Direct","Consulting","Invite","Deactivated","Processing","Deposit","Voice","Join","Leave","LastRead","Hi","Geo","Typing","RoomUpdate","UserOnlineInfo","BusinessSystemNotification","Initial","Retract","Edit","UserOrder","AutoReplay","describe","sub_alipay","wxUrl","alipayUrl","bankUrl","ecnyUrl","Pending","Waiting","Canceled","Succeeded","Failed","Denied","Expired","ConsultingOrderTypeKeys","Urging","PENDING","SUCCESS","FAIL","CANCELED","ALL","SINGLE_USER","NumberOutlined","IOS","MobileFilled","Mac","AppleFilled","Android","AndroidFilled","Windows","WindowsOutlined","Other","Input","Radio","Checkbox","Email","Age","QQ","WeChat","Bochat","Spinach","IE","Edge","Firefox","Sogou","Opera","Chrome","Safari","Netscape","UC","CNZZ","Google","Baidu","errorCodes","400001","400003","400106","401001","401002","401003","401004","401005","403000","403001","403002","404001","405001","408001","409000","409001","500000","500001","groupOf3Digital","omitTypename","undefined","object","componentImport","componentName","hasRefreshed","sessionStorage","handleDecode","URL_PARAMS","URL_SEARCH","URL_SEARCH_PARAMS","URLSearchParams","fromEntries","autoContact","contact","realName","reqUrl","depositToken","depositAmount","jobID","showContent","WS_ALERT_MSG_KEY","duration","copyText","clipboard","writeText","CopyBtn","useCopy","createImage","copyMediaToClipboard","pngBlob","write","ClipboardItem","convertToPng","imgBlob","ctx","toBlob","copyImg","extension","MSG_BUBBLE","POST_TEMP_MSG","POST_TYPING","opacity"],"mappings":"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","file":"static/js/main.754a0823.chunk.js","sourcesContent":["export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLBAMAAADKYGfZAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAtUExURUdwTP///////////////////////////////////////////////////////81e3QIAAAAOdFJOUwB+38Sf70AlEGFfUK+QNVP8xAAAAj1JREFUSMedlktLI0EQx9uN5mE8JHoPI4sriEgum2MQHS+CoiA+WBgEYbxJ8API7ML6CYT1oOLRYzx5k4hHQTx6Eh2d9YHUZ7A7Mwnd1Y9prUuY4pea6qr/dBUhguUOp0cg+n5xRgyW3/MgsfETLZX9CZxdaajfEyDYmJIqeADpXLYOko3K2d+Bwm4wtq2iIGyIVL+nxOCXiFVAYyWe6tFR8GAVTAinDyaEOzdgcNyVhWfCVjrYNxMFYZBgd0as04qcmYL/Nu8EeIyxoxQsKd1EGrbaliMXvlwuDyW/g6jCXGoRPXs2SZpzh7gFrOK01g7KeJ0+X3PP1VgGkyhj6s7jEm0BNOJ382co8M/vFMu0C9XLu18JGRDOHjBVUS/Z4b1PuAcllsUzxeZ5b4T+1q5kvSrVvIEk+cZKcYwyZoWqSG3+G0hyuBHKFleyGFeFt0mCro5qrJp57EX6eFEq1SGe6nvrRdgCQY4oUAn6XsSWfb+N7fobJszpfuEZhHk22IJ4Uh3miHVbct1ZdvW47hSqGyokEw0KRa0l3gxJtILrziB9Hdnk1hT1psMapM8CC1H7fvj+Juu8L3bhXdKp8qRU03kvHWPqqqdjLVnPKqwpa0uBhYrZge62zlcpnUE2J21g8XMmk0KFyZRPwZ4/NWXIH5t3Wk9A85xpfnY6W856283Bcg8hRc1h1760I2lacSttZjnF9K2ptkGJW1RvjYgbDtQ7aJGfEVFNv/cedAMu7ZsW5NzpJdui5/4h/wcFIxPy5JFIYAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYBAMAAAA46dFkAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAYUExURaqqqkdwTKqqqqqqqqqqqqqqqqioqKqqqlTelc4AAAAHdFJOU58AAV8w/o8xuW3bAAAAVUlEQVQI12MQZhQEAQbzAgjNXg4WYBAoBwswCEIEGAQhAgyCEAEgDRYA0mABEA0SANFCQAEQLahQHoJMA8UTkdVB9cHMgZoLswdqL8wdMHfB3Al1NwCayBcBUYPdVwAAAABJRU5ErkJggg==\"","import styled from 'styled-components';\r\nimport {\r\n Button as AButton,\r\n Row as ARow,\r\n Col as ACol,\r\n Tag as ATag,\r\n Card as ACard,\r\n Space as ASpace,\r\n Divider as ADivider,\r\n} from 'antd';\r\nimport {\r\n variant,\r\n color,\r\n background,\r\n space,\r\n border,\r\n flexbox,\r\n layout,\r\n position,\r\n typography,\r\n shadow,\r\n} from 'styled-system'; // 定義元件的個別樣式用\r\nconst { theme } = require('@/plugin/theme');\r\n\r\n/**\r\n * 擴充 主題樣式\r\n */\r\nconst MainTheme = [\r\n 'primary',\r\n 'primary-light',\r\n 'secondary',\r\n 'secondary-light',\r\n 'success',\r\n 'warning',\r\n 'danger',\r\n 'info',\r\n];\r\nconst mapObj = (prefix, styleObjFun) => {\r\n return MainTheme.reduce(\r\n // eslint-disable-next-line no-sequences\r\n (acc, cur) => ((acc[`${prefix}${cur}`] = styleObjFun(cur)), acc),\r\n {},\r\n );\r\n};\r\n\r\n// Button\r\nconst btnGeneralObj = val => {\r\n let color = theme.white;\r\n if ('secondary-light' === val) color = val.black;\r\n return {\r\n color,\r\n bg: theme[val],\r\n borderColor: theme[val],\r\n };\r\n};\r\nconst btnOutlineObj = val => ({\r\n color: theme[val],\r\n bg: theme.white,\r\n borderColor: theme[val],\r\n});\r\nconst AButtonVariant = styled(AButton)(\r\n variant({\r\n variants: {\r\n ...mapObj('', btnGeneralObj),\r\n ...mapObj('outline-', btnOutlineObj),\r\n },\r\n }),\r\n);\r\nconst Button = styled(AButtonVariant)`\r\n ${color}\r\n ${space}\r\n ${background}\r\n ${border}\r\n`;\r\n\r\n// Tags\r\nconst tagGeneralObj = val => ({\r\n color: val.white,\r\n bg: theme[val],\r\n borderColor: theme[val],\r\n});\r\nconst tagOutlineObj = val => ({\r\n color: theme[val],\r\n borderColor: theme[val],\r\n bg: theme[`${val}-light`],\r\n});\r\nconst ATagVariant = styled(ATag)(\r\n variant({\r\n variants: {\r\n ...mapObj('', tagGeneralObj),\r\n ...mapObj('outline-', tagOutlineObj),\r\n },\r\n }),\r\n);\r\nconst Tag = styled(ATagVariant)`\r\n ${border}\r\n`;\r\n\r\n// Card\r\nconst cardGeneralObj = val => ({\r\n color: val.white,\r\n bg: theme[val],\r\n borderColor: theme[val],\r\n});\r\n\r\nconst ACardVariant = styled(ACard)(\r\n variant({\r\n variants: {\r\n ...mapObj('', cardGeneralObj),\r\n shadow: {\r\n 'box-shadow': `0px 0px 4px 0px rgb(71 95 123 / 20%)`,\r\n },\r\n 'shadow-lg': {\r\n 'box-shadow': `0px 0px 24px 0px rgb(71 95 123 / 20%)`,\r\n },\r\n },\r\n }),\r\n);\r\nconst Card = styled(ACardVariant)`\r\n ${border}\r\n ${space}\r\n ${color}\r\n`;\r\n\r\n/**\r\n * 擴充 其他\r\n */\r\nconst Space = styled(ASpace)`\r\n ${space}\r\n ${flexbox}\r\n`;\r\nconst Row = styled(ARow)`\r\n ${space}\r\n ${layout}\r\n ${flexbox}\r\n`;\r\nconst Col = styled(ACol)`\r\n ${space}\r\n ${layout}\r\n ${flexbox}\r\n`;\r\nconst Divider = styled(ADivider)`\r\n ${space}\r\n`;\r\n\r\nconst Box = styled.div`\r\n box-sizing: border-box;\r\n ${space}\r\n ${layout}\r\n ${flexbox}\r\n ${position}\r\n ${border}\r\n ${background}\r\n ${typography}\r\n ${shadow}\r\n ${({ color, bgColor, borderCr, theme }) => {\r\n return `\r\n ${bgColor ? `background-color: ${theme[bgColor] || bgColor};` : ''}\r\n ${color ? `color: ${theme[color] || color};` : ''}\r\n ${borderCr ? `border-color: ${theme[borderCr] || borderCr};` : ''}\r\n `;\r\n }}\r\n`;\r\n\r\nexport { Button, Row, Col, Space, Tag, Divider, Card, Box };\r\n","var map = {\n\t\"./CSRoom.js\": 1564,\n\t\"./Client.js\": 1565,\n\t\"./Fragment.js\": 69,\n\t\"./adTracking.js\": 1566,\n\t\"./canned.js\": 1567,\n\t\"./csForm.js\": 1568,\n\t\"./csRoomClientSetting.js\": 1569,\n\t\"./customer.js\": 1570,\n\t\"./faq.js\": 1571,\n\t\"./greeting.js\": 1572,\n\t\"./groupRoom.js\": 1573,\n\t\"./hotsDenys.js\": 1574,\n\t\"./index.js\": 401,\n\t\"./login.js\": 1575,\n\t\"./menuList.js\": 451,\n\t\"./message.js\": 803,\n\t\"./monitor.js\": 1576,\n\t\"./origin.js\": 1577,\n\t\"./others.js\": 1578,\n\t\"./platformSetting.js\": 1579,\n\t\"./pushNotification.js\": 1580,\n\t\"./read.js\": 1581,\n\t\"./report.js\": 1582,\n\t\"./role.js\": 1583,\n\t\"./room.js\": 1584,\n\t\"./setting.js\": 1585,\n\t\"./tags.js\": 1586,\n\t\"./user.js\": 1587\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1563;","import { gql } from '@apollo/client';\nimport {\n COMMENT_USER_ROOMS,\n CS_DETAIL_FIELD_LESS,\n CS_DETAIL_FIELD,\n} from './Fragment';\n\n/**\n * 諮詢室 相關\n * - 諮詢室列表\n * - 封存諮詢室列表\n * - 我的諮詢室列表\n * - 諮詢室\n * - 加入諮詢室\n * - 主動聯繫\n * - 諮詢室報表下載\n */\n\n// 諮詢室列表\nexport const LIST_CS_ROOM = gql`\n ${CS_DETAIL_FIELD_LESS}\n ${COMMENT_USER_ROOMS}\n query listConsultingRoom(\n $filter: ConsultingRoomFilterInput\n $pagination: PaginationInput\n ) {\n listConsultingRoom(filter: $filter, pagination: $pagination) {\n consultingRooms {\n ...consultingDetailLessField\n userRooms {\n ...userRoomsFields\n }\n }\n meta {\n total\n }\n }\n }\n`;\n\n// 我的諮詢室\nexport const LIST_MY_CS_ROOM = gql`\n ${CS_DETAIL_FIELD_LESS}\n ${COMMENT_USER_ROOMS}\n query listUserRoom($userID: Uint64!, $pagination: PaginationInput) {\n # 我的聊天室\n listUserRoom(\n filter: {\n userRoom: { userID: $userID, roomType: Consulting }\n roomStatusIn: [Processing]\n }\n pagination: $pagination\n ) {\n userRooms {\n id\n unRead\n lastReadMessageID\n isPinned\n room {\n type\n lastMessage {\n id\n roomID\n contentType\n timestamp\n status\n from {\n userID\n accountType\n username\n aliasName\n }\n text {\n text\n isEncrypt\n }\n }\n consultingDetail {\n ...consultingDetailLessField\n isWaitFirstResponse\n isTimeoutResponse\n }\n }\n userRooms {\n ...userRoomsFields\n }\n }\n meta {\n total\n totalUnRead\n }\n }\n }\n`;\n\n// 主動聯繫\nexport const CREATED_CS_CONTACT = gql`\n mutation createConsultingRoomWithContact(\n $in: ConsultingRoomWithContactCreateInput!\n ) {\n createConsultingRoomWithContact(in: $in) {\n id\n consultingDetail {\n roomID\n }\n }\n }\n`;\n\n// 待諮詢 批量封存\nexport const BATCH_DEACTIVATED_CS_ROOM = gql`\n mutation deactivateConsultingRooms($roomIDs: [Uint64!]!) {\n deactivateConsultingRooms(roomIDs: $roomIDs) {\n id\n uid\n type\n createdAt\n updatedAt\n }\n }\n`;\n\n// 封存諮詢室列表\nexport const LIST_DEACTIVATED_CS_ROOM = gql`\n ${CS_DETAIL_FIELD}\n ${COMMENT_USER_ROOMS}\n query listConsultingRoom(\n $filter: ConsultingRoomFilterInput\n $pagination: PaginationInput\n ) {\n listConsultingRoom(filter: $filter, pagination: $pagination) {\n consultingRooms {\n ...consultingDetailField\n userRooms {\n ...userRoomsFields\n }\n }\n meta {\n total\n }\n }\n }\n`;\n\n/**\n * 加入諮詢室\n */\n// 自己加入\nexport const JOIN_CS_ROOM = gql`\n mutation joinConsultingRoom($roomID: Uint64!) {\n joinConsultingRoom(roomID: $roomID) {\n roomID\n }\n }\n`;\n// 拉人進入聊天室 (可以選擇進房的身份)\nexport const PULL_IN_CS_ROOM = gql`\n mutation pullInConsultingRoom($in: PullInConsultingRoomInput!) {\n pullInConsultingRoom(in: $in) {\n roomID\n }\n }\n`;\n\n/**\n * 諮詢室報表下載\n */\nexport const DOWNLOAD_CS_ROOM_REPORT = gql`\n mutation downloadConsultingRoomReport($filter: ConsultingRoomFilterInput) {\n downloadConsultingRoomReport(filter: $filter)\n }\n`;\n","import { gql } from '@apollo/client';\nimport { MSG_REQUIRED } from './message';\nimport {\n CS_DETAIL_FIELD,\n CS_SETTING_FIELD,\n CS_FORM_FIELD,\n CS_GREETING_FIELD,\n MSG_SYSTEM,\n COMMENT_USER_ROOMS,\n} from './Fragment';\n\n/**\n * client H5 相關\n * - 諮詢房設定 + 詢前表單\n * - 諮詢房設定 + 詢前表單 + 房間資訊\n * - 行銷問候語 + FAQ depth 1\n * - 建立諮詢室\n * - 房間資訊 + 房間訊息\n */\n\n// 諮詢房設定 + 詢前表單\nexport const GET_CS_ROOM_SETTING_AND_FORM = gql`\n ${CS_SETTING_FIELD}\n ${CS_FORM_FIELD}\n query csRoomSettingAndForm {\n listConsultingRoomQuestion {\n consultingRoomQuestions {\n id\n question\n maxProcessingCount\n createdAt\n }\n }\n getConsultingRoomClientSetting(filter: { isClient: true }) {\n ...CSSetting\n }\n getConsultingRoomForm(filter: { isClient: true }) {\n ...CSForm\n }\n }\n`;\n\n// 行銷問候語 + FAQ depth 1\nexport const GET_GREETING_AND_FAQ = gql`\n ${CS_GREETING_FIELD}\n query greetingAndFaq($source: String) {\n listConsultingGreeting(\n filter: { consultingGreeting: { isEnabled: Yes }, isClient: true }\n ) {\n ConsultingGreetings {\n ...CSGreeting\n }\n }\n listFrequentlyQuestion(\n filter: {\n frequentlyQuestion: { depth: 1, source: $source }\n isClient: true\n }\n ) {\n frequentlyQuestions {\n id\n consultingRoomOriginID\n question\n asked\n parentID\n sequence\n source\n depth\n }\n }\n }\n`;\n\n// 房間資訊 + 房間訊息\nexport const GET_ROOM_DETAIL = gql`\n ${CS_DETAIL_FIELD}\n ${COMMENT_USER_ROOMS}\n ${MSG_REQUIRED}\n ${MSG_SYSTEM}\n query getRoomDetail($roomID: Uint64) {\n getRoom(filter: { room: { id: $roomID } }) {\n id\n type\n createdAt\n updatedAt\n consultingDetail {\n ...consultingDetailField\n }\n userRooms {\n ...userRoomsFields\n }\n }\n listMessage(\n filter: { roomID: $roomID }\n pagination: { offsetType: New, limit: 20 }\n ) {\n messages {\n ...messageFields\n text {\n text\n isEncrypt\n }\n file {\n text\n fileURL\n type\n }\n invite {\n id\n type\n inviteeUserIDs\n inviterUserID\n roomID\n }\n join {\n userID\n }\n leave {\n userID\n }\n system {\n ...MsgSystemField\n }\n }\n meta {\n total\n }\n }\n }\n`;\n\n// 建立 一般諮詢室\nexport const CREATED_CS_ROOM = gql`\n mutation createConsultationRoom($in: createConsultationRoomInput) {\n createConsultationRoom(in: $in) {\n room {\n id\n consultingDetail {\n roomID\n ownerUserID\n status\n type\n }\n }\n token\n deviceUID\n }\n }\n`;\n\n// 建立 充值諮詢室\nexport const CREATED_CS_DEPOSIT_ROOM = gql`\n mutation createUserDepositRoom($in: createUserDepositRoomInput) {\n createUserDepositRoom(in: $in) {\n room {\n id\n consultingDetail {\n roomID\n ownerUserID\n status\n type\n }\n }\n token\n deviceUID\n }\n }\n`;\n\n// 代客充值取得密碼及token\nexport const GET_WEB_DEPOSIT_TOKEN = gql`\n query getWebToken($token: String) {\n getWebToken(token: $token) {\n code\n }\n }\n`;\n\n// 查詢可支付渠道\nexport const listPaymentChannel = gql`\n query listPaymentChannel($in: ListPaymentChannelInput!) {\n listPaymentChannel(in: $in) {\n channels {\n payeeID\n alias\n name\n payType\n payMethod\n account\n bank\n bankCode\n subBank\n amount\n }\n }\n }\n`;\n\n// 生成訂單\nexport const deposit = gql`\n mutation deposit($in: DepositInput!) {\n deposit(in: $in) {\n payType\n payMethod\n orderID\n orderNo\n amount\n currency\n expiredAt\n bank {\n bankName\n branchName\n bankCode\n accountName\n cardNo\n }\n qrcode {\n url\n qUrl\n }\n redirect {\n url\n }\n }\n }\n`;\n\n// 過期訂單\nexport const expireDeposit = gql`\n mutation expireDeposit($in: ExpireDepositInput!) {\n expireDeposit(in: $in) {\n Result\n }\n }\n`;\n\n// 取消訂單\nexport const cancelDeposit = gql`\n mutation cancelDeposit($in: CancelDepositInput!) {\n cancelDeposit(in: $in) {\n Result\n }\n }\n`;\n\n// 審核訂單\nexport const paidDeposit = gql`\n mutation paidDeposit($in: PaidDepositInput!) {\n paidDeposit(in: $in) {\n Result\n }\n }\n`;\n\n// 諮詢/催單\nexport const consultingOrder = gql`\n mutation consultingOrder($in: ConsultingOrderInput!) {\n consultingOrder(in: $in) {\n orderNo\n amount\n payType\n currency\n createdAt\n status\n }\n }\n`;\n\n// 訂單列表\nexport const listOrder = gql`\n query listOrder($pagination: PaginationInput!, $in: ListOrderInput!) {\n listOrder(pagination: $pagination, in: $in) {\n meta {\n total\n page\n perPage\n totalPage\n }\n orders {\n orderNo\n amount\n payType\n currency\n createdAt\n status\n }\n }\n }\n`;\n\n// 訂單列表 棄用\nexport const listPendingOrder = gql`\n query listPendingOrder($pagination: PaginationInput!) {\n listPendingOrder(pagination: $pagination) {\n meta {\n total\n page\n perPage\n totalPage\n }\n orders {\n orderNo\n amount\n payType\n currency\n createdAt\n status\n }\n }\n }\n`;\n\nexport const FAQ_COUNT = gql`\n mutation addFrequentlyQuestionClick($roomID: Uint64!) {\n addFrequentlyQuestionClick(roomID: $roomID) {\n faqCount\n result\n }\n }\n`;\n","import { gql } from '@apollo/client';\n\nexport const AD_TRACKING_FIELD = gql`\n fragment adTrackingField on AdTracking {\n id\n consultingRoomOriginID\n origin\n adTrackingType\n adTrackingCode\n createdAt\n updatedAt\n }\n`;\n\n/**\n * 廣告代碼\n */\nexport const LIST_AD_TRACKING = gql`\n ${AD_TRACKING_FIELD}\n query listAdTracking(\n $filter: AdTrackingFilterInput\n $pagination: PaginationInput\n ) {\n listAdTracking(filter: $filter, pagination: $pagination) {\n adTrackings {\n ...adTrackingField\n }\n meta {\n total\n }\n }\n }\n`;\n\nexport const GET_AD_TRACKING = gql`\n ${AD_TRACKING_FIELD}\n query getAdTracking($filter: AdTrackingFilterInput!) {\n getAdTracking(filter: $filter) {\n ...adTrackingField\n }\n }\n`;\n\nexport const CREATE_AD_TRACKING = gql`\n ${AD_TRACKING_FIELD}\n mutation createAdTracking($in: AdTrackingCreateInput!) {\n createAdTracking(in: $in) {\n ...adTrackingField\n }\n }\n`;\n\nexport const UPDATE_AD_TRACKING = gql`\n ${AD_TRACKING_FIELD}\n mutation updateAdTracking(\n $filter: AdTrackingFilterInput!\n $in: AdTrackingUpdateInput!\n ) {\n updateAdTracking(filter: $filter, in: $in) {\n ...adTrackingField\n }\n }\n`;\n\nexport const DELETE_AD_TRACKING = gql`\n mutation deleteAdTracking($filter: AdTrackingFilterInput!) {\n deleteAdTracking(filter: $filter)\n }\n`;\n","import { gql } from '@apollo/client';\n/**\n * 罐頭回覆\n */\nexport const LIST_CANNED = gql`\n query listCanned(\n $resCatList: CannedResponseCategoryFilterInput\n $resList: CannedResponseFilterInput\n ) {\n listCannedResponseCategory(filter: $resCatList) {\n cannedResponseCategories {\n id\n name\n createdAt\n }\n }\n listCannedResponse(filter: $resList) {\n cannedResponses {\n id\n categoryID\n text\n createdAt\n }\n }\n }\n`;\nexport const CREATE_CANNED_RES_CAT = gql`\n mutation createCannedResponseCategory(\n $in: CannedResponseCategoryCreateInput!\n ) {\n createCannedResponseCategory(in: $in) {\n id\n name\n createdAt\n }\n }\n`;\nexport const UPDATE_CANNED_RES_CAT = gql`\n mutation updateCannedResponseCategory(\n $filter: CannedResponseCategoryFilterInput!\n $in: CannedResponseCategoryUpdateInput!\n ) {\n updateCannedResponseCategory(filter: $filter, in: $in) {\n id\n name\n createdAt\n }\n }\n`;\nexport const DELETE_CANNED_RES_CAT = gql`\n mutation deleteCannedResponseCategory(\n $filter: CannedResponseCategoryFilterInput!\n ) {\n deleteCannedResponseCategory(filter: $filter)\n }\n`;\n\n// 新增罐頭類別內容\nexport const CREATE_CANNED_RES = gql`\n mutation createCannedResponse($in: CannedResponseCreateInput!) {\n createCannedResponse(in: $in) {\n id\n categoryID\n text\n createdAt\n }\n }\n`;\nexport const UPDATE_CANNED_RES = gql`\n mutation updateCannedResponse(\n $filter: CannedResponseFilterInput!\n $in: CannedResponseUpdateInput!\n ) {\n updateCannedResponse(filter: $filter, in: $in) {\n id\n categoryID\n text\n createdAt\n }\n }\n`;\nexport const DELETE_CANNED_RES = gql`\n mutation deleteCannedResponse($filter: CannedResponseFilterInput!) {\n deleteCannedResponse(filter: $filter)\n }\n`;\n","import { gql } from '@apollo/client';\nimport { CS_FORM_FIELD } from './Fragment';\n/**\n * 詢前表單\n */\nexport const GET_CS_FORM = gql`\n ${CS_FORM_FIELD}\n query getConsultingRoomForm($filter: ConsultingRoomFormFilterInput!) {\n getConsultingRoomForm(filter: $filter) {\n ...CSForm\n }\n }\n`;\nexport const CREATE_CS_FORM = gql`\n ${CS_FORM_FIELD}\n mutation createConsultingRoomForm($in: ConsultingRoomFormCreateInput!) {\n createConsultingRoomForm(in: $in) {\n ...CSForm\n }\n }\n`;\nexport const UPDATE_CS_FORM = gql`\n ${CS_FORM_FIELD}\n mutation updateConsultingRoomForm(\n $filter: ConsultingRoomFormFilterInput!\n $in: ConsultingRoomFormUpdateInput!\n ) {\n updateConsultingRoomForm(filter: $filter, in: $in) {\n ...CSForm\n }\n }\n`;\nexport const DELETE_CS_FORM = gql`\n ${CS_FORM_FIELD}\n mutation deleteConsultingRoomForm($filter: ConsultingRoomFormFilterInput!) {\n deleteConsultingRoomForm(filter: $filter) {\n ...CSForm\n }\n }\n`;\n","import { gql } from '@apollo/client';\nimport { CS_SETTING_FIELD } from './Fragment';\n\n/**\n * 諮詢窗口管理\n */\nexport const GET_CS_ROOM_SETTING = gql`\n ${CS_SETTING_FIELD}\n query getConsultingRoomClientSetting(\n $filter: ConsultingRoomClientSettingFilterInput!\n ) {\n getConsultingRoomClientSetting(filter: $filter) {\n ...CSSetting\n }\n }\n`;\nexport const LIST_CS_ROOM_SETTING = gql`\n ${CS_SETTING_FIELD}\n query listConsultingRoomClientSetting(\n $filter: ConsultingRoomClientSettingFilterInput\n ) {\n listConsultingRoomClientSetting(filter: $filter) {\n consultingRoomClientSettings {\n ...CSSetting\n }\n }\n }\n`;\nexport const CREATE_CS_ROOM_SETTING = gql`\n ${CS_SETTING_FIELD}\n mutation createConsultingRoomClientSetting(\n $in: ConsultingRoomClientSettingCreateInput!\n ) {\n createConsultingRoomClientSetting(in: $in) {\n ...CSSetting\n }\n }\n`;\nexport const UPDATE_CS_ROOM_SETTING = gql`\n ${CS_SETTING_FIELD}\n mutation updateConsultingRoomClientSetting(\n $filter: ConsultingRoomClientSettingFilterInput!\n $in: ConsultingRoomClientSettingUpdateInput!\n ) {\n updateConsultingRoomClientSetting(filter: $filter, in: $in) {\n ...CSSetting\n }\n }\n`;\n","import { gql } from '@apollo/client';\n\n/**\n * 聯繫人客服\n */\n\n// 列表\nexport const LIST_CONTACT_CUS_SVS = gql`\n query listContactCustomerService(\n $filter: ContactCustomerServiceFilterInput\n $pagination: PaginationInput\n ) {\n listContactCustomerService(filter: $filter, pagination: $pagination) {\n contactCustomerServices {\n id\n name\n avatarURL\n isDisplayEnabled\n createdAt\n updatedAt\n }\n meta {\n total\n }\n }\n }\n`;\n\n// 明細\nexport const GET_CONTACT_CUS_SVS = gql`\n query listContactCustomerService($filter: ContactCustomerServiceFilterInput) {\n listContactCustomerService(filter: $filter) {\n id\n name\n avatarURL\n isDisplayEnabled\n createdAt\n updatedAt\n }\n }\n`;\n\n// 新增\nexport const CREATED_CONTACT_CUS_SVS = gql`\n mutation createContactCustomerService(\n $in: ContactCustomerServiceCreateInput!\n ) {\n createContactCustomerService(in: $in) {\n id\n name\n avatarURL\n isDisplayEnabled\n createdAt\n createdAt\n }\n }\n`;\n\n// 更新\nexport const UPDATE_CONTACT_CUS_SVS = gql`\n mutation updateContactCustomerService(\n $filter: ContactCustomerServiceFilterInput!\n $in: ContactCustomerServiceUpdateInput!\n ) {\n updateContactCustomerService(filter: $filter, in: $in) {\n id\n name\n avatarURL\n isDisplayEnabled\n createdAt\n createdAt\n }\n }\n`;\n\n// 刪除\nexport const DELETE_CONTACT_CUS_SVS = gql`\n mutation deleteContactCustomerService(\n $filter: ContactCustomerServiceFilterInput!\n ) {\n deleteContactCustomerService(filter: $filter)\n }\n`;\n","import { gql } from '@apollo/client';\n\n/**\n * FAQ\n */\nexport const LIST_FAQ_KEYS = gql`\n query listFrequentlyQuestion($filter: FrequentlyQuestionFilterInput!) {\n listFrequentlyQuestion(filter: $filter) {\n frequentlyQuestions {\n id\n question\n parentID\n depth\n }\n }\n }\n`;\nexport const LIST_FAQ_DETAIL = gql`\n query listFrequentlyQuestion($filter: FrequentlyQuestionFilterInput!) {\n listFrequentlyQuestion(filter: $filter) {\n frequentlyQuestions {\n id\n consultingRoomOriginID\n question\n asked\n parentID\n sequence\n source\n depth\n createdAt\n updatedAt\n isEnabled\n }\n meta {\n total\n }\n }\n }\n`;\nexport const CREATE_FAQ = gql`\n mutation createFrequentlyQuestion($in: FrequentlyQuestionCreateInput!) {\n createFrequentlyQuestion(in: $in)\n }\n`;\nexport const UPDATE_FAQ = gql`\n mutation updateFrequentlyQuestion(\n $filter: FrequentlyQuestionFilterInput!\n $in: FrequentlyQuestionUpdateInput!\n ) {\n updateFrequentlyQuestion(filter: $filter, in: $in)\n }\n`;\nexport const DELETE_FAQ = gql`\n mutation deleteFrequentlyQuestion($filter: FrequentlyQuestionFilterInput!) {\n deleteFrequentlyQuestion(filter: $filter)\n }\n`;\n","import { gql } from '@apollo/client';\nimport { CS_GREETING_FIELD } from './Fragment';\n\n/**\n * 行銷問候語設定\n */\nexport const LIST_CS_GREETING = gql`\n ${CS_GREETING_FIELD}\n query listConsultingGreeting($filter: ConsultingGreetingFilterInput) {\n listConsultingGreeting(filter: $filter) {\n ConsultingGreetings {\n ...CSGreeting\n }\n }\n }\n`;\nexport const CREATE_CS_GREETING = gql`\n ${CS_GREETING_FIELD}\n mutation createConsultingGreeting($in: ConsultingGreetingCreateInput!) {\n createConsultingGreeting(in: $in) {\n ...CSGreeting\n }\n }\n`;\nexport const UPDATE_CS_GREETING = gql`\n ${CS_GREETING_FIELD}\n mutation updateConsultingGreeting(\n $filter: ConsultingGreetingFilterInput!\n $in: ConsultingGreetingUpdateInput!\n ) {\n updateConsultingGreeting(filter: $filter, in: $in) {\n ...CSGreeting\n }\n }\n`;\nexport const DELETE_CS_GREETING = gql`\n mutation deleteConsultingGreeting($filter: ConsultingGreetingFilterInput!) {\n deleteConsultingGreeting(filter: $filter)\n }\n`;\n","import { gql } from '@apollo/client';\nimport { COMMENT_USER_ROOMS } from './Fragment';\n\n// 群組列表\nexport const LIST_GROUP_ROOM = gql`\n ${COMMENT_USER_ROOMS}\n query listGroupRoom(\n $filter: GroupRoomFilterInput!\n $pagination: PaginationInput\n ) {\n listGroupRoom(filter: $filter, pagination: $pagination) {\n groupRooms {\n roomID\n imageURL\n name\n isPublic\n inviteLevel # 加入的層級\n strangerLevel # 陌生人的等級\n strangerPassword\n ownerUserID\n createdAt\n userRooms {\n ...userRoomsFields\n }\n }\n meta {\n total\n }\n }\n }\n`;\n\n// 建立 群組聊天室\nexport const CREATE_GROUP = gql`\n mutation createGroup($in: GroupCreateInput!) {\n createGroup(in: $in) {\n id\n uid\n type\n createdAt\n updatedAt\n }\n }\n`;\n","import { gql } from '@apollo/client';\n\nexport const HOSTS_DENY_FIELD = gql`\n fragment hostsDenyField on HostsDeny {\n id\n ipAddress\n isEnabled\n remark\n createdAt\n createUserID\n updatedAt\n updateUserID\n }\n`;\n\n/**\n * 行銷問候語設定\n */\nexport const LIST_HOSTS_DENY = gql`\n ${HOSTS_DENY_FIELD}\n query listHostsDeny(\n $filter: HostsDenyFilterInput\n $pagination: PaginationInput\n ) {\n listHostsDeny(filter: $filter, pagination: $pagination) {\n hostsDenys {\n ...hostsDenyField\n }\n meta {\n total\n }\n }\n }\n`;\n\nexport const CREATE_HOSTS_DENY = gql`\n ${HOSTS_DENY_FIELD}\n mutation createHostsDeny($in: HostsDenyCreateInput!) {\n createHostsDeny(in: $in) {\n ...hostsDenyField\n }\n }\n`;\n\nexport const UPDATE_HOSTS_DENY = gql`\n ${HOSTS_DENY_FIELD}\n mutation updateHostsDeny(\n $filter: HostsDenyFilterInput!\n $in: HostsDenyUpdateInput!\n ) {\n updateHostsDeny(filter: $filter, in: $in) {\n ...hostsDenyField\n }\n }\n`;\n\nexport const DELETE_HOSTS_DENY = gql`\n mutation deleteHostsDeny($filter: HostsDenyFilterInput!) {\n deleteHostsDeny(filter: $filter)\n }\n`;\n","import { gql } from '@apollo/client';\nimport { COMMENT_MENU } from './menuList';\n\n// 登入\nexport const POST_LOGIN = gql`\n mutation login($username: String!, $password: String!) {\n Login(in: { username: $username, password: $password }) {\n token\n deviceUID\n userAgent\n }\n }\n`;\n\n// 登出\nexport const POST_LOGOUT = gql`\n mutation Logout {\n Logout\n }\n`;\n\n// user login 資訊\nexport const LIST_USER_LOGIN_INFO = gql`\n query listUserLoginHistory(\n $filter: UserLoginHistoryFilterInput!\n $pagination: PaginationInput\n ) {\n listUserLoginHistory(filter: $filter, pagination: $pagination) {\n userLoginHistories {\n id\n userID\n ipAddress\n country\n administrativeArea\n deviceOS\n createdAt\n }\n meta {\n total\n }\n }\n }\n`;\n\n// 取得個人資料 以及 可見的 menu\nexport const GET_ME = gql`\n ${COMMENT_MENU}\n query Me {\n Me {\n id\n spinachUserID\n accountType\n status\n username\n aliasName\n avatarURL\n isOnline\n isStealth\n devices {\n id\n userID\n deviceUID\n isBind\n createdAt\n updatedAt\n }\n whitelists {\n id\n userID\n ipAddress\n createdAt\n }\n setting {\n id\n allowLoginStartAt\n allowLoginEndAt\n }\n menu {\n ...menuFields\n next {\n ...menuFields\n next {\n ...menuFields\n }\n }\n }\n }\n }\n`;\n","import { gql } from '@apollo/client';\n\n// 諮詢室列表\nexport const LIST_MONITOR_CS_ROOM = gql`\n query listConsultingRoom(\n $filter: ConsultingRoomFilterInput\n $pagination: PaginationInput\n ) {\n listConsultingRoom(filter: $filter, pagination: $pagination) {\n consultingRooms {\n roomID\n merchantID\n ipAddress\n country\n administrativeArea\n accessDomain\n ownerUserID\n status\n createdAt\n userRooms {\n id\n userID\n deletedAt # 用來判斷是否已離開房間 重新加入會 = 0\n lastReadMessageID\n isPinned\n user {\n id\n username\n aliasName\n avatarURL\n accountType\n status\n isOnline\n }\n }\n }\n }\n }\n`;\n","/**\n * 域名管理\n * - 訪問域名\n * - spinach平台管理\n * - 商戶管理\n * */\nimport { gql } from '@apollo/client';\nimport { CS_ORIGIN_FIELD, SPINACH_FIELD } from './Fragment';\n\nexport const LIST_CS_ROOM_ORIGIN = gql`\n ${CS_ORIGIN_FIELD}\n query listConsultingRoomOrigin(\n $filter: ConsultingRoomOriginFilterInput\n $pagination: PaginationInput\n ) {\n listConsultingRoomOrigin(filter: $filter, pagination: $pagination) {\n consultingRoomOrigins {\n ...CSRoomOrigin\n }\n meta {\n total\n }\n }\n }\n`;\n\nexport const CREATE_CS_ROOM_ORIGIN = gql`\n ${CS_ORIGIN_FIELD}\n mutation createConsultingRoomOrigin($in: ConsultingRoomOriginCreateInput!) {\n createConsultingRoomOrigin(in: $in) {\n ...CSRoomOrigin\n }\n }\n`;\n\nexport const UPDATE_CS_ROOM_ORIGIN = gql`\n ${CS_ORIGIN_FIELD}\n mutation updateConsultingRoomOrigin(\n $filter: ConsultingRoomOriginFilterInput!\n $in: ConsultingRoomOriginUpdateInput!\n ) {\n updateConsultingRoomOrigin(filter: $filter, in: $in) {\n ...CSRoomOrigin\n }\n }\n`;\n\nexport const DELETE_CS_ROOM_ORIGIN = gql`\n mutation deleteConsultingRoomOrigin(\n $filter: ConsultingRoomOriginFilterInput!\n ) {\n deleteConsultingRoomOrigin(filter: $filter)\n }\n`;\n\n/**\n * 平台管理\n * */\n// spinach 平台列表\nexport const LIST_SPINACH_PLATFORM = gql`\n ${SPINACH_FIELD}\n query listSpinachPlatform(\n $filter: SpinachPlatformFilterInput\n $pagination: PaginationInput\n ) {\n listSpinachPlatform(filter: $filter, pagination: $pagination) {\n spinachPlatforms {\n ...spinachPlatform\n }\n meta {\n total\n }\n }\n }\n`;\n\n// SpinachPlatform 平台 key\nexport const CREATE_SPINACH_PLATFORM = gql`\n ${SPINACH_FIELD}\n mutation createSpinachPlatform($in: SpinachPlatformCreateInput!) {\n createSpinachPlatform(in: $in) {\n ...spinachPlatform\n }\n }\n`;\n\nexport const UPDATE_SPINACH_PLATFORM = gql`\n ${SPINACH_FIELD}\n mutation updateSpinachPlatform(\n $filter: SpinachPlatformFilterInput!\n $in: SpinachPlatformUpdateInput!\n ) {\n updateSpinachPlatform(filter: $filter, in: $in) {\n ...spinachPlatform\n }\n }\n`;\n\nexport const DELETE_SPINACH_PLATFORM = gql`\n mutation deleteSpinachPlatform($filter: SpinachPlatformFilterInput!) {\n deleteSpinachPlatform(filter: $filter)\n }\n`;\n\n/**\n * 商戶管理\n */\nexport const MERCHANT_FIELDS = gql`\n fragment merchantFields on Merchant {\n id\n name\n merchantType\n key\n host\n secretKey\n remark\n createdAt\n createUserID\n updatedAt\n updateUserID\n endpoints {\n paymentChannel\n deposit\n cancelDeposit\n queryOrder\n paidDeposit\n expireDeposit\n }\n }\n`;\n\nexport const LIST_MERCHANT = gql`\n ${MERCHANT_FIELDS}\n query listMerchant(\n $filter: MerchantFilterInput!\n $pagination: PaginationInput\n ) {\n listMerchant(filter: $filter, pagination: $pagination) {\n merchants {\n ...merchantFields\n }\n meta {\n total\n }\n }\n }\n`;\n\nexport const CREATE_MERCHANT = gql`\n ${MERCHANT_FIELDS}\n mutation createMerchant($in: MerchantCreateInput!) {\n createMerchant(in: $in) {\n ...merchantFields\n }\n }\n`;\n\nexport const UPDATE_MERCHANT = gql`\n ${MERCHANT_FIELDS}\n mutation updateMerchant(\n $filter: MerchantFilterInput!\n $in: MerchantUpdateInput!\n ) {\n updateMerchant(filter: $filter, in: $in) {\n ...merchantFields\n }\n }\n`;\n\nexport const DELETE_MERCHANT = gql`\n mutation deleteMerchant($filter: MerchantFilterInput!) {\n deleteMerchant(filter: $filter)\n }\n`;\n","/**\n * 上傳圖片\n */\nimport { gql } from '@apollo/client';\n\nexport const CREATED_UPLOAD_URL = gql`\n mutation createUploadURL($in: CreateUploadURLInput!) {\n createUploadURL(in: $in) {\n files {\n fileName\n uploadURL\n }\n }\n }\n`;\n\nexport const NEW_CREATE_UPLOAD = gql`\n mutation NewCreateUpload($in: Upload) {\n newCreateUpload(in: $in)\n }\n`;\n\n/**\n * 客服系統紅點\n * 有待諮詢 & 我的諮詢單\n */\nexport const GET_RED_POINT = gql`\n query redPointInfo($userID: Uint64) {\n listUserRoom(\n filter: {\n userRoom: { roomType: Consulting, userID: $userID }\n roomStatusIn: [Processing]\n }\n ) {\n # TODO total 有問題 先用 userRooms 自己算\n userRooms {\n id\n }\n meta {\n total\n totalUnRead\n }\n }\n # listConsultingRoom(filter: { statusIn: Active }) {\n # meta {\n # total\n # }\n # }\n }\n`;\n","import { gql } from '@apollo/client';\n\n/**\n * 後台設定\n */\nexport const LIST_PLATFORM_SETTING = gql`\n query listPlatformSetting($filter: PlatformSettingFilterInput) {\n listPlatformSetting(filter: $filter) {\n PlatformSettings {\n key\n value\n displayName\n sequence\n isDisplayWeb\n }\n }\n }\n`;\nexport const GET_PLATFORM_SETTING = gql`\n query getPlatformSetting($filter: PlatformSettingFilterInput) {\n getPlatformSetting(filter: $filter) {\n key\n value\n updaterUserID\n updatedAt\n }\n }\n`;\nexport const UPDATE_PLATFORM_SETTING = gql`\n mutation updatePlatformSetting(\n $filter: PlatformSettingFilterInput!\n $in: PlatformSettingUpdateInput!\n ) {\n updatePlatformSetting(filter: $filter, in: $in) {\n key\n value\n updaterUserID\n updatedAt\n }\n }\n`;\n\n/**\n * 更多資訊管理\n */\nexport const LIST_PLATFORM_MORE_INFO = gql`\n query listPlatformMoreInformation($filter: MoreInformationFilterInput) {\n listPlatformMoreInformation(filter: $filter) {\n moreInformation {\n title\n type\n content\n isEnabled\n }\n }\n }\n`;\nexport const UPDATE_PLATFORM_MORE_INFO = gql`\n mutation updatePlatformMoreInformation(\n $in: PlatformMoreInformationUpdateInput!\n ) {\n updatePlatformMoreInformation(in: $in) {\n moreInformation {\n title\n type\n content\n isEnabled\n }\n }\n }\n`;\n\n/**\n * 諮詢排隊問題列表\n */\nexport const LIST_CS_QUEUE_QUS = gql`\n query listConsultingRoomQuestion($filter: ConsultingRoomQuestionFilterInput) {\n listConsultingRoomQuestion(filter: $filter) {\n consultingRoomQuestions {\n id\n question\n maxProcessingCount\n createdAt\n }\n }\n }\n`;\n\nexport const CREATED_CS_QUEUE_QUS = gql`\n mutation createConsultingRoomQuestion(\n $in: ConsultingRoomQuestionCreateInput!\n ) {\n createConsultingRoomQuestion(in: $in) {\n id\n question\n maxProcessingCount\n createdAt\n }\n }\n`;\n\nexport const UPDATE_CS_QUEUE_QUS = gql`\n mutation updateConsultingRoomQuestion(\n $filter: ConsultingRoomQuestionFilterInput!\n $in: ConsultingRoomQuestionUpdateInput!\n ) {\n updateConsultingRoomQuestion(filter: $filter, in: $in) {\n id\n question\n maxProcessingCount\n createdAt\n }\n }\n`;\n\nexport const DELETE_CS_QUEUE_QUS = gql`\n mutation deleteConsultingRoomQuestion(\n $filter: ConsultingRoomQuestionFilterInput!\n ) {\n deleteConsultingRoomQuestion(filter: $filter)\n }\n`;\n","/**\n * 推送相關\n */\nimport { gql } from '@apollo/client';\n\nexport const LIST_PUSH = gql`\n query listPushNotification(\n $filter: PushNotificationFilterInput!\n $pagination: PaginationInput\n ) {\n listPushNotification(filter: $filter, pagination: $pagination) {\n pushNotifications {\n id\n createdAt\n title\n content\n target\n isScheduled\n scheduledTime\n status\n }\n meta {\n total\n }\n }\n }\n`;\n\nexport const CREATE_PUSH = gql`\n mutation createPushNotification($in: PushNotificationCreateInput!) {\n createPushNotification(in: $in)\n }\n`;\nexport const CANCEL_PUSH = gql`\n mutation cancelPushNotification($filter: PushNotificationFilterInput!) {\n cancelPushNotification(filter: $filter)\n }\n`;\n","import { gql } from '@apollo/client';\n\n// 更新目前進入的房間的未讀訊息\nexport const UPDATE_IN_ROOM = gql`\n mutation updateInRoomID($roomID: Uint64!) {\n updateInRoomID(roomID: $roomID)\n }\n`;\n\n// 更新最後在聊天室讀取的訊息\nexport const UPDATE_LAST_READ_MSG = gql`\n mutation updateLastReadMessageID($roomID: Uint64!, $messageID: String!) {\n updateLastReadMessageID(roomID: $roomID, messageID: $messageID)\n }\n`;\n","/**\n * 報表系統\n */\n\nimport { gql } from '@apollo/client';\n\n/**\n * 會員統計報表\n * */\nexport const REPORT_COMMON_USER = gql`\n query reportCommonUser(\n $baseFilter: BaseFilterInput\n $pagination: PaginationInput\n ) {\n # 使用者每日統計\n listUserDailySummary(\n filter: { baseFilter: $baseFilter }\n pagination: $pagination\n ) {\n userDailySummaries {\n date\n registerCountOfCommonUser # 會員註冊數\n onlineCountOfCommonUser # 會員在線數\n createdAt\n }\n meta {\n registerCountTotalOfCommonUser # 會員註冊數總數\n onlineCountTotalOfCommonUser # 會員在線數\n total\n }\n }\n # 房間每日統計\n listRoomDailySummary(filter: { baseFilter: $baseFilter }) {\n roomDailySummaries {\n date\n createdAt\n createGroupCount # 群組創建數\n }\n meta {\n createGroupCountTotal # 創建群組總數\n total\n }\n }\n }\n`;\n\n/**\n * 諮詢房統計\n */\nexport const REPORT_CONSULTING_ROOM = gql`\n query listConsultationRoomSummary($filter: RoomSummaryFilterInput!) {\n listConsultationRoomSummary(filter: $filter) {\n consultationRoomSummaries {\n date\n countOfCommonUser\n countOfTouristUser\n }\n }\n }\n`;\n\n/**\n * 客服統計報表\n * */\nexport const REPORT_CONSULTING_ROOM_SERVICE = gql`\n query reportConsultingRoom($filter: RoomDailySummaryFilterInput!) {\n # 房間每日統計\n listRoomDailySummary(filter: $filter) {\n roomDailySummaries {\n date\n createdAt\n createConsultationCountOfCommonUser # 新增諮詢室會員數量(進線會員)\n createConsultationCountOfTourist #新增諮詢室遊客數量\n createConsultationCount # 創建諮詢室數量\n validConsultationCount # 有效諮詢數\n averageResponseSecond # 平均首次回應時間\n averageConversationSecond # 平均對話時長\n }\n meta {\n createGroupCountTotal # 創建群組總數\n createConsultationCountOfCommonUserTotal # 新增諮詢室會員數量\n createConsultationCountTotal #創建諮詢室數量\n validConsultationCountTotal # 有效諮詢數\n averageResponseSecondTotal # 平均首次回應時長\n averageConversationSecondTotal # 平均對話時長\n total\n }\n }\n }\n`;\n\n/**\n * 客服統計報表 + 各地排行\n * */\nexport const REPORT_CONSULTING_ROOM_SERVICE_AREA = gql`\n query reportConsultingRoom(\n $roomServiceFilter: RoomDailySummaryFilterInput!\n $roomAreaFilter: ConsultingRoomFilterInput!\n ) {\n # 房間每日統計\n listRoomDailySummary(filter: $roomServiceFilter) {\n roomDailySummaries {\n date\n createdAt\n createConsultationCountOfCommonUser # 新增諮詢室會員數量(進線會員)\n createConsultationCountOfTourist #新增諮詢室遊客數量\n createConsultationCount # 創建諮詢室數量\n validConsultationCount # 有效諮詢數\n averageResponseSecond # 平均首次回應時間\n averageConversationSecond # 平均對話時長\n faqCount # FAQ數\n invalidFaqCount # 無效FAQ數\n }\n meta {\n createGroupCountTotal # 創建群組總數\n createConsultationCountOfCommonUserTotal # 新增諮詢室會員數量\n validConsultationCountTotal # 有效諮詢數\n averageResponseSecondTotal # 平均首次回應時長\n averageConversationSecondTotal # 平均對話時長\n total\n }\n }\n # 各地排行\n statisticsConsultationRoomArea(filter: $roomAreaFilter) {\n statistics {\n administrativeArea\n count\n }\n }\n }\n`;\n\n/**\n * 各地排行\n */\nexport const REPORT_STATISTICS_CONSULTING_ROOM_AREA = gql`\n query statisticsConsultationRoomArea($filter: ConsultingRoomFilterInput) {\n statisticsConsultationRoomArea(filter: $filter) {\n statistics {\n administrativeArea\n count\n }\n }\n }\n`;\n\n/**\n * 客服個人報表\n * */\nexport const REPORT_CUSTOMER_SERVICE = gql`\n query listCustomerServiceSummary(\n $filter: CustomerServiceSummaryFilterInput!\n $pagination: PaginationInput\n ) {\n listCustomerServiceSummary(filter: $filter, pagination: $pagination) {\n customerServiceSummaries {\n user {\n id\n username\n }\n firstEntryCount # 首位客服\n entryCount # 進入房間數\n validConsultationCount # 有效諮詢數\n casesClosedCount # 結案數\n averageResponseSecond # 平均回應時長 (秒)\n averageConversationSecond # 平均對話時間 (秒)\n averageResponseByItemSecond # 平均逐條回應時間 (秒)\n loginSecond # 登錄時長\n onlineSecond # 在線時間\n stealthSecond # 隱身時間\n }\n meta {\n total\n }\n }\n }\n`;\n","import { gql } from '@apollo/client';\nimport { COMMENT_MENU } from './menuList';\n/**\n * 員工系統 - 角色列表 Manager\n */\n\n// 角色列表\nexport const LIST_ROLE = gql`\n ${COMMENT_MENU}\n query listRole($filter: RoleFilterInput!, $pagination: PaginationInput) {\n listRole(filter: $filter, pagination: $pagination) {\n meta {\n total\n }\n roles {\n id\n name\n authority {\n ...menuFields\n next {\n ...menuFields\n next {\n ...menuFields\n }\n }\n }\n supportAccountType\n createdAt\n createUserID\n updatedAt\n updateUserID\n }\n meta {\n total\n }\n }\n }\n`;\n\n// 角色明細\nexport const GET_ROLE = gql`\n ${COMMENT_MENU}\n query getRole($filter: RoleFilterInput!) {\n getRole(filter: $filter) {\n id\n name\n authority {\n ...menuFields\n next {\n ...menuFields\n next {\n ...menuFields\n next {\n ...menuFields\n }\n }\n }\n }\n supportAccountType\n createdAt\n createUserID\n updatedAt\n updateUserID\n }\n }\n`;\n\n// 新增角色\nexport const CREATED_ROLE = gql`\n mutation createRole($in: RoleCreateInput!) {\n createRole(in: $in)\n }\n`;\n\n// 更新角色\nexport const UPDATE_ROLE = gql`\n mutation updateRole($filter: RoleFilterInput!, $in: RoleUpdateInput!) {\n updateRole(filter: $filter, in: $in)\n }\n`;\n\n// 刪除角色\nexport const DELETE_ROLE = gql`\n mutation deleteRole($filter: RoleFilterInput!) {\n deleteRole(filter: $filter)\n }\n`;\n\n/**\n * 使用者角色 相關處理\n */\n\n// 組合api (使用者 角色 + 所有角色列表)\nexport const LIST_USER_ROLE = gql`\n query listUserRole(\n $userRoles: UserRoleFilterInput!\n $listRole: RoleFilterInput!\n ) {\n listUserRole(filter: $userRoles) {\n userRoles {\n id\n userID\n roleID\n isAdmin\n createUserID\n updateUserID\n createdAt\n updatedAt\n role {\n id\n name\n supportAccountType\n createdAt\n createUserID\n updatedAt\n updateUserID\n }\n }\n meta {\n total\n }\n }\n # 角色列表\n listRole(filter: $listRole) {\n roles {\n id\n name\n }\n }\n }\n`;\n\n// 使用者 新增角色\nexport const CREATE_USER_ROLE = gql`\n mutation createUserRole($in: UserRoleCreateInput!) {\n createUserRole(in: $in)\n }\n`;\n\n// 使用者 刪除角色\nexport const DELETE_USER_ROLE = gql`\n mutation deleteUserRole($filter: UserRoleFilterInput!) {\n deleteUserRole(filter: $filter)\n }\n`;\n","import { gql } from '@apollo/client';\nimport { COMMENT_USER_ROOMS, CS_DETAIL_FIELD_LESS } from './Fragment';\n\n// 聊天室列表(私聊)\nexport const LIST_DIRECT_ROOM = gql`\n ${COMMENT_USER_ROOMS}\n query listRoom($filter: RoomFilterInput!, $pagination: PaginationInput) {\n listRoom(filter: $filter, pagination: $pagination) {\n rooms {\n id\n uid\n type\n createdAt\n updatedAt\n userRooms {\n ...userRoomsFields\n }\n }\n meta {\n total\n }\n }\n }\n`;\n\n// 更新 聊天室\nexport const UPDATE_ROOM = gql`\n mutation updateRoom($filter: RoomFilterInput!, $in: RoomUpdateInput!) {\n updateRoom(filter: $filter, in: $in) {\n id\n uid\n type\n createdAt\n updatedAt\n }\n }\n`;\n\n// 刪除 聊天室 (*刪除但會繼續連接使用者,除非使用者離開)\nexport const DELETE_ROOM = gql`\n mutation deleteRoom($filter: RoomFilterInput!) {\n deleteRoom(filter: $filter)\n }\n`;\n\nexport const UPDATE_ROOM_REMARK = gql`\n ${CS_DETAIL_FIELD_LESS}\n mutation updateConsultingRoomRemark($in: UpdateConsultingRoomRemarkInput!) {\n updateConsultingRoomRemark(in: $in) {\n ...consultingDetailLessField\n }\n }\n`;\n\n// ----------------------------------------------------------\n\n// 我的聊天室\nexport const MY_ROOM_LIST = gql`\n ${COMMENT_USER_ROOMS}\n query listUserRoom(\n $filter: UserRoomFilterInput!\n $pagination: PaginationInput\n ) {\n # 我的聊天室\n listUserRoom(filter: $filter, pagination: $pagination) {\n userRooms {\n id\n # userID\n # roomID\n isOperator\n lastReadMessageID\n room {\n id\n name\n type\n status\n ipAddress\n country\n administrativeArea\n deviceOS\n isPublic\n ownerUserID\n createdAt\n updatedAt\n }\n userRooms {\n ...userRoomsFields\n }\n user {\n id\n username\n }\n }\n }\n }\n`;\n\n// 我的待加入聊天室\nexport const MY_INVITATION_ROOM_LIST = gql`\n ${COMMENT_USER_ROOMS}\n query listUserInvitation(\n $filter: UserInvitationFilterInput!\n $pagination: PaginationInput\n ) {\n listUserInvitation(filter: $filter, pagination: $pagination) {\n userInvitations {\n id\n type\n inviteeUserID\n inviterUserID\n createdAt\n room {\n id\n name\n type\n isPublic\n ownerUserID\n createdAt\n updatedAt\n userRooms {\n ...userRoomsFields\n }\n }\n }\n }\n }\n`;\n\n// 更新 我的聊天室\nexport const UPDATE_USER_ROOM = gql`\n mutation updateUserRoom(\n $filter: UserRoomFilterInput!\n $in: UserRoomUpdateInput!\n ) {\n updateUserRoom(filter: $filter, in: $in) {\n id\n }\n }\n`;\n\n// ----------------------------------------------------------\n\n// room detail\nexport const GET_ROOM = gql`\n ${COMMENT_USER_ROOMS}\n query getRoom($filter: RoomFilterInput!) {\n getRoom(filter: $filter) {\n id\n type\n createdAt\n updatedAt\n # groupDetail {\n # roomID\n # imageURL\n # name\n # isPublic\n # inviteLevel\n # strangerLevel\n # strangerPassword\n # ownerUserID\n # }\n consultingDetail {\n roomID\n deactivatedAt\n deactivatedUserID\n ipAddress\n country\n administrativeArea\n sourceDomain\n accessDomain\n question\n deviceOS\n ownerUserID\n csUserID\n status\n type\n historyRooms\n remark\n userOrder {\n orderNo\n amount\n payType\n currency\n status\n createdAt\n }\n formData {\n id\n type\n label\n content {\n value\n items {\n label\n value\n }\n }\n rule {\n require\n verifyType\n }\n }\n }\n userRooms {\n ...userRoomsFields\n }\n # userInvitations {\n # id\n # inviteeUserID\n # inviteeUser {\n # ...userRoomFields\n # }\n # inviterUser {\n # ...userRoomFields\n # }\n # }\n }\n }\n`;\n\n// ----------------------------------------------------------\n\n// 接受邀請\nexport const ACCEPT_INVITE = gql`\n mutation acceptInvite($invitationID: Uint64!) {\n acceptInvite(invitationID: $invitationID)\n }\n`;\n\n// 刪除邀請 || 拒絕邀請\nexport const DELETE_INVITE = gql`\n mutation deleteUserInvitation($filter: UserInvitationFilterInput!) {\n deleteUserInvitation(filter: $filter)\n }\n`;\n\n// 邀請XXX進入 群組聊天室\nexport const INVITE_GROUP = gql`\n mutation inviteGroup($in: inviteRoomInput!) {\n inviteGroup(in: $in)\n }\n`;\n\n// 離開 群組聊天室\nexport const LEAVE_GROUP = gql`\n mutation leaveGroup($roomID: Uint64!) {\n leaveGroup(roomID: $roomID)\n }\n`;\n","import { gql } from '@apollo/client';\n\n// 一對一 get\nexport const GET_USER_SETTING = gql`\n query getUserSetting($filter: UserSettingFilterInput!) {\n getUserSetting(filter: $filter) {\n id\n userID\n autoAddFriendEnabled\n allowStrangeMessageEnabled\n createdAt\n updatedAt\n }\n }\n`;\n\nexport const UPDATE_USER_SETTING = gql`\n mutation updateUserSetting(\n $filter: UserSettingFilterInput!\n $in: UserSettingUpdateInput!\n ) {\n updateUserSetting(filter: $filter, in: $in) {\n id\n userID\n autoAddFriendEnabled\n allowStrangeMessageEnabled\n isStealth\n createdAt\n updatedAt\n }\n }\n`;\n","import { gql } from '@apollo/client';\n\n// 標籤列表\nexport const LIST_TAGS = gql`\n query listTag($filter: TagFilterInput!) {\n listTag(filter: $filter) {\n tags {\n id\n name\n RGBHex\n isEnable\n createdAt\n updatedAt\n createUserID\n updateUserID\n }\n meta {\n total\n }\n }\n }\n`;\n\n// 標籤明細\nexport const GET_TAG = gql`\n query getTag($filter: TagFilterInput!) {\n getTag(filter: $filter) {\n id\n name\n RGBHex\n isEnable\n createdAt\n updatedAt\n createUserID\n updateUserID\n }\n }\n`;\n\n// 新增標籤\nexport const CREATE_TAG = gql`\n mutation createTag($in: TagCreateInput!) {\n createTag(in: $in)\n }\n`;\n\n// 更新標籤\nexport const UPDATE_TAG = gql`\n mutation updateTag($filter: TagFilterInput!, $in: TagUpdateInput!) {\n updateTag(filter: $filter, in: $in)\n }\n`;\n\n// 刪除標籤\nexport const DELETE_TAG = gql`\n mutation deleteTag($filter: TagFilterInput!) {\n deleteTag(filter: $filter)\n }\n`;\n","/**\n * user\n * - 白名單管理\n * - 裝置管理\n * - 好友管理\n * */\nimport { gql } from '@apollo/client';\n\nconst USER = gql`\n fragment userFields on User {\n id\n spinachUserID\n spinachPlatformKey\n accountType\n merchantID\n merchantType\n status\n username\n aliasName\n email\n area\n notes\n avatarURL\n authCode\n isDelete\n isOnline\n consultingCount\n createdAt\n updatedAt\n updateUserID\n setting {\n id\n isStealth\n allowLoginStartAt\n allowLoginEndAt\n }\n }\n`;\n\nconst SPINACH_COMMON_USER = gql`\n fragment spinachCommonUserDetailFields on SpinachCommonUserDetail {\n status\n payLevel\n riskControlLevel\n platform\n rechargeTime\n registerAt\n lastLoginAt\n lastLoginIP\n nowLoginIP\n }\n`;\n\nexport const LIST_USER = gql`\n ${USER}\n query listUser($filter: UserFilterInput!, $pagination: PaginationInput) {\n listUser(filter: $filter, pagination: $pagination) {\n users {\n ...userFields\n }\n meta {\n total\n }\n }\n }\n`;\n\n// 邀請 (會員 + 員工) 列表\nexport const INVITE_LIST_USER = gql`\n query listUser(\n $Manager: UserFilterInput!\n $CommonUser: UserFilterInput!\n $pagination: PaginationInput\n ) {\n manager: listUser(filter: $Manager, pagination: $pagination) {\n users {\n id\n accountType\n status\n username\n aliasName\n email\n avatarURL\n authCode\n }\n }\n commonUser: listUser(filter: $CommonUser, pagination: $pagination) {\n users {\n id\n accountType\n status\n username\n aliasName\n email\n avatarURL\n authCode\n }\n }\n }\n`;\n\n// 員工&會員 明細\nexport const GET_USER = gql`\n ${USER}\n ${SPINACH_COMMON_USER}\n query getUser($filter: UserFilterInput!) {\n getUser(filter: $filter) {\n ...userFields\n spinachCommonUserDetail {\n ...spinachCommonUserDetailFields\n }\n }\n }\n`;\n\n// 員工&會員 明細\nexport const GET_USER_SPINACH_INFO = gql`\n ${SPINACH_COMMON_USER}\n query getUser($filter: UserFilterInput!) {\n getUser(filter: $filter) {\n id\n spinachUserID\n spinachPlatformKey\n accountType\n spinachCommonUserDetail {\n ...spinachCommonUserDetailFields\n }\n }\n }\n`;\n\nexport const CREATED_USER = gql`\n ${USER}\n mutation createUser($in: CreateUserReqInput!) {\n createUser(in: $in) {\n user {\n ...userFields\n }\n }\n }\n`;\n\nexport const UPDATE_USER = gql`\n mutation updateUser($filter: UserFilterInput!, $in: UserUpdateInput!) {\n updateUser(filter: $filter, in: $in)\n }\n`;\n\nexport const DELETE_USER = gql`\n mutation deleteUser($filter: UserFilterInput!) {\n deleteUser(filter: $filter)\n }\n`;\n\n/**\n * 白名單管理\n */\nexport const LIST_USER_WHITE = gql`\n query listUserWhitelist($filter: UserWhitelistFilterInput!) {\n listUserWhitelist(filter: $filter) {\n userWhitelists {\n id\n userID\n ipAddress\n createdAt\n }\n meta {\n total\n }\n }\n }\n`;\n\nexport const CREATE_USER_WHITE = gql`\n mutation createUserWhitelist($in: UserWhitelistCreateInput!) {\n createUserWhitelist(in: $in)\n }\n`;\n\nexport const UPDATE_USER_WHITE = gql`\n mutation updateUserWhitelist(\n $filter: UserWhitelistFilterInput!\n $in: UserWhitelistUpdateInput!\n ) {\n updateUserWhitelist(filter: $filter, in: $in)\n }\n`;\n\nexport const DELETE_USER_WHITE = gql`\n mutation deleteUserWhitelist($filter: UserWhitelistFilterInput!) {\n deleteUserWhitelist(filter: $filter)\n }\n`;\n\n/**\n * 裝置管理\n */\nexport const LIST_USER_DEVICE = gql`\n query listUserDevice($filter: UserDeviceFilterInput!) {\n listUserDevice(filter: $filter) {\n userDevices {\n id\n userID\n deviceUID\n isBind\n createdAt\n updatedAt\n }\n meta {\n total\n }\n }\n }\n`;\n\nexport const UPDATE_USER_DEVICE = gql`\n mutation updateUserDevice(\n $filter: UserDeviceFilterInput!\n $in: UserDeviceUpdateInput!\n ) {\n updateUserDevice(filter: $filter, in: $in)\n }\n`;\n\nexport const DELETE_USER_DEVICE = gql`\n mutation deleteUserDevice($filter: UserDeviceFilterInput!) {\n deleteUserDevice(filter: $filter)\n }\n`;\n\n/**\n * 好友管理\n */\nexport const LIST_USER_FRIEND = gql`\n query listUserFriend($filter: UserFriendFilterInput!) {\n listUserFriend(filter: $filter) {\n userFriends {\n id\n userID\n friendUserID\n createdAt\n friend {\n id\n username\n avatarURL\n }\n }\n }\n }\n`;\n\nexport const DELETE_USER_FRIEND = gql`\n mutation deleteUserFriend($filter: UserFriendFilterInput!) {\n deleteUserFriend(filter: $filter)\n }\n`;\n\n/*\n * 更新密碼\n */\nexport const UPDATE_USER_PASS = gql`\n mutation updateUserPassword($in: UserUpdatePasswordInput!) {\n updateUserPassword(in: $in)\n }\n`;\n","/**\n * 主題\n */\nconst theme = {\n primary: '#6993FF',\n 'primary-light': '#D8E3FF',\n secondary: '#93B4D4',\n 'secondary-light': '#e3f2ff',\n success: '#2AC5BD',\n 'success-light': '#B7F5F2',\n warning: '#FBA801',\n 'warning-light': '#FFF1D5',\n danger: '#F64E60',\n 'danger-light': '#FCC7CD',\n white: '#fff',\n black: '#475F7B',\n 'gray-0': '#F7F9FB',\n 'gray-1': '#EEF3F9',\n 'gray-2': '#D5DFEA',\n 'gray-3': '#9AAABD',\n comp: {\n headerHeight: '50px',\n },\n};\n\n/**\n * 覆蓋 antd theme\n */\nconst AntTheme = {\n '@black': theme.black,\n '@primary-color': theme.primary,\n};\n\nmodule.exports = { AntTheme, theme };\n","var map = {\n\t\"./alipay-process.jpg\": 808,\n\t\"./alipay.svg\": 799,\n\t\"./bank.png\": 801,\n\t\"./bubble/icon-money.png\": 1025,\n\t\"./bubble/icon-next.png\": 1026,\n\t\"./cs-avatar.jpg\": 462,\n\t\"./ecnyUrl.svg\": 802,\n\t\"./order.png\": 2047,\n\t\"./proof-example.jpg\": 2048,\n\t\"./usdt.png\": 2049,\n\t\"./user-avatar1.jpg\": 2050,\n\t\"./user-avatar2.jpg\": 2051,\n\t\"./user-avatar3.jpg\": 2052,\n\t\"./user-avatar4.jpg\": 2053,\n\t\"./wx-process.jpg\": 809,\n\t\"./wx.png\": 2054,\n\t\"./wxUrl.svg\": 800\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2046;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF0AAABdBAMAAAA1X3fwAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAtUExURUdwTN6jMd+fMN+jMd6jMt+iMt6jMt6jMd2jMdufMN6jMt2jMd+gMN6jMt6jMq5JYioAAAAOdFJOUwDfIML+n4XvYBBwSjCv1x8zEAAAAwBJREFUWMOlmM9rE0EUx9cEbbaJsIoUBQ3pioqX0lJQvASrEaVIKEhUBEsqgvSSQ/FisaHivXjzJkVPgg3RQw8ioQfBm/gXCCHbprTm/Q3OzG5+zLw3uzP6TsPuZ3fffN+8N2/WcZClvj4+AdCevf/NMbDUVh36tvYpEd/Ow6hNFGJp90MAsnXW4/BngKz9xAqHYK6q4z8DaXMal86DxnbJSY/XdTycppyvgd6WLbwRIiGPcvk4Hk6q/I9YHLo7Mp6BBLsj8z+T+ED6QK6exMPLUX4yEZckcvPJPFwb8scMcNgb8hsmPGwOUjBvxK/0+aNGONy0cweCZsSbuQNwxkKdEYUmTfnbbwQvJUp3ltmMCCgfXZUeqGL3u/wdWT465PcuSRN+QSxlHhWXLz8PSzfPL6Vlfrrv4gKWTkRgSuaFG61I7SwRgRoRxTE2XeLbQZWIViEMyR7xbT6nHBDvSAHc4PyicpNdHFejIkQrinmn1DRlAh1X+QPON4J1qmr0xNSUROX8u4BP4wgqQ0QlEaKle5Gsyr0CviY8z+yHs8DvwmX5D18RXqiSym8iySLld+g8XcDfDJcoWpyh/SJ4qOrz2qOS19PntecQeXcY4lni1nVHX2jSRvyB7/tR2fP9RjK/P1rnN/6fz1vxniU/7fxWxalUKg9FmWSDIuYXqQbDoRZ/uH5UyYJSqXRLx7PkbhH6X47kR/qz9T9lM1+2a4/Z8F1cH2L5Hq4/sfw8TtIO2yWuiF2TDdRg3iWyIujryQZUJtUs4lWlipKeF0Uvbc53RN9pzoumzK0b8x7ef8MSzZZy5YGuML013d+jlsy2fzDq3kbrXsuw/+mfA9Jm/O6gf6sb8cOeu2Hljn3/6RbNu7d/6Z9N+vMVqf//btf/O5my3fnC9vyS1HOfReevWIk6+EToPrU73zkZvUer5Pn0QtncG2GvNJFt6g7MS6SUy/p/CUtlG5zZa/WBzsf4/w8XT0lPTDSTfljktp4Pnlh7b/JHJLd9jx0w2ucefSFu/gVSC9vZz8PzHgAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/proof-example.c19a54c7.jpg\";","export default __webpack_public_path__ + \"static/media/usdt.f31b6180.png\";","export default \"data:image/jpeg;base64,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\"","export default \"data:image/jpeg;base64,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\"","export default __webpack_public_path__ + \"static/media/user-avatar3.025418b7.jpg\";","export default \"data:image/jpeg;base64,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\"","export default \"data:image/png;base64,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\"","var map = {\n\t\"./icon-money.png\": 1025,\n\t\"./icon-next.png\": 1026\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2091;","import { filterSubDomain } from '@/utils';\nconst currDomain = () => {\n return ['localhost', 'bochat.dev.web'].includes(document.domain)\n ? 'dev.api'\n : document.domain;\n};\n\nconst fullDomain = () => {\n return ['localhost', 'bochat.dev.web'].includes(window.location.host)\n ? 'dev.api'\n : window.location.host;\n};\n\n// 愈發測試用\n// const MAIN_DOMAIN = 'iyes.dev'; // 只保留一級域名\nconst MAIN_DOMAIN = filterSubDomain(currDomain()); // 只保留一級域名\n\nexport const IS_CLIENT = process.env.REACT_APP_NAME === 'CLIENT';\nexport const IS_MOBILE = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); // P判斷是PC , Mobile ?\n\n\n\n// client\nexport const CLIENT_API_DOMAIN = process.env.REACT_APP_DOMAIN_ENABLE?`https://${fullDomain()}/bgql`:process.env.REACT_APP_NEW_DOMAIN?`https://${process.env.REACT_APP_NEW_DOMAIN}/bgql`:`${process.env.REACT_APP_API_URL_PREFIX}${MAIN_DOMAIN}`;\nexport const CLIENT_API_URL = process.env.REACT_APP_DOMAIN_ENABLE?`https://${fullDomain()}/bgql${process.env.REACT_APP_API_FILE}`:process.env.REACT_APP_NEW_DOMAIN?`https://${process.env.REACT_APP_NEW_DOMAIN}/bgql${process.env.REACT_APP_API_FILE}`:`${process.env.REACT_APP_API_URL_PREFIX}${MAIN_DOMAIN}${process.env.REACT_APP_API_FILE}`; // 配置的二級域名 + 一級域名\nexport const CLIENT_WS_URL = process.env.REACT_APP_DOMAIN_ENABLE?`wss://${fullDomain()}/bws${process.env.REACT_APP_API_FILE}`:process.env.REACT_APP_NEW_DOMAIN?`wss://${process.env.REACT_APP_NEW_DOMAIN}/bws${process.env.REACT_APP_API_FILE}`:`${process.env.REACT_APP_WS_URL_PREFIX}${MAIN_DOMAIN}${process.env.REACT_APP_API_FILE}`; // 配置的二級域名 + 一級域名\n// admin\nexport const ADMIN_API_URL = `${process.env.REACT_APP_API_ORIGIN}${process.env.REACT_APP_API_FILE}`;\nexport const ADMIN_WS_URL = `${process.env.REACT_APP_WS_ORIGIN}${process.env.REACT_APP_API_FILE}`;\n\n// connect\nexport const HTTP_URI = IS_CLIENT ? CLIENT_API_URL : ADMIN_API_URL;\nexport const WS_URI = IS_CLIENT ? CLIENT_WS_URL : ADMIN_WS_URL;\n\n// api\nexport const API_JUMP_URL = process.env.REACT_APP_DOMAIN_ENABLE?`https://${fullDomain()}/bj/apis/v1/cs_url`:process.env.REACT_APP_NEW_DOMAIN?`https://${process.env.REACT_APP_NEW_DOMAIN}/bj/apis/v1/cs_url`:`${process.env.REACT_APP_API_URL_PREFIX}${MAIN_DOMAIN}/bj/apis/v1/cs_url`;\n\n// other\n","import * as Sentry from '@sentry/react';\nimport { BrowserTracing } from '@sentry/tracing';\n\n/**\n * level >> ['log', 'info', 'warn', 'error', 'debug', 'assert']\n * https://github.com/getsentry/sentry-electron/issues/90#issuecomment-425552746\n */\n\nexport const initSentry = () => {\n Sentry.init({\n environment: process.env.REACT_APP_SENTRY_ENV,\n dsn: 'https://8745fa511f0443989c38589ae0dd8e0e@o28588.ingest.sentry.io/5860240',\n integrations: [new BrowserTracing()],\n tracesSampleRate: 1.0,\n release: process.env.REACT_APP_VERSION,\n ignoreErrors: [\n 'ReferenceError',\n 'window.bannerNight',\n 'Failed to fetch',\n 'ResizeObserver loop',\n 'fullwide',\n 'Loading chunk',\n ],\n });\n};\n\nexport const sentryCaptureErr = (\n errorTitle = '',\n extraObj = { details: 'This is some extra information' },\n level = 'error',\n) => {\n Sentry.withScope(scope => {\n Object.keys(extraObj).forEach(key => {\n scope.setExtra(key, extraObj[key]);\n });\n scope.setLevel(level);\n Sentry.captureMessage(errorTitle);\n });\n};\n\nexport const testErrorBtn = () => {\n const throwMessage = () => {\n Sentry.captureMessage('[TEST] This is a log5 message', 'log');\n // Sentry.captureMessage('this is a info message', 'info');\n // Sentry.captureMessage('this is a warn message', 'warn');\n // Sentry.captureMessage('this is a error message', 'error');\n // Sentry.captureMessage('this is a debug message', 'debug');\n // Sentry.captureMessage('this is a assert message', 'assert');\n };\n\n return ;\n};\n","import { createSlice } from '@reduxjs/toolkit';\nimport { getStorage, setStorage } from '@/utils';\n\n/**\n * 存放權限相關\n * meInfo = {}\n * authRoutesInfo = [] // server 取得可看見的權限清單\n */\n\nconst authStorageKey = {\n meInfo: 'meInfo',\n authRoutesInfo: 'authRoutesInfo',\n authRoutesKey: 'authRoutesKey',\n};\n\nconst initialState = {\n meInfo: getStorage(authStorageKey.meInfo) || {},\n authRoutesInfo: getStorage(authStorageKey.authRoutesInfo) || [],\n authRoutesKey: getStorage(authStorageKey.authRoutesKey) || [],\n};\n\nexport const authSlice = createSlice({\n name: 'auth',\n initialState,\n reducers: {\n setMeInfo: (state, { payload }) => {\n setStorage(authStorageKey.meInfo, payload);\n state.meInfo = payload;\n },\n\n setAuthRoutesInfo: (state, { payload }) => {\n setStorage(authStorageKey.authRoutesInfo, payload);\n state.authRoutesInfo = payload;\n },\n\n setAuthRoutesKey: (state, { payload }) => {\n setStorage(authStorageKey.authRoutesKey, payload);\n state.authRoutesKey = payload;\n },\n\n // 移除暫存在 redux auth.js 裡面的內容\n resetAuth: state => {\n setStorage(authStorageKey.meInfo, null);\n setStorage(authStorageKey.authRoutesInfo, null);\n setStorage(authStorageKey.authRoutesKey, null);\n state.meInfo = {};\n state.authRoutesInfo = [];\n state.authRoutesKey = [];\n },\n },\n});\n\nexport const { setMeInfo, setAuthRoutesInfo, setAuthRoutesKey, resetAuth } =\n authSlice.actions;\nexport default authSlice.reducer;\n","import { createSlice } from '@reduxjs/toolkit';\nimport { getStorage, setStorage } from '@/utils';\n\n/**\n * 存放全局相關\n */\n\nconst globalStorageKey = {\n loginInfo: 'loginInfo',\n errorInfo: 'errorInfo',\n};\n\nconst initialState = {\n isLogin: getStorage(globalStorageKey.loginInfo)?.token ? true : false,\n loginInfo: getStorage(globalStorageKey.loginInfo) || {},\n loading: false,\n menuList: [],\n // controller\n visibleDrawer: { name: '', visible: false },\n beepEnabled: false,\n beepAudioSrc: '',\n};\n\nexport const globalSlice = createSlice({\n name: 'global',\n initialState,\n reducers: {\n setIsLogin: (state, { payload }) => {\n state.isLogin = payload;\n },\n\n setLoginInfo: (state, { payload }) => {\n setStorage(globalStorageKey.loginInfo, payload);\n state.loginInfo = payload;\n },\n\n setLogout: state => {\n // 保留 deviceUID\n const deviceUID = getStorage(globalStorageKey.loginInfo)?.deviceUID || '';\n const storage = deviceUID ? { deviceUID } : null;\n setStorage(globalStorageKey.loginInfo, storage);\n state.isLogin = false;\n },\n\n setGLoading: (state, { payload }) => {\n state.loading = payload;\n },\n\n setMenuList: (state, { payload }) => {\n state.menuList = payload;\n },\n\n setVisibleDrawer: (state, { payload }) => {\n state.visibleDrawer = payload;\n },\n setBeepEnabled: (state, { payload }) => {\n state.beepEnabled = payload;\n },\n setBeepAudioSrc: (state, { payload }) => {\n state.beepAudioSrc = payload;\n },\n },\n});\n\nexport const {\n setIsLogin,\n setLoginInfo,\n setLogout,\n setGLoading,\n setMenuList,\n setVisibleDrawer,\n setBeepEnabled,\n setBeepAudioSrc,\n} = globalSlice.actions;\nexport default globalSlice.reducer;\n","import { useState, useCallback } from 'react';\r\nimport { useQuery, useMutation } from '@apollo/client';\r\nimport apiType, { defaultOptions } from '@/services';\r\nimport { getToken, getDeviceId, isFunction } from '@/utils';\r\n\r\n/**\r\n * 不主動呼叫 , refetch 不會改變內建 loading 狀態\r\n * onCompleted bug > https://github.com/apollographql/react-apollo/issues/3943\r\n * @param {*} gql\r\n * @returns\r\n */\r\nconst useQueryApi = (gql, options = {}) => {\r\n if (!gql) throw new Error('gql is required');\r\n const [loading, setLoading] = useState(false);\r\n const { refetch } = useQuery(gql, {\r\n skip: true,\r\n ...options,\r\n context: { ...defaultOptions, ...options.context },\r\n });\r\n const fetchData = useCallback(\r\n async variables => {\r\n try {\r\n setLoading(true);\r\n const { data, errors: error } = await refetch(variables);\r\n options?.onSuccess && options.onSuccess(data);\r\n return { data, error };\r\n } catch (error) {\r\n // console.log('useQueryApi err message: ', JSON.stringify(error));\r\n options?.onError && options.onError(error);\r\n return { data: null, error };\r\n } finally {\r\n setLoading(false);\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [refetch],\r\n );\r\n return { fetchData, loading };\r\n};\r\n\r\n/**\r\n * @param {*} gql apiType ( can use apiType to find )\r\n * @param {*} isShowGeneralError 是否要走通用error彈窗\r\n * @param {*} callback 要自訂error callback的話用這個\r\n */\r\nconst useMutationApi = (gql, options = {}, callback = {}) => {\r\n if (!gql) throw new Error('gql is required');\r\n const {\r\n onSuccess = () => {},\r\n onError = () => {},\r\n context,\r\n ..._options\r\n } = options;\r\n const [mutate, result] = useMutation(gql, {\r\n skip: true,\r\n ..._options,\r\n context: { ...defaultOptions, ...context },\r\n });\r\n\r\n const mutateWrap = useCallback(\r\n async variables => {\r\n try {\r\n const res = await mutate({ variables });\r\n if (res.errors) throw new Error(res.errors);\r\n onSuccess(res, { ...variables });\r\n return [null, res];\r\n } catch (errors) {\r\n // 檢查自定義 callback\r\n const { message } = errors;\r\n if (isFunction(callback[message])) callback[message]();\r\n onError(errors);\r\n return [errors, null];\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [mutate],\r\n );\r\n return [mutateWrap, result];\r\n};\r\n\r\nconst useFetch = () => {\r\n const token = getToken(true);\r\n const deviceUID = getDeviceId();\r\n const [loading, setLoading] = useState(false);\r\n\r\n const fetchApi = useCallback(\r\n async (\r\n url,\r\n {\r\n cusHeaders = null,\r\n headers = {},\r\n method = 'GET',\r\n body = null,\r\n resType = 'json',\r\n } = {},\r\n ) => {\r\n setLoading(true);\r\n try {\r\n const response = await fetch(url, {\r\n cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached\r\n method,\r\n body,\r\n headers: cusHeaders || {\r\n 'X-Device-ID': deviceUID,\r\n Authorization: token,\r\n ...headers,\r\n },\r\n });\r\n if (response.status !== 200) {\r\n const errorJson = await response.json();\r\n return { error: errorJson };\r\n }\r\n const returnType = {\r\n blob: res => res.blob(),\r\n json: res => res.json(),\r\n };\r\n return {\r\n data: returnType[resType]\r\n ? await returnType[resType](response)\r\n : response,\r\n };\r\n } catch (error) {\r\n console.log('getFetch error', error);\r\n return { error };\r\n } finally {\r\n setLoading(false);\r\n }\r\n },\r\n [deviceUID, token],\r\n );\r\n\r\n return { fetchApi, loading };\r\n};\r\n\r\nexport { useQueryApi, useMutationApi, apiType, useFetch };\r\n","import { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { resetAuth } from '@/store/auth';\nimport { setIsLogin, setLogout, setGLoading } from '@/store/global';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport { removeStorage } from '@/utils';\n\nconst useLogout = () => {\n const dispatch = useDispatch();\n\n /**\n * 登出\n */\n const [logoutFetch] = useMutationApi(apiType.POST_LOGOUT);\n const fetchLogout = useCallback(async () => {\n dispatch(setGLoading(true));\n const [err] = await logoutFetch();\n if (err) return [err, null];\n\n // 登出成功處理\n dispatch(setLogout());\n dispatch(resetAuth());\n dispatch(setGLoading(false));\n dispatch(setIsLogin(false));\n removeStorage('businessSystemMsgLog');\n }, [dispatch, logoutFetch]);\n\n return { fetchLogout };\n};\n\n// 專給 apollo 登出使用\nexport const useLogoutProcess = () => {\n const dispatch = useDispatch();\n const logoutProcess = useCallback(() => {\n dispatch(setLogout());\n dispatch(resetAuth());\n dispatch(setGLoading(false));\n dispatch(setIsLogin(false));\n removeStorage('businessSystemMsgLog');\n }, [dispatch]);\n return { logoutProcess };\n};\n\nexport default useLogout;\n","import { SubscriptionClient } from 'subscriptions-transport-ws'; // 使用 subscription\nimport { WebSocketLink } from '@apollo/client/link/ws';\nimport { WS_URI } from '@/const';\n// import { sentryCaptureErr } from './sentry';\n\n// 執行 close\nconst originalClose = SubscriptionClient.prototype.close;\nSubscriptionClient.prototype.close = function close(...args) {\n if (this.client) {\n this.client.onopen = null;\n this.client.onclose = null;\n this.client.onerror = null;\n this.client.onmessage = null;\n }\n originalClose.apply(this, args);\n};\nexport const wsClient = new SubscriptionClient(WS_URI, {\n reconnect: true,\n});\nexport const wsLink = new WebSocketLink(wsClient);\n\nexport const wsStatusHandle = (callback = () => {}) => {\n wsClient.onError(error => {\n callback({ status: 'onError' });\n // sentryCaptureErr(error);\n wsClient.client &&\n (wsClient.client.onclose = function (e) {\n callback({\n status: 'onClose',\n data: { code: e.code || '', reason: e.reason },\n });\n // sentryCaptureErr('ws onClose', { code: e.code || '', reason: e.reason });\n });\n });\n\n wsClient.onConnecting(e => {\n console.log('onConnecting', e);\n callback({ status: 'onConnecting', data: e });\n });\n wsClient.onConnected(e => {\n console.log('onConnected', e);\n callback({ status: 'onConnected', data: e });\n });\n wsClient.onReconnecting(e => {\n console.log('onReconnecting', e);\n callback({ status: 'onReconnecting', data: e });\n });\n wsClient.onReconnected(e => {\n console.log('onReconnected', e);\n callback({ status: 'onReconnected', data: e });\n });\n wsClient.onDisconnected(e => {\n console.log('onDisconnected', e);\n callback({ status: 'onDisconnected', data: e });\n });\n};\n","import {\n ApolloClient,\n ApolloLink,\n InMemoryCache,\n split,\n from,\n} from '@apollo/client';\nimport { getMainDefinition } from '@apollo/client/utilities';\nimport { onError as ErrorLink } from '@apollo/client/link/error';\nimport { ApolloProvider } from '@apollo/client/react';\nimport { createUploadLink } from 'apollo-upload-client'; // 使用graph上傳資料\nimport { IS_CLIENT, HTTP_URI } from '@/const';\nimport { sentryCaptureErr } from '@/plugin/sentry';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport { useLogoutProcess } from '@/hook/useLogout';\nimport {\n getToken,\n getDeviceId,\n isLogoutErrorCode,\n isSendSentryErrorCode,\n getErrorMessage,\n} from '@/utils';\nimport { wsLink } from './ws';\n\n/**\n * authMiddleware\n */\nconst traceID = () => Math.random().toString(36).substring(2, 9);\n\nconst authMiddleware = new ApolloLink((operation, forward) => {\n // 處理 app & client header\n let headers = {};\n headers = {\n Authorization: IS_CLIENT\n ? `${getToken(true, 'clientUserInfo')}`\n : `${getToken(true)}`,\n 'X-Device-ID': IS_CLIENT\n ? `${getDeviceId('clientUserInfo')}`\n : `${getDeviceId()}`,\n 'X-Trace-ID': traceID(),\n };\n operation.setContext({ headers: { ...headers } });\n return forward(operation);\n});\n\n/**\n * http 連線處理\n */\nconst httpLink = createUploadLink({\n uri: HTTP_URI,\n credentials: 'include', // TODO 不確定\n});\n\n// 這裡區分 query 的時候要用哪種模式 wsLink 與 httpLink\n// 由 apollo 提供的 getMainDefinition 去判斷\nconst splitLink = split(\n ({ query }) => {\n const definition = getMainDefinition(query);\n return (\n definition.kind === 'OperationDefinition' &&\n definition.operation === 'subscription'\n );\n },\n wsLink,\n httpLink,\n);\n\n/**\n * 建立連線\n * */\n\nconst createErrorLink = onError => {\n return new ErrorLink(({ graphQLErrors, networkError, operation }) => {\n onError({\n graphQLErrors,\n networkError,\n extras: operation?.getContext(),\n operation,\n });\n });\n};\n\nconst createApolloClient = ({ onError }) => {\n return new ApolloClient({\n link: from([authMiddleware, createErrorLink(onError), splitLink]),\n cache: new InMemoryCache({\n typePolicies: {\n Query: {\n fields: {\n listMenu: {\n merge(existing = [], incoming = []) {\n return incoming;\n },\n },\n authority: {\n merge(existing = [], incoming = []) {\n return incoming;\n },\n },\n },\n },\n MsgInvite: { keyFields: ['inviteeUserIDs'] },\n ListUserRoomResp: { keyFields: ['userRooms'] },\n ConsultingRoomOrigin: { keyFields: ['id', 'customerServices'] },\n RoomConsultingDetail: { keyFields: ['roomID'] },\n },\n }),\n });\n};\n\nconst CusApolloProvider = ({ children, ...props }) => {\n const { onErrorMsg } = useAlertMessage();\n const { logoutProcess } = useLogoutProcess();\n\n const handleApiError = ({\n graphQLErrors,\n networkError,\n operation,\n extras,\n }) => {\n const { operationName, variables } = operation;\n const headers = operation.getContext().headers;\n const { isShowGeneralError = true, getError = () => {} } = extras || {};\n if (graphQLErrors) {\n graphQLErrors.forEach(err => {\n const errCode = err?.message || '';\n console.log('errCode', errCode);\n console.log('variables', variables);\n console.log('operationName', operationName);\n console.log('errStr', JSON.stringify(err || ''));\n\n // 需要登出的錯誤\n if (isLogoutErrorCode(errCode)) logoutProcess();\n // 需要送sentry的錯誤\n if (isSendSentryErrorCode(errCode)) {\n // sentry capture\n sentryCaptureErr(\n `SendSentryErrorCode[${errCode}]-${networkError?.name || ''}`,\n {\n networkError: networkError ? JSON.stringify(networkError) : '',\n graphQLErrors: JSON.stringify(err || ''),\n operationName,\n traceID: headers['X-Trace-ID'],\n variables: JSON.stringify(variables),\n },\n );\n }\n if (isShowGeneralError) onErrorMsg(getErrorMessage(errCode));\n // 將錯誤碼和原來的處理方式傳回使用api的組件\n getError(errCode);\n });\n } else if (networkError) {\n let errorTitle = `${networkError}`;\n // network offline\n if (typeof window !== 'undefined' && !window.navigator.onLine) {\n errorTitle = '网路连线不稳';\n }\n onErrorMsg(errorTitle);\n // sentry capture\n // sentryCaptureErr(\n // `${networkError}-${process.env.REACT_APP_NAME}`,\n // {\n // traceID: headers['X-Trace-ID'],\n // graphQLErrors: JSON.stringify(graphQLErrors || ''),\n // operationName,\n // variables: JSON.stringify(variables),\n // });\n }\n };\n\n const client = createApolloClient({ onError: handleApiError });\n\n return (\n \n {children}\n \n );\n};\n\nexport { CusApolloProvider };\n","import { ThemeProvider } from 'styled-components';\nconst { theme } = require('@/plugin/theme');\n\nconst CusThemeProvider = ({ children, ...props }) => {\n return (\n \n {children}\n \n );\n};\n\nexport { CusThemeProvider };\n","import { createSlice } from '@reduxjs/toolkit';\nimport { removeStorage, setStorage } from '@/utils';\n\nconst initialState = {\n clientUserInfo: {}, // 遊客相關資訊\n isLogin: false,\n isLoading: false,\n gLoading: true,\n csRoomSetting: {},\n csRoomForm: {},\n csRoomQueueList: [],\n renew: false, // 重新拉取房間 msgList\n};\n\nexport const clientSlice = createSlice({\n name: 'client',\n initialState,\n reducers: {\n setClientUserInfo: (state, { payload }) => {\n state.clientUserInfo = payload;\n setStorage('clientUserInfo', payload);\n },\n\n setIsLogin: (state, { payload }) => {\n state.isLogin = payload;\n },\n\n setIsLoading: (state, { payload }) => {\n state.isLoading = payload;\n },\n setGLoading: (state, { payload }) => {\n state.gLoading = payload;\n },\n\n setCSRoomSetting: (state, { payload }) => {\n state.csRoomSetting = payload;\n },\n setCSRoomSettingBeepEnabled: state => {\n state.csRoomSetting = {\n ...state.csRoomSetting,\n beepEnabled: !state.csRoomSetting.beepEnabled,\n };\n },\n setCsRoomForm: (state, { payload }) => {\n state.csRoomForm = payload;\n },\n setCSRoomQueueList: (state, { payload }) => {\n state.csRoomQueueList = payload;\n },\n setRenew: (state, { payload }) => {\n state.renew = payload;\n },\n\n resetClient: state => {\n removeStorage('clientUserInfo');\n state.clientUserInfo = {};\n state.isLogin = false;\n state.isLoading = false;\n state.renew = false;\n },\n },\n});\n\nexport const {\n setClientUserInfo,\n setIsLogin,\n setIsLoading,\n setGLoading,\n setCSRoomSetting,\n setCSRoomSettingBeepEnabled,\n setCsRoomForm,\n setCSRoomQueueList,\n resetClient,\n setRenew,\n} = clientSlice.actions;\nexport default clientSlice.reducer;\n","import { createSlice } from '@reduxjs/toolkit';\n\n/**\n * 房間相關\n */\nconst initialState = {\n currentInRoomID: 0, // 當前打inRoom 的房間\n currentRoomID: 0,\n roomDetail: null,\n roomUsersMap: {},\n\n // 其他\n csTotalUnRead: 0, // 諮詢房未讀訊息總數\n redPoint: {},\n};\n\nexport const roomSlice = createSlice({\n name: 'room',\n initialState,\n reducers: {\n setCurrentInRoomID: (state, { payload }) => {\n state.currentInRoomID = payload;\n },\n setRoomDetail: (state, { payload }) => {\n state.roomDetail = payload;\n state.currentRoomID = payload?.room.roomID || 0;\n },\n setRoomUsersMap: (state, { payload }) => {\n state.roomUsersMap = payload;\n },\n // 其他\n setCsTotalUnRead: (state, { payload }) => {\n state.csTotalUnRead = payload;\n },\n setRedPoint: (state, { payload }) => {\n state.redPoint = payload;\n },\n },\n});\n\nexport const {\n setCurrentInRoomID,\n setRoomDetail,\n setRoomUsersMap,\n setCsTotalUnRead,\n setRedPoint,\n} = roomSlice.actions;\nexport default roomSlice.reducer;\n","import { createSlice } from '@reduxjs/toolkit';\n\n/**\n * 房間訊息相關\n */\nconst initialState = {\n roomMsg: [],\n // roomMsgTotal: 0,\n lastReadID: 0,\n hasMoreMsg: true,\n currPreRoomIdx: 0,\n currPreRoomID: 0,\n};\n\nexport const roomMsgSlice = createSlice({\n name: 'roomMsg',\n initialState,\n reducers: {\n setRoomMsg: (state, { payload }) => {\n state.roomMsg = payload;\n },\n // setRoomMsgTotal: (state, { payload }) => {\n // state.roomMsgTotal = payload;\n // },\n setLastReadID: (state, { payload }) => {\n state.lastReadID = payload;\n },\n setHasMoreMsg: (state, { payload }) => {\n state.hasMoreMsg = payload;\n },\n setCurrPreRoomIdx: (state, { payload }) => {\n state.currPreRoomIdx = payload;\n },\n setCurrPreRoomID: (state, { payload }) => {\n state.currPreRoomID = payload;\n },\n resetRoomMsg: state => {\n state.roomMsg = [];\n state.roomMsgTotal = 0;\n state.lastReadID = 0;\n state.hasMoreMsg = true;\n state.currPreRoomIdx = 0;\n state.currPreRoomID = 0;\n },\n },\n});\n\nexport const {\n setRoomMsg,\n // setRoomMsgTotal,\n setLastReadID,\n setHasMoreMsg,\n setCurrPreRoomIdx,\n setCurrPreRoomID,\n resetRoomMsg,\n} = roomMsgSlice.actions;\nexport default roomMsgSlice.reducer;\n","import { createSlice } from '@reduxjs/toolkit';\n/**\n * 存放 訂閱內容 ws狀態\n */\nconst initialState = {\n recMsg: null,\n wsStatusInfo: { status: '', data: {} },\n};\n\nexport const authSlice = createSlice({\n name: 'subscribe',\n initialState,\n reducers: {\n setRecMsg: (state, { payload }) => {\n // console.log('recMsg===', payload);\n state.recMsg = payload;\n },\n setWsStatusInfo: (state, { payload }) => {\n state.wsStatusInfo = payload;\n },\n },\n});\n\nexport const { setRecMsg, setWsStatusInfo } = authSlice.actions;\nexport default authSlice.reducer;\n","import { configureStore } from '@reduxjs/toolkit';\nimport global from './global';\nimport auth from './auth';\nimport client from './client';\nimport room from './room';\nimport roomMsg from './roomMsg';\nimport subscribe from './subscribe';\n\n// 創建 store\nconst configureAppStore = () => {\n const store = configureStore({\n reducer: {\n global,\n auth,\n client,\n room,\n roomMsg,\n subscribe,\n },\n });\n return store;\n};\n\nconst store = configureAppStore();\nexport default store;\n","import styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { Box } from '@WRAP_COMP';\nimport { Outlet } from 'react-router-dom';\nimport { useEffect } from 'react';\n\nconst BoxWrap = styled(Box)`\n height: 100vh;\n height: calc(var(--vh, 1vh) * 100);\n`;\nfunction CenterLayout({ children }) {\n const handleResize = () => {\n let vh = window.innerHeight * 0.01;\n document\n .getElementById('CenterLayout')\n .style.setProperty('--vh', `${vh}px`);\n };\n\n useEffect(() => {\n handleResize()\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return (\n \n {children || }\n \n );\n}\n\nCenterLayout.propTypes = {\n bg: PropTypes.string,\n pd: PropTypes.string,\n center: PropTypes.bool,\n};\n\nexport default CenterLayout;\n","import React from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { Layout } from 'antd';\nfunction Container() {\n return (\n \n \n \n );\n}\n\nexport default Container;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Alert } from 'antd';\n\n/**\n * 用於表單錯誤\n */\nconst AntAlert = ({ message = '', ...props }) => {\n return (\n <>\n {message && (\n \n )}\n \n );\n};\n\nAntAlert.propTypes = {\n message: PropTypes.string,\n};\n\nexport default AntAlert;\n","import React, { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport { UserOutlined, LockOutlined } from '@ant-design/icons';\nimport { setIsLogin, setLoginInfo } from '@/store/global';\nimport { Input, Button, Typography, Form } from 'antd';\nimport { Card, Space } from '@/plugin/wrap-comp';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport AntAlert from '@/components/Alert';\nimport { getErrorMessage } from '@/utils';\n\nconst Login = () => {\n const { isLogin } = useSelector(({ global }) => global);\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const { onSuccessMsg } = useAlertMessage();\n const [errMsg, setErrMsg] = useState('');\n const [loginForm] = Form.useForm();\n\n // 登入成功處理\n const loginProcess = async ({ Login }) => {\n await dispatch(setLoginInfo(Login));\n await dispatch(setIsLogin(true));\n onSuccessMsg('登入');\n };\n\n // 登入\n const [loginFetch, { loading }] = useMutationApi(apiType.POST_LOGIN, {\n context: { isShowGeneralError: false },\n });\n const onFinish = async fields => {\n ['username', 'password'].forEach(k => (fields[k] = fields[k].trim()));\n const [err, res] = await loginFetch({ ...fields });\n if (!err) {\n loginProcess(res.data || {});\n return;\n }\n err?.message === '403001'\n ? setErrMsg('授权时间到期,请联系窗口')\n : setErrMsg(() => getErrorMessage(err?.message || 0));\n };\n\n useEffect(() => {\n isLogin && navigate('/');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n Bochat Admin\n \n \n Login\n \n
\n \n \n }\n placeholder='輸入帐号'\n />\n \n \n }\n type='password'\n placeholder='输入密码'\n />\n \n \n \n \n \n
\n \n {process.env.REACT_APP_VERSION}\n \n
\n );\n};\n\nexport default Login;\n","import { Result, Button } from 'antd';\nimport useLogin from '@/hook/useLogout';\n\nconst Error403 = () => {\n const { fetchLogout } = useLogin();\n const routerPush = async () => {\n await fetchLogout();\n };\n return (\n \n 回到登入页\n \n }\n />\n );\n};\n\nexport default Error403;\n","import { Result, Button } from 'antd';\n\nconst Error404 = () => {\n return (\n Back Home}\n />\n );\n};\n\nexport default Error404;\n","import { useEffect, useState, useMemo } from 'react';\nimport { useQuery } from '@apollo/client';\nimport apiType from '@/services';\n\nexport const defaultFilter = {\n baseFilter: { sortField: 'id', sortType: 'DESC' },\n};\nexport const defaultPagination = { perPage: 10, page: 1 };\n\n/**\n * 一般表單 主動呼叫 fetchPolicy: 'cache-and-network'\n * @param {} param0\n * @returns\n */\nexport const useActiveList = ({\n api,\n originFilter = {},\n cusFilter = null,\n originPagination = {},\n options = {},\n handleData = null,\n}) => {\n const [searchFilter, setSearchFilter] = useState(() =>\n cusFilter\n ? { ...cusFilter }\n : {\n filter: {\n ...defaultFilter,\n ...originFilter,\n },\n },\n );\n const [pagination, setPagination] = useState(() => ({\n ...defaultPagination,\n ...originPagination,\n }));\n\n const {\n loading,\n error,\n data: originData,\n refetch,\n } = useQuery(apiType[api], {\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true,\n variables: { ...searchFilter, pagination: { ...pagination } },\n ...options,\n });\n\n const handleSearchFilter = filter => {\n setSearchFilter(() =>\n cusFilter ? { ...filter } : { filter: { ...defaultFilter, ...filter } },\n );\n setPagination({ ...defaultPagination, ...originPagination }); // 分頁回到 default\n };\n\n const handleChangePage = p => {\n setPagination({ ...pagination, ...p });\n };\n\n const [refetchLoading, setRefetchLoading] = useState(false);\n const refetchHandle = async params => {\n setRefetchLoading(true);\n const data = await refetch(params);\n setRefetchLoading(false);\n return data;\n };\n\n useEffect(() => {\n error && console.log('useList error >>', JSON.stringify(error));\n }, [error]);\n\n const data = useMemo(() => {\n if (!originData) return {};\n if (!handleData) return originData;\n return handleData(originData);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [originData]);\n\n return {\n error,\n data,\n loading: loading || refetchLoading,\n pagination,\n refetch: refetchHandle,\n handleSearchFilter,\n handleChangePage,\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\nimport { Tooltip } from 'antd';\nconst QnsTooltip = ({ title = '', tip = '' }) => {\n return (\n \n {title}\n \n \n );\n};\n\nQnsTooltip.propTypes = {\n title: PropTypes.string,\n tip: PropTypes.string,\n};\nexport default QnsTooltip;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Box } from '@WRAP_COMP';\nimport { Table as ATable, Card } from 'antd';\n\nconst Table = styled(ATable)`\n .ant-table-thead > tr > th {\n white-space: nowrap;\n }\n .ant-table-tbody > tr > td {\n white-space: nowrap;\n }\n`;\n\nconst DataTable = ({\n rowKey = 'id',\n columns = [],\n dataSource = [],\n pagination = false,\n onChangePage = () => {},\n title = '',\n loading = false,\n children = null,\n rowSelection = null,\n scroll = {},\n footer = null,\n tableProps = {},\n ...props\n}) => {\n const pageHandle = p => ({\n pageSize: p.perPage,\n current: p.page,\n total: p.total,\n showTotal: total => `共 ${total} 条`,\n });\n const onChange = ({ current, pageSize }) => {\n onChangePage({ page: current, perPage: pageSize });\n };\n return (\n \n {children && (\n \n {children}\n \n )}\n \n \n );\n};\n\nDataTable.propTypes = {\n rowKey: PropTypes.string,\n columns: PropTypes.array,\n dataSource: PropTypes.array,\n children: PropTypes.node,\n pagination: PropTypes.object,\n onChangePage: PropTypes.func,\n title: PropTypes.string,\n loading: PropTypes.bool,\n rowSelection: PropTypes.object,\n scroll: PropTypes.object,\n footer: PropTypes.func,\n tableProps: PropTypes.object,\n};\n\nexport default DataTable;\n","import React from 'react';\nimport QnsTooltip from '@/components/QnsTooltip';\nimport DataTable from '@/components/Table/DataTable';\nimport { commaFormat, secondsToHms } from '@/utils';\n\nconst CustomerServiceTable = ({\n dataSource,\n loading,\n pagination,\n onChangePage,\n ...props\n}) => {\n const columns = [\n {\n title: '客服ID',\n dataIndex: 'id',\n key: 'id',\n fixed: 'left',\n },\n {\n title: '客服帐号',\n dataIndex: 'username',\n key: 'username',\n fixed: 'left',\n },\n {\n title: () => ,\n dataIndex: 'firstEntryCount',\n key: 'firstEntryCount',\n render: r => commaFormat(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'entryCount',\n key: 'entryCount',\n render: r => commaFormat(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'validConsultationCount',\n key: 'validConsultationCount',\n render: r => commaFormat(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'casesClosedCount',\n key: 'casesClosedCount',\n render: r => commaFormat(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'averageResponseSecond',\n key: 'averageResponseSecond',\n render: r => secondsToHms(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'averageConversationSecond',\n key: 'averageConversationSecond',\n render: r => secondsToHms(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'averageResponseByItemSecond',\n key: 'averageResponseByItemSecond',\n render: r => secondsToHms(r),\n },\n {\n title: '登录时长',\n dataIndex: 'loginSecond',\n key: 'loginSecond',\n render: r => secondsToHms(r),\n },\n {\n title: '在线时长',\n dataIndex: 'onlineSecond',\n key: 'onlineSecond',\n render: r => secondsToHms(r),\n },\n {\n title: '隐身时长',\n dataIndex: 'stealthSecond',\n key: 'stealthSecond',\n render: r => secondsToHms(r),\n },\n ];\n return (\n \n );\n};\n\nexport default CustomerServiceTable;\n","import React from 'react';\nimport { Column } from '@ant-design/charts';\nimport { Card, Empty, Row, Col, Statistic, Skeleton } from 'antd';\nimport {\n UserAddOutlined,\n SwapOutlined,\n UserSwitchOutlined,\n CommentOutlined,\n} from '@ant-design/icons';\nimport { useActiveList } from '@/hook/useList';\nimport QnsTooltip from '@/components/QnsTooltip';\nimport CustomerServiceTable from '@/components/Table/CSReportTable';\nimport {\n setDateRanges,\n toUnix,\n formatTime,\n secondsToHms,\n AccountTypeKeys,\n} from '@/utils';\n\nconst { theme } = require('@/plugin/theme');\nconst todayDateTime = setDateRanges(0);\nconst defaultTodayFilter = {\n greaterThanEqual: toUnix(todayDateTime.start),\n lessThanEqual: toUnix(todayDateTime.end),\n};\n\nconst consultingRoomServiceOriginFilter = {\n baseFilter: {\n sortField: 'date',\n sortType: 'DESC',\n rangeField: 'date',\n rangeType: 'ByDateTime',\n ...defaultTodayFilter,\n },\n};\nconst customerServiceOriginFilter = {\n baseFilter: {\n sortField: 'id',\n sortType: 'DESC',\n },\n user: { accountType: AccountTypeKeys['CustomerService'] },\n ...defaultTodayFilter,\n};\n\nconst columnItemType = [\n { key: 'countOfCommonUser', alias: '会员咨询' },\n { key: 'countOfTouristUser', alias: '访客咨询' },\n];\n\nconst config = {\n isStack: true,\n xField: 'dateTime',\n yField: 'value',\n seriesField: 'type',\n label: {\n position: 'middle',\n layout: [\n { type: 'interval-adjust-position' },\n { type: 'interval-hide-overlap' },\n { type: 'adjust-color' },\n ],\n },\n};\n\nconst totalDataFields = [\n {\n key: 'createConsultationCountOfCommonUserTotal',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n },\n {\n key: 'createConsultationCountTotal',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n },\n {\n key: 'validConsultationCountTotal',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n },\n {\n key: 'averageResponseSecondTotal',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n formatter: v => secondsToHms(v),\n },\n {\n key: 'averageConversationSecondTotal',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n formatter: v => secondsToHms(v),\n },\n];\n\nconst hourInterval = (() => {\n let hours = [];\n for (let h = 0; h < 24; h++) {\n hours.push(h < 10 ? `0${h}:00` : `${h}:00`);\n }\n return hours;\n})();\n\nconst Dashboard = () => {\n // 圖表 > 今日咨询量与咨询来源\n const {\n data: { columnList = [], isColumnEmpty = true },\n loading: columnLoading,\n error,\n } = useActiveList({\n api: 'REPORT_CONSULTING_ROOM',\n cusFilter: { filter: { ...defaultTodayFilter, intervalSeconds: 3600 } },\n handleData: ({ listConsultationRoomSummary }) => {\n const list = listConsultationRoomSummary.consultationRoomSummaries || [];\n let columnList = [];\n let isColumnEmpty = true;\n hourInterval.forEach(h => {\n const existIdx = list.findIndex(l => formatTime(l.date) === h);\n\n columnItemType.forEach(t => {\n if (existIdx >= 0) {\n isColumnEmpty = false;\n columnList.push({\n dateTime: h,\n type: t.alias,\n value: list[existIdx][t.key],\n });\n } else {\n columnList.push({ dateTime: h, type: t.alias, value: 0 });\n }\n });\n });\n return { columnList, isColumnEmpty };\n },\n });\n\n // 今日客服統計\n const {\n data: { list: totalData = [] },\n loading: roomTotalLoading,\n } = useActiveList({\n api: 'REPORT_CONSULTING_ROOM_SERVICE',\n originFilter: { ...consultingRoomServiceOriginFilter },\n handleData: ({ listRoomDailySummary }) => {\n totalDataFields.forEach(\n el => (el.value = listRoomDailySummary.meta[el.key]),\n );\n return { list: [...totalDataFields] };\n },\n });\n\n // 今日客服個人數據\n const {\n data: { list, total },\n loading: tableLoading,\n pagination,\n handleChangePage,\n } = useActiveList({\n api: 'REPORT_CUSTOMER_SERVICE',\n originFilter: { ...customerServiceOriginFilter },\n handleData: ({ listCustomerServiceSummary }) => {\n const { customerServiceSummaries = [], meta } =\n listCustomerServiceSummary;\n return {\n list: customerServiceSummaries.map(el => ({\n ...el,\n id: el.user.id,\n username: el.user.username,\n })),\n total: meta?.total || 0,\n };\n },\n });\n\n return (\n \n \n \n \n {columnLoading && }\n {columnLoading || (\n <>\n {isColumnEmpty || error ? (\n 暂无数据} />\n ) : (\n \n )}\n \n )}\n \n \n \n \n \n \n {roomTotalLoading && }\n {roomTotalLoading ||\n totalData.map(el => (\n \n ))}\n \n \n \n \n \n \n \n );\n};\n\nexport default Dashboard;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport 'dayjs/locale/zh-cn';\nimport locale from 'antd/es/date-picker/locale/zh_CN';\nimport { DatePicker, Form } from 'antd';\nimport { datePickerRanges } from '@/utils';\n\nconst DateRangePicker = ({\n name = 'date',\n label = '',\n showTime = false,\n isAddDate = false,\n formProps = {},\n ...props\n}) => {\n return (\n \n \n \n );\n};\n\nDateRangePicker.propTypes = {\n label: PropTypes.string,\n showTime: PropTypes.bool,\n};\n\nexport default DateRangePicker;\n","import { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Box } from '@WRAP_COMP';\r\nimport ProForm, {\r\n QueryFilter,\r\n ProFormText,\r\n ProFormSelect,\r\n ProFormDigit,\r\n} from '@ant-design/pro-form';\r\nimport { Spin } from 'antd';\r\nimport { SearchOutlined } from '@ant-design/icons';\r\nimport DateRangePicker from '@/components/DateRangePicker';\r\n\r\n// 物件轉成select 需要的 option 欄位\r\nconst objToSelectOptionArr = (obj = {}) => {\r\n let arr = [];\r\n for (const key in obj) {\r\n arr.push({\r\n value: key,\r\n label: obj[key].searchText,\r\n disabled: !!obj[key].disabled,\r\n });\r\n }\r\n return arr;\r\n};\r\nconst SearchBar = ({\r\n children,\r\n fields,\r\n defaultSearch = {},\r\n onFinish,\r\n loading = false,\r\n ...props\r\n}) => {\r\n const [initialValues] = useState(() => ({ ...defaultSearch }));\r\n const fieldType = {\r\n dateRange: p => ,\r\n text: p => (\r\n \r\n ),\r\n digit: p => (\r\n \r\n ),\r\n select: p => (\r\n \r\n ), // 自定義傳 option\r\n };\r\n return (\r\n <>\r\n \r\n \r\n {\r\n await onFinish({ ...defaultSearch, ...values });\r\n }}\r\n initialValues={initialValues}\r\n submitter={{ submitButtonProps: { icon: } }}\r\n {...props}>\r\n \r\n {fields.map(f => {\r\n return fieldType[f.type] ? fieldType[f.type](f) : null;\r\n })}\r\n \r\n {/* {children} */}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nSearchBar.propTypes = {\r\n // fields: PropTypes.array.isRequired,\r\n defaultSearch: PropTypes.object.isRequired,\r\n onFinish: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default SearchBar;\r\n","/**\n * 會員統計報表\n */\nimport React from 'react';\nimport {\n UserAddOutlined,\n UsergroupAddOutlined,\n UserSwitchOutlined,\n} from '@ant-design/icons';\nimport { Statistic, Card, Skeleton } from 'antd';\nimport { Row, Col } from '@/plugin/wrap-comp';\nimport { useActiveList } from '@/hook/useList';\nimport QnsTooltip from '@/components/QnsTooltip';\nimport SearchBar from '@/components/SearchBar';\nimport DataTable from '@/components/Table/DataTable';\nimport {\n setDateRanges,\n formatSearchDate,\n formatDate,\n commaFormat,\n} from '@/utils';\n\nconst { theme } = require('@/plugin/theme');\nconst defaultDateTime = setDateRanges(2);\nconst defaultSearch = {\n date: [defaultDateTime.start, defaultDateTime.end], // 日期套件要用的預設格式\n};\n\nconst originFilter = {\n baseFilter: {\n sortField: 'date',\n sortType: 'DESC',\n rangeField: 'date',\n rangeType: 'ByDateTime',\n greaterThanEqual: formatSearchDate(defaultSearch.date)[0],\n lessThanEqual: formatSearchDate(defaultSearch.date)[1],\n },\n};\n\nconst searchFields = [{ name: 'date', type: 'dateRange', label: '统计时间' }];\nconst totalDataFields = [\n {\n key: 'registerCountTotalOfCommonUser',\n title: () => ,\n value: 0,\n prefix: () => ,\n },\n {\n key: 'onlineCountTotalOfCommonUser',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n },\n {\n key: 'createGroupCountTotal',\n title: () => ,\n value: 0,\n prefix: () => ,\n },\n];\n\nexport default function ReportCommonUserMgm() {\n const {\n data: { list, total, totalData },\n loading,\n pagination,\n handleSearchFilter,\n handleChangePage,\n } = useActiveList({\n api: 'REPORT_COMMON_USER',\n cusFilter: { ...originFilter },\n handleData: ({\n listUserDailySummary = {}, // 使用者每日統計\n listRoomDailySummary = {}, // 房間每日統計\n }) => {\n const { userDailySummaries, meta: userTotal } = listUserDailySummary;\n const { roomDailySummaries, meta: roomTotal } = listRoomDailySummary;\n const metaData = { ...userTotal, ...roomTotal };\n const list = userDailySummaries.map(el => {\n let obj = { ...el };\n obj.createGroupCount = roomDailySummaries.find(\n r => r.date === obj.date,\n )?.createGroupCount;\n return obj;\n });\n return {\n list,\n total: userTotal?.total || 0,\n totalData: totalDataFields.map(el => {\n el.value = metaData[el.key];\n return el;\n }),\n };\n },\n });\n\n const onFinish = search => {\n handleSearchFilter({\n baseFilter: {\n ...originFilter.baseFilter,\n greaterThanEqual: formatSearchDate(search.date)[0],\n lessThanEqual: formatSearchDate(search.date)[1],\n },\n });\n };\n\n const columns = [\n {\n title: '日期',\n dataIndex: 'date',\n key: 'date',\n fixed: 'left',\n render: c => formatDate(c),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'registerCountOfCommonUser',\n key: 'registerCountOfCommonUser',\n render: r => commaFormat(r),\n },\n {\n title: () => ,\n dataIndex: 'onlineCountOfCommonUser',\n key: 'onlineCountOfCommonUser',\n render: r => commaFormat(r),\n },\n {\n title: () => ,\n dataIndex: 'createGroupCount',\n key: 'createGroupCount',\n render: r => commaFormat(r),\n },\n ];\n\n return (\n <>\n \n\n {/* 統計 */}\n \n {loading && }\n {loading ||\n totalData.map(el => (\n \n \n \n \n \n ))}\n \n\n \n \n );\n}\n","import { useState } from 'react';\nimport { useActiveList } from '@/hook/useList';\n\n/**\n * 商戶管理\n */\nfunction useMerchant({ options = {}, originPagination = {} } = {}) {\n /**\n * 域名搜尋 list\n */\n const [merchantSelectList, setMerchantSelectList] = useState([]);\n const selectListHandle = list => {\n let tempList = [];\n list.forEach(({ id, key, merchantType }) => {\n tempList.push({ value: id, label: key, merchantType });\n });\n setMerchantSelectList(tempList);\n };\n\n /**\n * table list\n */\n const [merchantTableList, setMerchantTableList] = useState([]);\n const [merchantTableTotal, setMerchantTableTotal] = useState(0);\n const { loading, pagination, refetch, handleChangePage } = useActiveList({\n api: 'LIST_MERCHANT',\n originFilter: {},\n originPagination,\n options: {\n onCompleted: ({ listMerchant }) => {\n selectListHandle(listMerchant.merchants || []);\n setMerchantTableList([...(listMerchant.merchants || [])]);\n setMerchantTableTotal(() => listMerchant?.meta?.total || 0);\n },\n ...options,\n },\n });\n\n return {\n loading,\n pagination,\n merchantTableList,\n merchantTableTotal,\n merchantSelectList,\n refetch,\n handleChangePage,\n };\n}\n\nexport default useMerchant;\n","import React from 'react';\nimport DataTable from '@/components/Table/DataTable';\nimport QnsTooltip from '@/components/QnsTooltip';\nimport { formatDate, commaFormat, secondsToHms } from '@/utils';\n\nconst ConsultingRoomTable = ({\n children,\n dataSource,\n loading,\n onChangePage,\n ...props\n}) => {\n const columns = [\n {\n title: '日期',\n dataIndex: 'date',\n key: 'date',\n fixed: 'left',\n render: c => formatDate(c),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'createConsultationCountOfCommonUser',\n key: 'createConsultationCountOfCommonUser',\n render: r => commaFormat(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'createConsultationCountOfTourist',\n key: 'createConsultationCountOfTourist',\n render: r => commaFormat(r),\n },\n {\n title: () => ,\n dataIndex: 'createConsultationCount',\n key: 'createConsultationCount',\n render: r => commaFormat(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'validConsultationCount',\n key: 'validConsultationCount',\n render: r => commaFormat(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'averageResponseSecond',\n key: 'averageResponseSecond',\n render: r => secondsToHms(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'averageConversationSecond',\n key: 'averageConversationSecond',\n render: r => secondsToHms(r),\n },\n {\n title: () => ,\n dataIndex: 'faqCount',\n key: 'faqCount',\n render: r => commaFormat(r),\n },\n {\n title: () => (\n \n ),\n dataIndex: 'invalidFaqCount',\n key: 'invalidFaqCount',\n render: r => commaFormat(r),\n },\n ];\n\n return (\n
\n \n {children}\n \n
\n );\n};\n\nexport default ConsultingRoomTable;\n","/**\n * 客服(諮詢房)統計數據\n */\nimport React, { useMemo } from 'react';\nimport {\n UserAddOutlined,\n SwapOutlined,\n UserSwitchOutlined,\n CommentOutlined,\n} from '@ant-design/icons';\nimport { Statistic, Card, Skeleton } from 'antd';\nimport { Row, Col } from '@/plugin/wrap-comp';\nimport { useActiveList } from '@/hook/useList';\nimport useMerchant from '@/hook/useMerchant';\nimport SearchBar from '@/components/SearchBar';\nimport QnsTooltip from '@/components/QnsTooltip';\nimport { setDateRanges, formatSearchDate, secondsToHms } from '@/utils';\nimport ConsultingRoomTable from '@/components/Table/ConsultingRoomTable';\nimport { Bar } from '@ant-design/charts';\n\nconst { theme } = require('@/plugin/theme');\nconst defaultDateTime = setDateRanges(1);\nconst defaultSearch = {\n date: [defaultDateTime.start, defaultDateTime.end], // 日期套件要用的預設格式\n};\n\nconst roomServiceOriginFilter = {\n roomServiceFilter: {\n baseFilter: {\n sortField: 'date',\n sortType: 'DESC',\n rangeField: 'date',\n rangeType: 'ByDateTime',\n greaterThanEqual: formatSearchDate(defaultSearch.date)[0],\n lessThanEqual: formatSearchDate(defaultSearch.date)[1],\n },\n },\n roomAreaFilter: {\n baseFilter: {\n createdAtGTE: formatSearchDate(defaultSearch.date)[0],\n createdAtLTE: formatSearchDate(defaultSearch.date)[1],\n },\n },\n};\n\nconst config = {\n xField: 'count',\n yField: 'administrativeArea',\n legend: { position: 'top-left' },\n barBackground: { style: { fill: 'rgba(0,0,0,0.1)' } },\n interactions: [\n {\n type: 'active-region',\n enable: false,\n },\n ],\n};\n\nexport default function ReportConsultingRoomMgm() {\n const { merchantSelectList, loading: merchantLoading } = useMerchant({\n options: { fetchPolicy: 'cache-first' },\n });\n const searchFields = useMemo(\n () => [\n { name: 'date', type: 'dateRange', label: '统计时间' },\n {\n name: 'merchantID',\n type: 'select',\n label: '所属商户号',\n options: merchantSelectList.map(({ value, label }) => ({\n value,\n label,\n })),\n },\n ],\n [merchantSelectList],\n );\n\n // 處理總數顯示\n const totalDataFields = [\n {\n key: 'createConsultationCountOfCommonUserTotal',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n },\n {\n key: 'createConsultationCountTotal',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n },\n {\n key: 'validConsultationCountTotal',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n },\n {\n key: 'averageResponseSecondTotal',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n formatter: v => secondsToHms(v),\n },\n {\n key: 'averageConversationSecondTotal',\n title: () => (\n \n ),\n value: 0,\n prefix: () => ,\n formatter: v => secondsToHms(v),\n },\n ];\n const {\n data: { list, total, areaData, totalData },\n loading,\n error,\n handleSearchFilter,\n handleChangePage,\n } = useActiveList({\n api: 'REPORT_CONSULTING_ROOM_SERVICE_AREA',\n cusFilter: { ...roomServiceOriginFilter },\n handleData: ({ listRoomDailySummary, statisticsConsultationRoomArea }) => {\n return {\n list: listRoomDailySummary?.roomDailySummaries || [],\n total: listRoomDailySummary?.meta?.total || 0,\n areaData: statisticsConsultationRoomArea.statistics || [],\n totalData: totalDataFields.map(el => {\n el.value = listRoomDailySummary.meta[el.key];\n return el;\n }),\n };\n },\n });\n\n const onFinish = ({ date, merchantID }) => {\n handleSearchFilter({\n // 客服统计数据\n roomServiceFilter: {\n merchantID,\n baseFilter: {\n ...roomServiceOriginFilter.roomServiceFilter.baseFilter,\n greaterThanEqual: formatSearchDate(date)[0],\n lessThanEqual: formatSearchDate(date)[1],\n },\n },\n // 访客即时分布排行\n roomAreaFilter: {\n ...(merchantID && { consultingRoom: { merchantID } }),\n baseFilter: {\n createdAtGTE: formatSearchDate(date)[0],\n createdAtLTE: formatSearchDate(date)[1],\n },\n },\n });\n };\n\n return (\n <>\n \n\n {/* 統計 */}\n \n {(loading || error) && }\n {loading ||\n error ||\n totalData.map(el => (\n \n \n \n \n \n ))}\n \n \n \n
共 {total} 条
}\n />\n \n \n \n {loading && }\n {loading || }\n \n \n
\n \n );\n}\n","/**\n * 客服個人報表\n */\nimport React from 'react';\nimport { useActiveList } from '@/hook/useList';\nimport SearchBar from '@/components/SearchBar';\nimport CustomerServiceTable from '@/components/Table/CSReportTable';\nimport {\n setDateRanges,\n formatSearchDate,\n UserStatusKey,\n AccountTypeKeys,\n} from '@/utils';\n\nconst defaultDateTime = setDateRanges(1);\nconst defaultSearch = {\n date: [defaultDateTime.start, defaultDateTime.end], // 日期套件要用的預設格式\n};\nconst originFilter = {\n greaterThanEqual: formatSearchDate(defaultSearch.date)[0],\n lessThanEqual: formatSearchDate(defaultSearch.date)[1],\n user: {\n status: UserStatusKey['Active'],\n accountType: AccountTypeKeys['CustomerService'],\n isDelete: 'No',\n },\n};\n\nconst searchFields = [{ name: 'date', type: 'dateRange', label: '时间范围' }];\n\nexport default function ReportCustomerServiceMgm() {\n const {\n data: { list, total },\n loading,\n pagination,\n handleSearchFilter,\n handleChangePage,\n } = useActiveList({\n api: 'REPORT_CUSTOMER_SERVICE',\n originFilter: { ...originFilter },\n handleData: ({ listCustomerServiceSummary }) => {\n const { customerServiceSummaries, meta } = listCustomerServiceSummary;\n return {\n list: customerServiceSummaries.map(el => ({\n ...el,\n id: el.user.id,\n username: el.user.username,\n })),\n total: meta?.total || 0,\n };\n },\n });\n\n const onFinish = search => {\n handleSearchFilter({\n ...originFilter,\n greaterThanEqual: formatSearchDate(search.date)[0],\n lessThanEqual: formatSearchDate(search.date)[1],\n });\n };\n\n return (\n <>\n \n\n {/* 列表 */}\n \n \n );\n}\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setMeInfo, setAuthRoutesInfo, setAuthRoutesKey } from '@/store/auth';\nimport { useQueryApi, apiType } from '@/hook/useApi';\nimport { AccountTypeKeys } from '@/utils';\n\n/**\n * @returns {Function} fetchMeHandler\n */\nconst useMe = () => {\n const { meInfo, authRoutesKey, authRoutesInfo } = useSelector(\n ({ auth }) => auth,\n );\n const isSystemType = meInfo.accountType === AccountTypeKeys['System'];\n const isMonitorType = meInfo.accountType === AccountTypeKeys['Monitor'];\n\n /**\n * 根據 arr 組出 keys\n * @param {Array} arr\n * @returns {Array} keys\n */\n const authorityKeysHandle = useCallback(arr => {\n return arr.reduce((acc, cur) => {\n return acc.concat(\n Array.isArray(cur.next)\n ? [...authorityKeysHandle(cur.next), cur.key]\n : cur.key,\n );\n }, []);\n }, []);\n\n /**\n * 取得 me 資訊\n * @returns {Object} { data 使用者資訊, error 錯誤訊息 }\n */\n const dispatch = useDispatch();\n const { fetchData } = useQueryApi(apiType.GET_ME);\n const fetchMeHandler = useCallback(async () => {\n const { data, error } = await fetchData();\n if (error) return { error };\n const { menu = [], ...meInfo } = data.Me;\n const authKeys = authorityKeysHandle(menu);\n dispatch(setMeInfo(meInfo));\n dispatch(setAuthRoutesInfo(menu));\n dispatch(setAuthRoutesKey(authKeys));\n return { data: { ...data.Me, authKeys } };\n }, [authorityKeysHandle, dispatch, fetchData]);\n\n return {\n meInfo,\n authRoutesKey,\n authRoutesInfo,\n isSystemType,\n isMonitorType,\n fetchMeHandler,\n authorityKeysHandle,\n };\n};\nexport default useMe;\n","import { useEffect, useCallback, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport {\n ReceiveMsgContentType,\n RoomStatusKeys,\n MsgStatusKeys,\n MsgSystemType,\n OrderStatusKeys,\n} from '@/utils';\n\n// 一般訊息類\nconst REC_MSG_COMMON_CONTENT_TYPE = [\n ReceiveMsgContentType['Text'],\n ReceiveMsgContentType['File'],\n ReceiveMsgContentType['Voice'],\n ReceiveMsgContentType['Join'],\n ReceiveMsgContentType['Leave'],\n ReceiveMsgContentType['Invite'],\n ReceiveMsgContentType['Bubble'],\n];\n\n/**\n * 接收ws 訊息 各種 type || 自定義狀態 處理\n * @param.msgID {Number} 自訂判斷 沒設定就直接回傳對應狀態,有設定就比對 roomID 回傳\n * @param.roomID {Number} 自訂判斷 沒設定就直接回傳對應狀態,有設定就比對 roomID 回傳\n */\nfunction useRecMessage({\n msgID = 0,\n roomID = 0,\n meID = 0,\n\n // contentType\n hi = () => {},\n join = () => {},\n leave = () => {},\n roomUpdate = () => {},\n bizSystem = () => {},\n typing = () => {},\n userOnlineInfo = () => {},\n lastRead = () => {},\n system = () => {},\n bubble = () => {},\n\n // msg Status\n msgStatusRetract = () => {},\n\n // csRoom Status\n csRoomStatusActive = () => {},\n csRoomStatusProcessing = () => {},\n csRoomStatusDeactivated = () => {},\n\n // system\n userOrder = () => {},\n payList = () => {},\n systemText = () => {},\n\n // order\n orderStatusCancel = () => {},\n orderStatusPending = () => {},\n orderStatusApproving = () => {},\n\n // 自定義 type\n msgCommonType = () => {},\n returnCallback = () => {},\n} = {}) {\n const { recMsg } = useSelector(({ subscribe }) => subscribe);\n const settingIDProcess = useCallback(async (settingID, recID, callback) => {\n if (!callback) return;\n settingID ? settingID === recID && callback() : callback();\n }, []);\n\n const roomUpdateHandle = useCallback(\n recMsg => {\n roomUpdate(recMsg);\n const { status } = recMsg.roomUpdate.consultingDetail;\n const csStatusTypeMap = {\n [RoomStatusKeys['Active']]: csRoomStatusActive,\n [RoomStatusKeys['Processing']]: csRoomStatusProcessing,\n [RoomStatusKeys['Deactivated']]: csRoomStatusDeactivated,\n };\n settingIDProcess(meID, recMsg.from.userID, () =>\n csStatusTypeMap[status]?.(recMsg),\n );\n },\n [\n roomUpdate,\n csRoomStatusActive,\n csRoomStatusProcessing,\n csRoomStatusDeactivated,\n meID,\n settingIDProcess,\n ],\n );\n\n const systemHandle = useCallback(\n recMsg => {\n system(recMsg);\n const { type, content } = recMsg.system;\n const userOrderHandle = ({ orderStatus }) => {\n userOrder(recMsg);\n const orderStatusMap = {\n [OrderStatusKeys['Canceled'].key]: orderStatusCancel, // 取消訂單\n [OrderStatusKeys['Pending'].key]: orderStatusPending, // 進行中訂單\n [OrderStatusKeys['Waiting'].key]: orderStatusApproving, // 審核中訂單\n };\n settingIDProcess(msgID, recMsg.id, () =>\n orderStatusMap[orderStatus]?.(recMsg),\n );\n };\n const payListHandle = () => payList(recMsg);\n const systemTextHandle = () => systemText(recMsg);\n const msgSystemTypeMap = {\n [MsgSystemType['UserOrder']]: userOrderHandle,\n [MsgSystemType['PayList']]: payListHandle,\n [MsgSystemType['Text']]: systemTextHandle,\n };\n msgSystemTypeMap[type] && msgSystemTypeMap[type](content);\n },\n [\n msgID,\n system,\n payList,\n systemText,\n userOrder,\n orderStatusCancel,\n orderStatusPending,\n orderStatusApproving,\n settingIDProcess,\n ],\n );\n\n const contentTypeHandleMap = useMemo(\n () => ({\n [ReceiveMsgContentType['Hi']]: hi,\n [ReceiveMsgContentType['Join']]: join,\n [ReceiveMsgContentType['Leave']]: leave,\n [ReceiveMsgContentType['Typing']]: typing,\n [ReceiveMsgContentType['UserOnlineInfo']]: userOnlineInfo,\n [ReceiveMsgContentType['BusinessSystemNotification']]: bizSystem,\n [ReceiveMsgContentType['LastRead']]: lastRead,\n [ReceiveMsgContentType['RoomUpdate']]: roomUpdateHandle,\n [ReceiveMsgContentType['System']]: systemHandle,\n [ReceiveMsgContentType['Bubble']]: bubble,\n }),\n [\n bizSystem,\n hi,\n join,\n leave,\n typing,\n userOnlineInfo,\n lastRead,\n roomUpdateHandle,\n systemHandle,\n bubble,\n ],\n );\n\n const typeHandle = useCallback(\n recMsg => {\n /**\n * contentType\n */\n const { contentType, status } = recMsg;\n settingIDProcess(roomID, recMsg.roomID, () =>\n contentTypeHandleMap[contentType]?.(recMsg),\n );\n\n // 自定義 msg common type\n if (REC_MSG_COMMON_CONTENT_TYPE.includes(contentType)) {\n settingIDProcess(roomID, recMsg.roomID, () => msgCommonType(recMsg));\n }\n\n // 訊息收回\n if (status === MsgStatusKeys['Retract']) {\n settingIDProcess(msgID, recMsg.id, () => msgStatusRetract(recMsg));\n }\n },\n [\n roomID,\n contentTypeHandleMap,\n msgCommonType,\n msgID,\n msgStatusRetract,\n settingIDProcess,\n ],\n );\n\n useEffect(() => {\n if (recMsg) typeHandle(recMsg);\n return () => {\n recMsg && returnCallback(recMsg);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [recMsg]);\n}\n\nuseRecMessage.propTypes = {\n hi: PropTypes.func,\n join: PropTypes.func,\n roomUpdate: PropTypes.func,\n bizSystem: PropTypes.func,\n typing: PropTypes.func,\n userOnlineInfo: PropTypes.func,\n csRoomStatusActive: PropTypes.func,\n csRoomStatusProcessing: PropTypes.func,\n csRoomStatusDeactivated: PropTypes.func,\n msgCommonType: PropTypes.func,\n returnCallback: PropTypes.func,\n};\n\nexport default useRecMessage;\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setRoomDetail, setRoomUsersMap } from '@/store/room';\nimport { useQueryApi, useMutationApi, apiType } from '@/hook/useApi';\nimport useMe from '@/hook/useMe';\nimport useRecMessage from '@HOOK/useRecMessage';\nimport { AccountTypeKeys, OrderStatusKeys } from '@UTILS';\n/**\n * 還在房間內的所有 users\n * @returns {Array}\n */\nexport const existInRoomUsers = userRoom => {\n return userRoom.filter(u => u.deletedAt === 0);\n};\n\n/**\n * 是否還在房間內的 user\n * @returns {Boolean}\n */\nexport const existInRoomUser = (userRoom, userID) => {\n return userRoom.some(u => u.userID === userID && u.deletedAt === 0);\n};\n\n/**\n * 是否有pin住房間\n * @returns {Boolean}\n */\nconst isPinnedRoom = (userRoom, userID) => {\n return userRoom.find(u => u.userID === userID)?.isPinned === 'Yes' || false;\n};\n\n/**\n * ownerUser 處理\n * ownerUser.findData @returns {Object}\n * ownerUser.findID @returns {Number} ownerUserID > 找到 私聊的 ownerUserID (私聊沒有 ownerUserID 自定義為對方就是 ownerUser)\n */\nconst ownerUser = {\n findData: (ownerUserID = 0, userRooms = []) => {\n const { user, ...props } = userRooms.find(ur => ur.userID === ownerUserID);\n return { ...props, ...user };\n },\n findID: (userRooms = [], meID) => {\n return userRooms.find(u => u.userID !== meID && u.isOperator === 'No')\n ?.userID;\n },\n};\n\n/**\n * list room 房間格式處理\n * roomFormate.Direct // 用於 私聊\n * roomFormate.Group // 用於 群組\n * roomFormate.Consulting // 用於 諮詢單\n * @returns {Object} { room: { ... }, ownerUserData: { ... }, extraInfo: { ... } }\n * extraInfo: {\n * isExistInRoom: Boolean // 是否已在房間內\n * isPinned: Boolean // 是否pin\n * isNewActiveRoom: Boolean // 是否為新的諮詢室\n * }\n */\nexport const roomFormate = {\n direct: (room = {}, userRooms = [], meID, extraInfo = {}) => {\n let ownerUserID = ownerUser.findID(userRooms, meID);\n let ownerUserData = ownerUser.findData(ownerUserID, userRooms);\n return { room, ownerUserData, extraInfo };\n },\n\n group: ({\n room: { groupDetail = {}, ...props },\n ownerUserID = 0,\n userRooms = [],\n extraInfo = {},\n meID,\n }) => {\n const isExistInRoom = existInRoomUser(userRooms, meID);\n let ownerUserData = ownerUser.findData(ownerUserID, userRooms);\n return {\n room: { ...groupDetail, ...props },\n ownerUserData,\n extraInfo: { ...extraInfo, isExistInRoom },\n };\n },\n\n consulting: ({\n room: { consultingDetail = {}, ...props },\n ownerUserID = 0,\n userRooms = [],\n extraInfo = {},\n meID,\n }) => {\n const isExistInRoom = existInRoomUser(userRooms, meID);\n const isPinned = isPinnedRoom(userRooms, meID);\n let ownerUserData = ownerUser.findData(ownerUserID, userRooms);\n return {\n room: {\n ...consultingDetail,\n ...props,\n csType: consultingDetail.type || props.type,\n },\n ownerUserData,\n userRooms,\n extraInfo: { ...extraInfo, isExistInRoom, isPinned },\n };\n },\n};\n\n/**\n * 組出 roomUsersMap 依照 userRooms 資訊組出\n * @returns {Object} { 1: { username: 'xx'} ...}\n */\nexport const createdUsersMap = (userRooms = []) => {\n return userRooms.reduce((acc, { userID, user, ...props }) => {\n acc[userID] = { ...props, ...user };\n return acc;\n }, {});\n};\n\n/**\n * 第一個房間內客服頭像\n */\nexport const headerAvatarURL = usersMap => {\n for (const key in usersMap) {\n if (\n usersMap[key].accountType === AccountTypeKeys['CustomerService'] &&\n !usersMap[key].deletedAt\n ) {\n return usersMap[key].avatarURL;\n }\n }\n};\n\n/**\n * useRoom\n * @returns {Object}\n */\nexport default function useRoom({ getRoomContext = {} } = {}) {\n const dispatch = useDispatch();\n const { roomDetail } = useSelector(({ room }) => room);\n const { meInfo, isMonitorType } = useMe();\n\n /**\n * 房間明細處理\n */\n /**\n * 取得房間明細\n * - roomFormate.consulting\n * - createdUsersMap\n * @param.extraInfo {Object} 而外資訊\n * @param.onSuccess {Func} ({roomDetail, roomUsersMap}) => void 完成後行為\n * @return { roomDetail, roomUsersMap }\n * */\n const { fetchData: fetchRoom, loading: getRoomLoading } = useQueryApi(\n apiType.GET_ROOM,\n { ...getRoomContext },\n );\n const fetchRoomInfo = useCallback(\n async ({ id, extraInfo = {}, onSuccess = () => {} }) => {\n const { data, error } = await fetchRoom({ filter: { room: { id } } });\n if (error) return { error };\n const roomDetail = roomFormate.consulting({\n room: { ...data.getRoom },\n ownerUserID: data.getRoom.consultingDetail.ownerUserID,\n userRooms: data.getRoom.userRooms,\n meID: meInfo.id,\n extraInfo,\n });\n const roomUsersMap = createdUsersMap(data.getRoom.userRooms);\n dispatch(setRoomUsersMap(roomUsersMap));\n dispatch(setRoomDetail(roomDetail));\n onSuccess({ roomDetail, roomUsersMap });\n return {};\n },\n [fetchRoom, dispatch, meInfo.id],\n );\n\n /**\n * 進入房間 (押上即時已讀用)\n * ws 訂閱成功收到 Hi 才能呼叫\n * 離開房間需要恢復預設 0\n */\n const [updateInRoom] = useMutationApi(apiType.UPDATE_IN_ROOM, {\n context: { isShowGeneralError: false },\n });\n // 後台用 記錄當前進入的房間\n const updateInRoomHandle = useCallback(\n (roomID = 0, onCompleted = () => {}) => {\n if (isMonitorType) return; // monitor 不能 updateInRoom\n updateInRoom({ roomID });\n onCompleted(roomID);\n },\n [isMonitorType, updateInRoom],\n );\n\n useRecMessage({\n roomID: roomDetail?.room?.id,\n orderStatusCancel: () => {\n dispatch(\n setRoomDetail({\n ...roomDetail,\n room: {\n ...roomDetail?.room,\n userOrder: {\n ...roomDetail?.room?.userOrder,\n status: OrderStatusKeys['Canceled'].key,\n },\n },\n }),\n );\n },\n });\n\n return {\n getRoomLoading,\n updateInRoom,\n fetchRoom,\n updateInRoomHandle,\n fetchRoomInfo,\n };\n}\n","import { useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setRedPoint, setCsTotalUnRead } from '@/store/room';\nimport { apiType, useQueryApi } from '@/hook/useApi';\n\nconst SHOW_RED_POINT_MENU_KEYS = [\n 'CustomerService_System',\n 'ConsultationChat_Management',\n];\n\nfunction useRedPoint() {\n const dispatch = useDispatch();\n const { meInfo } = useSelector(({ auth }) => auth);\n\n const setRedPointHandle = useCallback(\n data => {\n dispatch(setRedPoint(data));\n },\n [dispatch],\n );\n\n const setCsTotalUnReadHandle = useCallback(\n total => {\n total >= 0 && dispatch(setCsTotalUnRead(total));\n },\n [dispatch],\n );\n\n // 通知紅點 (目前要show的key 都要顯示)\n const { fetchData: getRedPointData } = useQueryApi(apiType.GET_RED_POINT);\n const initRedPointNotify = useCallback(async () => {\n const { error, data } = await getRedPointData({ userID: meInfo.id });\n if (error) return;\n // const { listConsultingRoom, listUserRoom } = data;\n const { listUserRoom } = data;\n const totalUnRead = listUserRoom?.meta.totalUnRead;\n // const total =\n // listConsultingRoom?.meta.total || 0 + listUserRoom?.meta.total || 0;\n const total = 0 + listUserRoom?.meta.total || 0;\n const tempData = SHOW_RED_POINT_MENU_KEYS.reduce((acc, pre) => {\n acc[pre] = { isShow: total > 0 };\n return acc;\n }, {});\n\n setCsTotalUnReadHandle(totalUnRead);\n setRedPointHandle(tempData);\n }, [getRedPointData, setCsTotalUnReadHandle, setRedPointHandle, meInfo.id]);\n\n return { initRedPointNotify, setCsTotalUnReadHandle };\n}\n\nexport default useRedPoint;\n","import React, { useState } from 'react';\nimport { Box } from '@WRAP_COMP';\nimport { Popover, Form, AutoComplete, Input } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport useMerchant from '@/hook/useMerchant';\nimport { MerchantTypeKeys } from '@/utils';\n\nconst ControlArea = ({ contactToMember, contactLdg }) => {\n const [form] = Form.useForm();\n const [visible, setVisible] = useState(false);\n const handleVisibleChange = v => {\n v || form.resetFields();\n setVisible(v);\n };\n\n const { merchantTableList } = useMerchant({\n options: { fetchPolicy: 'cache-first' },\n });\n\n const filterOption = (inputValue, option) =>\n option.value.toUpperCase().indexOf(inputValue.toUpperCase()) !== -1;\n\n const optionsSpinachKey = list => {\n let optionsList = [];\n list.forEach(\n ll =>\n ll.merchantType === MerchantTypeKeys['Spinach'] &&\n optionsList.push({ value: ll.key, label: ll.key }),\n );\n return optionsList;\n };\n\n const onFinish = async fields => {\n const [err] = await contactToMember({ in: { ...fields } });\n if (err) return;\n handleVisibleChange(false);\n };\n\n const connectFormRender = () => {\n return (\n <>\n
\n \n \n \n \n \n \n \n 确认\n \n \n \n );\n };\n\n return (\n \n \n \n \n \n );\n};\n\nexport default ControlArea;\n","import React from 'react';\nimport { Button, Checkbox, Modal } from 'antd';\n\nfunction BatchDeactivated({\n checkedList = [],\n indeterminate = false,\n onCheckAllChange = () => {},\n checkAll = false,\n batchDeactivated = () => {},\n}) {\n const _onClick = () => {\n if (checkedList.length) {\n Modal.confirm({\n title: '确认批量封存?',\n okText: '确认',\n cancelText: '取消',\n onOk: async () => {\n await batchDeactivated({ roomIDs: checkedList });\n },\n });\n }\n };\n return (\n
\n \n 全选\n \n \n
\n );\n}\n\nexport default BatchDeactivated;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Box } from '@WRAP_COMP';\nimport { Tabs, Spin } from 'antd';\n\nconst defaultTabPaneArr = [\n { key: '1', tab: '11' },\n { key: '2', tab: '22' },\n];\n\nconst TabsScrollBlock = ({\n children,\n loading = false,\n tabPaneArr = defaultTabPaneArr,\n onChangeTab = () => {},\n controlArea = null,\n wrapProps = {},\n ...props\n}) => {\n return (\n \n
\n \n {tabPaneArr.map(({ key, ...props }) => (\n \n ))}\n \n
\n
{controlArea}
\n \n {children}\n \n \n );\n};\n\nTabsScrollBlock.propTypes = {\n tabPaneArr: PropTypes.array,\n controlArea: PropTypes.node,\n};\nexport default TabsScrollBlock;\n","import { useCallback } from 'react';\nimport useAlertMessage from './useAlertMessage';\nimport { useFetch } from './useApi';\nimport { CLIENT_API_DOMAIN, IS_CLIENT } from '@/const';\nconst domain = IS_CLIENT ? CLIENT_API_DOMAIN : process.env.REACT_APP_API_ORIGIN;\n\n/**\n * @returns {Function} getBase64 轉 Base64\n * @returns {Function} getDownloadFile 下載檔案\n */\nconst useFile = () => {\n const { fetchApi, loading } = useFetch();\n const { onErrorMsg } = useAlertMessage();\n\n const getFileUrl = useCallback(file => {\n return URL.createObjectURL(file);\n }, []);\n\n /**\n * File 轉 Base64\n * @param {*} file\n */\n const getBase64 = file => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n });\n };\n\n /**\n * Img 轉 Base64\n * @param {*} img\n */\n const getBase64Image = img => {\n var canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n var ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, img.width, img.height);\n var ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase();\n var dataURL = canvas.toDataURL('image/' + ext);\n return dataURL;\n };\n\n /**\n * 下載圖片\n * @param {String} fileUrl\n * @param {String} userID\n * @returns {String || Object} 返回 Blob url\n */\n const getDownloadFile = useCallback(\n async (fileUrl, userID) => {\n try {\n const { error, data: blob } = await fetchApi(`${domain}${fileUrl}`, {\n resType: 'blob',\n headers: { 'content-type': 'image/png' },\n });\n if (error) {\n onErrorMsg('图片下载失败');\n return { error };\n }\n let resData = null;\n const objectURL = URL.createObjectURL(blob);\n resData = userID ? { userID, objectURL } : objectURL;\n return { data: resData };\n } catch (error) {\n console.log('getDownloadFile error', error);\n }\n },\n [fetchApi, onErrorMsg],\n );\n\n /**\n * 下載多張圖片\n * @param {Array} [{ userID, avatarURL }]\n * @returns\n */\n const getDownloadFiles = useCallback(\n (avatarsInfo = []) => {\n return Promise.all(\n avatarsInfo.map(item => getDownloadFile(item.avatarURL, item.userID)),\n );\n },\n [getDownloadFile],\n );\n\n /**\n * 檢查是否為 blob 字串\n * @param {String}\n * @returns {Boolean}\n */\n const checkBlobStr = useCallback(str => {\n return str ? str.includes('blob:') : '';\n }, []);\n\n /**\n * 檢查 是否為圖片 image/*\n */\n const checkIsFileImage = useCallback(file => {\n return file && file['type'].split('/')[0] === 'image';\n }, []);\n\n /**\n * 判斷是否為 file 檔案,是的話返回 Url\n */\n const changeFileToUrl = useCallback(\n val => {\n if (val instanceof File) {\n console.log('is file');\n return getFileUrl(val);\n }\n return val;\n },\n [getFileUrl],\n );\n\n /**\n * 將 url 轉成 File 物件\n */\n const changeUrlToFile = useCallback(async url => {\n if (typeof url !== 'string') return url;\n\n return new Promise((resolve, reject) => {\n let img = new Image();\n img.onload = () => {\n let base64 = getBase64Image(img);\n let file = btof(base64, 'test');\n resolve(file);\n };\n img.onerror = reject;\n img.setAttribute('crossOrigin', 'Anonymous');\n const timestamp = new Date().getTime();\n img.src = `${url}?timestamp=${timestamp}`;\n });\n }, []);\n\n function btof(data, fileName) {\n const dataArr = data.split(',');\n const byteString = atob(dataArr[1]);\n\n const options = {\n type: 'image/png',\n endings: 'native',\n };\n const u8Arr = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n u8Arr[i] = byteString.charCodeAt(i);\n }\n return new File([u8Arr], fileName + '.png', options);\n }\n // const changeUrlToFile = useCallback(\n // async url => {\n // if (typeof url === 'string') {\n // try {\n // const { error, data: blob } = await fetchApi(`url`, {\n // resType: 'blob',\n // headers: { 'content-type': 'image/*' },\n // });\n // if (error) {\n // onErrorMsg('图片下载失败');\n // return '';\n // }\n // let imgFile = new File([blob], 'fileName.png', { type: 'image/png' });\n // console.log('imgFile', imgFile);\n // console.log('imgFile URL', URL.createObjectURL(imgFile));\n\n // return imgFile;\n // } catch (error) {\n // console.log('changeUrlToFile', changeUrlToFile);\n // }\n // }\n // return url;\n // },\n // [fetchApi, onErrorMsg],\n // );\n\n return {\n loading,\n getFileUrl,\n getBase64,\n getDownloadFile,\n getDownloadFiles,\n checkBlobStr,\n checkIsFileImage,\n changeFileToUrl,\n changeUrlToFile,\n };\n};\n\nexport default useFile;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { UserOutlined } from '@ant-design/icons';\nimport { Avatar, Skeleton } from 'antd';\nimport useFile from '@/hook/useFile';\nconst { theme } = require('@/plugin/theme');\n\n/**\n * 顯示 大頭貼\n * 顯示:丟入 avatarURL 獲取有效頭像 src\n */\nconst AvatarFetch = ({ avatarURL = '', size = 'default', ...props }) => {\n const [src, setSrc] = useState('');\n const { getDownloadFile, loading } = useFile();\n const getDownloadFileHandle = useCallback(\n async url => {\n const { error, data } = await getDownloadFile(url);\n if (error) return;\n setSrc(data);\n },\n [getDownloadFile],\n );\n\n useEffect(() => {\n if (avatarURL) {\n avatarURL.includes('static') || avatarURL.includes('data:image')\n ? setSrc(avatarURL)\n : getDownloadFileHandle(avatarURL);\n }\n return () => {\n setSrc('');\n };\n }, [avatarURL, getDownloadFileHandle]);\n\n if (loading) return ;\n return (\n <>\n }\n style={{ background: theme['gray-2'] }}\n size={size}\n {...props}\n />\n \n );\n};\n\nAvatarFetch.propTypes = {\n avatarURL: PropTypes.string,\n size: PropTypes.string,\n};\nexport default AvatarFetch;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Typography, Badge } from 'antd';\nimport { Box } from '@WRAP_COMP';\nimport useRecMessage from '@HOOK/useRecMessage';\nimport AvatarFetch from '@/components/Avatar/AvatarFetch';\nconst { theme } = require('@/plugin/theme');\n\nfunction Header({\n roomID = 0,\n showIsOnline = false,\n isOnline = false,\n avatarURL = '',\n username = '',\n userID = 0,\n tags = null,\n}) {\n /**\n * isOnlineState 上下線狀態\n */\n const [isOnlineState, setIsOnlineState] = useState(() => isOnline);\n const userOnlineInfoHandle = ({ userOnlineInfo }) => {\n userOnlineInfo.userID === userID &&\n setIsOnlineState(userOnlineInfo.isOnline === 'Yes');\n };\n /**\n * 監聽\n * */\n useRecMessage({\n roomID,\n userOnlineInfo: userOnlineInfoHandle,\n });\n\n return (\n \n \n \n \n \n \n {username} #{userID}\n \n \n {tags}\n \n );\n}\n\nHeader.propTypes = {\n roomID: PropTypes.number,\n showIsOnline: PropTypes.bool,\n isOnline: PropTypes.bool,\n avatarURL: PropTypes.string,\n username: PropTypes.string,\n userID: PropTypes.number,\n tags: PropTypes.node,\n};\nexport default Header;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { PushpinTwoTone } from '@ant-design/icons';\nimport { Typography } from 'antd';\nimport { Box } from '@WRAP_COMP';\n\nfunction RoomInfo({\n roomID = 0,\n ipAddress = '',\n country = '',\n administrativeArea = '',\n isPinned = false,\n}) {\n return (\n \n \n 房間ID: #{roomID}\n \n 房間IP: {country}\n {administrativeArea}({ipAddress})\n \n \n {isPinned && }\n \n );\n}\n\nRoomInfo.propTypes = {\n roomID: PropTypes.number,\n ipAddress: PropTypes.string,\n country: PropTypes.string,\n administrativeArea: PropTypes.string,\n isPinned: PropTypes.bool,\n};\nexport default RoomInfo;\n","import { useCallback } from 'react';\n// import { useSelector } from 'react-redux';\n\n// var message = '1';\n// var key = CryptoJS.enc.Utf8.parse(\"c7b54a1gnftv9apa\");\n\n// // 加密\n// var encrypted = CryptoJS.AES.encrypt(message,key, {\n// mode: CryptoJS.mode.ECB,\n// });\n\n// $('#1').text(\"Encrypted: \"+ encrypted.ciphertext);\n\n// // 密文\n// // var chiptext = encrypted.ciphertext\n// var chiptext = \"877ee2bbf035ed00a7c163441ff428c7\";\n// // 字串內容先進行Hex\n// var encryptedHexStr = CryptoJS.enc.Hex.parse(chiptext);\n\n// // 需要先轉成Base64才可以解\n// var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);\n\n// // 解密\n// var decrypted = CryptoJS.AES.decrypt(encryptedBase64Str, key, {\n// mode: CryptoJS.mode.ECB,\n// });\n\n// $('#2').text(\"decrypted: \"+ decrypted.toString(CryptoJS.enc.Utf8));\n\nconst CryptoJS = require('crypto-js');\nconst subStrToken = str => {\n if (!str) return;\n const key = CryptoJS.enc.Utf8.parse(str.substring(0, 16));\n return key;\n};\n\nfunction useCrypto() {\n const token = 'spVD5wCs2vcMTfO2';\n /**\n * 加密 Encrypt\n */\n const encryptBase64Handle = useCallback((text = '', key = '') => {\n if (!text || !key) throw Error('加密设定错误');\n let encrypted = CryptoJS.AES.encrypt(text, key, {\n mode: CryptoJS.mode.ECB,\n }).toString();\n if (!encrypted) throw Error('加密字串為空');\n return encrypted;\n }, []);\n const encryptHexHandle = useCallback((text = '', key = '') => {\n if (!text || !key) throw Error('加密设定错误');\n let encrypted = CryptoJS.AES.encrypt(text, key, {\n mode: CryptoJS.mode.ECB,\n }).ciphertext.toString();\n if (!encrypted) throw Error('加密字串為空');\n return encrypted;\n }, []);\n const encryptStrHandle = useCallback(\n (text = '', type = 'base64') => {\n try {\n if (!text || !token) throw Error('Handle 加密设定错误');\n const secretKey = subStrToken(token);\n const typeHandle = {\n base64: () => encryptBase64Handle(text, secretKey),\n hex: () => encryptHexHandle(text, secretKey),\n };\n return typeHandle[type] ? typeHandle[type]() : '';\n } catch (error) {\n console.log('encrypt error: ', error);\n throw Error(error?.message || error);\n }\n },\n [encryptBase64Handle, encryptHexHandle, token],\n );\n\n /**\n * 解密 Decrypt\n */\n const decryptBase64 = useCallback((cipherStr = '', key = '') => {\n if (!cipherStr || !key) throw Error('解密设定错误');\n const decrypted = CryptoJS.AES.decrypt(cipherStr, key, {\n mode: CryptoJS.mode.ECB,\n });\n const str = decrypted.toString(CryptoJS.enc.Utf8);\n if (!str) throw Error('解密字串为空');\n return str;\n }, []);\n const decryptHex = useCallback((cipherStr = '', key = '') => {\n if (!cipherStr || !key) throw Error('解密设定错误');\n // 字串內容先進行 Hex > Base64\n const hexStr = CryptoJS.enc.Hex.parse(cipherStr);\n const Base64Str = CryptoJS.enc.Base64.stringify(hexStr);\n const decryptStr = CryptoJS.AES.decrypt(Base64Str, key, {\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.NoPadding,\n });\n const str = decryptStr.toString(CryptoJS.enc.Utf8);\n if (!str) throw Error('解密字串为空');\n return str;\n }, []);\n const decryptStrHandle = useCallback(\n (cipherStr = '', type = 'base64') => {\n try {\n const secretKey = subStrToken(token);\n if (!secretKey || !cipherStr) return '';\n const typeHandle = {\n base64: () => decryptBase64(cipherStr, secretKey),\n hex: () => decryptHex(cipherStr, secretKey),\n };\n return typeHandle[type] ? typeHandle[type]() : '';\n } catch (error) {\n console.log('decrypt error: ', error);\n return `讯息解密错误: ${error?.message || ''}(${cipherStr})`;\n }\n },\n [decryptBase64, decryptHex, token],\n );\n\n return { encryptStrHandle, decryptStrHandle };\n}\n\nexport default useCrypto;\n","import React, { useState, useMemo, useEffect, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { Typography, Badge } from 'antd';\nimport { Box } from '@WRAP_COMP';\nimport useCrypto from '@HOOK/useCrypto';\nimport useRecMessage from '@HOOK/useRecMessage';\nimport useRedPoint from '@HOOK/useRedPoint';\nimport { formatTime, MsgContentTypeKeys } from '@/utils';\n\nfunction MsgStatus({\n roomID = 0,\n isWaitFirst = false,\n isTimeout = false,\n showLastMsg = false,\n showUnReadCount = true,\n unRead = 0,\n lastMessage = null,\n}) {\n const { currentInRoomID, csTotalUnRead } = useSelector(({ room }) => room);\n const { meInfo, loginInfo } = useSelector(({ auth, global }) => ({\n ...auth,\n ...global,\n }));\n const { setCsTotalUnReadHandle } = useRedPoint();\n\n /**\n * unRead 狀態\n */\n const [unReadCount, setUnReadCount] = useState(() => unRead);\n useEffect(() => {\n // 進到當前房間 取消 unRead 並減少 totalUnRead\n if (currentInRoomID === roomID && unReadCount > 0) {\n setUnReadCount(0);\n setCsTotalUnReadHandle(csTotalUnRead - unReadCount);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentInRoomID]);\n\n // 驗證 新增unRead\n const verifyAddUnRead = ({ roomID, from }) => {\n if (roomID === currentInRoomID) return;\n if (from.userID === meInfo.id) return;\n setUnReadCount(pre => pre + 1);\n };\n\n /**\n * 待首次響應 & 超時 狀態處理\n */\n const [isWaitFirstState, setIsWaitFirstState] = useState(() => isWaitFirst);\n const [isTimeoutState, setIsTimeout] = useState(() => isTimeout);\n const recRoomStatusProcessing = ({ roomUpdate }) => {\n const isWaitFirstResponse =\n roomUpdate.consultingDetail.isWaitFirstResponse === 'Yes';\n const isTimeoutResponse =\n roomUpdate.consultingDetail.isTimeoutResponse === 'Yes';\n isWaitFirstResponse !== isWaitFirstState &&\n setIsWaitFirstState(isWaitFirstResponse);\n isTimeoutResponse !== isTimeoutState && setIsTimeout(isTimeoutResponse);\n };\n\n /**\n * 最後一筆 msg\n */\n const [lastMsgState, setLastMsgState] = useState(() => lastMessage);\n const { decryptStrHandle } = useCrypto(loginInfo.token);\n const { lastMsg = '', lastMsgTime = 0 } = useMemo(() => {\n if (!lastMsgState || !showLastMsg) return {};\n const typeShow = {\n [MsgContentTypeKeys['Text']]: ({ text }) =>\n text.isEncrypt ? decryptStrHandle(text.text) : text.text,\n [MsgContentTypeKeys['File']]: () => '图片',\n [MsgContentTypeKeys['Join']]: () => '加入房間',\n [MsgContentTypeKeys['Leave']]: () => '离开房间',\n [MsgContentTypeKeys['Voice']]: () => '音讯',\n };\n return {\n lastMsg: typeShow[lastMsgState.contentType]\n ? typeShow[lastMsgState.contentType](lastMsgState)\n : '',\n lastMsgTime: formatTime(lastMsgState.timestamp),\n };\n }, [decryptStrHandle, lastMsgState, showLastMsg]);\n\n /**\n * 監聽\n * */\n const isFirstRender = useRef(true);\n useRecMessage({\n roomID,\n msgCommonType: recMsg => {\n if (!isFirstRender.current) {\n verifyAddUnRead(recMsg);\n setLastMsgState(recMsg);\n }\n },\n csRoomStatusProcessing: recMsg => {\n if (recMsg.roomID === roomID) recRoomStatusProcessing(recMsg);\n },\n });\n\n useEffect(() => {\n isFirstRender.current = false;\n }, []);\n\n return (\n \n \n {/* msg status */}\n {(isWaitFirstState || isTimeoutState) && (\n \n {isWaitFirstState\n ? '[待首次响应]' // 優先顯示\n : '[超時]'}\n \n )}\n {lastMsg && (\n \n \n {lastMsg}\n \n {lastMsgTime}\n \n )}\n \n \n {showUnReadCount && unReadCount > 0 && (\n \n )}\n \n \n );\n}\n\nMsgStatus.propTypes = {\n roomID: PropTypes.number,\n isWaitFirst: PropTypes.bool,\n isTimeout: PropTypes.bool,\n showLastMsg: PropTypes.bool,\n showUnReadCount: PropTypes.bool,\n unRead: PropTypes.number,\n lastMessage: PropTypes.object,\n};\n\nexport default MsgStatus;\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport styled, { keyframes, css } from 'styled-components';\nimport { Box } from '@WRAP_COMP';\nimport { setRecMsg } from '@/store/subscribe';\nimport useRecMessage from '@HOOK/useRecMessage';\nimport Header from './Header';\nimport RoomInfo from './RoomInfo';\nimport MsgStatus from './MsgStatus';\n\nconst rotate = keyframes`\n 0% {background-color: white;}\n 50% {background-color: #D5DFEA;}\n 100% {background-color: white;}\n`;\nconst animationStyles = css`\n animation: ${rotate} 0.8s linear;\n`;\n\nconst RoomCardStyled = styled(Box)`\n cursor: pointer;\n ${({ isNewActiveRoom }) => isNewActiveRoom && animationStyles};\n`;\n\nconst RoomCard = ({\n room = null,\n userData = null,\n showUnReadCount = true,\n unRead = 0,\n isActive = false,\n isPinned = false,\n isWaitFirstResponse = false,\n isTimeoutResponse = false,\n isNewActiveRoom = false, // 新進諮詢室樣式\n showIsOnline = false,\n showLastMsg = false,\n tags = null,\n}) => {\n const dispatch = useDispatch();\n const { userID, avatarURL, username, isOnline } = userData;\n const { roomID, ipAddress, country, administrativeArea, lastMessage } = room;\n\n /**\n * 監聽\n * */\n useRecMessage({\n roomID,\n returnCallback: recMsg => {\n if (recMsg?.roomID === roomID) dispatch(setRecMsg(null));\n },\n });\n\n return (\n \n \n \n \n \n \n \n );\n};\n\nRoomCard.propTypes = {\n room: PropTypes.object.isRequired,\n userData: PropTypes.object.isRequired,\n showUnReadCount: PropTypes.bool,\n unRead: PropTypes.number,\n isActive: PropTypes.bool,\n isPinned: PropTypes.bool,\n isWaitFirstResponse: PropTypes.bool,\n isTimeoutResponse: PropTypes.bool,\n isNewActiveRoom: PropTypes.bool,\n showIsOnline: PropTypes.bool,\n showLastMsg: PropTypes.bool,\n tags: PropTypes.node,\n};\nexport default RoomCard;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Box } from '@WRAP_COMP';\nimport { Empty, Tag, Checkbox } from 'antd';\nimport TabsScrollBlock from '@/components/TabsScrollBlock';\nimport RoomCard from '@/components/CSRoomAdmin/RoomCard';\nimport { AccountTypeDisplay, AccountTypeKeys, CSRoomTypeKey } from '@/utils';\n\nconst tagsRender = ({ isTourist, isProactive, isDeposit }) => {\n return isDeposit ? (\n \n 充值\n \n ) : isTourist ? (\n \n {AccountTypeDisplay['Tourist'].text}\n \n ) : isProactive ? (\n \n 联系\n \n ) : null;\n};\n\nconst RoomTabList = ({\n loading = false,\n dataSource = [{ room: [], ownerUserData: {}, extraInfo: {} }],\n tabPaneArr = [],\n currTab = '',\n currRoomID = 0,\n onChangeTab = () => {},\n setCurrRoom = () => {},\n showIsOnline = false,\n showLastMsg = false,\n showUnReadCount = false,\n controlArea = null,\n checkedList = [],\n onCheckRoom = () => {},\n}) => {\n return (\n \n {dataSource.length ? (\n <>\n \n {dataSource.map(\n ({ room, ownerUserData, extraInfo, ...props }, idx) => (\n \n \n \n setCurrRoom({ room, ownerUserData, extraInfo, ...props })\n }>\n \n \n \n ),\n )}\n \n \n ) : (\n \n \n \n )}\n \n );\n};\n\nRoomTabList.propTypes = {\n dataSource: PropTypes.array.isRequired,\n tabPaneArr: PropTypes.array.isRequired,\n onChangeTab: PropTypes.func.isRequired,\n controlArea: PropTypes.node,\n};\nexport default RoomTabList;\n","import { useRef, useEffect } from 'react';\n\nfunction useEventListener(eventName, handler) {\n const savedHandler = useRef();\n useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n useEffect(\n () => {\n // Make sure element supports addEventListener\n // On\n const isSupported = window && window.addEventListener;\n if (!isSupported) return;\n // Create event listener that calls handler function stored in ref\n const eventListener = event => savedHandler.current(event);\n // Add event listener\n window.addEventListener(eventName, eventListener);\n // Remove event listener on cleanup\n return () => {\n window.removeEventListener(eventName, eventListener);\n };\n },\n [eventName], // Re-run if eventName or element changes\n );\n}\n\nexport default useEventListener;\n","import { useCallback } from 'react';\nimport useEventListener from '@/hook/useEventListener';\n\nconst msgType = { unread: 'unread', back: 'back' };\nconst isInIframe = window.frames.length !== window.parent.frames.length;\n\nconst useIframe = parentURL => {\n const postMsgToParent = useCallback((postData = {}, parent = '*') => {\n window.parent.postMessage(postData, parent);\n }, []);\n\n const postUnRead = useCallback(\n (num = 1) => {\n postMsgToParent({ type: msgType['unread'], num });\n },\n [postMsgToParent],\n );\n\n const postToBack = useCallback(() => {\n postMsgToParent({ type: msgType['back'], message: 'go back' });\n }, [postMsgToParent]);\n\n // 接收 父層訊息\n const recParentListener = useCallback(\n e => {\n // eslint-disable-next-line\n if (e.origin == parentURL) {\n if (e.data.type === 'open') postUnRead(2);\n }\n },\n [parentURL, postUnRead],\n );\n\n useEventListener('message', recParentListener);\n return { isInIframe, postUnRead, postToBack };\n};\n\nexport default useIframe;\n","import { useEffect, useRef, useState, useCallback } from 'react';\nimport { useSelector } from 'react-redux';\nimport { IS_CLIENT } from '@/const';\nimport { useQueryApi, useMutationApi, apiType } from '@/hook/useApi';\nimport useIframe from '@/hook/useIframe';\n\nimport {\n CusMsgContentType,\n MsgStatusKeys,\n RoomTypeKey,\n MsgContentTypeKeys,\n MsgFromTags,\n} from '@/utils';\nimport useRecMessage from './useRecMessage';\nimport useAlertMessage from './useAlertMessage';\n\nconst MSG_LIMIT = 20;\n\n/**\n * 訊息處理\n * @param {Object} param0\n * @returns {Object}\n */\nconst useRoomMessage = ({\n currentRoomID = 0,\n currUserRooms = [],\n currHistoryRooms = [],\n}) => {\n const { meInfo } = useSelector(({ auth }) => auth);\n const { clientUserInfo } = useSelector(({ client }) => client);\n const MeID = IS_CLIENT ? clientUserInfo.id : meInfo.id;\n const { onWarningMsg } = useAlertMessage();\n\n const [lastReadID, setLastReadID] = useState(0);\n const [roomMsg, setRoomMsg] = useState([]);\n const roomMsgTotal = useRef(0);\n const historyRooms = useRef([]);\n const currPreRoomIdx = useRef(0);\n const currPreRoomID = useRef(0);\n\n useEffect(() => {\n historyRooms.current = [...currHistoryRooms].reverse();\n currPreRoomIdx.current = 0;\n currPreRoomID.current = 0;\n }, [currHistoryRooms]);\n\n // 最後已讀的訊息 ID\n useEffect(() => {\n if (currentRoomID && currUserRooms.length > 0) {\n // 找到 room.userRooms 裡最大的已讀ID\n const lastReadID = currUserRooms.reduce((acc, curr) => {\n // 排除自己、已離開的人\n if (\n curr.userID !== MeID &&\n curr.deletedAt === 0 &&\n curr.lastReadMessageID > acc\n ) {\n return curr.lastReadMessageID;\n }\n return acc;\n }, 0);\n setLastReadID(lastReadID);\n }\n }, [currentRoomID, currUserRooms, MeID]);\n\n /**\n * 房間訊息處理\n * @param {String} type\n * INITIAL:初始化訊息,\n * PUSH:往後添加,\n * UNSHIFT:往前添加,\n * RESET:重置,\n * AFRESH: 略過 cusMsg 覆蓋所有訊息\n */\n const setRoomMsgHandle = useCallback(\n (type = 'INITIAL', { msgList = [], idx, msg } = {}) => {\n const handleType = {\n INITIAL: ({ msgList }) => setRoomMsg(msgList),\n PUSH: ({ msgList }) => setRoomMsg(pre => [...msgList, ...pre]),\n UNSHIFT: ({ msgList }) => setRoomMsg(pre => [...pre, ...msgList]),\n UPDATE: ({ id, msg }) =>\n setRoomMsg(pre => pre.map(m => (m.id === id ? msg : m))),\n AFRESH: () =>\n setRoomMsg(pre => {\n const cusMsg = pre.filter(m => m.contentType === CusMsgContentType);\n return [...msgList, ...cusMsg];\n }),\n RESET: () => setRoomMsg([]),\n };\n handleType[type] && handleType[type]({ msgList, idx, msg });\n },\n [],\n );\n\n // 推訊息 帶 lastMessageID\n const pushMsg = msg => {\n const lastMessageID =\n roomMsg[1]?.contentType === CusMsgContentType ? '' : roomMsg[1]?.id;\n setRoomMsgHandle('PUSH', { msgList: [{ ...msg, lastMessageID }] });\n };\n\n // 推前端客製訊息 (不傳後端\n const pushCusMsg = useCallback(\n ({ render }) => {\n setRoomMsgHandle('PUSH', {\n msgList: [\n {\n id: Date.now(),\n contentType: CusMsgContentType,\n render,\n },\n ],\n });\n },\n [setRoomMsgHandle],\n );\n\n /**\n * 推送系統訊息 (不會收到回傳推波\n */\n const [postMsg] = useMutationApi(apiType.POST_MSG, {\n context: { isClient: true },\n });\n const postSystemMsg = useCallback(\n async (params = {}, contentType = MsgContentTypeKeys['System']) => {\n const [err, data] = await postMsg({\n in: {\n roomID: currentRoomID,\n type: RoomTypeKey['Consulting'],\n contentType,\n ...params,\n },\n });\n IS_CLIENT &&\n setRoomMsgHandle('PUSH', { msgList: [data.data.postMessage] });\n return [err, data];\n },\n [currentRoomID, postMsg, setRoomMsgHandle],\n );\n\n /**\n * 取得訊息\n */\n const { fetchData: fetchRoomMsg } = useQueryApi(apiType.LIST_MSG);\n const fetchRoomMsgHandle = useCallback(\n async (roomID, setMsgType = 'INITIAL') => {\n const { error, data } = await fetchRoomMsg({\n filter: { roomID },\n pagination: { offsetType: 'New', limit: MSG_LIMIT },\n });\n if (error) return;\n setRoomMsgHandle(setMsgType, { msgList: data.listMessage.messages });\n roomMsgTotal.current = data.listMessage.meta.total;\n },\n [fetchRoomMsg, setRoomMsgHandle],\n );\n\n /**\n * 取得訊息 並更新已讀id (進入房間用的\n */\n // 處理房間已讀訊息\n const [updateLastMsg] = useMutationApi(apiType.UPDATE_LAST_READ_MSG);\n const fetchInRoomMsgHandle = useCallback(\n async (roomID, setMsgType = 'INITIAL', limit = MSG_LIMIT) => {\n const { error, data } = await fetchRoomMsg({\n filter: { roomID },\n pagination: { offsetType: 'New', limit },\n });\n if (error) return;\n const messages = data?.listMessage.messages;\n messages.length && updateLastMsg({ roomID, messageID: messages[0].id });\n setRoomMsgHandle(setMsgType, { msgList: messages });\n roomMsgTotal.current = data.listMessage.meta.total;\n return messages;\n },\n [fetchRoomMsg, updateLastMsg, setRoomMsgHandle],\n );\n\n /**\n * 返回有效訊息\n * @returns {Array}\n * */\n const filterEfficientMsg = useCallback(() => {\n return roomMsg.filter(\n ({ contentType }) => ![CusMsgContentType].includes(contentType),\n );\n }, [roomMsg]);\n\n /**\n * 載入更多訊息\n * */\n const loadMoreMsg = useCallback(async () => {\n const roomID = currPreRoomID.current || currentRoomID;\n if (!roomID) return;\n const efficientMsg = filterEfficientMsg(); // 取得有效訊息\n if (!efficientMsg.length || efficientMsg.length >= roomMsgTotal.current) {\n return { moreMsg: false };\n }\n const { error, data } = await fetchRoomMsg({\n filter: { roomID },\n pagination: {\n offsetType: 'Old',\n // 找到最舊的有效訊息 id\n offsetID: efficientMsg[efficientMsg.length - 1].id,\n limit: 10, // 要的筆數\n },\n });\n if (error) return;\n setRoomMsgHandle('UNSHIFT', { msgList: data.listMessage.messages });\n }, [currentRoomID, fetchRoomMsg, filterEfficientMsg, setRoomMsgHandle]);\n\n /**\n * 載入上個房間訊息\n */\n const loadPreRoomMsg = async () => {\n const preRoomID = historyRooms.current[currPreRoomIdx.current] || 0;\n currPreRoomIdx.current = currPreRoomIdx.current + 1;\n currPreRoomID.current = preRoomID;\n if (!preRoomID) {\n onWarningMsg('已载入全部讯息');\n return;\n }\n const { error, data } = await fetchRoomMsg({\n filter: { roomID: preRoomID },\n pagination: { offsetType: 'New', limit: MSG_LIMIT },\n });\n if (error) return;\n setRoomMsgHandle('UNSHIFT', { msgList: data.listMessage.messages });\n roomMsgTotal.current = data.listMessage.meta.total + roomMsgTotal.current;\n return { moreMsg: true };\n };\n\n /**\n * 監聽處理\n */\n // 處理 已讀\n const recLastReadIDHandle = useCallback(\n async (lastReads = []) => {\n if (!lastReads.length) return;\n const lastReadID = lastReads.reduce((acc, curr) => {\n if (curr.userID !== MeID && curr.messageID > acc) {\n return curr.messageID;\n }\n return acc;\n }, 0);\n lastReadID && setLastReadID(lastReadID);\n },\n [MeID],\n );\n\n // 處理 對方訊息\n const { postUnRead } = useIframe();\n const recOtherSideMsgHandle = useCallback(\n msg => {\n setRoomMsgHandle('PUSH', { msgList: [msg] });\n postUnRead();\n },\n [postUnRead, setRoomMsgHandle],\n );\n\n // 處理 自己送出訊息的ws即時回應\n const recOwnMsgHandle = msg => {\n recLastReadIDHandle(msg.lastReads || []); // 接收 自己傳送訊息 對方的即時已讀\n\n // 客服的自動回覆訊息\n if (msg.from.tags && msg.from.tags.includes(MsgFromTags['AutoReplay'])) {\n setRoomMsgHandle('PUSH', { msgList: [msg] });\n return;\n }\n\n // bubble 類訊息\n if (msg.contentType === MsgContentTypeKeys['Bubble']) {\n setRoomMsgHandle('PUSH', { msgList: [msg] });\n }\n };\n\n useRecMessage({\n roomID: currentRoomID,\n // 處理一般訊息 (處理已讀)\n msgCommonType: recMsg => {\n if (recMsg.status === MsgStatusKeys['Retract']) return;\n recMsg.from.userID !== MeID\n ? recOtherSideMsgHandle(recMsg)\n : recOwnMsgHandle(recMsg);\n },\n // 接收已讀狀態 (對方進入房間觸發已讀)\n lastRead: ({ lastReads }) => recLastReadIDHandle(lastReads || []),\n });\n\n return {\n roomMsg,\n updateLastMsg,\n fetchRoomMsgHandle,\n fetchInRoomMsgHandle,\n setRoomMsgHandle,\n postSystemMsg,\n pushCusMsg,\n pushMsg,\n loadMoreMsg,\n loadPreRoomMsg,\n lastReadID,\n };\n};\n\nexport default useRoomMessage;\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Button, Input, Select, Spin, Form, Divider } from 'antd';\nimport { UserStatusDisplay, AccountTypeKeys, MerchantTypeKeys } from '@/utils';\n\nconst BasicForm = ({\n user = null,\n loading = false,\n btnUserLoading = false,\n updatePassLoading = false,\n isEdit = true,\n editType = 'normal', // normal, self\n updateUser = () => {},\n updatePass = () => {},\n}) => {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const [isFirst, setIsFirst] = useState(true);\n const [inputValue, setInputValue] = useState('*******');\n const onChangeInputPass = e => {\n if (isFirst) {\n setInputValue(e.nativeEvent.data);\n setIsFirst(false);\n } else {\n setInputValue(e.target.value);\n }\n };\n\n const [userForm] = Form.useForm();\n useEffect(() => {\n const userDataHandle = async d => {\n await userForm.setFieldsValue(d);\n };\n userDataHandle(user);\n }, [user, userForm]);\n\n const accountTypeSelect = accType => {\n const selectObj = {\n [AccountTypeKeys['Manager']]: [\n { value: 'Manager', label: '管理员' },\n { value: 'CustomerService', label: '客服' },\n ],\n [AccountTypeKeys['CustomerService']]: [\n { value: 'CustomerService', label: '客服' },\n { value: 'Manager', label: '管理员' },\n ],\n [AccountTypeKeys['CommonUser']]: [\n { value: 'CommonUser', label: '一般会员' },\n ],\n [AccountTypeKeys['Tourist']]: [{ value: 'Tourist', label: '游客' }],\n };\n return selectObj[accType] || selectObj[AccountTypeKeys['Tourist']];\n };\n\n const disabledPassInput = () => {\n // 只能修改 Bochat 裡的用戶密碼\n if (user?.merchantType !== MerchantTypeKeys['Bochat']) return true;\n // 有修改客服密碼的權限\n if (\n user.accountType === AccountTypeKeys['CustomerService'] &&\n !authRoutesKey.includes('API_CustomerService_Password_Update')\n )\n return true;\n // 有修改員工密碼的權限\n if (\n user.accountType === AccountTypeKeys['Manager'] &&\n !authRoutesKey.includes('API_Employee_Password_Update')\n )\n return true;\n return false;\n };\n\n return (\n \n {editType !== 'self' && (\n
\n \n \n \n \n \n \n \n updatePass({ userID: user.id, password: inputValue })\n }\n disabled={isFirst}\n loading={updatePassLoading}>\n 更新密码\n \n \n \n
\n )}\n\n \n
\n \n \n \n {editType !== 'self' && user?.accountType && (\n \n \n {accountTypeSelect(user.accountType).map(item => (\n \n {item.label}\n \n ))}\n \n \n )}\n {editType !== 'self' && (\n <>\n \n \n \n \n \n \n \n \n \n \n )}\n {!isEdit || (\n \n )}\n \n
\n );\n};\n\nexport default BasicForm;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { UploadOutlined, UserOutlined } from '@ant-design/icons';\nimport useFile from '@/hook/useFile';\nimport { Button, Upload, Skeleton, Space, Avatar } from 'antd';\nconst { theme } = require('@/plugin/theme');\n\n/**\n * 顯示 & 新增 & 更新 大頭貼\n * 顯示:丟入 avatarURL 獲取有效頭像 src\n * 新增&更新:setUploadFile 傳出上傳 File\n */\nconst AvatarUpload = ({\n avatarURL = '',\n setUploadFile,\n size = 120,\n isEdit = false,\n}) => {\n const [src, setSrc] = useState('');\n const { getDownloadFile, getBase64, loading } = useFile();\n const beforeUploadHandle = async file => {\n const baseUrl = await getBase64(file);\n setSrc(baseUrl);\n setUploadFile(file);\n return false;\n };\n\n const getDownloadFileHandle = useCallback(\n async url => {\n const { error, data } = await getDownloadFile(url);\n if (error) return;\n setSrc(data);\n },\n [getDownloadFile],\n );\n\n useEffect(() => {\n avatarURL && getDownloadFileHandle(avatarURL);\n return () => {\n setSrc('');\n };\n }, [avatarURL, getDownloadFileHandle]);\n\n return (\n \n {loading ? (\n \n ) : (\n }\n style={{ background: theme['gray-2'] }}\n />\n )}\n {isEdit && (\n \n \n \n )}\n \n );\n};\n\nAvatarUpload.propTypes = {\n avatarURL: PropTypes.string,\n size: PropTypes.number,\n setUploadFile: PropTypes.func.isRequired,\n};\nexport default AvatarUpload;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useQuery } from '@apollo/client';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport { Row, Col } from 'antd';\nimport BasicForm from '@/components/User/BasicForm/Form';\nimport AvatarUpload from '@/components/Avatar/AvatarUpload';\n\nconst UserBasicForm = ({\n userID,\n formColProps,\n avatarColProps,\n isEdit = true,\n}) => {\n const { onSuccessMsg } = useAlertMessage();\n const [detailData, setDetailData] = useState(null);\n const { loading, refetch } = useQuery(apiType.GET_USER, {\n variables: { filter: { user: { id: userID } } },\n onCompleted: ({ getUser }) => setDetailData(() => getUser || null),\n });\n const [file, setFile] = useState(null);\n const [updateUser, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_USER,\n );\n const updateUserHandle = async fields => {\n let formFields = { ...fields };\n if (file) formFields.avatarContent = file;\n const [err] = await updateUser({\n filter: { user: { id: userID } },\n in: { ...formFields },\n });\n if (err) return;\n refetch();\n onSuccessMsg('update');\n };\n\n const [updateUserPass, { loading: updatePassLoading }] = useMutationApi(\n apiType.UPDATE_USER_PASS,\n );\n const updateUserPassHandle = async ({ password, userID }) => {\n const [err] = await updateUserPass({ in: { userID, password } });\n if (err) return;\n onSuccessMsg('update');\n };\n\n return (\n \n \n \n \n \n setFile(file)}\n isEdit={isEdit}\n />\n \n \n );\n};\n\nUserBasicForm.propTypes = {\n userID: PropTypes.number.isRequired,\n};\nexport default UserBasicForm;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useQuery } from '@apollo/client';\nimport { Spin, Descriptions } from 'antd';\nimport { apiType } from '@/hook/useApi';\nimport { formatDateTime } from '@/utils';\n\nfunction SpinachInfo({ userID = 0 }) {\n const [spinachData, setSpinachData] = useState(null);\n const dataHandle = ({ spinachCommonUserDetail, ...props }) => {\n setSpinachData({ ...spinachCommonUserDetail, ...props });\n };\n const { loading } = useQuery(apiType.GET_USER_SPINACH_INFO, {\n variables: { filter: { user: { id: userID } } },\n onCompleted: ({ getUser }) => dataHandle(getUser),\n });\n return (\n <>\n \n {spinachData && (\n <>\n \n \n {spinachData.platform}\n \n \n {spinachData.spinachUserID}\n \n \n {spinachData.status}\n \n \n {spinachData.payLevel}\n \n \n {spinachData.riskControlLevel}\n \n \n {spinachData.rechargeTime}\n \n \n {spinachData.registerAt\n ? formatDateTime(spinachData.registerAt)\n : '-'}\n \n \n {spinachData.nowLoginIP}\n \n \n {spinachData.lastLoginAt\n ? formatDateTime(spinachData.lastLoginAt)\n : '-'}\n \n \n {spinachData.lastLoginIP}\n \n \n \n )}\n \n \n );\n}\n\nSpinachInfo.propTypes = {\n userID: PropTypes.number.isRequired,\n};\nexport default SpinachInfo;\n","import React from 'react';\nimport { useActiveList } from '@/hook/useList';\nimport DataTable from '@/components/Table/DataTable';\nimport { formatDateTime, deviceOSKeys } from '@/utils';\n\nfunction LoginInfoList({ userID }) {\n const {\n data: { list, total },\n loading,\n pagination,\n handleChangePage,\n } = useActiveList({\n api: 'LIST_USER_LOGIN_INFO',\n originFilter: { userLoginHistory: { userID } },\n handleData: ({ listUserLoginHistory }) => ({\n list: listUserLoginHistory?.userLoginHistories || [],\n total: listUserLoginHistory?.meta.total || 0,\n }),\n });\n const columns = [\n {\n title: 'id',\n dataIndex: 'id',\n key: 'id',\n width: '5%',\n },\n {\n title: 'IP',\n dataIndex: 'ipAddress',\n key: 'ipAddress',\n },\n {\n title: '地區',\n key: 'place',\n render: ({ country, administrativeArea }) => (\n <>\n {country}\n {administrativeArea}\n \n ),\n },\n {\n title: '客端',\n dataIndex: 'deviceOS',\n key: 'deviceOS',\n render: key => deviceOSKeys[key]?.text || '-',\n },\n {\n title: '建立时间',\n dataIndex: 'createdAt',\n key: 'createdAt',\n render: h => formatDateTime(h),\n },\n ];\n return (\n \n );\n}\n\nexport default LoginInfoList;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { EditTwoTone, DeleteTwoTone } from '@ant-design/icons';\nimport { Tooltip, Button } from 'antd';\n\nconst BtnTooltip = ({\n tipType = 'edit', // edit delete\n tipTitle = '',\n placement = 'top',\n showBtnText = false,\n btnText = '',\n onClick,\n ...props\n}) => {\n const toolkitTitle = {\n edit: { tipTitle: '編輯', icon: },\n delete: { tipTitle: '刪除', icon: },\n };\n\n return (\n \n \n {showBtnText ? btnText || toolkitTitle[tipType].btnText : null}\n \n \n );\n};\n\nBtnTooltip.propTypes = {\n tipType: PropTypes.string,\n tipTitle: PropTypes.string,\n placement: PropTypes.string,\n showBtnText: PropTypes.bool,\n btnText: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n};\n\nexport default BtnTooltip;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Popconfirm } from 'antd';\nimport BtnTooltip from './BtnTooltip';\n\n/**\n * 刪除警告 button + Popconfirm\n * @param {Function} handleOk () => deleteFunc()\n */\nconst BtnDeleteConfirm = ({ handleOk, loading, btnProps, ...props }) => {\n const [visible, setVisible] = useState(false);\n const confirmHandle = e => {\n handleOk(e);\n setVisible(false);\n };\n\n return (\n confirmHandle(e)}\n onCancel={() => setVisible(false)}\n okButtonProps={{ loading }}\n okText='确认'\n cancelText='取消'\n {...props}>\n {\n e.stopPropagation();\n setVisible(true);\n }}\n tipType='delete'\n {...btnProps}\n />\n \n );\n};\n\nBtnDeleteConfirm.propTypes = {\n handleOk: PropTypes.func.isRequired,\n loading: PropTypes.bool,\n};\nexport default BtnDeleteConfirm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Typography, List, Switch, Space, Spin } from 'antd';\nimport { formatDateTime, EnableKey } from '@/utils';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\n\nconst DeviceList = ({\n loading = false,\n deleteLoading = false,\n dataSource = [],\n updateDevice,\n deleteDevice,\n}) => {\n return (\n \n (\n updateDevice(e, item.id)}\n />,\n deleteDevice(item.id)}\n loading={deleteLoading}\n placement='topRight'\n />,\n ]}>\n \n {item.deviceUID}\n \n 建立时间:{formatDateTime(item.createdAt)}\n \n \n 更新时间:{formatDateTime(item.updatedAt)}\n \n \n \n )}\n />\n \n );\n};\n\nDeviceList.propTypes = {\n loading: PropTypes.bool,\n deleteLoading: PropTypes.bool,\n dataSource: PropTypes.array,\n updateDevice: PropTypes.func.isRequired,\n deleteDevice: PropTypes.func.isRequired,\n};\n\nexport default DeviceList;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport { useActiveList } from '@/hook/useList';\nimport { EnableKey } from '@/utils';\nimport DeviceList from '@/components/User/DeviceList/List';\nimport useAlertMessage from '@/hook/useAlertMessage';\n\n/**\n * 使用者裝置列表, 更新&刪除 裝置\n */\nconst UserDeviceList = ({ userID }) => {\n const { onSuccessMsg } = useAlertMessage();\n const [deviceList, setDeviceList] = useState([]);\n const { loading, refetch } = useActiveList({\n api: 'LIST_USER_DEVICE',\n originFilter: { userDevice: { userID } },\n options: {\n onCompleted: ({ listUserDevice }) =>\n setDeviceList(() => listUserDevice?.userDevices || []),\n },\n });\n\n const completedConfig = {\n onCompleted: () => {\n refetch();\n onSuccessMsg();\n },\n };\n const [updateDevice, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_USER_DEVICE,\n completedConfig,\n );\n const updateDeviceHandle = (checked, id) => {\n const isBind = checked ? EnableKey['Yes'] : EnableKey['No'];\n updateDevice({\n filter: { userDevice: { userID, id } },\n in: { isBind },\n });\n };\n\n const [deleteDevice, { loading: deleteLoading }] = useMutationApi(\n apiType.DELETE_USER_DEVICE,\n completedConfig,\n );\n\n return (\n \n deleteDevice({\n filter: { userDevice: { userID, id } },\n })\n }\n />\n );\n};\n\nUserDeviceList.propTypes = {\n userID: PropTypes.number.isRequired,\n};\nexport default UserDeviceList;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Spin, Switch, Form } from 'antd';\n\nconst SettingForm = ({\n loading = false,\n settingData = null,\n updateUserSetting,\n}) => {\n const [settingForm] = Form.useForm();\n useEffect(() => {\n const formHandle = async d => {\n await settingForm.setFieldsValue(d);\n };\n settingData && formHandle(settingData);\n }, [settingData, settingForm]);\n\n const onChangeHandle = (checked, fieldName) => {\n let fields = {};\n fields[fieldName] = checked ? 'Yes' : 'No';\n updateUserSetting(fields);\n };\n\n return (\n \n
\n \n onChangeHandle(c, 'allowStrangeMessageEnabled')}\n />\n \n \n onChangeHandle(c, 'autoAddFriendEnabled')}\n />\n \n \n
\n );\n};\n\nSettingForm.propTypes = {\n loading: PropTypes.bool,\n settingData: PropTypes.object,\n updateUserSetting: PropTypes.func.isRequired,\n};\n\nexport default SettingForm;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useQuery } from '@apollo/client';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport SettingForm from '@/components/User/SettingForm/Form';\n\nfunction UserSettingForm({ userID }) {\n const [settingData, setSettingData] = useState(null);\n const dataHandle = async getUserSetting => {\n let settingData = {\n ...getUserSetting,\n allowStrangeMessageEnabled:\n getUserSetting.allowStrangeMessageEnabled === 'Yes',\n autoAddFriendEnabled: getUserSetting.autoAddFriendEnabled === 'Yes',\n };\n setSettingData(() => ({ ...settingData }));\n };\n const { loading, refetch } = useQuery(apiType.GET_USER_SETTING, {\n variables: { filter: { userSetting: { userID } } },\n onCompleted: ({ getUserSetting }) => dataHandle(getUserSetting),\n });\n const [updateUserSetting, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_USER_SETTING,\n {\n onCompleted: () => refetch(),\n },\n );\n\n return (\n \n updateUserSetting({\n filter: { userSetting: { userID } },\n in: { ...fields },\n })\n }\n />\n );\n}\n\nUserSettingForm.propTypes = {\n userID: PropTypes.number.isRequired,\n};\nexport default UserSettingForm;\n","import { Avatar } from 'antd';\nimport { UserOutlined } from '@ant-design/icons';\n\nconst AvatarWrap = ({ avatarURL = '', text = '', ...props }) => {\n const firstUppCase = str => str.slice(0, 1).toUpperCase();\n return (\n } {...props}>\n {text && firstUppCase(text)}\n \n );\n};\n\nexport default AvatarWrap;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CloseOutlined } from '@ant-design/icons';\nimport { Spin, List, Typography, Space } from 'antd';\nimport AntAvatar from '@/components/Avatar/Avatar';\nimport BtnTooltip from '@/components/Button/BtnTooltip';\n\nconst FriendList = ({ loading = false, dataSource = [], deleteFriend }) => {\n return (\n \n (\n deleteFriend(f.id)}\n icon={}\n />,\n ]}>\n \n \n {f.friend.username}\n \n \n )}>\n \n );\n};\n\nFriendList.propTypes = {\n loading: PropTypes.bool,\n dataSource: PropTypes.array,\n deleteFriend: PropTypes.func.isRequired,\n};\n\nexport default FriendList;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport { useActiveList } from '@/hook/useList';\nimport useFile from '@/hook/useFile';\nimport { cloneDeep } from '@/utils';\nimport FriendList from './List';\n\nconst UserFriendList = ({ userID = 0 }) => {\n const [friendList, setFriendList] = useState([]);\n const [avatars, setAvatars] = useState([]);\n const dataHandle = async ({ listUserFriend }) => {\n const userFriends = listUserFriend?.userFriends || [];\n let avatars = [];\n userFriends.forEach(f => {\n f.friend.avatarURL &&\n avatars.push({ userID: f.friend.id, avatarURL: f.friend.avatarURL });\n });\n setFriendList(() => userFriends || []);\n setAvatars(() => avatars);\n };\n\n const { loading, refetch } = useActiveList({\n api: 'LIST_USER_FRIEND',\n cusFilter: { filter: { userFriend: { userID } } },\n options: {\n onCompleted: dataHandle,\n },\n });\n\n const { getDownloadFiles } = useFile();\n const handleFetchAvatar = () => {\n getDownloadFiles(avatars).then(res => {\n let tempList = cloneDeep(friendList);\n res.forEach(r => {\n tempList.forEach(\n f => f.friend.id === r.userID && (f.friend.avatarURL = r.objectURL),\n );\n });\n setFriendList(() => [...tempList]);\n });\n };\n\n useEffect(() => {\n avatars.length && handleFetchAvatar();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [avatars]);\n\n // 刪除\n const [deleteFriend, { loading: deleteLoading }] = useMutationApi(\n apiType.DELETE_USER_FRIEND,\n {\n onCompleted: () => refetch(),\n },\n );\n\n return (\n deleteFriend({ filter: { userFriend: { id } } })}\n />\n );\n};\n\nUserFriendList.propTypes = {\n userID: PropTypes.number.isRequired,\n};\nexport default UserFriendList;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Typography, List, Switch, Space, Spin } from 'antd';\n\nconst RoleList = ({ loading = false, dataSource = [], changeRole }) => {\n return (\n \n (\n \n \n changeRole(e, item.id)}\n />\n {item.name}\n \n \n )}>\n \n );\n};\n\nRoleList.propTypes = {\n loading: PropTypes.bool,\n dataSource: PropTypes.array,\n changeRole: PropTypes.func.isRequired,\n};\n\nexport default RoleList;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport { useActiveList } from '@/hook/useList';\nimport RoleList from './List';\nimport { AccountTypeKeys, cloneDeep } from '@/utils';\nimport useAlertMessage from '@/hook/useAlertMessage';\n\n/**\n * 使用者角色列表, 更新&刪除 角色\n * @param {*} param0\n * @param {*} param0.userID\n * @param {*} param0.accountType 要拉的 role list type\n */\nconst UserRole = ({ userID, accountType }) => {\n const { onSuccessMsg } = useAlertMessage();\n const [dataSource, setDataSource] = useState([]);\n const userRolesId = userRoles => userRoles.map(item => item.role.id);\n const dataHandle = (roleList = [], userRoles = []) => {\n let list = cloneDeep(roleList);\n list.forEach(item => {\n const checked = userRolesId(userRoles).includes(item.id);\n item.checked = checked;\n return item;\n });\n setDataSource(list);\n };\n const { loading, refetch } = useActiveList({\n api: 'LIST_USER_ROLE',\n cusFilter: {\n userRoles: { userRole: { userID } },\n listRole: { role: { supportAccountType: accountType } },\n },\n options: {\n onCompleted: ({ listRole, listUserRole }) =>\n dataHandle(listRole.roles, listUserRole.userRoles),\n },\n });\n\n const completedConfig = {\n onCompleted: () => {\n refetch();\n onSuccessMsg();\n },\n };\n const [createRole, { loading: createLoading }] = useMutationApi(\n apiType.CREATE_USER_ROLE,\n completedConfig,\n );\n const [deleteRole, { loading: deleteLoading }] = useMutationApi(\n apiType.DELETE_USER_ROLE,\n completedConfig,\n );\n const changeRoleHandle = (checked, roleID) => {\n if (checked) {\n const isAdmin = accountType === AccountTypeKeys['Manager'] ? 'Yes' : 'No';\n createRole({ in: { roleID, userID, isAdmin } });\n } else {\n deleteRole({ filter: { userRole: { userID, roleID } } });\n }\n };\n\n return (\n \n );\n};\n\nUserRole.propTypes = {\n userID: PropTypes.number.isRequired,\n};\nexport default UserRole;\n","import React, { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { EditTwoTone, CheckCircleTwoTone } from '@ant-design/icons';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport {\n Typography,\n List,\n Space,\n Form,\n Input,\n Button,\n Divider,\n Spin,\n} from 'antd';\nimport { formatDateTime } from '@/utils';\n\nconst WhiteList = ({\n loading = false,\n deleteLoading = false,\n dataSource = [],\n createWhite,\n updateWhite,\n deleteWhite,\n}) => {\n const [ipEdit, setIpEdit] = useState(false);\n const [curEditId, setCurEditId] = useState(false);\n const inputEl = useRef(null);\n const [whiteForm] = Form.useForm();\n\n const changeIpEditType = (type, id) => {\n setIpEdit(type);\n setCurEditId(id);\n if (!type) {\n const ipAddress = inputEl.current.state.value;\n updateWhite(id, ipAddress);\n }\n };\n\n return (\n \n createWhite(filed, whiteForm)}>\n \n \n \n \n \n \n \n\n \n\n (\n \n ) : (\n \n )\n }\n onClick={() => changeIpEditType(!ipEdit, item.id)}\n />,\n deleteWhite(item.id)}\n loading={deleteLoading}\n placement='topRight'\n />,\n ]}>\n \n {ipEdit && curEditId === item.id ? (\n changeIpEditType(!ipEdit, item.id)}\n />\n ) : (\n {item.ipAddress}\n )}\n \n 建立時間:{formatDateTime(item.createdAt)}\n \n \n \n )}\n />\n \n );\n};\n\nWhiteList.propTypes = {\n loading: PropTypes.bool,\n deleteLoading: PropTypes.bool,\n dataSource: PropTypes.array,\n createWhite: PropTypes.func.isRequired,\n updateWhite: PropTypes.func.isRequired,\n deleteWhite: PropTypes.func.isRequired,\n};\n\nexport default WhiteList;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useActiveList } from '@/hook/useList';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport WhiteList from './List';\nimport useAlertMessage from '@/hook/useAlertMessage';\n\nconst UserWhiteList = ({ userID }) => {\n const { onSuccessMsg } = useAlertMessage();\n const [whiteList, setWhiteList] = useState([]);\n const { loading, refetch } = useActiveList({\n api: 'LIST_USER_WHITE',\n cusFilter: { filter: { userWhitelist: { userID } } },\n options: {\n onCompleted: ({ listUserWhitelist }) =>\n setWhiteList(() => listUserWhitelist?.userWhitelists || []),\n },\n });\n\n const [createWhite, { loading: createLoading }] = useMutationApi(\n apiType.CREATE_USER_WHITE,\n );\n const createWhiteHandle = async (filed, form) => {\n const [err] = await createWhite({ in: { ...filed, userID } });\n if (!err) {\n onSuccessMsg();\n await refetch();\n await form.resetFields();\n }\n };\n\n const completedConfig = {\n onCompleted: () => {\n refetch();\n onSuccessMsg();\n },\n };\n const [updateWhite, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_USER_WHITE,\n completedConfig,\n );\n const [deleteWhite, { loading: deleteLoading }] = useMutationApi(\n apiType.DELETE_USER_WHITE,\n completedConfig,\n );\n\n return (\n \n updateWhite({\n filter: { userWhitelist: { id, userID } },\n in: { ipAddress },\n })\n }\n deleteWhite={id =>\n deleteWhite({ filter: { userWhitelist: { id, userID } } })\n }\n />\n );\n};\n\nUserWhiteList.propTypes = {\n userID: PropTypes.number.isRequired,\n};\nexport default UserWhiteList;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Tabs } from 'antd';\nimport BasicForm from '@/components/User/BasicForm';\nimport SpinachInfo from '@/components/User/SpinachInfo';\nimport LoginInfoList from '@/components/User/LoginInfoList';\nimport DeviceList from '@/components/User/DeviceList';\nimport SettingForm from '@/components/User/SettingForm';\nimport FriendList from '@/components/User/FriendList';\nimport RoleList from '@/components/User/RoleList';\nimport WhiteList from '@/components/User/WhiteList';\nimport { AccountTypeKeys } from '@/utils';\n\nfunction UserDetailTabs({\n user,\n isEdit,\n tabPosition = 'left',\n basicFormProps,\n}) {\n const TabsData = ({ accountType = '' }) => {\n const BASIC_INFO = {\n key: 'BasicSetting',\n title: '基本资讯',\n content: () => (\n \n ),\n };\n const SPINACH_INFO = {\n key: 'SpinachInfo',\n title: '平台資訊',\n content: () => ,\n };\n const LOGIN_INFO_LIST = {\n key: 'LoginInfoList',\n title: '登入资讯',\n content: () => ,\n };\n const USER_SETTING = {\n key: 'UserSetting',\n title: '用户设置',\n content: () => ,\n };\n const ROLE_LIST = {\n key: 'RoleList',\n title: '角色设置',\n content: () => (\n \n ),\n };\n const DEVICE_LIST = {\n key: 'DeviceList',\n title: '装置设置',\n content: () => ,\n };\n const WHITE_LIST = {\n key: 'WhiteList',\n title: '白名单设置',\n content: () => ,\n };\n const FRIEND_LIST = {\n key: 'FriendList',\n title: '好友管理',\n content: () => ,\n };\n\n const accountTypeRender = {\n [AccountTypeKeys['Manager']]: () => [\n BASIC_INFO,\n LOGIN_INFO_LIST,\n ROLE_LIST,\n DEVICE_LIST,\n WHITE_LIST,\n ],\n [AccountTypeKeys['Monitor']]: () => [\n BASIC_INFO,\n LOGIN_INFO_LIST,\n ROLE_LIST,\n DEVICE_LIST,\n WHITE_LIST,\n ],\n [AccountTypeKeys['CustomerService']]: () => [\n BASIC_INFO,\n LOGIN_INFO_LIST,\n ROLE_LIST,\n DEVICE_LIST,\n WHITE_LIST,\n ],\n [AccountTypeKeys['CommonUser']]: () => [\n BASIC_INFO,\n SPINACH_INFO,\n LOGIN_INFO_LIST,\n USER_SETTING,\n ROLE_LIST,\n DEVICE_LIST,\n WHITE_LIST,\n FRIEND_LIST,\n ],\n [AccountTypeKeys['Tourist']]: () => [BASIC_INFO, DEVICE_LIST],\n };\n return accountTypeRender[accountType]\n ? accountTypeRender[accountType]()\n : accountTypeRender[AccountTypeKeys['Tourist']]();\n };\n\n return (\n \n {user &&\n TabsData(user).map(item => (\n \n {item.content(item.title)}\n \n ))}\n \n );\n}\n\nUserDetailTabs.propTypes = {\n user: PropTypes.object,\n};\nconst areEqual = (prevProps, nextProps) => {\n return prevProps.user?.id === nextProps.user?.id;\n};\nexport default React.memo(UserDetailTabs, areEqual);\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setVisibleDrawer } from '@/store/global';\nimport { Drawer } from 'antd';\nimport UserDetailTabs from '@/components/User/UserDetailTabs';\n\n/**\n * 會員明細\n */\nconst DRAWER_NAME = 'UserDetailDrawer';\n\nconst UserDetailDrawer = ({\n children,\n user = {},\n closeCallback = () => {},\n}) => {\n const dispatch = useDispatch();\n const visibleData = useSelector(({ global }) => global.visibleDrawer);\n const [visible, setVisible] = useState(false);\n useEffect(() => {\n visibleData.name === DRAWER_NAME && setVisible(visibleData.visible);\n }, [visibleData]);\n\n const closeDrawer = () => {\n dispatch(setVisibleDrawer({ name: DRAWER_NAME, visible: false }));\n closeCallback(false);\n };\n\n return (\n \n {children}\n {visible && }\n \n );\n};\n\nUserDetailDrawer.propTypes = {\n user: PropTypes.object,\n};\n\nexport default React.memo(UserDetailDrawer);\n","import React from 'react';\nimport { Typography, Spin } from 'antd';\nimport PropTypes from 'prop-types';\nimport { Box } from '@WRAP_COMP';\n\nconst AdminHeader = ({\n title = '',\n titleLevel = 4,\n subtitle = '',\n cusSubtitle = null,\n btnGroup = null,\n loading = false,\n}) => {\n return (\n \n
\n \n \n {title}\n \n {cusSubtitle || {subtitle}}\n \n
\n {btnGroup}\n \n );\n};\n\nAdminHeader.propTypes = {\n title: PropTypes.string,\n subtitle: PropTypes.string,\n btnGroup: PropTypes.node,\n};\nexport default AdminHeader;\n","import React from 'react';\nimport { Badge } from 'antd';\nimport { Button, Box } from '@WRAP_COMP';\nimport { DownOutlined } from '@ant-design/icons';\nconst { theme } = require('@/plugin/theme');\n\nconst ScrollDownBtn = ({\n show = false,\n hasNewMsg = false,\n onClick = () => {},\n}) => {\n if (!show) return null;\n return (\n \n \n }\n onClick={() => onClick()}\n style={{\n background: theme['gray-1'],\n border: `1px solid ${theme['gray-3']}`,\n }}\n />\n \n \n );\n};\nexport default ScrollDownBtn;\n","/* eslint-disable no-use-before-define */\nimport { useMemo, useCallback } from 'react';\nimport { Modal, Typography } from 'antd';\nimport { BrowserType, isStorageAccessAllow } from '@/utils';\nexport { BrowserType };\n\n// const SOGOU_DOWNLOAD_URL = 'https://ie.sogou.com/';\nconst CHROME_DOWNLOAD_URL = 'https://www.google.com/intl/zh-CN/chrome/';\n\n// 搜狗\n// Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0\n// 獵豹\n// Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36\n// IE\n// Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; McAfee; rv:11.0) like Gecko\n// UC\n// Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X; zh-CN) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16G102 UCBrowser/13.9.8.1767 Mobile AliApp(TUnionSDK/0.1.20.4)\n\nconst AGENT = window.navigator.userAgent;\nconst checkBrowser = () => {\n if (\n AGENT.indexOf(BrowserType['IE']) > 0 ||\n AGENT.indexOf('Trident/') > 0 ||\n !!document.documentMode\n )\n return 'IE';\n if (AGENT.indexOf(BrowserType['Edge']) > 0 || !!window.StyleMedia) {\n return BrowserType['Edge'];\n }\n if (AGENT.indexOf(BrowserType['Firefox']) >= 0) return BrowserType['Firefox'];\n if (AGENT.indexOf(BrowserType['Opera']) >= 0) return BrowserType['Opera'];\n if (AGENT.indexOf(BrowserType['Sogou']) >= 0) return BrowserType['Sogou'];\n if (AGENT.indexOf(BrowserType['Chrome']) >= 0) return BrowserType['Chrome'];\n if (AGENT.indexOf(BrowserType['Safari']) >= 0) return BrowserType['Safari'];\n if (AGENT.indexOf(BrowserType['Netscape']) >= 0)\n return BrowserType['Netscape'];\n if (AGENT.indexOf(BrowserType['UC']) >= 0) return BrowserType['UC'];\n const text = 'no mapping browser';\n console.log(text, AGENT);\n return '';\n};\n\nexport const fullScreenHandle = (href = '') => {\n let a = document.createElement('a');\n a.href = href || window.location.href;\n a.target = '_blank';\n a.click();\n};\n\nfunction useBrowser() {\n const browser = useMemo(() => checkBrowser(), []);\n\n /**\n * 推薦下載瀏覽器\n * */\n const browserWarningModel = useCallback(okCallback => {\n Modal.warning({\n title: '注意',\n content: (\n <>\n 当前浏览器过旧!\n
\n 为达到最好的体验品质,请更換浏览器。\n fullScreenHandle(CHROME_DOWNLOAD_URL)}\n style={{ color: '#6993FF', cursor: 'pointer' }}>\n 立即下载 Chrome 浏览器\n \n \n ),\n okText: '已下载',\n centered: true,\n onOk: close => (okCallback ? okCallback(close) : close()),\n });\n }, []);\n\n // 檢查是否為IE\n const checkIsOldBrowser = useCallback(\n okCallback => {\n browser === 'IE'\n ? browserWarningModel(okCallback)\n : okCallback && okCallback();\n },\n [browser, browserWarningModel],\n );\n\n /**\n * cookie access 權限檢查 (不允許就另開全螢幕)\n */\n const accessWarningModal = useCallback(() => {\n Modal.confirm({\n content: (\n <>\n 请允许 Cookie 存取!\n

\n 为达到最好的服务品质\n
\n {'请至浏览器设定 > 隐私权 > 允许第三方 Cookie 存取或关闭阻挡\b第三方'}\n Cookie 设定。\n
\n 设定完成后请重新整理页面。\n

\n \n ),\n okText: '已开启权限',\n cancelText: '不允许存取',\n centered: true,\n onOk: close => {\n checkIsAccessAllow(close);\n },\n onCancel: () => {\n // 不允許存取就開啟新頁面\n fullScreenHandle();\n checkIsAccessAllow();\n },\n });\n }, [checkIsAccessAllow]);\n\n const checkIsAccessAllow = useCallback(\n okCallback => {\n isStorageAccessAllow()\n ? okCallback && okCallback()\n : accessWarningModal(okCallback);\n },\n [accessWarningModal],\n );\n\n return { browser, checkIsOldBrowser, checkIsAccessAllow };\n}\n\nexport default useBrowser;\n","import React, {\n forwardRef,\n useState,\n useEffect,\n useCallback,\n useRef,\n useImperativeHandle,\n} from 'react';\nimport InfiniteScroll from 'react-infinite-scroll-component';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { Button, Box } from '@WRAP_COMP';\nimport ScrollDownBtn from './ScrollDownBtn';\nimport { IS_CLIENT, IS_MOBILE } from '@/const';\nimport useBrowser, { BrowserType } from '@/hook/useBrowser';\n\nconst EndMsg = ({ showEndMsg = true, loadPreRoomMsg = () => {} }) => {\n if (IS_CLIENT || !showEndMsg) return null;\n return (\n \n );\n};\n\nconst controlFooterHeight = 40;\n\nconst ChatContent = (\n {\n roomID = 0,\n roomMsgLength = 0,\n loadMoreMsg = () => {},\n loadPreRoomMsg = () => {},\n children = null,\n controlHeader = null,\n controlFooter = null,\n bgColor = '',\n bgImg = '',\n showEndMsg = true,\n },\n ref,\n) => {\n const { browser } = useBrowser();\n const isSogou = browser === BrowserType['Sogou'];\n\n const [elHeight, setElHeight] = useState(0);\n const [roomContentEl, setRoomContentEl] = useState(null);\n\n const [wrapBoxRef, setWrapBoxRef] = useState(null);\n const [infiniteScrollNode, setInfiniteScrollNode] = useState(null);\n const [scrollToBtnShow, setScrollToBtnShow] = useState(false);\n\n const [hasNewMsg, setHasNewMsg] = useState(false);\n const [hasMoreMsg, setHasMoreMsg] = useState(true);\n\n const sogouBrowserScrollTop = () => {\n const target = infiniteScrollNode.getScrollableTarget();\n const outerDivHeight = target.clientHeight;\n const innerDivHeight = target.getElementsByClassName(\n 'infinite-scroll-component__outerdiv',\n )[0].clientHeight;\n const currScrollTop = innerDivHeight - outerDivHeight;\n return currScrollTop;\n };\n\n /**\n * 聊天內容動態偵測高度\n */\n const resizeObserver = useRef(\n new ResizeObserver(entries => {\n window.requestAnimationFrame(() => {\n if (!Array.isArray(entries) || !entries.length) return;\n setRoomContentEl(entries[0].contentRect);\n });\n }),\n );\n // const cleanObserver = useCallback(() => {\n // resizeObserver.current && resizeObserver.current.disconnect();\n // }, []);\n\n const observeTimeID = useRef(null);\n const getRoomContentEl = node => {\n if (!node || !resizeObserver.current) return;\n observeTimeID.current = setTimeout(() => {\n resizeObserver.current.observe(node);\n }, 0);\n };\n\n useEffect(() => {\n if (roomContentEl && roomContentEl.height) {\n let hight =\n roomContentEl.height - (controlFooter ? controlFooterHeight : 0);\n setElHeight(hight);\n }\n // return () => cleanObserver();\n }, [roomContentEl, controlFooter]);\n\n /**\n * 取得訊息\n */\n const loadMoreMsgHandle = async () => {\n const res = await loadMoreMsg();\n res && setHasMoreMsg(res.moreMsg);\n };\n const loadPreRoomMsgHandel = async () => {\n const res = await loadPreRoomMsg();\n res && setHasMoreMsg(res.moreMsg);\n };\n\n /**\n * 滾動相關操作\n */\n const getWrapBoxRef = useCallback(ref => ref && setWrapBoxRef(ref), []);\n\n const onScroll = e => {\n try {\n const scroll = e.target.scrollTop;\n\n // 搜狗是相反的\n if (isSogou) {\n const currScrollTop = sogouBrowserScrollTop();\n\n setScrollToBtnShow(scroll !== currScrollTop);\n scroll === currScrollTop && setHasNewMsg(false);\n scroll === 0 && loadMoreMsgHandle();\n return;\n }\n\n setScrollToBtnShow(scroll < 0);\n scroll >= 0 && setHasNewMsg(false);\n } catch (error) {\n console.log('onScroll error', error);\n }\n };\n\n const scrollNodeTo = (hight = 0) => {\n try {\n if (isSogou) {\n const currScrollTop = sogouBrowserScrollTop();\n infiniteScrollNode.getScrollableTarget().scrollTo(0, currScrollTop);\n } else {\n infiniteScrollNode.getScrollableTarget().scrollTo(0, hight);\n }\n setHasNewMsg(false);\n setScrollToBtnShow(false);\n } catch (error) {\n console.log('scrollNodeTo error', error);\n }\n };\n\n const getInfiniteScrollEl = useCallback(node => {\n node && setInfiniteScrollNode(node);\n }, []);\n\n /**\n * 新訊息提示\n */\n const setHasNewMsgHandle = () => {\n if (!infiniteScrollNode) return;\n if (isSogou) {\n const currScrollTop = sogouBrowserScrollTop();\n if (infiniteScrollNode.lastScrollTop !== currScrollTop) {\n setHasNewMsg(true);\n if (IS_MOBILE) setScrollToBtnShow(true);\n }\n } else {\n if (infiniteScrollNode.lastScrollTop < 0) {\n setHasNewMsg(true);\n if (IS_MOBILE) setScrollToBtnShow(true);\n }\n }\n };\n\n /**\n * 初始顯示\n * hasMoreMsg 為 false 才會顯示 EndMsg\n * */\n const initSetHasMoreMsg = useCallback(() => {\n if (!roomID || !roomMsgLength || !infiniteScrollNode) {\n setHasMoreMsg(false);\n return;\n }\n try {\n const infiniteChild = infiniteScrollNode.el.getElementsByClassName(\n 'infinite-scroll-component__outerdiv',\n )[0];\n infiniteChild.offsetHeight < elHeight\n ? setHasMoreMsg(false)\n : setHasMoreMsg(true);\n } catch (error) {\n console.log('initSetHasMoreMsg error', error);\n }\n }, [infiniteScrollNode, elHeight, roomID, roomMsgLength]);\n useEffect(() => {\n initSetHasMoreMsg();\n }, [initSetHasMoreMsg]);\n\n useImperativeHandle(ref, () => ({\n setHasNewMsgHandle,\n scrollNodeTo,\n }));\n\n return (\n \n {/* control header */}\n \n {controlHeader}\n \n {/* msg block */}\n \n {wrapBoxRef && (\n \n }\n next={loadMoreMsgHandle}\n hasMore={hasMoreMsg}\n loader={\n

\n 载入中...\n

\n }\n inverse={true}\n style={{ display: 'flex', flexDirection: 'column-reverse' }} // 反轉內容順序\n onScroll={onScroll}>\n {children}\n \n )}\n \n {/* 邀請控制 */}\n {controlFooter}\n \n \n );\n};\n\nexport default forwardRef(ChatContent);\n","import { useEffect, useRef, useState, useCallback } from 'react';\nimport { Box } from '@WRAP_COMP';\n\nconst stopEventDefault = e => {\n e.preventDefault();\n e.stopPropagation();\n};\nconst checkIsDragIn = e =>\n e.dataTransfer?.items && e.dataTransfer.items.length > 0;\n\nfunction useDragDropFiles({\n onSetDropFiles = () => {},\n onSetDragInFiles = () => {},\n onSetDragOutFiles = () => {},\n}) {\n // const dropElRef = useRef(null);\n const [dropElRef, setDropElRef] = useState(null);\n const dragCounter = useRef(0);\n\n // isDragging 用於判斷是否有檔案在 drag 檔案的元件之中\n const [isDragging, setDrag] = useState(false);\n\n // 拖進\n const handleDragIn = useCallback(\n e => {\n stopEventDefault(e);\n dragCounter.current++;\n const isDragIn = checkIsDragIn(e);\n if (isDragIn) {\n setDrag(true);\n onSetDragInFiles();\n }\n },\n [onSetDragInFiles],\n );\n\n // 拖出\n const handleDragOut = useCallback(\n e => {\n stopEventDefault(e);\n dragCounter.current--;\n if (dragCounter.current === 0) {\n setDrag(false);\n onSetDragOutFiles();\n }\n },\n [onSetDragOutFiles],\n );\n\n // 拖曳檔案\n const handleDrag = useCallback(e => {\n stopEventDefault(e);\n }, []);\n\n // 放下檔案\n const handleDrop = useCallback(\n e => {\n stopEventDefault(e);\n setDrag(false);\n const isDragIn = checkIsDragIn(e);\n if (isDragIn && e.dataTransfer) {\n onSetDropFiles(e.dataTransfer.files);\n e.dataTransfer.clearData();\n dragCounter.current = 0;\n }\n },\n [onSetDropFiles],\n );\n\n useEffect(() => {\n if (dropElRef) {\n const el = dropElRef;\n el.addEventListener('dragenter', handleDragIn);\n el.addEventListener('dragenter', handleDragIn);\n el.addEventListener('dragleave', handleDragOut);\n el.addEventListener('dragover', handleDrag);\n el.addEventListener('drop', handleDrop);\n // clear events, 清除事件監聽\n return () => {\n el.removeEventListener('dragenter', handleDragIn);\n el.removeEventListener('dragleave', handleDragOut);\n el.removeEventListener('dragover', handleDrag);\n el.removeEventListener('drop', handleDrop);\n };\n }\n }, [handleDrag, handleDragIn, handleDragOut, handleDrop, dropElRef]);\n\n return { setDropElRef, dropElRef, isDragging };\n}\n\nexport const DragInDrop = () => {\n return (\n \n \n 拖曳新增图片\n \n \n );\n};\n\nexport default useDragDropFiles;\n","import { useState, useEffect, useCallback } from 'react';\nimport { IS_MOBILE } from '@/const';\nimport useEventListener from '@/hook/useEventListener';\n\nconst isWebview = () => {\n var useragent = navigator.userAgent;\n var rules = [\n 'WebView',\n '(iPhone|iPod|iPad)(?!.*Safari/)',\n 'Android.*(wv|.0.0.0)',\n ];\n var regex = new RegExp(`(${rules.join('|')})`, 'ig');\n return Boolean(useragent.match(regex));\n};\n\nconst useRWD = () => {\n const [size, setSize] = useState('mobile');\n\n const handleRWD = useCallback(() => {\n if (window.innerWidth > 1200) setSize('xl');\n else if (window.innerWidth > 992) setSize('lg');\n else if (window.innerWidth > 768) setSize('md');\n else if (window.innerWidth > 576) setSize('sm');\n else setSize('mobile');\n }, []);\n\n useEventListener('resize', handleRWD);\n useEffect(() => {\n handleRWD();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return {\n size,\n isMobileSize: size === 'mobile',\n isMobileDevice: IS_MOBILE,\n isWebview: isWebview(),\n };\n};\n\nexport default useRWD;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Input } from 'antd';\n\nconst TextAreaWrapStyle = styled.div`\n position: relative;\n flex: 1;\n`;\nconst HintText = styled.span`\n position: absolute;\n bottom: 4px;\n right: 12px;\n margin-bottom: 0;\n color: ${({ theme }) => theme['gray-2']};\n`;\n\nfunction InputTextArea({\n value = '',\n setValue = () => {},\n onPressEnter = () => {},\n onChange = () => {},\n pasteHandle = () => {},\n onFocus = () => {},\n rows = 4,\n disabled = false,\n}) {\n // 換行處理\n const onkeydown = e => {\n if (e.keyCode === 13) {\n e.shiftKey ? setValue(pre => pre + '\\n') : onPressEnter();\n e.preventDefault();\n }\n };\n return (\n \n \n Shift + Enter 換行\n \n );\n}\n\nexport default InputTextArea;\n","import React, {\n lazy,\n Suspense,\n useState,\n useCallback,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport { SendOutlined } from '@ant-design/icons';\nimport { Input } from 'antd';\nimport { Button, Box, Space } from '@/plugin/wrap-comp';\nimport { IS_CLIENT } from '@/const';\nimport useDragDropFiles, { DragInDrop } from '@/hook/useDragDropFiles';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport useFile from '@/hook/useFile';\nimport useRWD from '@/hook/useRWD';\nimport { MsgContentTypeKeys, stripHtmlTag, lazyRetry } from '@/utils';\n// import AudioModal from '@/components/Modal/Audio';\nimport FrontDrop from './FrontDrop';\nimport InputTextArea from '@/components/InputTextArea';\n\nconst PreviewFileModal = lazy(() =>\n lazyRetry(\n () =>\n import(/*webpackChunkName: \"preview-file-modal\" */ './PreviewFileModal'),\n 'PreviewFileModal',\n ),\n);\nconst InputPayment = lazy(() =>\n lazyRetry(\n () => import(/*webpackChunkName: \"payment-input\" */ './InputPayment'),\n 'InputPayment',\n ),\n);\nconst BtnEmojiPicker = lazy(() =>\n lazyRetry(\n () => import(/*webpackChunkName: \"emoji-picker\" */ './BtnEmojiPicker'),\n 'BtnEmojiPicker',\n ),\n);\nconst BtnUploadFile = lazy(() =>\n lazyRetry(\n () => import(/*webpackChunkName: \"upload-file\" */ './BtnUploadFile'),\n 'BtnUploadFile',\n ),\n);\n\nconst InputBar = (\n {\n pushMsg = () => {},\n paymentInputSubmit = () => {},\n paymentBtnLoading = false,\n showFrontDrop = false,\n onChangeInputValue = () => {},\n frontDropControl = null,\n loading = false,\n showPaymentCancelBtn = true,\n paymentChannelListBtn = null,\n showUploadBtn = true,\n showEmojiBtn = false,\n },\n ref,\n) => {\n const { isMobileDevice } = useRWD();\n const [inputValue, setInputValue] = useState('');\n const [showPaymentInput, setShowPaymentInput] = useState(false);\n // const [showPaymentBtn, setShowPaymentBtn] = useState(false);\n\n const inputChangeHandle = e => {\n onChangeInputValue(e.target.value);\n setInputValue(e.target.value);\n };\n\n /**\n * 傳送 文字訊息\n */\n const pushTextHandle = () => {\n const text = stripHtmlTag(inputValue);\n if (!text || loading) return;\n pushMsg({\n id: Date.now(),\n contentType: MsgContentTypeKeys['Text'],\n text: { text, isEncrypt: false },\n });\n setInputValue('');\n };\n\n // 傳送 圖片訊息\n const pushFileHandle = (file, text = '') => {\n pushMsg({\n id: Date.now(),\n contentType: MsgContentTypeKeys['File'],\n file: { upload: file, text, type: 'Image' },\n });\n return false;\n };\n\n // 傳送 錄音訊息\n // const [showAudioModal, setShowAudioModal] = useState(false);\n // const postAudioHandle = voice => {\n // postMessage({\n // id: Date.now(),\n // contentType: MsgContentTypeKeys['Voice'],\n // voice,\n // });\n // };\n\n // 表情符號\n const [showEmojiBox, setShowEmojiBox] = useState(false);\n const onEmojiAdd = e => {\n let emoji = e.native;\n setInputValue(inputValue + emoji);\n };\n\n // 圖片預覽\n const [previewFileModal, setPreviewFileModal] = useState({ visible: false });\n\n // 圖片拖曳處理\n const { checkIsFileImage } = useFile();\n const { onWarningMsg } = useAlertMessage();\n const dropFilesHandle = useCallback(\n _files => {\n const isImage = _files ? checkIsFileImage(_files[0]) : false;\n if (!_files || !isImage) {\n onWarningMsg('格式错误');\n return;\n }\n setPreviewFileModal({ visible: true, file: _files[0] });\n },\n [checkIsFileImage, onWarningMsg],\n );\n const { setDropElRef, isDragging } = useDragDropFiles({\n onSetDropFiles: dropFilesHandle,\n });\n const getInputBarNode = node => node && setDropElRef(node);\n\n // 圖片貼上處理\n const pasteHandle = useCallback(\n e => {\n const file = e.clipboardData.files[0];\n // console.log('clipboardData', e.clipboardData.getData('text'));\n if (file && checkIsFileImage(file)) {\n setPreviewFileModal({ visible: true, file });\n e.preventDefault();\n }\n },\n [checkIsFileImage],\n );\n\n useImperativeHandle(ref, () => ({\n setShowPaymentInput,\n // setShowPaymentBtn,\n setInputValue,\n }));\n\n return (\n <>\n \n {/* FrontDrop */}\n <>\n {showPaymentInput && (\n }>\n setShowPaymentInput(false)}\n />\n \n )}\n {showFrontDrop && {frontDropControl}}\n {!showFrontDrop && isDragging && (\n \n \n \n )}\n \n\n {/* Input */}\n <>\n {IS_CLIENT && (\n setShowEmojiBox(false)}\n style={{ letterSpacing: '0.08rem', color: 'black' }}\n />\n )}\n {IS_CLIENT || (\n setShowEmojiBox(false)}\n disabled={loading}\n />\n )}\n \n\n {/* Btn group */}\n <>\n \n {/* {showAudioBtn && (\n }\n onClick={() => setShowAudioModal(true)}\n />\n )} */}\n {showEmojiBtn && !isMobileDevice && (\n }>\n \n \n )}\n {paymentChannelListBtn}\n {showUploadBtn && (\n }>\n \n \n )}\n {/* {showPaymentBtn && (\n setShowPaymentInput(true)}>\n 充值\n \n )} */}\n }\n onClick={pushTextHandle}\n />\n \n \n \n {/* */}\n {previewFileModal.visible && (\n }>\n setPreviewFileModal({ visible })}\n file={previewFileModal.file || null}\n postFile={pushFileHandle}\n />\n \n )}\n \n );\n};\n\nexport default forwardRef(InputBar);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Box } from '@WRAP_COMP';\n/**\n * 對話訊息 邀請,加入,離開 顯示用\n * @param {Object} param0\n */\nconst MsgControlItem = ({ text = '', bgColor = 'white' }) => {\n return (\n \n \n {text}\n \n \n );\n};\n\nMsgControlItem.propTypes = {\n text: PropTypes.string,\n bgColor: PropTypes.string,\n};\nexport default MsgControlItem;\n","import Icon from '@ant-design/icons';\nconst DoubleCheckSvg = () => (\n \n \n \n);\n\nexport default function DoubleCheckIcon(props) {\n return ;\n}\n","import Icon from '@ant-design/icons';\n\nconst SoundMuteSvg = () => (\n \n \n \n \n);\n\nexport default function SoundMuteIcon(props) {\n return ;\n}\n","import DoubleCheck from './DoubleCheckIcon';\nimport SoundMute from './SoundMuteIcon';\nconst { theme } = require('@/plugin/theme');\n\nconst DoubleCheckIcon = props => (\n \n);\nconst SoundMuteIcon = props => (\n \n);\n\nexport { DoubleCheckIcon, SoundMuteIcon };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n CheckOutlined,\n LoadingOutlined,\n CloseOutlined,\n} from '@ant-design/icons';\nimport { Typography, Space } from 'antd';\nimport { Box } from '@WRAP_COMP';\nimport { DoubleCheckIcon } from '@/components/Icon';\nimport { formatTime } from '@/utils';\nimport { IS_CLIENT } from '@/const';\nconst { theme } = require('@/plugin/theme');\n\n/**\n * 對話訊息各種狀態顯示處理\n * - 使用者資訊 (username, userID, timestamp)\n * @param {String} param0.children 嵌入文字內容\n * @param {String} param0.showName 顯示名稱\n * @param {String} param0.userID 顯示userID\n * @param {String} param0.timestamp 時間\n * @param {Boolean}} param0.isShowMsgStatus 是否顯示訊息各種狀態\n * @param {Boolean} param0.isLoading 正在傳送\n * @param {Boolean} param0.isSend \b傳送成功\n * @param {Boolean} param0.isRead 對方已讀\n * @param {Boolean} param0.isRetract 已收回訊息\n * @param {Boolean} param0.isError 訊息傳送出錯\n * @param {Boolean} param0.right 訊息對齊\n * @param {String} param0.bg 背景色\n */\n\nconst MsgWrap = React.forwardRef(\n (\n {\n children,\n showName = '',\n userID = 0,\n timestamp = 0,\n isShowMsgStatus = true,\n isLoading = false,\n isSend = false,\n isRead = false,\n isRetract = false,\n isError = false,\n right = true,\n bg,\n color = 'black',\n avatar = null,\n },\n ref,\n ) => {\n const justifyContent = right ? 'flex-end' : 'flex-start';\n const checkRender = ({ isRead, isSend, isError, isLoading }) => {\n if (isLoading) return ;\n if (isError) return ;\n if (isRead) return ;\n if (isSend) return ;\n return null;\n };\n\n return (\n \n
\n {/* 使用者資訊 */}\n {IS_CLIENT || (\n \n \n {showName}\n {userID ? (\n \n (#{userID})\n \n ) : null}\n {timestamp && (\n \n {formatTime(timestamp)}\n \n )}\n \n \n )}\n\n {/* 訊息資訊 */}\n\n \n {/* 狀態 */}\n {isShowMsgStatus && (\n \n \n {checkRender({ isRead, isSend, isError, isLoading })}\n \n \n )}\n\n {/* 撤回狀態 */}\n {isRetract ? (\n \n 讯息已撤回\n \n ) : null}\n\n {/* 內容 */}\n \n {children}\n \n {IS_CLIENT && (\n \n {avatar}\n \n )}\n \n
\n
\n );\n },\n);\n\nMsgWrap.propTypes = {\n timestamp: PropTypes.number,\n direction: PropTypes.string,\n bg: PropTypes.string,\n};\n\nexport default MsgWrap;\n","import React, { lazy, useEffect, useState, useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { sentryCaptureErr } from '@/plugin/sentry';\nimport { IS_CLIENT } from '@/const';\nimport { setRenew } from '@/store/client';\nimport { useMutationApi, apiType } from '@HOOK/useApi';\nimport useCrypto from '@HOOK/useCrypto';\nimport useRecMessage from '@HOOK/useRecMessage';\nimport { headerAvatarURL } from '@HOOK/useRoom';\nimport useAlertMessage from '@HOOK/useAlertMessage';\nimport {\n AccountTypeKeys,\n MsgStatusKeys,\n MsgContentTypeKeys,\n RoomTypeKey,\n lazyRetry,\n} from '@/utils';\nimport AvatarFetch from '../Avatar/AvatarFetch';\nimport MsgControlItem from './MsgControlItem';\nimport MsgWrap from './MsgWrap';\nimport CsAvatarUrl from '@/assets/cs-avatar.jpg';\n\nconst MsgContextMenu = lazy(() =>\n lazyRetry(\n () => import(/*webpackChunkName: \"msg-context-menu\" */ './MsgContextMenu'),\n 'MsgContextMenu',\n ),\n);\n\n/**\n * 對話狀態的訊息\n * @param {} param0\n * @returns\n */\n\nconst MGM_TYPE = [\n AccountTypeKeys['CustomerService'],\n AccountTypeKeys['Monitor'],\n AccountTypeKeys['Manager'],\n AccountTypeKeys['System'],\n];\n\nconst Msg = ({\n children,\n roomID = 0,\n msg: originalMsg = {},\n usersMap = {},\n lastReadID = 0, // TODO\n updateMsg = () => {},\n}) => {\n const dispatch = useDispatch();\n const { loginInfo } = useSelector(({ global }) => global);\n const { clientUserInfo } = useSelector(({ client }) => client);\n const { meInfo: auth } = useSelector(({ auth }) => auth);\n const meInfo = IS_CLIENT\n ? clientUserInfo\n : { ...auth, token: loginInfo.token };\n\n const { onErrorMsg } = useAlertMessage();\n const [msgWrapNode, setMsgWrapNode] = useState(null);\n\n const [isRetract, setIsRetract] = useState(\n originalMsg.status === MsgStatusKeys['Retract'],\n );\n const [msg, setMsg] = useState(originalMsg);\n\n const { id, from = null, timestamp = null, file, text, contentType } = msg;\n\n const isSystem = contentType === MsgContentTypeKeys['System'];\n\n const isSelf = isSystem ? false : from ? meInfo.id === from.userID : true;\n\n const avatarURLHandle = () => {\n if (!IS_CLIENT) return '';\n if (isSystem) {\n return headerAvatarURL(usersMap) || CsAvatarUrl;\n } else {\n if (\n !from ||\n [AccountTypeKeys['CommonUser'], AccountTypeKeys['Tourist']].includes(\n from.accountType,\n )\n ) {\n return meInfo.avatarURL\n ? require(`@/assets/${meInfo.avatarURL}`).default\n : '';\n }\n return usersMap[from.userID]?.avatarURL || CsAvatarUrl;\n }\n };\n\n const avatarURL = avatarURLHandle();\n\n const [loading, setLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n const [postMsg] = useMutationApi(apiType.POST_MSG, {\n context: { isClient: IS_CLIENT, isShowGeneralError: false },\n });\n\n const [updateMsgStatus, { loading: retractLoading }] = useMutationApi(\n apiType.UPDATE_MSG,\n );\n\n /**\n * 傳送訊息\n */\n // 加解密\n const { encryptStrHandle } = useCrypto(meInfo.token);\n const isTextEncrypt = str => {\n try {\n const encryptStr = encryptStrHandle(str);\n return { text: { text: encryptStr, isEncrypt: true } };\n } catch (error) {\n console.log('postMsgHandle encrypt error', error);\n return {};\n }\n };\n\n const postMsgHandle = async ({ contentType, text, file, lastMessageID }) => {\n setLoading(true);\n const isText = contentType === MsgContentTypeKeys['Text'];\n let encryptTextObj = isText ? isTextEncrypt(text.text) : {};\n const postDefaultObj = {\n roomID,\n type: RoomTypeKey['Consulting'],\n contentType,\n lastMessageID: lastMessageID ? String(lastMessageID) : '',\n ...(isText ? { text } : { file }),\n };\n let resMsg = {};\n const [err, encryptPostData] = await postMsg({\n in: { ...postDefaultObj, ...encryptTextObj },\n });\n\n if (err) {\n let errorMsg = '';\n let errorLevel = 'info';\n let sentryErrorData = {\n title: `PostMessage Error Info ${err.message}`,\n roomID,\n params: JSON.stringify({ ...postDefaultObj, ...encryptTextObj }),\n resError: JSON.stringify(err),\n };\n // 諮詢房已封存\n if (err.message === '400004') {\n errorMsg = '咨询房已封存';\n }\n // 加密回傳錯誤 重新發送post\n if (err.message === '400000' && isText) {\n sentryErrorData.tokenKey = meInfo.token;\n sentryErrorData.originMsg = text?.text;\n sentryErrorData.encryptMsg = encryptTextObj?.text?.text;\n const [resentErr, data] = await postMsg({\n in: { ...postDefaultObj },\n });\n if (resentErr) {\n sentryErrorData.title = `PostMessage resent Error Info ${resentErr.message}`;\n sentryErrorData.resentError = JSON.stringify(resentErr);\n sentryErrorData.resentParams = JSON.stringify(postDefaultObj);\n onErrorMsg(resentErr.message);\n } else {\n errorMsg = '';\n resMsg = { ...data.data.postMessage };\n sentryErrorData.successResData = JSON.stringify(data);\n }\n }\n\n if (errorMsg) {\n onErrorMsg(errorMsg);\n setIsError(true);\n sentryCaptureErr(\n sentryErrorData.title,\n { ...sentryErrorData },\n errorLevel,\n );\n }\n } else {\n resMsg = { ...encryptPostData.data.postMessage };\n }\n if (resMsg.renew) dispatch(setRenew(true));\n setMsg(resMsg);\n updateMsg({ id, msg: resMsg });\n setLoading(false);\n };\n\n /**\n * 撤回訊息\n */\n const retractMsgHandle = useCallback(\n async messageID => {\n const [err] = await updateMsgStatus({\n messageID,\n in: {\n contentType: MsgContentTypeKeys['Unknown'],\n status: MsgStatusKeys['Retract'],\n },\n });\n if (!err) setIsRetract(true);\n },\n [updateMsgStatus],\n );\n const showRetractHandle = from => {\n // Monitor 可以撤回其他客服對話\n return (\n meInfo.accountType === AccountTypeKeys['Monitor'] &&\n from.accountType === AccountTypeKeys['CustomerService']\n );\n };\n\n /**\n * 訊息顯示處理\n * - 息預設都是自己傳的的狀態(right)\n * - client 端不需顯示 username userID\n */\n const userInfo = from => {\n let showName = meInfo.username;\n let userID = meInfo.id;\n let userAccountType = meInfo.accountType;\n // 客端顯示\n if (IS_CLIENT) {\n return isSelf\n ? { showName: '', userID: '' }\n : { showName: usersMap[from.userID]?.aliasName || '客服', userID: '' };\n }\n if (from) {\n showName = usersMap[from.userID]?.username || '';\n userID = from.userID || 0;\n userAccountType = usersMap[from.userID]?.accountType || '';\n }\n if (userAccountType === AccountTypeKeys['Tourist']) showName = '遊客';\n return { showName, userID };\n };\n\n const color = from => {\n const isClient = { bg: 'primary', color: 'white' };\n const isOther = { bg: 'white', color: 'black' };\n if (!from && MGM_TYPE.includes(meInfo.accountType)) return isOther;\n return MGM_TYPE.includes(from?.accountType) ? isOther : isClient;\n };\n\n /**\n * 監聽\n */\n useRecMessage({\n msgID: id,\n msgStatusRetract: () => setIsRetract(true),\n });\n\n useEffect(() => {\n if (!msg.timestamp && roomID) {\n postMsgHandle(msg);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (IS_CLIENT && isRetract)\n return (\n \n );\n\n return (\n <>\n setMsgWrapNode(n)}\n timestamp={timestamp}\n right={isSelf}\n {...color(from)}\n {...userInfo(from)}\n isShowMsgStatus={isSelf}\n isLoading={loading || retractLoading}\n isSend={!!timestamp}\n isRead={typeof id === 'string' && id > 0 && id <= lastReadID}\n isRetract={isRetract}\n isError={isError}\n avatar={}>\n {React.cloneElement(children, {\n fileURL: file?.fileURL,\n text: file?.text || text?.text,\n isEncrypt: text?.isEncrypt,\n })}\n \n {from && typeof id === 'string' && !IS_CLIENT && (\n retractMsgHandle(id)}\n />\n )}\n \n );\n};\nexport default Msg;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { IS_CLIENT } from '@/const';\nimport useCrypto from '@HOOK/useCrypto';\nimport { Box } from '@WRAP_COMP';\n\nfunction MsgText({ text, isEncrypt }) {\n const { loginInfo } = useSelector(({ global }) => global);\n const { clientUserInfo } = useSelector(({ client }) => client);\n const { meInfo: auth } = useSelector(({ auth }) => auth);\n const meInfo = IS_CLIENT\n ? clientUserInfo\n : { ...auth, token: loginInfo.token };\n\n const { decryptStrHandle } = useCrypto(meInfo.token);\n\n const _text = isEncrypt ? decryptStrHandle(text) : text;\n const __html = _text.replace(/\\n/g, '
');\n\n return (\n \n );\n}\nexport default React.memo(MsgText);\n","import React from 'react';\nimport styled from 'styled-components';\nimport alipayUrl from './alipay.png';\nimport wxUrl from './wx.png';\nimport bankUrl from './bank.png';\n// import bankUrl from './bank.png';\nimport { Box } from '@WRAP_COMP';\nimport { PayType } from '@/utils';\n\nconst imgType = {\n [PayType['wx'].key]: wxUrl, // 微信\n [PayType['alipay'].key]: alipayUrl, // 支付寶\n [PayType['bank'].key]: bankUrl, // 銀行卡\n};\n\nconst IconsWrap = styled(Box)`\n & .icon {\n width: 32px !important;\n }\n`;\n\nexport function Icon({ payType = '', style }) {\n return {payType}\n}\n\nfunction Icons({ payType = '' }) {\n return (\n \n {imgType[payType] && (\n \n )}\n \n {PayType[payType]?.label || payType}\n \n \n );\n}\n\nexport default Icons;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAYAAAAdHLWhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1YWFkOWIyNS00YTBjLWUzNGEtYTVmOS03MzNhZTYzYmY2MDUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkRBMDExMEYwRTQ5MTFFQzkwQjBDNjM4RTQyN0FCQkIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkRBMDExMEUwRTQ5MTFFQzkwQjBDNjM4RTQyN0FCQkIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTJhY2M5NjYtOGUwMi1lOTRiLTg5OTktMzQxMDM2NzY5ODg0IiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6M2RmOGIzOTUtMGRmYy0xMWVjLWE4Y2Ut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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAYAAAAdHLWhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1YWFkOWIyNS00YTBjLWUzNGEtYTVmOS03MzNhZTYzYmY2MDUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODlCREQ0OUUwRTQ5MTFFQ0E4NzNGN0EzMzgwN0EwMjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODlCREQ0OUQwRTQ5MTFFQ0E4NzNGN0EzMzgwN0EwMjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NTJhY2M5NjYtOGUwMi1lOTRiLTg5OTktMzQxMDM2NzY5ODg0IiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6M2RmOGIzOTUtMGRmYy0xMWVjLWE4Y2Ut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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAYAAAAdHLWhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1YWFkOWIyNS00YTBjLWUzNGEtYTVmOS03MzNhZTYzYmY2MDUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkYwRDVDNDEzQzc1MTFFQzk2NDhBRTAyQUY2N0JEOEUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkYwRDVDNDAzQzc1MTFFQzk2NDhBRTAyQUY2N0JEOEUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Nzk0ZDIyNzAtYTMwOC1hOTQ1LWI5MmYtZmNjYTg0N2M2N2ZkIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6M2RmOGIzOTUtMGRmYy0xMWVjLWE4Y2Ut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\"","import React from 'react';\nimport { Spin, Typography } from 'antd';\nimport { Box } from '@WRAP_COMP';\nimport { IS_CLIENT } from '@/const';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\n// import { PayType } from '@/utils';\nimport PayIcons from './Icons';\n\nfunction PayList({ roomID, amount, payList = [] }) {\n const { onErrorMsg } = useAlertMessage();\n const [postDeposit, { loading }] = useMutationApi(apiType.deposit, {\n context: { isShowGeneralError: false },\n onError: err => {\n const msgType = {\n 400000: () => onErrorMsg('银行卡抽取失败,请联系客服'),\n 400002: () => onErrorMsg('已有订单进行中'),\n 402001: () => onErrorMsg('取消次数过多,请完成充值'),\n 500002: () => onErrorMsg('呼叫第三方失败,请联系客服人员'),\n };\n\n msgType[err.message] ? msgType[err.message]() : onErrorMsg(err.message);\n },\n });\n\n const clickPayment = params => () => {\n IS_CLIENT\n ? postDeposit({ in: { roomID, ...params } })\n : onErrorMsg('无法操作');\n };\n\n return (\n <>\n \n \n \n \n 支付金額:\n \n ¥ {amount || 0}\n \n \n \n \n 欢迎使用官方充值代理,请选择你的充值方式\n \n \n {payList.map(({ channelID, payType }) =>\n // PayType[payType]\n payType === 'bank' ? (\n \n \n \n ) : null,\n )}\n \n \n \n \n );\n}\n\nexport default PayList;\n","import { useCallback } from 'react';\nimport { Modal } from 'antd';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport { apiType, useMutationApi } from '@/hook/useApi';\n\nfunction useOrder({ onCancelSuccess = () => {} } = {}) {\n const { onErrorMsg } = useAlertMessage();\n\n const [cancelDeposit] = useMutationApi(apiType.cancelDeposit, {\n context: { isShowGeneralError: false },\n onError: err => {\n if (['400000', '400002', '500002', '402001'].includes(err.message)) {\n onErrorMsg('你已超出取消次数限制,请联系客服');\n } else {\n onErrorMsg(err.message);\n }\n },\n onSuccess: (_, params) => {\n onCancelSuccess({ orderNo: params.in.orderNo });\n },\n });\n\n const cancelDepositConfirm = useCallback(\n ({ roomID, orderNo }) => {\n Modal.confirm({\n centered: true,\n title: '取消订单',\n content: '确定要取消这笔订单?',\n okText: '确定',\n cancelText: '取消',\n onOk: () => cancelDeposit({ in: { roomID, orderNo } }),\n });\n },\n [cancelDeposit],\n );\n\n const [expireDeposit] = useMutationApi(apiType.expireDeposit, {\n context: { isShowGeneralError: false },\n onError: err => {\n // if (['400000', '400002', '500002', '402001'].includes(err.message)) {\n // onErrorMsg('你已超出取消次数限制,请联系客服');\n // } else {\n // onErrorMsg(err.message);\n // }\n onErrorMsg(err.message);\n },\n });\n\n // 諮詢/崔單\n const [consultingOrder, { loading }] = useMutationApi(\n apiType.consultingOrder,\n {\n context: { isShowGeneralError: false },\n onError: err => {\n // if (['400000', '400002', '500002', '402001'].includes(err.message)) {\n // onErrorMsg('你已超出取消次数限制,请联系客服');\n // } else {\n // onErrorMsg(err.message);\n // }\n onErrorMsg(err.message);\n },\n },\n );\n\n return {\n cancelDepositConfirm,\n cancelDeposit,\n expireDeposit,\n consultingOrder,\n loading,\n };\n}\n\nexport default useOrder;\n","import React, { forwardRef, useState, useImperativeHandle } from 'react';\nimport { Drawer } from 'antd';\nimport { Popup } from 'antd-mobile';\nimport { CloseOutlined } from '@ant-design/icons';\nimport useRWD from '@/hook/useRWD';\nimport { Box } from '@/plugin/wrap-comp';\n\nconst PopupC = ({\n children,\n title = 'title',\n onMaskClick,\n height,\n ...props\n}) => {\n return (\n \n \n
\n
{title}
\n
\n \n
\n \n
{children}
\n
\n );\n};\n\nfunction ClientDrawerWrap({ children, title = '', height = '100%' }, ref) {\n const [visible, setVisible] = useState(false);\n\n const { isMobileSize } = useRWD();\n\n const Comp = isMobileSize ? PopupC : Drawer;\n\n const compProps = isMobileSize\n ? {\n title,\n visible,\n onMaskClick: () => setVisible(false),\n bodyStyle: {\n borderTopLeftRadius: '16px',\n borderTopRightRadius: '16px',\n overflow: 'hidden',\n },\n height,\n }\n : {\n title,\n visible,\n onClose: () => setVisible(false),\n width: '400px',\n placement: 'right',\n height,\n };\n\n useImperativeHandle(ref, () => ({\n setVisible,\n }));\n\n return {children};\n}\n\nexport default forwardRef(ClientDrawerWrap);\n","import React, { forwardRef, useRef, useImperativeHandle } from 'react';\nimport ClientDrawerWrap from '@/components/Drawer/ClientDrawerWrap';\nimport { IS_CLIENT } from '@/const';\nimport useOrder from '@/hook/useOrder';\nimport { CopyBtn } from '@/hook/useCopy';\nimport { Button, Box, Divider } from '@WRAP_COMP';\nimport {\n PayType,\n formatDateTime,\n ConsultingOrderTypeKeys,\n OrderStatusKeys,\n} from '@UTILS';\n\nfunction ClientOrderDetailDrawer(\n { roomID, payType, amount, orderNo, status, createdAt },\n ref,\n) {\n const orderDetailDrawerWrapRef = useRef(null);\n\n const { consultingOrder, loading } = useOrder();\n\n const _consultingOrder = async () => {\n await consultingOrder({\n in: {\n roomID,\n orderNo,\n type: ConsultingOrderTypeKeys['Consulting'],\n },\n });\n orderDetailDrawerWrapRef.current.setVisible(false);\n };\n\n useImperativeHandle(ref, () => ({\n setVisible: orderDetailDrawerWrapRef.current.setVisible,\n }));\n\n return (\n \n \n \n
付款方式
\n
{PayType[payType]?.label}
\n
\n \n \n
存款金额
\n
{amount}
\n
\n \n \n
订单号
\n
\n {orderNo}\n {IS_CLIENT ? (\n \n 咨询此单\n \n ) : (\n \n )}\n
\n
\n \n \n
状态
\n
{OrderStatusKeys[status]?.label}
\n
\n \n \n
日期
\n
{formatDateTime(createdAt)}
\n
\n
\n \n );\n}\n\nexport default forwardRef(ClientOrderDetailDrawer);\n","import React, { useState, useEffect, useRef } from 'react';\nimport { Typography } from 'antd';\nimport QRCode from 'qrcode-react';\nimport { IS_CLIENT } from '@/const';\nimport { Box, Divider, Button } from '@WRAP_COMP';\nimport {\n PayType,\n PayTypeImg,\n PayMethod,\n OrderStatusKeys,\n getNow,\n} from '@UTILS';\nimport useRecMessage from '@/hook/useRecMessage';\nimport useOrder from '@/hook/useOrder';\nimport { CopyBtn } from '@/hook/useCopy';\nimport { fullScreenHandle } from '@/hook/useBrowser';\nimport ClientDrawerWrap from '@/components/Drawer/ClientDrawerWrap';\nimport ClientOrderDetailDrawer from '@/components/Drawer/ClientOrderDetailDrawer';\n\nimport alipayProcessUrl from '@/assets/alipay-process.jpg';\nimport wxProcessUrl from '@/assets/wx-process.jpg';\nimport { Icon } from '../PayList/Icons';\n\nconst InfoItem = ({ label = '', value = '', isBlue = false }) => {\n return (\n \n \n \n {label}:\n \n \n {value}\n \n \n \n \n );\n};\n\nfunction BankCardContent({\n bankName,\n bankCode,\n branchName,\n cardNo,\n accountName,\n amount,\n orderNo,\n onClickAlipay,\n onClickWx,\n}) {\n const _cardNo = cardNo.replace(/\\s*/g, '');\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n 支付宝转银行卡教程\n \n \n \n \n 微信转银行卡教程\n \n \n \n );\n}\nfunction AliCardContent({\n bankName,\n bankCode,\n branchName,\n cardNo,\n accountName,\n amount,\n orderNo,\n onClickAlipay,\n onClickWx,\n}) {\n const _cardNo = cardNo.replace(/\\s*/g, '');\n return (\n <>\n \n \n \n \n \n \n \n \n );\n}\n\nfunction QRcodeContent({\n url,\n orderNo,\n amount,\n qUrl,\n accountName,\n account,\n payType,\n}) {\n return (\n \n \n {!!accountName && }\n {!!account && }\n \n \n {!!url && }\n {!!qUrl && (\n WithdrawAddressUrl\n )}\n \n 使用\n \n 扫描支付\n \n \n \n );\n}\n\nfunction RedirectContent({ url, orderNo, amount, payType, status }) {\n return (\n \n \n \n \n \n \n \n {PayType[payType].label}\n \n \n \n \n fullScreenHandle(url)}\n disabled={\n !IS_CLIENT ||\n ![\n OrderStatusKeys['Pending'].key,\n OrderStatusKeys['Waiting'].key,\n ].includes(status)\n }>\n 点击前往收银台\n \n \n );\n}\n\nfunction Oder({\n msgID = 0,\n payType = '', // 使用的支付\n payMethod = '', // 支付方式\n roomID = 0,\n\n orderStatus = '', // 訂單狀態\n orderNo = '',\n orderAmount = 0,\n expiredAt = 0,\n\n bank = {},\n qrcode = {},\n redirect = {},\n\n createdAt,\n}) {\n const orderDetailDrawerWrapRef = useRef(null);\n const alipayDrawerWrapRef = useRef(null);\n const wxDrawerWrapRef = useRef(null);\n\n const [status, setStatus] = useState(orderStatus);\n\n const { cancelDepositConfirm, expireDeposit } = useOrder(); // 取消訂單\n\n const _cancelDepositConfirm = () => cancelDepositConfirm({ roomID, orderNo });\n\n const orderContentRender = {\n [PayMethod['bank']]: () => (\n alipayDrawerWrapRef.current.setVisible(true)}\n onClickWx={() => wxDrawerWrapRef.current.setVisible(true)}\n />\n ),\n\n [PayMethod['sub_alipay']]: () => (\n alipayDrawerWrapRef.current.setVisible(true)}\n onClickWx={() => wxDrawerWrapRef.current.setVisible(true)}\n />\n ),\n [PayMethod['qrcode']]: () => (\n \n ),\n [PayMethod['redirect']]: () => (\n \n ),\n };\n\n useRecMessage({\n msgID,\n orderStatusCancel: () => setStatus(OrderStatusKeys['Canceled'].key),\n orderStatusApproving: () => setStatus(OrderStatusKeys['Waiting'].key),\n });\n\n useEffect(() => {\n // 訂單倒數結束要打過期...\n if (\n orderStatus === OrderStatusKeys['Pending'].key &&\n getNow() > expiredAt\n ) {\n expireDeposit({ in: { roomID, orderNo } });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [expiredAt, orderStatus, roomID, orderNo]);\n\n return (\n <>\n \n \n
收款信息
\n \n orderDetailDrawerWrapRef.current?.setVisible(true)}\n style={{\n background: '#E8F6FF',\n color: '#3392D1',\n border: 'none',\n borderRadius: '4px',\n }}>\n 订单详情\n \n {[\n OrderStatusKeys['Canceled'].key,\n OrderStatusKeys['Expired'].key,\n ].includes(status) || (\n \n 取消订单\n \n )}\n \n
\n \n\n {/* 訂單內容 */}\n {orderContentRender[payMethod.toLowerCase()]?.() || null}\n
\n\n \n\n \n \n \n\n \n \n \n \n );\n}\n\nexport default Oder;\n","import React from 'react';\nimport { Box } from '@WRAP_COMP';\nimport { MsgSystemType } from '@/utils';\nimport PayList from './PayList';\nimport Oder from './Oder';\n\nfunction MsgSystem({ msgID, type, content, roomID, postMsg }) {\n const systemType = {\n [MsgSystemType['PayList']]: content => (\n \n ),\n [MsgSystemType['UserOrder']]: content => (\n \n ),\n [MsgSystemType['Text']]: content => (\n
${content.text}
` }} />\n ),\n };\n return systemType[type] ? {systemType[type](content)} : null;\n}\n\nexport default MsgSystem;\n","import React from 'react';\nimport { Image } from 'antd';\n\nfunction MsgImage({ fileURL = '', text = '' }) {\n return (\n <>\n \n
\n {text}\n \n );\n}\n\nexport default MsgImage;\n","import React from 'react';\nimport { Divider } from 'antd';\nimport { Box, Button } from '@WRAP_COMP';\nimport { MsgContentTypeKeys } from '@/utils';\n\nconst layoutMap = {\n BASELINE: { display: 'block' },\n HORIZONTAL: { display: 'flex' }, // 水平\n VERTICAL: { display: 'flex', flexDirection: 'column' }, // 垂直\n};\n\nfunction MsgBubble({ header, hero, body, footer, pushMsg, onOrderDetail }) {\n const compMap = {\n box: ({\n children,\n layout = 'BASELINE',\n justifyContent = '',\n alignItems = '',\n padding = '',\n margin = '',\n separator = false,\n }) => (\n <>\n {separator && }\n \n {children}\n \n \n ),\n\n text: ({ text, color, size, weight }) => {\n const __html = text.replace(/\\n/g, '
');\n return (\n \n );\n },\n\n button: ({ action, width, color, icon, iconAlign }) => {\n const { type, text, data } = action;\n\n const postBackMap = {\n onOrderDetail,\n };\n\n const actionTypeMap = {\n MESSAGE: () =>\n pushMsg('PUSH', {\n msgList: [\n {\n id: Date.now(),\n contentType: MsgContentTypeKeys['Text'],\n text: { text, isEncrypt: false },\n },\n ],\n }),\n POSTBACK: () => postBackMap[data]?.(),\n URI: () => {},\n };\n\n const IconComp = icon ? compMap['icon'] : null;\n const renderIconComp = () => (icon ? : null);\n\n return (\n \n \n {iconAlign === 'left' && renderIconComp()}\n {text}\n {iconAlign === 'right' && renderIconComp()}\n \n \n );\n },\n\n separator: ({ direction }) => (\n \n ),\n\n icon: ({ url, style }) => {\n return (\n \n );\n },\n };\n\n const Contents = ({ contents }) => {\n if (!contents) return null;\n return (\n <>\n {contents.map(({ type, ...item }, idx) => {\n const ContentComp = compMap[type] || null;\n if (!ContentComp) return null;\n return (\n \n \n \n );\n })}\n \n );\n };\n\n const Bubble = ({ type, contents, ...props }) => {\n const BubbleComp = compMap[type] || null;\n if (!BubbleComp) return null;\n return (\n \n \n \n );\n };\n\n return (\n
\n {header && }\n {hero && }\n {body && }\n {footer && }\n
\n );\n}\n\nexport default MsgBubble;\n","import { useCallback } from 'react';\nimport { IS_CLIENT } from '@/const';\n\nimport Msg from '@/components/Msg';\nimport MsgControlItem from '@/components/Msg/MsgControlItem';\nimport MsgText from '@/components/Msg/MsgText';\nimport MsgSystem from '@/components/Msg/MsgSystem';\nimport MsgImage from '@/components/Msg/MsgImage';\nimport MsgBubble from '@/components/Msg/MsgBubble';\n\nimport { ReceiveMsgContentType, MsgStatusKeys } from '@/utils';\n\nfunction MsgList({\n roomMsg = [],\n roomID = 0,\n usersMap = {},\n lastReadID = [],\n postSystemMsg = () => {},\n setRoomMsgHandle = () => {},\n onOrderDetail = () => {},\n}) {\n /**\n *\n */\n const msgBubbleRender = msg => {\n const { id, bubble, roomID } = msg;\n return (\n \n \n \n );\n };\n\n /**\n * 系統類訊息處理\n * @param {*} msg\n * @returns \n */\n const msgSystemRender = useCallback(\n msg => {\n const { id, system, roomID } = msg;\n return (\n \n \n \n );\n },\n [lastReadID, postSystemMsg, usersMap],\n );\n\n /**\n * 加入、離開、型態處理\n * @param {*} msg\n * @returns \n */\n const msgControlRender = useCallback(\n ({ id, timestamp, join, leave }) => {\n let showUserText = '';\n let text = '';\n\n if (join) {\n showUserText = IS_CLIENT\n ? usersMap[join.userID]?.aliasName || '客服'\n : usersMap[join.userID]?.username || '';\n text = `${showUserText} 加入群组`;\n }\n if (leave) {\n showUserText = IS_CLIENT\n ? usersMap[leave.userID]?.aliasName || '客服'\n : usersMap[leave.userID]?.username || '';\n text = `${showUserText} 离开群组`;\n }\n return ;\n },\n [usersMap],\n );\n\n /**\n * 檔案\n * @param {*} msg\n * @returns \n */\n const msgFileRender = useCallback(\n msg => {\n return (\n setRoomMsgHandle('UPDATE', { id, msg })}>\n \n \n );\n },\n [usersMap, roomID, lastReadID, setRoomMsgHandle],\n );\n\n /**\n * 文字\n * @param {*} msg\n * @returns \n */\n const msgTextRender = useCallback(\n msg => {\n return (\n setRoomMsgHandle('UPDATE', { id, msg })}>\n \n \n );\n },\n [roomID, lastReadID, usersMap, setRoomMsgHandle],\n );\n\n const type = {\n [ReceiveMsgContentType['Text']]: msg => msgTextRender(msg),\n [ReceiveMsgContentType['File']]: msg => msgFileRender(msg),\n [ReceiveMsgContentType['Join']]: msg => msgControlRender(msg),\n [ReceiveMsgContentType['Leave']]: msg => msgControlRender(msg),\n [ReceiveMsgContentType['System']]: msg => msgSystemRender(msg),\n [ReceiveMsgContentType['Bubble']]: msg => msgBubbleRender(msg),\n\n // 前端自己加的 cusType\n CusMsgContentType: msg => msg.render && msg.render(msg.id),\n };\n\n return (\n <>\n {roomMsg.map(msg => {\n if (IS_CLIENT && msg.status === MsgStatusKeys['Retract']) return null; // 收回的訊息不顯示\n return type[msg.contentType]?.(msg) ?? null;\n })}\n \n );\n}\n\nexport default MsgList;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Badge } from 'antd';\n\nconst { theme } = require('@/plugin/theme');\n\nconst status = {\n online: { text: '在线', status: 'processing', color: theme.success },\n offline: { text: '离线', status: 'default', color: theme.default },\n stealth: { text: '隐身', status: 'warning', color: theme.warning },\n};\n\nfunction OnlineStatusBadge({ isOnline = '', isStealth = '' }) {\n const type =\n isOnline === 'Yes'\n ? isStealth === 'Yes'\n ? 'stealth'\n : 'online'\n : 'offline';\n\n return (\n \n );\n}\n\nOnlineStatusBadge.propTypes = {\n isOnline: PropTypes.string,\n isStealth: PropTypes.string,\n};\nexport default OnlineStatusBadge;\n","import React, { useState, useEffect } from 'react';\nimport { Drawer, Space, Checkbox } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport { useActiveList } from '@/hook/useList';\nimport DataTable from '@/components/Table/DataTable';\nimport OnlineStatusBadge from '@/components/User/OnlineStatusBadge';\nimport AntAlert from '@/components/Alert';\nimport { AccountTypeKeys, UserStatusKey } from '@/utils';\n\nfunction JoinCustomerServiceDrawer({\n visible = false,\n loading = false,\n setVisible = () => {},\n submit = () => {},\n}) {\n const [errMsg, setErrMsg] = useState('');\n const [selected, setSelected] = useState({ keys: [], rows: [] });\n const selectChangeHandle = (keys, rows) => {\n setSelected({ keys, rows });\n };\n const closeDrawer = () => {\n setSelected({ keys: [], rows: [] });\n setVisible(false);\n };\n useEffect(() => {\n visible || setSelected({ keys: [], rows: [] });\n }, [visible]);\n\n const [dataSource, setDataSource] = useState([]);\n const { loading: listLdg } = useActiveList({\n api: 'LIST_USER',\n originPagination: { page: 1, perPage: 9999 },\n cusFilter: {\n isOnline: true,\n filter: {\n user: {\n status: UserStatusKey['Unknown'],\n accountType: AccountTypeKeys['CustomerService'],\n },\n },\n },\n options: {\n skip: !visible,\n onCompleted: ({ listUser }) => {\n setDataSource(listUser.users || []);\n },\n },\n });\n\n const submitHandle = () => {\n if (!selected.keys.length) {\n setErrMsg(() => '請選擇人員');\n return;\n }\n submit(selected.keys);\n };\n\n const columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n key: 'id',\n },\n {\n title: '帐号',\n dataIndex: 'username',\n key: 'username',\n },\n {\n title: '別名',\n dataIndex: 'aliasName',\n key: 'aliasName',\n render: h => h || '-',\n },\n {\n title: '在线状态',\n key: 'isOnlineStatus',\n render: ({ isOnline, setting }) => (\n \n ),\n },\n ];\n\n const [showOnlyOnline, setShowOnlyOnline] = useState(true);\n const onChange = e => setShowOnlyOnline(!e.target.checked);\n\n const filterData = dataSource =>\n dataSource.filter(data =>\n showOnlyOnline ? data.isOnline === 'Yes' : data,\n );\n\n return (\n \n \n \n \n 显示所有客服\n \n \n \n );\n}\n\nexport default JoinCustomerServiceDrawer;\n","import { useState, useCallback } from 'react';\nimport { useActiveList } from '@/hook/useList';\n\n/**\n * 域名 OriginList\n */\nfunction useOrigin({ originPagination = { perPage: 999 }, options = {} } = {}) {\n /**\n * 域名搜尋 list\n */\n const [originSelectList, setOriginSelectList] = useState([]);\n const selectListHandle = list => {\n let tempList = [];\n list.forEach(el => tempList.push({ value: el.id, label: el.origin }));\n setOriginSelectList(tempList);\n };\n\n /**\n * 域名 tableList\n */\n const [originTableList, setOriginTableList] = useState([]);\n const [originTotal, setOriginTotal] = useState(0);\n const { loading, pagination, refetch, handleChangePage } = useActiveList({\n api: 'LIST_CS_ROOM_ORIGIN',\n originPagination,\n options: {\n onCompleted: ({ listConsultingRoomOrigin }) => {\n selectListHandle(listConsultingRoomOrigin.consultingRoomOrigins || []);\n setOriginTableList([...listConsultingRoomOrigin.consultingRoomOrigins]);\n setOriginTotal(() => listConsultingRoomOrigin?.meta?.total || 0);\n },\n ...options,\n },\n });\n\n /**\n * 訪問域名 顯示 remark\n */\n const accessDomainTextFormate = useCallback(\n accessDomain => {\n try {\n if (!accessDomain) return '-';\n let remark = '-';\n let origin = '-';\n const obj = originTableList.find(({ origin }) => {\n const idexEnd =\n origin.indexOf(':') < 0 ? origin.length : origin.indexOf(':');\n return origin.substring(0, idexEnd) === accessDomain;\n });\n obj && (remark = obj.remark);\n obj && (origin = obj.origin);\n return `${origin} (${remark})`;\n } catch (error) {\n console.log('accessDomainTextFormate error', error);\n }\n },\n [originTableList],\n );\n\n return {\n loading,\n pagination,\n originSelectList,\n originTableList,\n originTotal,\n refetch,\n handleChangePage,\n accessDomainTextFormate,\n };\n}\n\nexport default useOrigin;\n","import React, { useState, useEffect } from 'react';\nimport { EnvironmentFilled, CompassFilled } from '@ant-design/icons';\n\nimport useOrigin from '@/hook/useOrigin';\nimport { Descriptions, Input } from 'antd';\nimport { formatDateTime, RoomStatusDisplay, deviceOSKeys } from '@/utils';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\n\nconst { theme } = require('@/plugin/theme');\nconst iconStyle = { color: theme.primary, marginRight: '4px' };\n\nfunction RoomDetailDesc({\n roomID = 0,\n status = '',\n createdAt = '',\n updatedAt = '',\n accessDomain = '',\n sourceDomain = '',\n ipAddress = '',\n country = '',\n administrativeArea = '',\n deviceOS = '',\n question = '',\n remark = '',\n}) {\n const { accessDomainTextFormate } = useOrigin({\n options: { fetchPolicy: 'cache-first' },\n });\n const { onSuccessMsg } = useAlertMessage();\n const [updateRemark] = useMutationApi(apiType.UPDATE_ROOM_REMARK);\n const [remarkVal, setRemarkVal] = useState(remark);\n useEffect(() => {\n setRemarkVal(remark);\n }, [remark]);\n\n const onBlurRemark = async () => {\n const [err] = await updateRemark({\n in: { roomID, remark: remarkVal },\n });\n if (err) return;\n onSuccessMsg();\n };\n\n return (\n <>\n \n #{roomID || '-'}\n \n \n {ipAddress || '-'}\n \n \n \n {country || '-'} {administrativeArea || '-'}\n \n \n {deviceOSKeys[deviceOS]?.icon(iconStyle)}\n {deviceOSKeys[deviceOS]?.text || '-'}\n \n \n {accessDomainTextFormate(accessDomain)}\n \n \n {sourceDomain || '-'}\n \n \n {question || '-'}\n \n \n {status ? RoomStatusDisplay[status]?.text : '-'}\n \n \n {createdAt ? formatDateTime(createdAt) : '-'}\n \n \n {updatedAt ? formatDateTime(updatedAt) : '-'}\n \n \n setRemarkVal(e.target.value)}\n onBlur={onBlurRemark}\n />\n \n \n \n );\n}\n\nexport default RoomDetailDesc;\n","/**\n * 房間成員 + 待加入成員\n * - useRooms\n * - userInvitations\n */\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport { List, Space, Typography, Tag, Divider, Row, Col } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport AvatarFetch from '@/components/Avatar/AvatarFetch';\nimport { AccountTypeDisplay, RoomTypeKey } from '@/utils';\n\nfunction RoomUserList({\n roomType = '',\n userRooms = [],\n userInvitations = [],\n inviteBtnText = '加入客服',\n roomUsersMap = {},\n openInviteDrawer = () => {},\n}) {\n // 顯示房間成員 (濾掉離開的)\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const showUserInRoom = (useRooms = []) => {\n return useRooms.filter(u => u.deletedAt === 0 && roomUsersMap[u.userID]);\n };\n return (\n <>\n 房间成员\n (\n \n {roomUsersMap[u.userID] && (\n <>\n \n \n \n {roomUsersMap[u.userID]?.username} #\n {roomUsersMap[u.userID]?.id}\n \n \n {AccountTypeDisplay[roomUsersMap[u.userID].accountType] ? (\n \n {\n AccountTypeDisplay[roomUsersMap[u.userID].accountType]\n .text\n }\n \n ) : null}\n \n )}\n \n )}\n />\n\n {/* 正在邀請 */}\n {userInvitations.length > 0 && (\n <>\n 正在邀请\n (\n \n \n \n \n {u.inviteeUser.username} #{u.inviteeUser.id}\n \n \n \n )}\n />\n \n )}\n {roomType !== RoomTypeKey['Direct'] && (\n \n \n openInviteDrawer(true)}\n disabled={!authRoutesKey.includes('API_PullInConsultingRoom')}>\n {inviteBtnText}\n \n \n \n )}\n \n );\n}\n\nexport default RoomUserList;\n","/**\n * 詢前表單\n */\nimport React, {\n useCallback,\n useMemo,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Box } from '@WRAP_COMP';\nimport Captcha from 'react-captcha-code';\nimport { Form, Input, Radio, Checkbox, Button, Typography, Empty } from 'antd';\nimport { CSFormFieldType, CSFormFieldVerifyType, cloneDeep } from '@/utils';\n/**\n * @param {Array} formDataList\n * @returns formDataList\n */\n\nfunction CSForm({\n formTitle = '',\n formDataList = [],\n showVerificationCode = false,\n isReadType = false,\n cusFormCom = null,\n updateQsHandel = () => {},\n submitHandle = () => {},\n}) {\n /**\n * 更新 content\n * */\n const updateContentHandle = (itemIdx, content) => {\n let tempFormDataList = cloneDeep(formDataList);\n tempFormDataList[itemIdx].content = content;\n updateQsHandel(itemIdx, tempFormDataList[itemIdx]);\n };\n\n /**\n * 特定 fieldType 驗證規則\n */\n const fieldTypeVerify = {\n [CSFormFieldVerifyType['Age']]: (name, rule) => ({\n name,\n rules: [\n { required: rule.require, message: '必填' },\n {\n validator(_, value) {\n if (!value || (Number(value) >= 1 && Number(value) <= 120)) {\n return Promise.resolve();\n }\n return Promise.reject(new Error('请输入正确的年龄'));\n },\n },\n ],\n }),\n [CSFormFieldVerifyType['Email']]: (name, rule) => ({\n name,\n rules: [\n { required: rule.require, message: '必填' },\n { type: 'email', message: '请输入正确格式的邮箱' },\n ],\n }),\n [CSFormFieldVerifyType['QQ']]: (name, rule) => ({\n name,\n rules: [\n { required: rule.require, message: '必填' },\n {\n validator(_, value) {\n if (!value || /^[1-9][0-9]{4,10}$/gi.test(value)) {\n return Promise.resolve();\n }\n return Promise.reject(new Error('请输入正确的5~11位QQ号码格式'));\n },\n },\n ],\n }),\n [CSFormFieldVerifyType['WeChat']]: (name, rule) => ({\n name,\n rules: [\n { required: rule.require, message: '必填' },\n {\n validator(_, value) {\n if (!value || /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/gi.test(value)) {\n return Promise.resolve();\n }\n return Promise.reject(new Error('请输入正确的6~20位微信号码格式'));\n },\n },\n ],\n }),\n };\n const verifyTypeHandle = (name, rule) => {\n if (fieldTypeVerify[rule.verifyType]) {\n return fieldTypeVerify[rule.verifyType](name, rule);\n }\n return {\n name,\n rules: [{ required: rule.require, message: '必填' }],\n };\n };\n\n /**\n * Input type\n */\n const onChangeInput = (e, content, ItemIdx) => {\n const inputValue = e.target.value;\n let tempContent = cloneDeep(content);\n tempContent.value = inputValue;\n updateContentHandle(ItemIdx, tempContent);\n };\n const inputRender = (el, idx) => {\n return (\n \n onChangeInput(e, el.content, idx)}\n />\n \n );\n };\n\n /**\n * Radio 單選 type\n */\n const onChangeRadio = (e, content, ItemIdx) => {\n const clickIdx = e.target.value;\n let tempContent = cloneDeep(content);\n tempContent.items.forEach((it, i) => (it.value = i === clickIdx));\n updateContentHandle(ItemIdx, tempContent);\n };\n const radioRender = (el, idx) => {\n return (\n \n onChangeRadio(e, el.content, idx)}\n disabled={isReadType}>\n {el.content.items.map((item, itemIdx) => (\n \n {item.label}\n \n ))}\n \n \n );\n };\n\n /**\n * Checkbox 多選 type\n */\n const onChangeCheckbox = (e, clickIdx, content, ItemIdx) => {\n let tempContent = cloneDeep(content);\n tempContent.items[clickIdx].value = e.target.checked;\n updateContentHandle(ItemIdx, tempContent);\n };\n const checkboxRender = (el, idx) => {\n return (\n \n \n {el.content.items.map((item, itemIdx) => (\n onChangeCheckbox(e, itemIdx, el.content, idx)}>\n {item.label}\n
\n ))}\n \n \n );\n };\n\n /**\n * 各種 fieldType 渲染\n */\n const fieldTypeRender = {\n [CSFormFieldType['Input']]: (el, idx) => inputRender(el, idx),\n [CSFormFieldType['Radio']]: (el, idx) => radioRender(el, idx),\n [CSFormFieldType['Checkbox']]: (el, idx) => checkboxRender(el, idx),\n };\n const formDataListRender = list => {\n return (\n <>\n {list.map((el, idx) => {\n if (fieldTypeRender[el.type]) {\n return fieldTypeRender[el.type](el, idx);\n } else {\n console.log('no mapping type > ', el);\n return null;\n }\n })}\n \n );\n };\n\n /**\n * 驗證碼\n */\n const captchaInputEl = useRef(null);\n const captchaRef = useRef(null);\n const charNum = 4;\n const [captchaCode, setCaptchaCode] = useState('');\n const [captchaError, setCaptchaError] = useState({\n validateStatus: '',\n help: '',\n });\n\n const clickChangeCaptcha = () => {\n captchaRef.current.refresh();\n setCaptchaCode();\n };\n\n useEffect(() => {\n if (showVerificationCode) {\n const array = [];\n for (let i = 0; i < charNum; i++) {\n const temp = Math.floor(Math.random() * 9);\n array.push(temp);\n }\n setCaptchaCode(array.join(''));\n }\n }, [showVerificationCode]);\n\n /**\n * 送出表單\n */\n const [CSForm] = Form.useForm();\n const clickSubmit = async () => {\n const fields = await CSForm.validateFields();\n\n // 檢查驗證碼\n if (showVerificationCode) {\n if (captchaInputEl.current.state.value !== captchaCode) {\n setCaptchaError({ validateStatus: 'error', help: '验证码错误' });\n return;\n } else {\n setCaptchaError({ validateStatus: '', help: '' });\n }\n }\n submitHandle({ ...fields, code: captchaCode });\n };\n\n /**\n * isReadType 的初始值\n */\n const fieldTypeInit = useMemo(\n () => ({\n [CSFormFieldType['Input']]: content => content.value,\n [CSFormFieldType['Radio']]: content => {\n let value = '';\n content.items.forEach((m, idx) => m.value && (value = idx));\n return value;\n },\n [CSFormFieldType['Checkbox']]: content => {\n let checkIdx = [];\n content.items.forEach((m, idx) => m.value && checkIdx.push(idx));\n return checkIdx;\n },\n }),\n [],\n );\n\n const initCSForm = useCallback(() => {\n let initValueObj = {};\n formDataList.forEach(el => {\n initValueObj[el.id] = fieldTypeInit[el.type](el.content);\n });\n CSForm.setFieldsValue(initValueObj);\n }, [formDataList, CSForm, fieldTypeInit]);\n\n useEffect(() => {\n if (isReadType) initCSForm();\n }, [isReadType, formDataList, initCSForm]);\n\n if (isReadType && !formDataList.length) return ;\n return (\n <>\n {formTitle}\n
\n {formDataListRender(formDataList)}\n
\n {cusFormCom}\n {showVerificationCode && (\n <>\n
\n \n \n \n \n \n setCaptchaCode(code)}\n height={50}\n width={200}\n fontSize={40}\n />\n \n \n \n )}\n\n {!isReadType && (\n \n )}\n \n );\n}\n\nexport default React.memo(CSForm);\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Box } from '@WRAP_COMP';\nimport { setVisibleDrawer } from '@/store/global';\nimport { useQueryApi, useMutationApi, apiType } from '@/hook/useApi';\nimport { Empty, Tree, Divider, Button } from 'antd';\nimport TabsScrollBlock from '@/components/TabsScrollBlock';\nimport SpinachInfo from '@/components/User/SpinachInfo';\nimport RoomDetailDesc from '@/components/CSRoomAdmin/RoomDetailDesc';\nimport RoomUserList from '@/components/CSRoomAdmin/RoomUserList';\nimport CSForm from '@/components/ChatRoomContent/CSForm';\nimport { AccountTypeKeys, MsgContentTypeKeys, RoomTypeKey } from '@/utils';\n\nconst tabPaneArr = [\n { key: 'roomInfo', tab: '房间资讯' },\n { key: 'csForm', tab: '询前表单' },\n { key: 'cannedMsg', tab: '快捷讯息' },\n { key: 'functionMsg', tab: '功能话术' },\n];\n\nfunction InfoTabsBlock({\n room = null,\n ownerUserData = null,\n roomUsersMap = {},\n setCannedText = () => {},\n visibleJoinDrawer = () => {},\n}) {\n const dispatch = useDispatch();\n const openUserDetailDrawer = () => {\n dispatch(setVisibleDrawer({ name: 'UserDetailDrawer', visible: true }));\n };\n\n const [currTabKey, setCurrInfoTabKey] = useState(tabPaneArr[0].key);\n const onChangeTab = tab => {\n if (tab === 'cannedMsg') fetchCannedListHandle();\n setCurrInfoTabKey(tab);\n };\n\n /**\n * 取得快捷回覆\n */\n const { fetchData: fetchCannedList, loading } = useQueryApi(\n apiType.LIST_CANNED,\n );\n const [cannedTreeData, setCannedTreeData] = useState([]);\n const fetchCannedListHandle = async () => {\n const { data } = await fetchCannedList();\n const {\n listCannedResponseCategory: { cannedResponseCategories },\n listCannedResponse: { cannedResponses },\n } = data;\n let tempData = [];\n cannedResponseCategories.forEach(category => {\n let children = [];\n cannedResponses.forEach(resItem => {\n resItem.categoryID === category.id &&\n children.push({ title: resItem.text, key: resItem.id });\n });\n tempData.push({ title: category.name, key: category.id, children });\n });\n setCannedTreeData(tempData);\n };\n\n const onSelectCannedMsg = (selectedKeys, info) => {\n if (info.node?.children) return;\n setCannedText(info.node.title);\n };\n\n /**\n * 功能話術\n */\n const [postMsg] = useMutationApi(apiType.POST_MSG);\n\n const onSelectFunctionMsg = (selectedKeys, info) => {\n if (info.node?.children) return;\n const templateID = info.node.key;\n\n postMsg({\n in: {\n roomID: room.roomID,\n type: RoomTypeKey['Consulting'],\n contentType: MsgContentTypeKeys['Bubble'],\n templateID,\n },\n });\n };\n\n const tabContentRender = {\n roomInfo: () => (\n <>\n \n {ownerUserData?.accountType !== AccountTypeKeys['Tourist'] && (\n <>\n 会员资讯\n \n \n 更多資訊\n \n \n )}\n \n \n ),\n csForm: () => (\n \n ),\n cannedMsg: ({ cannedTreeData }) =>\n cannedTreeData.length ? (\n \n ) : (\n \n ),\n\n functionMsg: () => {\n return (\n \n );\n },\n };\n\n return (\n \n \n {room &&\n ownerUserData &&\n tabContentRender[currTabKey]({ cannedTreeData })}\n \n \n );\n}\n\nexport default InfoTabsBlock;\n","import React from 'react';\nimport { Tooltip, Space } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport {\n LockOutlined,\n UploadOutlined,\n PushpinOutlined,\n} from '@ant-design/icons';\nimport useAlertMessage from '@/hook/useAlertMessage';\n\nconst HeaderBtnGroup = ({\n loading = false,\n roomID = 0,\n userRooms = [],\n pinRoom = () => {},\n leaveRoom = () => {},\n deactivateRoom = () => {},\n}) => {\n const { onErrorMsg } = useAlertMessage();\n\n // 離開房間\n const checkCanLeave = userRooms =>\n userRooms.filter(u => u.isOperator === 'Yes' && !u.deletedAt).length > 1;\n const clickLeaveRoom = () => {\n // 最後一位 operator 不能離開房間\n checkCanLeave(userRooms)\n ? leaveRoom(roomID)\n : onErrorMsg('最后一位操作员不能离开');\n };\n\n return (\n \n \n }\n onClick={pinRoom}\n loading={loading}\n />\n \n \n }\n onClick={clickLeaveRoom}\n loading={loading}\n />\n \n \n }\n onClick={() => deactivateRoom(roomID)}\n loading={loading}\n />\n \n \n );\n};\n\nexport default HeaderBtnGroup;\n","const bankData = {\n ICBC: {\n name: '中国工商银行',\n pc_domain: 'http://www.icbc.com.cn/icbc/',\n app_download: 'http://m.icbc.com.cn/ICBC/kfssjyxkh9/3.htm?qrcode=1',\n sub: 0,\n },\n CCB: {\n name: '中国建设银行',\n pc_domain: 'http://www.ccb.com',\n app_download: 'http://group.ccb.com/cn/v3/head_content/mbsapp.html',\n color: 'blue',\n sub: 0,\n },\n ABC: {\n name: '中国农业银行',\n pc_domain: 'http://www.abchina.com',\n app_download:\n 'http://mobile.abchina.com/download/clientDownload/zh_CN/MB_Index.aspx',\n sub: 0,\n },\n BOC: {\n name: '中国银行',\n pc_domain: 'http://www.boc.cn',\n app_download:\n 'https://ebsnew.boc.cn/bocphone/VuePhone/tools/downloadByQrcode/index.html',\n color: 'red',\n sub: 0,\n },\n COMM: {\n name: '交通银行',\n pc_domain: 'http://www.bankcomm.com',\n app_download: 'http://app.bankcomm.com/?t=1',\n color: 'blue',\n sub: 0,\n },\n CMB: {\n name: '招商银行',\n pc_domain: 'http://www.cmbchina.com',\n app_download: 'http://m.cmbchina.com/app',\n sub: 0,\n },\n CITIC: {\n name: '中信银行',\n pc_domain: 'http://www.citicbank.com',\n app_download: 'http://go.citicbank.com/dl',\n sub: 0,\n },\n SPDB: {\n name: '上海浦东发展银行',\n pc_domain: 'https://ebank.spdb.com.cn',\n app_download: 'https://wap.spdb.com.cn/ewap/app',\n color: 'blue',\n sub: 0,\n },\n CIB: {\n name: '兴业银行',\n pc_domain: 'https://www.cib.com.cn',\n app_download: 'https://z.cib.com.cn/public/about-cib',\n color: 'blue',\n sub: 0,\n },\n CMBC: {\n name: '中国民生银行',\n pc_domain: 'http://www.cmbc.com.cn',\n app_download: 'https://m1.cmbc.com.cn/wap',\n color: 'blue',\n sub: 0,\n },\n BJBANK: {\n name: '北京银行',\n pc_domain: 'http://www.bankofbeijing.com.cn',\n app_download: 'http://www.95526.mobi/',\n sub: 0,\n },\n SRCB: {\n name: '深圳农村商业银行',\n pc_domain: 'http://www.4001961200.com',\n app_download: 'http://a.app.qq.com/o/simple.jsp?pkgname=com.csii.sns.ui',\n color: 'yellow',\n sub: 1,\n },\n BGB: {\n name: '广西北部湾银行',\n pc_domain: 'http://www.bankofbbg.com',\n app_download:\n 'https://mbank.bankofbbg.com/app_pmb/page/wcb/downloadApp/AppDownLoad.html',\n color: 'blue',\n sub: 0,\n },\n SHRCB: {\n name: '上海农村商业银行',\n pc_domain: 'http://www.srcb.com',\n app_download: 'http://mbank.srcb.com/',\n color: 'yellow',\n sub: 1,\n },\n WHCCB: {\n name: '威海市商业银行',\n pc_domain: 'http://www.whccb.com',\n app_download: 'http://www.whccb.com/publish/whccb/20483/index.html',\n color: 'blue',\n sub: 1,\n },\n BOZK: {\n name: '周口银行',\n pc_domain: '',\n app_download: '',\n sub: 0,\n },\n KORLABANK: {\n name: '库尔勒市商业银行',\n pc_domain: 'http://www.xjkccb.cn',\n app_download: 'http://www.xjkccb.cn',\n sub: 1,\n },\n SPABANK: {\n name: '平安银行',\n pc_domain: 'http://bank.pingan.com',\n app_download:\n 'http://bfiles.pingan.com.cn/brcp/pkg/bfiles/download?downapp_id=AM001000287',\n color: 'yellow',\n sub: 0,\n },\n SDEB: {\n name: '顺德农商银行',\n pc_domain: 'http://www.sdebank.com',\n app_download:\n 'http://www.sdebank.com/cms/S101_21/ebank/perbank/m/index.html',\n color: 'blue',\n sub: 1,\n },\n HURCB: {\n name: '湖北省农村信用社',\n pc_domain: 'https://ebank.hb96568.com/',\n app_download: 'http://124.127.254.34/5200/newwap/',\n sub: 1,\n },\n WRCB: {\n name: '无锡农村商业银行',\n pc_domain: 'http://www.wrcb.com.cn',\n app_download: 'http://a.app.qq.com/o/simple.jsp?pkgname=com.csii.wrcb',\n sub: 1,\n },\n BOCY: {\n name: '朝阳银行',\n pc_domain: 'http://www.cycb.com',\n app_download:\n 'http://www.cycb.com/data/tosend/resource/upload/ChaoYang_develop.apk',\n color: 'blue',\n sub: 0,\n },\n CZBANK: {\n name: '浙商银行',\n pc_domain: 'http://www.czbank.com/czbank/',\n app_download: 'http://m.czbank.com/',\n sub: 0,\n },\n HDBANK: {\n name: '邯郸银行',\n pc_domain: 'http://hdcb.cn/hdyh/index.html',\n app_download: 'https://mobile.hdcb.cn/wechatbank/main.html#appD/appD/appD',\n color: 'blue',\n sub: 0,\n },\n BOD: {\n name: '东莞银行',\n pc_domain: 'http://www.dongguanbank.cn',\n app_download: 'http://download.dongguanbank.cn/html/download_source.html',\n sub: 0,\n },\n ZYCBANK: {\n name: '遵义市商业银行',\n pc_domain: '',\n app_download: '',\n color: 'green',\n sub: 1,\n },\n SXCB: {\n name: '绍兴银行',\n pc_domain: 'http://www.sxccb.com',\n app_download: 'https://ebank.sxccb.com/mobileqr/index.html',\n color: 'blue',\n sub: 0,\n },\n GZRCU: {\n name: '贵州省农村信用社',\n pc_domain: 'http://www.gznxbank.com',\n app_download:\n 'http://app.download.nongxinyin.com:666/download/7000/index.html',\n sub: 1,\n },\n ZJKCCB: {\n name: '张家口市商业银行',\n pc_domain: 'www.zjkccb.com',\n app_download:\n 'http://a.app.qq.com/o/simple.jsp?pkgname=com.zjkccb.mbank&fromcase=40003',\n color: 'blue',\n sub: 1,\n },\n BOJZ: {\n name: '锦州银行',\n pc_domain: 'https://www.jinzhoubank.com',\n app_download:\n 'http://www.jinzhoubank.com/jzbank/EBank/MobileBanking/2328.html',\n sub: 0,\n },\n BOP: {\n name: '平顶山银行',\n pc_domain: 'http://www.pdscb.com',\n app_download: 'https://ebank.pdsb.cn/htmls/qrcode.html',\n sub: 0,\n },\n HKB: {\n name: '汉口银行',\n pc_domain: 'http://www.hkbchina.com',\n app_download: 'http://www.hkbchina.com/portal/zh_CN/home/sjyhdl/2224.html',\n color: 'blue',\n sub: 0,\n },\n NXRCU: {\n name: '宁夏黄河农村商业银行',\n pc_domain: '',\n app_download: '',\n sub: 1,\n },\n NYNB: {\n name: '广东南粤银行',\n pc_domain: 'http://www.gdnybank.com',\n app_download: 'http://www.gdnybank.com/wap/gzsjsjyhiiod.html',\n sub: 0,\n },\n GRCB: {\n name: '广州农商银行',\n pc_domain: 'http://www.grcbank.com',\n app_download:\n 'https://mbank.grcbank.com/ydyh/page/download/downloadApp.html',\n color: 'yellow',\n sub: 1,\n },\n BOSZ: {\n name: '苏州银行',\n pc_domain: 'http://www.suzhoubank.com',\n app_download: 'http://a.app.qq.com/o/simple.jsp?pkgname=com.yt.sz.szbank',\n color: 'green',\n sub: 0,\n },\n HZCB: {\n name: '杭州银行',\n pc_domain: 'http://www.hccb.com.cn',\n app_download: 'http://www.hzbank.com.cn/mobile/wallet.html',\n color: 'blue',\n sub: 0,\n },\n HSBK: {\n name: '衡水银行',\n pc_domain: 'http://www.hengshuibank.com',\n app_download:\n 'http://a.app.qq.com/o/simple.jsp?pkgname=com.hsbank.personal&fromcase=40003',\n color: 'yellow',\n sub: 0,\n },\n HBC: {\n name: '湖北银行',\n pc_domain: 'http://www.hubeibank.cn',\n app_download: 'https://ebank.hubeibank.cn/perbank/mobileupload/mobile.html',\n sub: 0,\n },\n JXBANK: {\n name: '嘉兴银行',\n pc_domain: 'http://www.jxccb.com',\n app_download:\n 'https://a.app.qq.com/o/simple.jsp?pkgname=com.csii.jiaxing.mobilebank&fromcase=40003',\n color: 'green',\n sub: 0,\n },\n HRXJB: {\n name: '华融湘江银行',\n pc_domain: 'http://www.hrxjbank.com.cn',\n app_download: 'https://wbank.hrxjbank.com.cn/wxbank/PhoneAppDownload.do',\n sub: 0,\n },\n BODD: {\n name: '丹东银行',\n pc_domain: 'http://dandongbank.com',\n app_download: 'http://dandongbank.com/ddyh/index/mobilebankdown/index.html',\n sub: 0,\n },\n AYCB: {\n name: '安阳银行',\n pc_domain: '',\n app_download: '',\n color: 'yellow',\n sub: 0,\n },\n EGBANK: {\n name: '恒丰银行',\n pc_domain: 'http://www.hfbank.com.cn',\n app_download: 'http://mbs-download.hfbank.com.cn/?mb_dataType=5',\n color: 'blue',\n sub: 0,\n },\n CDB: {\n name: '国家开发银行',\n pc_domain: 'http://www.cdb.com.cn',\n app_download: 'http://www.cdb.com.cn',\n sub: 0,\n },\n TCRCB: {\n name: '江苏太仓农村商业银行',\n pc_domain: 'http://www.tcrcb.com',\n app_download: 'http://www.tcrcb.com/tcrcb/488987/489099/503522/index.html',\n color: 'blue',\n sub: 1,\n },\n NJCB: {\n name: '南京银行',\n pc_domain: 'http://www.njcb.com.cn',\n app_download: 'http://wap.njcb.com.cn/',\n sub: 0,\n },\n ZZBANK: {\n name: '郑州银行',\n pc_domain: 'http://www.zzbank.cn',\n app_download: 'http://www.zzbank.cn/ebank/sjyh/201711/t20171122_533.html',\n color: 'yellow',\n sub: 0,\n },\n DYCB: {\n name: '德阳商业银行',\n pc_domain: '',\n app_download: '',\n sub: 1,\n },\n YBCCB: {\n name: '宜宾市商业银行',\n pc_domain: 'http://www.ybccb.com',\n app_download:\n 'https://ebank.ybccb.com/pweb/AppDownloadPre.do?_locale=zh_CN&BankId=9999',\n color: 'blue',\n sub: 1,\n },\n SCRCU: {\n name: '四川省农村信用',\n pc_domain: 'https://www.scrcu.com',\n app_download: 'http://www.scrcu.com/public/hzf.html',\n color: 'green',\n sub: 1,\n },\n KLB: {\n name: '昆仑银行',\n pc_domain: 'http://www.klb.cn',\n app_download: 'http://www.klb.cn/eportal/ui?pageId=489579',\n sub: 0,\n },\n LSBANK: {\n name: '莱商银行',\n pc_domain: 'http://www.lsbankchina.com',\n app_download:\n 'http://www.lsbankchina.com/publish/lsbankchina/20429/index.html',\n sub: 0,\n },\n YDRCB: {\n name: '尧都农商行',\n pc_domain: 'http://www.ydnsh.com',\n app_download: 'http://yaodu.ucsmy.com/e/App/AppDownload',\n color: 'green',\n sub: 1,\n },\n CCQTGB: {\n name: '重庆三峡银行',\n pc_domain: 'http://www.ccqtgb.com',\n app_download: 'http://www.ccqtgb.com/html/info/12126.html',\n color: 'blue',\n sub: 0,\n },\n FDB: {\n name: '富滇银行',\n pc_domain: 'http://www.fudian-bank.com',\n app_download:\n 'https://ebank.fudian-bank.com/mobileChannel/download/index.html',\n sub: 0,\n },\n JSRCU: {\n name: '江苏省农村信用联合社',\n pc_domain: 'http://www.jsnx.net/cn/',\n app_download: 'http://www.js96008.com/S101_21/jsnxsj/index.htm',\n sub: 1,\n },\n JNBANK: {\n name: '济宁银行',\n pc_domain: 'http://www.jn-bank.com',\n app_download: 'http://www.jn-bank.com/publish/jnbank/25036/index.html',\n color: 'blue',\n sub: 0,\n },\n JINCHB: {\n name: '晋城银行JCBANK',\n pc_domain: 'http://www.jccbank.com.cn',\n app_download: 'https://ebank.jinchengbank.com/Guide/mobile.html',\n sub: 0,\n },\n FXCB: {\n name: '阜新银行',\n pc_domain: 'http://www.fuxinbank.com',\n app_download:\n 'https://mybank.fuxinbank.com/mibank-port-war/shareController/download',\n color: 'blue',\n sub: 0,\n },\n WHRCB: {\n name: '武汉农村商业银行',\n pc_domain: 'http://www.whrcbank.com',\n app_download:\n 'http://app.download.nongxinyin.com:666/download/7700/html/1.html',\n sub: 1,\n },\n HBYCBANK: {\n name: '湖北银行宜昌分行',\n pc_domain: 'http://www.hubeibank.cn',\n app_download: 'https://ebank.hubeibank.cn/perbank/mobileupload/mobile.html',\n sub: 0,\n },\n TZCB: {\n name: '台州银行',\n pc_domain: 'http://www.tzbank.com',\n app_download: 'http://down.tzbank.com:8080/download/TZBank.Simple.apk',\n color: 'blue',\n sub: 0,\n },\n TACCB: {\n name: '泰安市商业银行',\n pc_domain: 'http://www.taccb.com.cn',\n app_download: 'http://www.taccb.com.cn/publish/taccb/10936/index.html',\n sub: 1,\n },\n XCYH: {\n name: '许昌银行',\n pc_domain: '',\n app_download: '',\n color: 'blue',\n sub: 0,\n },\n CEB: {\n name: '中国光大银行',\n pc_domain: 'https://www.cebbank.com',\n app_download:\n 'http://a.app.qq.com/o/simple.jsp?pkgname=com.cebbank.mobile.cemb&fromcase=40003',\n color: 'yellow',\n sub: 0,\n },\n NXBANK: {\n name: '宁夏银行',\n pc_domain: 'http://www.ycccb.com',\n app_download: 'http://www.ycccb.com/bankofnx/wljr/sjyx84/azzn/index.html',\n sub: 0,\n },\n HSBANK: {\n name: '徽商银行',\n pc_domain: 'http://www.hsbank.com.cn',\n app_download: 'http://www.hsbank.com.cn/Channel/665009',\n sub: 0,\n },\n JJBANK: {\n name: '九江银行',\n pc_domain: 'http://www.jjccb.com',\n app_download: 'http://www.jjccb.com',\n sub: 0,\n },\n NHQS: {\n name: '农信银清算中心',\n pc_domain: '',\n app_download: '',\n color: 'green',\n sub: 0,\n },\n MTBANK: {\n name: '浙江民泰商业银行',\n pc_domain: 'http://www.mintaibank.com',\n app_download:\n 'http://www.mintaibank.com/mintaibank/zh_CN/ebank/sjyh/mobile.html',\n sub: 1,\n },\n LANGFB: {\n name: '廊坊银行',\n pc_domain: 'http://www.lccb.com.cn',\n app_download: 'https://mbank.lccb.com.cn/mbank/download/index.jsp',\n color: 'blue',\n sub: 0,\n },\n ASCB: {\n name: '鞍山银行',\n pc_domain: 'http://www.bankofas.com',\n app_download: 'http://www.bankofas.com/asbank/dzyh/index.html',\n sub: 0,\n },\n KSRB: {\n name: '昆山农村商业银行',\n pc_domain: 'http://www.ksrcb.cn',\n app_download:\n 'http://a.app.qq.com/o/simple.jsp?pkgname=com.yitong.ksrcb.mbank.android',\n sub: 1,\n },\n YXCCB: {\n name: '玉溪市商业银行',\n pc_domain: 'http://www.ynhtbank.com',\n app_download:\n 'http://a.app.qq.com/o/simple.jsp?pkgname=com.csii.yuxi.mobilebank',\n sub: 1,\n },\n DLB: {\n name: '大连银行',\n pc_domain: 'http://www.bankofdl.com/home/pc/index.shtml',\n app_download:\n 'http://www.bankofdl.com/home/pc/common/c361943/c362070/20190125/1093304.shtml',\n sub: 0,\n },\n DRCBCL: {\n name: '东莞农村商业银行',\n pc_domain: 'https://www.drcbank.com',\n app_download: 'https://wap.drcbank.com/',\n sub: 1,\n },\n GCB: {\n name: '广州银行',\n pc_domain: 'http://www.gzcb.com.cn/i_index.shtml',\n app_download: 'http://www.gzcb.com.cn/article/wyzl/xz.shtml',\n sub: 0,\n },\n NBBANK: {\n name: '宁波银行',\n pc_domain: 'http://www.nbcb.cn',\n app_download: 'http://www.nbcb.com.cn/electronic_banking/mobile_banking/',\n color: 'yellow',\n sub: 0,\n },\n BOYK: {\n name: '营口银行',\n pc_domain: 'http://www.bankofyk.com',\n app_download: 'http://www.bankofyk.com/plus/view.php?aid=7138',\n color: 'blue',\n sub: 0,\n },\n SXRCCU: {\n name: '陕西信合',\n pc_domain: 'http://www.sxnxs.com',\n app_download: 'https://ibank.96262.com/icap-ibank/page/index/001/main.html',\n color: 'green',\n sub: 0,\n },\n GLBANK: {\n name: '桂林银行',\n pc_domain: 'https://www.guilinbank.com.cn',\n app_download:\n 'https://e.guilinbank.com.cn/newUI/T_Z_NOLOGIN_WAP.hm?menuflag=800',\n color: 'blue',\n sub: 0,\n },\n BOQH: {\n name: '青海银行',\n pc_domain: 'http://www.bankqh.com',\n app_download: 'http://2bai.co/966672',\n sub: 0,\n },\n CDRCB: {\n name: '成都农商银行',\n pc_domain: 'http://www.cdrcb.com',\n app_download: 'http://www.cdrcb.com/uploadrar/opt/download.htm',\n color: 'green',\n sub: 1,\n },\n QDCCB: {\n name: '青岛银行',\n pc_domain: 'http://www.qdccb.com',\n app_download: 'http://www.qdccb.com/dzyx/sjyx/ywjs/iosxz/index.shtml',\n sub: 0,\n },\n HKBEA: {\n name: '东亚银行',\n pc_domain: 'https://www.hkbea.com.cn',\n app_download: 'https://www.hkbea.com.cn/footer/MobileBanking/',\n sub: 0,\n },\n HBHSBANK: {\n name: '湖北银行黄石分行',\n pc_domain: 'http://www.hubeibank.cn',\n app_download: 'https://ebank.hubeibank.cn/perbank/mobileupload/mobile.html',\n sub: 0,\n },\n WZCB: {\n name: '温州银行',\n pc_domain: 'http://www.wzcb.com.cn',\n app_download: 'http://www.wzcb.com.cn/ebank/view/menu_item_id/165',\n color: 'yellow',\n sub: 0,\n },\n TRCB: {\n name: '天津农商银行',\n pc_domain: 'http://www.trcbank.com.cn',\n app_download: 'http://www.trcbank.com.cn/2014/1-9/10570752812.html',\n color: 'yellow',\n sub: 1,\n },\n QLBANK: {\n name: '齐鲁银行',\n pc_domain: 'http://www.qlbchina.com',\n app_download: 'http://wap.qlbchina.com/',\n color: 'blue',\n sub: 0,\n },\n GDRCC: {\n name: '广东省农村信用社联合社',\n pc_domain: 'http://www.gdrcu.com',\n app_download:\n 'http://a.app.qq.com/o/simple.jsp?pkgname=com.csii.gdnx.mobilebank&g_f=991653',\n color: 'yellow',\n sub: 1,\n },\n ZJTLCB: {\n name: '浙江泰隆商业银行',\n pc_domain: 'http://www.zjtlcb.com',\n app_download: 'https://ebank.zjtlcb.com/perbank/html/other/wxshare.htm',\n color: 'yellow',\n sub: 1,\n },\n GZB: {\n name: '赣州银行',\n pc_domain: 'http://www.bankgz.com',\n app_download: 'http://d.eqxiu.com/s/AIvEYeEr',\n sub: 0,\n },\n GYCB: {\n name: '贵阳市商业银行',\n pc_domain: 'https://www.bankgy.cn',\n app_download:\n 'https://www.bankgy.cn/portal/zh_CN/upload/Attachment/sjyhxzpage/pageA.html',\n sub: 1,\n },\n CQBANK: {\n name: '重庆银行',\n pc_domain: 'http://www.cqcbank.com',\n app_download: 'http://www.cqcbank.com/portal/zh_CN/bank/download_cz.html',\n color: 'green',\n sub: 0,\n },\n DAQINGB: {\n name: '龙江银行',\n pc_domain: 'https://www.lj-bank.com',\n app_download: 'https://www.lj-bank.com/phone-ljbank/download.htm',\n color: 'yellow',\n sub: 0,\n },\n CGNB: {\n name: '南充市商业银行',\n pc_domain: 'https://e.tf.cn',\n app_download:\n 'http://ebank.cgnb.cn:8093/resource/ws/spread/downAppUrl?from=message&isappinstalled=0',\n color: 'black',\n sub: 1,\n },\n SCCB: {\n name: '三门峡银行',\n pc_domain: 'http://www.zybank.com.cn',\n app_download:\n 'https://wbs.zyebank.com/pweixin/weixin/htmls/AppShareDown/index.html',\n color: 'blue',\n sub: 0,\n },\n CSRCB: {\n name: '常熟农村商业银行',\n pc_domain: 'http://www.csrcbank.com',\n app_download: 'https://wx.csrcbank.com/mobiledownload/download.php',\n sub: 1,\n },\n SHBANK: {\n name: '上海银行',\n pc_domain: 'http://www.bosc.cn',\n app_download: 'http://www.bosc.cn/zh/dzyh/dzyh_grsjyh/16269.shtml',\n color: 'blue',\n sub: 0,\n },\n JLBANK: {\n name: '吉林银行',\n pc_domain: 'http://www.jlbank.com.cn',\n app_download: 'http://www.jlbank.com.cn/d/jlbank.html',\n sub: 0,\n },\n CZRCB: {\n name: '常州农村信用联社',\n pc_domain: '',\n app_download: '',\n color: 'green',\n sub: 1,\n },\n BANKWF: {\n name: '潍坊银行',\n pc_domain: 'http://www.wfccb.com',\n app_download: 'http://www.bankwf.com/publish/wfccb/10899/index.html',\n sub: 0,\n },\n ZRCBANK: {\n name: '张家港农村商业银行',\n pc_domain: 'http://www.zrcbank.com',\n app_download: 'http://dl.zrcbank.com/',\n color: 'yellow',\n sub: 1,\n },\n FJHXBC: {\n name: '福建海峡银行',\n pc_domain: 'http://www.fjhxbank.com',\n app_download: 'https://mbank.fjhxbank.com/wxbank/PhoneDownAfter.do',\n color: 'blue',\n sub: 0,\n },\n ZJNX: {\n name: '浙江省农村信用社联合社',\n pc_domain: 'http://www.zj96596.com',\n app_download:\n 'https://www.zj96596.com:688/perbank/mobile_APP/download/download.html',\n color: 'green',\n sub: 1,\n },\n LZYH: {\n name: '兰州银行',\n pc_domain: 'https://www.lzbank.com',\n app_download: 'http://sns.lzbank.com/lzbankweb/download.jsp',\n color: 'blue',\n sub: 0,\n },\n JSB: {\n name: '晋商银行',\n pc_domain: 'http://www.jshbank.com',\n app_download: 'http://www.jshbank.com/jsyh/syejlm/dzhdcxyz/1379.html',\n sub: 0,\n },\n BOHAIB: {\n name: '渤海银行',\n pc_domain: 'http://www.cbhb.com.cn',\n app_download: 'http://www.cbhb.com.cn',\n color: 'blue',\n sub: 0,\n },\n CZCB: {\n name: '浙江稠州商业银行',\n pc_domain: 'http://www.czcb.com.cn',\n app_download: 'http://www.czcb.com.cn/sjyh/index.shtml',\n sub: 1,\n },\n YQCCB: {\n name: '阳泉银行',\n pc_domain: 'https://www.yqccb.com',\n app_download: 'https://mb.yqccb.com/download/download.html',\n color: 'blue',\n sub: 0,\n },\n SJBANK: {\n name: '盛京银行',\n pc_domain: 'http://www.shengjingbank.com.cn',\n app_download: 'https://mobile.shengjingbank.com.cn:7443/',\n sub: 0,\n },\n XABANK: {\n name: '西安银行',\n pc_domain: 'https://www.xacbank.com',\n app_download:\n 'http://a.app.qq.com/o/simple.jsp?pkgname=com.yitong.xian.mbank&fromcase=40003',\n color: 'blue',\n sub: 0,\n },\n BSB: {\n name: '包商银行',\n pc_domain: 'http://www.bsb.com.cn',\n app_download: 'http://a.app.qq.com/o/simple.jsp?pkgname=cn.com.bsb.mbank',\n color: 'yellow',\n sub: 0,\n },\n JSBANK: {\n name: '江苏银行',\n pc_domain: 'http://www.jsbchina.cn',\n app_download: 'http://m.jsbchina.cn/',\n color: 'yellow',\n sub: 0,\n },\n FSCB: {\n name: '抚顺银行',\n pc_domain: 'https://www.bankoffs.com.cn',\n app_download: 'https://www.bankoffs.com.cn/ebank',\n sub: 0,\n },\n HNRCU: {\n name: '河南省农村信用',\n pc_domain: 'https://ebank.hnnx.com',\n app_download: 'https://ebank.hnnx.com',\n color: 'green',\n sub: 1,\n },\n XTB: {\n name: '邢台银行',\n pc_domain: 'http://www.xtbank.com',\n app_download: 'http://www.xtbank.com/xtbank/xwzx91/rjxz/308844/index.html',\n color: 'blue',\n sub: 0,\n },\n HXBANK: {\n name: '华夏银行',\n pc_domain: 'http://www.hxb.com.cn/index.shtml',\n app_download: 'http://www.hxb.com.cn/jrhx/khfw/xzzq/index.shtml',\n sub: 0,\n },\n HNRCC: {\n name: '湖南省农村信用社',\n pc_domain: 'https://ebank.hnnx.com',\n app_download: 'https://mbank.hnnx.com/per/page/01/0111/0111.html',\n sub: 1,\n },\n DYCCB: {\n name: '东营市商业银行',\n pc_domain: 'http://www.dyccb.net',\n app_download: 'http://www.dyccb.net/publish/dyccb/20401/index.html',\n sub: 1,\n },\n ORBANK: {\n name: '鄂尔多斯银行',\n pc_domain: 'http://www.ordosbank.com',\n app_download:\n 'https://ebank.ordosbank.com/pbank/app/resource/common/ocx/867/erdsbank-app.html',\n sub: 0,\n },\n BJRCB: {\n name: '北京农村商业银行',\n pc_domain: 'http://www.bjrcb.com',\n app_download: 'https://mbank2.bjrcb.com/mbs/download/download.html',\n sub: 1,\n },\n XYBANK: {\n name: '信阳银行',\n pc_domain: '',\n app_download: '',\n sub: 0,\n },\n ZGCCB: {\n name: '自贡市商业银行',\n pc_domain: 'http://www.zgbank.com.cn',\n app_download:\n 'http://www.zgbank.com.cn/bencandy.php?fid-179-id-2750-page-1.htm',\n color: 'yellow',\n sub: 1,\n },\n CDCB: {\n name: '成都银行',\n pc_domain: 'http://www.bocd.com.cn',\n app_download: 'http://www.bocd.com.cn',\n sub: 0,\n },\n HANABANK: {\n name: '韩亚银行',\n pc_domain: 'http://www.hanabank.cn',\n app_download: 'http://www.hanabank.cn',\n color: 'green',\n sub: 0,\n },\n LYBANK: {\n name: '洛阳银行',\n pc_domain: 'http://www.bankofluoyang.com.cn',\n app_download: 'http://www.bankofluoyang.com.cn/ebankbusiness.jsp?id=222',\n color: 'blue',\n sub: 0,\n },\n GDB: {\n name: '广东发展银行',\n pc_domain: 'http://www.cgbchina.com.cn',\n app_download: 'http://3g.cgbchina.com.cn/',\n sub: 0,\n },\n ZBCB: {\n name: '齐商银行',\n pc_domain: 'http://www.qsbank.cc',\n app_download:\n 'http://www.qsbank.cc/publish/qsbank/personal/ebank/mobilebank/29205/29370/index.html',\n sub: 0,\n },\n CBKF: {\n name: '开封市商业银行',\n pc_domain: '',\n app_download: '',\n color: 'blue',\n sub: 1,\n },\n H3CB: {\n name: '内蒙古银行',\n pc_domain: 'http://www.boimc.com.cn',\n app_download: 'http://www.boimc.com/ebank/phone/337.html',\n sub: 0,\n },\n CRCBANK: {\n name: '重庆农村商业银行',\n pc_domain: 'https://www.cqrcb.com',\n app_download: 'https://s.wcd.im/v/27nh4Z6t/?qr',\n sub: 1,\n },\n SZSBK: {\n name: '石嘴山银行',\n pc_domain: 'http://www.szsccb.com',\n app_download: 'http://www.szsccb.com/website/bank/sjyh_apk/index.html',\n color: 'yellow',\n sub: 0,\n },\n DZBANK: {\n name: '德州银行',\n pc_domain: 'http://www.dzbchina.com',\n app_download: 'http://www.dzbchina.com/dezhou.html',\n sub: 0,\n },\n SRBANK: {\n name: '上饶银行',\n pc_domain: 'http://www.srbank.cn',\n app_download: 'https://a.app.qq.com/o/simple.jsp?pkgname=cn.srbank',\n color: 'yellow',\n sub: 0,\n },\n LSCCB: {\n name: '乐山市商业银行',\n pc_domain: 'http://www.lsccb.com',\n app_download: 'http://www.lsccb.com',\n sub: 1,\n },\n JXRCU: {\n name: '江西省农村信用',\n pc_domain: 'http://www.jxnxs.com',\n app_download: 'https://mob.962268.com/ewmdownload/download.html',\n color: 'green',\n sub: 1,\n },\n JZBANK: {\n name: '晋中市商业银行',\n pc_domain: 'http://www.jzbank.com',\n app_download: 'http://www.jzbank.com/wzgl/sjyhapp/',\n sub: 1,\n },\n HZCCB: {\n name: '湖州市商业银行',\n pc_domain: 'http://www.hzccb.net',\n app_download: 'http://www.hzccb.net',\n sub: 1,\n },\n NHB: {\n name: '南海农村信用联社',\n pc_domain: 'http://www.nanhaibank.com',\n app_download: 'http://www.nanhaibank.com/mobibank/download.html',\n sub: 1,\n },\n XXBANK: {\n name: '新乡银行',\n pc_domain: '',\n app_download: '',\n sub: 0,\n },\n JRCB: {\n name: '江苏江阴农村商业银行',\n pc_domain: 'http://www.jybank.com.cn',\n app_download: 'https://wx.jybank.com.cn/pwxweb/AppDownloadTwo.do',\n color: 'green',\n sub: 1,\n },\n YNRCC: {\n name: '云南省农村信用社',\n pc_domain: 'http://www.ynrcc.com',\n app_download: 'https://ebank.ynrcc.com/pweb/MobileBankDownLoad',\n color: 'green',\n sub: 1,\n },\n GXRCU: {\n name: '广西省农村信用',\n pc_domain: 'http://www.gx966888.com',\n app_download:\n 'http://wxbank.nongxinyin.com/weixinServer/htmlShow/610001/download/bankDownloadBoth.html',\n color: 'green',\n sub: 1,\n },\n PSBC: {\n name: '中国邮政储蓄银行',\n pc_domain: 'http://www.psbc.com',\n app_download: 'http://phone.psbc.com/',\n color: 'green',\n sub: 0,\n },\n BZMD: {\n name: '驻马店银行',\n pc_domain: '',\n app_download: '',\n color: 'yellow',\n sub: 0,\n },\n ARCU: {\n name: '安徽省农村信用社',\n pc_domain: 'http://eweb.ahrcu.com',\n app_download: 'http://eweb.ahrcu.com/CN/xzzq/sjkhdxz/index.html',\n sub: 1,\n },\n GSRCU: {\n name: '甘肃省农村信用',\n pc_domain: 'https://ebank.gsrcu.com',\n app_download: 'https://ebank.gsrcu.com',\n color: 'green',\n sub: 1,\n },\n LYCB: {\n name: '辽阳市商业银行',\n pc_domain: 'http://www.bankofliaoyang.net',\n app_download:\n 'http://www.bankofliaoyang.net/lybank/netbank/shoujibank/index.html',\n sub: 1,\n },\n JLRCU: {\n name: '吉林农信',\n pc_domain: 'https://jlnls.com',\n app_download: 'http://wap.jlnls.com/',\n color: 'yellow',\n sub: 0,\n },\n URMQCCB: {\n name: '乌鲁木齐市商业银行',\n pc_domain: 'http://www.uccb.com.cn',\n app_download: 'http://www.uccb.com.cn/phone.aspx',\n color: 'blue',\n sub: 1,\n },\n XLBANK: {\n name: '中山小榄村镇银行',\n pc_domain: 'http://www.jycbank.com',\n app_download: 'http://www.jjccb.com/portal/zh_CN/mbank/index.html',\n sub: 0,\n },\n CSCB: {\n name: '长沙银行',\n pc_domain: 'http://www.cscb.cn',\n app_download: 'http://www.cscb.cn',\n sub: 0,\n },\n JHBANK: {\n name: '金华银行',\n pc_domain: 'http://www.jhccb.com.cn',\n app_download: 'https://wx.jhccb.com.cn/pwxweb/DownLoadApp.do',\n color: 'yellow',\n sub: 0,\n },\n BHB: {\n name: '河北银行',\n pc_domain: 'http://www.hebbank.com',\n app_download:\n 'http://www.hebbank.com/hbbank/gryw/_301291/_301299/index.html',\n color: 'blue',\n sub: 0,\n },\n NBYZ: {\n name: '鄞州银行',\n pc_domain: 'http://www.beeb.com.cn',\n app_download: 'http://ebank.beeb.com.cn/mobile',\n color: 'yellow',\n sub: 0,\n },\n LSBC: {\n name: '临商银行',\n pc_domain: 'http://www.lsbchina.com',\n app_download: 'http://www.lsbchina.com/publish/lsbchina/20687/index.html',\n sub: 0,\n },\n BOCD: {\n name: '承德银行',\n pc_domain: 'http://www.chengdebank.com',\n app_download:\n 'https://m.chengdebank.com/netBank/page/download/download.html',\n sub: 0,\n },\n SDRCU: {\n name: '山东农信',\n pc_domain: 'http://www.sdnxs.com',\n app_download: 'https://mbc.sdrcu.com/mbcper/download.html',\n sub: 1,\n },\n NCB: {\n name: '南昌银行',\n pc_domain: 'http://www.jx-bank.com',\n app_download:\n 'http://www.jx-bank.com/nccbank/zh_CN/eBank/downLoad/grwy/2078.html',\n color: 'blue',\n sub: 0,\n },\n TCCB: {\n name: '天津银行',\n pc_domain: 'http://www.bank-of-tianjin.com.cn',\n app_download:\n 'http://www.bank-of-tianjin.com.cn/wlyx/sjyx/sjyxkhdb/index.shtml#5',\n color: 'blue',\n sub: 0,\n },\n WJRCB: {\n name: '吴江农商银行',\n pc_domain: 'http://www.wjrcb.com',\n app_download:\n 'https://www.wjrcb.com/wbank/wbank_2/weProtal/index.html?OpenId=1&Page=weProtal#?/downloadBank',\n sub: 1,\n },\n CBBQS: {\n name: '城市商业银行资金清算中心',\n pc_domain: 'http://www.ccfccb.cn',\n app_download: 'http://www.ccfccb.cn',\n sub: 1,\n },\n HBRCU: {\n name: '河北省农村信用社',\n pc_domain: 'http://www.hebnx.com',\n app_download: 'http://www.hebnx.com/mbank/',\n color: 'green',\n sub: 1,\n },\n CSCRCB: {\n name: '长沙农村商业银行',\n pc_domain: 'http://www.crcbbank.com/',\n app_download: '',\n sub: 1,\n },\n ZYBANK: {\n name: '中原银行',\n pc_domain: 'http://www.zybank.com.cn',\n app_download: '',\n color: 'blue',\n sub: 0,\n },\n FJNX: {\n name: '福建省农村信用社联合社',\n pc_domain: 'http://www.fjnx.com.cn/',\n app_download: '',\n sub: 1,\n },\n HBA: {\n name: '海南银行',\n pc_domain: 'http://www.hnbankchina.com.cn/',\n app_download: '',\n color: 'blue',\n },\n GDRC: {\n name: '广东茂名农村商业银行',\n pc_domain: '',\n app_download: '',\n color: 'blue',\n },\n CRB: {\n name: '华润银行',\n pc_domain: '',\n app_download: '',\n color: 'blue',\n },\n NRC: {\n name: '南海农商银行',\n pc_domain: '',\n app_download: '',\n },\n FRCB: {\n name: '佛山农村商业银行',\n pc_domain: '',\n app_download: '',\n },\n LZCCB: {\n name: '柳州銀行',\n pc_domain: '',\n app_download: '',\n },\n BOW: {\n name: '乌海银行',\n pc_domain: '',\n app_download: '',\n },\n LNRCC: {\n name: '辽宁省农村信用社',\n pc_domain: '',\n app_download: '',\n },\n ZJB: {\n name: '紫金农商银行',\n pc_domain: '',\n app_download: '',\n },\n SXB: {\n name: '山西银行',\n pc_domain: '',\n app_download: '',\n },\n SRCU: {\n name: '山西农村信用社',\n pc_domain: '',\n app_download: '',\n },\n JNMSRB: {\n name: '集宁蒙商村镇银行',\n pc_domain: '',\n app_download: '',\n },\n IMGRCC: {\n name: '内蒙古农村信用社',\n pc_domain: '',\n app_download: '',\n },\n JSRCB: {\n name: '江苏农村商业银行',\n pc_domain: '',\n app_download: '',\n },\n SYRCB: {\n name: '沈阳农商银行',\n pc_domain: '',\n app_download: '',\n },\n ZJRCB: {\n name: '浙江农村商业银行',\n pc_domain: '',\n app_download: '',\n sub: 1,\n },\n JXB: {\n name: '江西银行',\n pc_domain: '',\n app_download: '',\n },\n NYCB: {\n name: '河南南阳村镇银行',\n pc_domain: '',\n app_download: '',\n },\n CAB: {\n name: '长安银行',\n pc_domain: '',\n app_download: '',\n },\n BOQZ: {\n name: '泉州银行',\n pc_domain: '',\n app_download: '',\n },\n JXRCB: {\n name: '江西农商银行',\n pc_domain: '',\n app_download: '',\n },\n CSXB: {\n name: '湖南三湘银行',\n pc_domain: '',\n app_download: '',\n },\n};\n\nconst useBankData = () => {\n return Object.keys(bankData).map(bank_code => {\n return {\n value: bank_code,\n label: bankData[bank_code].name,\n };\n });\n};\n\nexport default useBankData;\n","import React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useRef,\n useMemo,\n} from 'react';\nimport {\n Modal,\n Table,\n Button,\n Typography,\n Radio,\n Form,\n Input,\n Space,\n Select,\n Upload,\n Divider,\n Row,\n} from 'antd';\nimport { useQueryApi, apiType, useMutationApi } from '@/hook/useApi';\nimport { PayType as PayTypeMap } from '@/utils';\nimport { Fragment } from 'react';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport { UploadOutlined } from '@ant-design/icons';\nimport useBankData from '@/hook/useBankData';\nimport SearchBar from '@/components/SearchBar';\n\nfunction PaymentListModal(\n { roomID, amount, payType, onSubmit = () => {}, onSubmitManual = () => {} },\n ref,\n) {\n const { onErrorMsg } = useAlertMessage();\n const bankData = useBankData();\n const currSelectedRow = useRef({});\n const [loading, setLoading] = useState(false);\n const [openModal, setOpenModal] = useState(false);\n const [paymentList, setPaymentList] = useState(false);\n const [innerPayType, setInnerPayType] = useState(payType);\n const [form] = Form.useForm();\n const [qrcode, setQrcode] = useState('');\n const [uploading, setUploading] = useState(false);\n const [isManualConfirmModalVisible, setIsManualConfirmModalVisible] =\n useState(false);\n const [fieldsValue, setFieldsValue] = useState({});\n const { fetchData, loading: listLoading } = useQueryApi(\n apiType.listPaymentChannel,\n );\n\n const listPaymentChannel = async ({ roomID, amount, payType, search }) => {\n const res = await fetchData({\n in: {\n roomID,\n amount,\n payType,\n },\n });\n const channels = res?.data?.listPaymentChannel?.channels || [];\n const filteredChannels = channels.filter(channel => {\n if (!search) return true;\n const arr = Object.keys(search).reduce((acc, key) => {\n if (search[key]) {\n const tester = new RegExp(search[key], 'ig');\n acc.push(tester.test(channel[key]));\n } else {\n acc.push(true);\n }\n return acc;\n }, []);\n return !arr.includes(false);\n });\n setPaymentList(filteredChannels);\n };\n\n const onFinish = async search => {\n listPaymentChannel({ roomID, amount, payType, search });\n };\n\n const open = () => {\n setOpenModal(true);\n listPaymentChannel({ roomID, amount, payType });\n };\n\n const onCancel = () => {\n setOpenModal(false);\n currSelectedRow.current = {};\n };\n\n useImperativeHandle(ref, () => ({\n open,\n onCancel,\n }));\n\n const bank_name = useMemo(() => {\n return bankData.find(({ value }) => value === fieldsValue.bank_code)?.label;\n }, [fieldsValue, bankData]);\n\n const isBank = useMemo(() => {\n return innerPayType === PayTypeMap.bank.key;\n }, [innerPayType]);\n\n const searchFields = useMemo(\n () => [\n { name: 'name', type: 'text', label: '渠道名称' },\n { name: 'alias', type: 'text', label: '别名' },\n ],\n [],\n );\n\n const columns = {\n bank: [\n { key: 'name', title: '渠道名称', dataIndex: 'name' },\n { key: 'alias', title: '别名', dataIndex: 'alias' },\n { key: 'bank', title: '收款银行', dataIndex: 'bank' },\n { key: 'subBank', title: '支行名称', dataIndex: 'subBank' },\n { key: 'account', title: '收选账号', dataIndex: 'account' },\n ],\n wx: [\n { key: 'name', title: '渠道名称', dataIndex: 'name' },\n { key: 'alias', title: '别名', dataIndex: 'alias' },\n ],\n alipay: [\n { key: 'name', title: '渠道名称', dataIndex: 'name' },\n { key: 'alias', title: '别名', dataIndex: 'alias' },\n ],\n ecny: [\n { key: 'name', title: '渠道名称', dataIndex: 'name' },\n { key: 'alias', title: '别名', dataIndex: 'alias' },\n ],\n };\n\n const [newCreateUpload] = useMutationApi(apiType.NEW_CREATE_UPLOAD);\n const uploadHandler = async ({ file }) => {\n try {\n setUploading(true);\n const [err, { data }] = await newCreateUpload({\n in: file,\n });\n if (err) throw err;\n\n const url = data.newCreateUpload;\n const s3_domain = process.env.REACT_APP_S3_URL;\n const imgUrl = `${s3_domain}/${url}`;\n setQrcode(imgUrl);\n } catch (e) {\n onErrorMsg(e.message);\n } finally {\n setUploading(false);\n }\n };\n\n const onManualConfirm = async () => {\n setLoading(true);\n const inputs = {\n payType: innerPayType,\n amount: fieldsValue.innerAmount,\n timeExpired: Number(fieldsValue.timeExpired),\n };\n if (isBank) {\n inputs.credential = {\n type: PayTypeMap.bank.key,\n data: {\n account: fieldsValue.account,\n name: fieldsValue.name,\n open_bank: bank_name,\n open_bank_name: bank_name,\n open_bank_code: fieldsValue.bank_code,\n sub_bank: fieldsValue.sub_bank,\n },\n };\n } else {\n inputs.credential = {\n type: 'qrcode',\n url: '',\n q_url: qrcode,\n account: fieldsValue.account,\n account_name: fieldsValue.name,\n };\n }\n\n inputs.credential = JSON.stringify(inputs.credential);\n\n await onSubmitManual(inputs);\n setLoading(false);\n onCancel();\n setIsManualConfirmModalVisible(false);\n };\n\n const checkBankCard = async account => {\n fetch(\n `https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo=${account}&cardBinCheck=true`,\n )\n .then(res => res.json())\n .then(response => {\n if (response.validated) {\n form.setFieldsValue({\n bank_code: response.bank,\n });\n } else {\n form.setFieldsValue({\n bank_code: '',\n });\n }\n })\n .catch(e => {\n form.setFieldsValue({\n bank_code: '',\n });\n });\n };\n\n return (\n <>\n \n \n \n \n \n 第三方充值渠道\n \n \n {\n currSelectedRow.current = selectedRows[0];\n },\n }}\n columns={columns[payType] || []}\n dataSource={paymentList}\n pagination={false}\n rowKey='payeeID'\n />\n \n {\n setLoading(true);\n await onSubmit(currSelectedRow.current);\n setLoading(false);\n onCancel();\n }}>\n 确认\n \n \n \n\n \n\n \n 手动添加\n setInnerPayType(e.target.value)}\n value={innerPayType}>\n {PayTypeMap.bank.label}\n \n {PayTypeMap.alipay.label}\n \n {PayTypeMap.wx.label}\n \n \n \n \n \n \n \n \n {innerPayType === PayTypeMap.bank.key && (\n \n \n \n \n \n \n \n \n )}\n \n {\n if (innerPayType === PayTypeMap.bank.key) {\n checkBankCard(e.target.value);\n }\n }}\n />\n \n \n \n \n {!isBank && (\n \n \n \n }>\n 上传收款二维码\n \n \n \n {qrcode && (\n \n \n \n )}\n \n )}\n \n \n {\n const fields = await form.validateFields();\n if (!isBank) {\n if (!qrcode && !fields.account) {\n onErrorMsg('请先填写收款帐号或上传收款二维码');\n return;\n }\n }\n setFieldsValue(fields);\n setIsManualConfirmModalVisible(true);\n }}>\n 确认\n \n \n setIsManualConfirmModalVisible(false)}\n okButtonProps={{ loading }}\n okText='确认'\n cancelText='取消'>\n \n 收款姓名: {fieldsValue.name}\n \n 收款金额: {fieldsValue.innerAmount}\n \n {isBank && (\n \n 收款银行: {bank_name}({fieldsValue.bank_code})\n \n )}\n {isBank && (\n \n 支行名称: {fieldsValue.sub_bank}\n \n )}\n {!!fieldsValue.account && (\n \n 收款账号: {fieldsValue.account}\n \n )}\n \n 有效时间: {fieldsValue.timeExpired}秒\n \n \n \n \n \n \n \n );\n}\n\nexport default forwardRef(PaymentListModal);\n","import React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport { Modal, Table, Button, Form, Input, Space, Row, Radio } from 'antd';\nimport { useQueryApi, apiType } from '@/hook/useApi';\nimport { Fragment } from 'react';\nimport SearchBar from '@/components/SearchBar';\nimport { PayType as PayTypeMap } from '@/utils';\nimport Text from 'antd/lib/typography/Text';\nimport { Toast } from 'antd-mobile';\n\nfunction PaymentListModal(\n { roomID, amount, payType, onSubmit = () => {}, onSubmitManual = () => {} },\n ref,\n) {\n const currSelectedRow = useRef({});\n const [loading, setLoading] = useState(false);\n const [openModal, setOpenModal] = useState(false);\n const [paymentList, setPaymentList] = useState([]);\n const [form] = Form.useForm();\n\n const { fetchData, loading: listLoading } = useQueryApi(\n apiType.listPaymentChannel,\n );\n\n const [currentPayType, setCurrentPayType] = useState(PayTypeMap.bank.key);\n const listPaymentChannel = async ({ roomID, amount, payType, search }) => {\n const res = await fetchData({\n in: {\n roomID,\n amount,\n payType,\n },\n });\n const channels = res?.data?.listPaymentChannel?.channels || [];\n const filteredChannels = channels.filter(channel => {\n if (!search) return true;\n const arr = Object.keys(search).reduce((acc, key) => {\n if (search[key]) {\n const tester = new RegExp(search[key], 'ig');\n acc.push(tester.test(channel[key]));\n } else {\n acc.push(true);\n }\n return acc;\n }, []);\n return !arr.includes(false);\n });\n\n setPaymentList(filteredChannels);\n };\n\n const onFinish = async search => {\n listPaymentChannel({ roomID, amount, payType, search });\n };\n\n const open = () => {\n setOpenModal(true);\n listPaymentChannel({ roomID, amount, payType });\n };\n\n const onCancel = () => {\n setOpenModal(false);\n currSelectedRow.current = {};\n };\n\n useImperativeHandle(ref, () => ({\n open,\n onCancel,\n }));\n\n const searchFields = {\n bank: [\n { name: 'name', type: 'text', label: '开户名' },\n { name: 'alias', type: 'text', label: '开户银行' },\n ],\n alipay: [\n { name: 'payeeID', type: 'text', label: 'ID' },\n { name: 'name', type: 'text', label: '开户名' },\n { name: 'account', type: 'text', label: '支付宝账号' },\n ],\n };\n\n const columns = {\n bank: [\n { key: 'payeeID', title: 'ID', dataIndex: 'payeeID' },\n { key: 'name', title: '开户名', dataIndex: 'name' },\n { key: 'account', title: '银行卡号', dataIndex: 'account' },\n { key: 'alias', title: '开户银行', dataIndex: 'alias' },\n {\n key: 'amount',\n title: '实际清算提款金额',\n dataIndex: 'amount',\n render: amount => `${amount / 100}元`,\n },\n ],\n alipay: [\n { key: 'payeeID', title: 'ID', dataIndex: 'payeeID' },\n { key: 'name', title: '开户名', dataIndex: 'name' },\n { key: 'account', title: '支付宝账号', dataIndex: 'account' },\n {\n key: 'amount',\n title: '实际清算提款金额',\n dataIndex: 'amount',\n render: amount => `${amount / 100}元`,\n },\n ],\n };\n\n return (\n <>\n \n \n 拆解订单\n setCurrentPayType(e.target.value)}\n value={currentPayType}\n style={{ marginLeft: '20px' }} // 可选:调整间距\n >\n {PayTypeMap.bank.label}\n \n {PayTypeMap.alipay.label}\n \n \n \n }\n visible={openModal}\n destroyOnClose={true}\n onCancel={onCancel}\n footer={null}>\n \n \n \n \n \n \n \n \n {\n console.log(selectedRows, 'selectedRows');\n currSelectedRow.current = selectedRows[0];\n },\n }}\n columns={columns[currentPayType] || []}\n dataSource={\n paymentList.filter(\n item => item.payType === `sub_${currentPayType}`,\n ) || []\n }\n pagination={false}\n rowKey='payeeID'\n />\n \n {\n if (Object.keys(currSelectedRow.current).length === 0) {\n Toast.show({ content: '请选择需要拆分的订单' });\n return;\n }\n\n const time = await form.validateFields();\n console.log(currSelectedRow.current, time.timeExpired);\n Modal.confirm({\n title: null,\n icon: null,\n content:\n currSelectedRow.current?.payType === 'sub_bank' ? (\n \n \n 开户名\n \n {currSelectedRow.current?.name}\n \n \n \n 银行卡号\n \n {currSelectedRow.current?.account}\n \n \n \n 开户银行\n \n {currSelectedRow.current?.alias}\n \n \n \n 实际清算提款金额\n \n {currSelectedRow.current?.amount}\n \n \n \n 有效时间\n \n {time.timeExpired}秒\n \n \n \n ) : (\n \n \n 开户名\n \n {currSelectedRow.current?.name}\n \n \n \n 支付宝账号\n \n {currSelectedRow.current?.account}\n \n \n\n \n 实际清算提款金额\n \n {currSelectedRow.current?.amount}\n \n \n \n 有效时间\n \n {time.timeExpired}秒\n \n \n \n ),\n cancelText: '取消',\n okText: '确认',\n onOk: async () => {\n setLoading(true);\n await onSubmit({\n ...currSelectedRow.current,\n time: Number(time.timeExpired),\n });\n setLoading(false);\n onCancel();\n },\n });\n }}>\n 确认\n \n \n \n \n \n \n );\n}\n\nexport default forwardRef(PaymentListModal);\n","import React, { useEffect, useState, useCallback, useRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Empty, Spin, Button } from 'antd';\nimport { Box, Row, Col } from '@WRAP_COMP';\nimport { setRoomDetail, setCurrentInRoomID } from '@/store/room';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useRoom from '@/hook/useRoom';\nimport useRoomMessage from '@/hook/useRoomMessage';\nimport useMe from '@/hook/useMe';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport useRecMessage from '@/hook/useRecMessage';\n\nimport UserDetailDrawer from '@/components/Drawer/UserDetailDrawer';\nimport ChatRoomHeader from '@/components/ChatRoomHeader/AdminHeader';\nimport ChatRoomContent from '@/components/ChatRoomContent';\nimport ChatRoomInputBar from '@/components/ChatRoomInputBar';\nimport MsgList from '@/components/MsgList';\nimport JoinCustomerServiceDrawer from './components/JoinCustomerServiceDrawer';\nimport InfoTabsBlock from './components/InfoTabsBlock';\nimport HeaderBtnGroup from './components/HeaderBtnGroup';\nimport PaymentListModal from './components/PaymentListModal';\nimport { AccountTypeKeys, CSRoomTypeKey, RoomStatusKeys } from '@/utils';\nimport ClientOrderDetailDrawer from '@/components/Drawer/ClientOrderDetailDrawer';\nimport SplitOrderModal from './components/SplitOrderModal';\nlet disConnectedInterID = null;\n\nfunction RoomDetailSection({\n currRoom = null,\n currTab = '0',\n setCurrRoom = () => {},\n onChangeTab = () => {},\n fetchMyConsHandle = () => {},\n}) {\n const { meInfo, authRoutesKey } = useSelector(({ auth }) => auth);\n const { wsStatusInfo } = useSelector(({ subscribe }) => subscribe);\n const { isMonitorType } = useMe();\n const dispatch = useDispatch();\n const { onSuccessMsg, onErrorMsg } = useAlertMessage();\n\n const inputBarRef = useRef(null);\n const paymentListModalRef = useRef(null);\n const chatRoomContentRef = useRef(null);\n const clientOrderDetailDrawerRef = useRef(null);\n\n /**\n * 房間資訊\n * */\n const { currentInRoomID, currentRoomID, roomDetail, roomUsersMap } =\n useSelector(({ room }) => room);\n const isDepositRoom = roomDetail?.room?.csType === CSRoomTypeKey['Deposit'];\n\n const userOrder = roomDetail?.room?.userOrder || {};\n\n const { getRoomLoading, fetchRoomInfo, updateInRoomHandle } = useRoom();\n\n const fetchRoomInfoHandle = useCallback(\n async (id, extraInfo) => {\n await fetchRoomInfo({ id, extraInfo });\n },\n [fetchRoomInfo],\n );\n\n const currInRoomHandle = (roomID = 0) => {\n updateInRoomHandle(roomID, roomID => dispatch(setCurrentInRoomID(roomID)));\n };\n\n /**\n * 房間對話訊息\n * */\n const {\n roomMsg,\n setRoomMsgHandle,\n fetchRoomMsgHandle,\n fetchInRoomMsgHandle,\n pushMsg,\n loadMoreMsg,\n loadPreRoomMsg,\n lastReadID,\n postSystemMsg,\n } = useRoomMessage({\n currentRoomID,\n currUserRooms: roomDetail?.room.userRooms || [],\n currHistoryRooms: roomDetail?.room.historyRooms || [],\n });\n\n /**\n * 推訊息\n */\n const pushMsgHandle = msg => {\n pushMsg(msg);\n chatRoomContentRef.current.scrollNodeTo();\n };\n\n // 當前房間資訊 恢復預設\n const resetCurrRoomLocation = () => {\n dispatch(setRoomDetail(null));\n setCurrRoom(null);\n setRoomMsgHandle('RESET');\n setTypingTxt('');\n currInRoomHandle();\n };\n\n /**\n * initGetRoom\n * - 進入房間 updateInRoom 為預設 0\n * - 取得 roomDetail & roomMsg\n * initInRoom\n * - 進入房間 先等 ws 傳 Hi 才能 updateInRoom (即時押上後來訊息已讀用的)\n * - 更新最後已讀的訊息 updateLastMsg (直接取最後一筆訊息更新)\n * - 離開房間更新 updateInRoom 為 0\n */\n // 取得房間資訊(尚未進入房間)\n const initGetRoom = async (roomID, tabKey) => {\n await fetchRoomInfoHandle(roomID, { tabKey });\n fetchRoomMsgHandle(roomID);\n currInRoomHandle();\n setTypingTxt('');\n };\n // 取得房間資訊並進入房間\n const initInRoom = useCallback(\n async (roomID, tabKey) => {\n await fetchRoomInfoHandle(roomID, { tabKey });\n fetchInRoomMsgHandle(roomID);\n currInRoomHandle(roomID);\n setTypingTxt('');\n // ws 斷線處理\n clearDisConnectedInter();\n wsStatusHandle(wsStatusInfo);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [wsStatusInfo],\n );\n\n const setHasNewMsgHandle = useCallback(\n recMsg => {\n if (recMsg.from.userID !== meInfo.id) {\n chatRoomContentRef.current?.setHasNewMsgHandle();\n }\n },\n [meInfo.id],\n );\n\n /** 取得歷史房間訊息 */\n\n /**\n * 加入其他客服\n */\n const [joinDrawer, setJoinDrawer] = useState({ visible: false });\n const visibleJoinDrawer = visible => setJoinDrawer({ visible });\n const [pullInRoom, { loading: pullLoading }] = useMutationApi(\n apiType.PULL_IN_CS_ROOM,\n );\n const pullInRoomHandle = async userIDs => {\n const [err] = await pullInRoom({\n in: {\n userIDs,\n roomID: roomDetail.room.roomID,\n isOperator: 'Yes',\n },\n });\n if (err) return;\n onSuccessMsg('操作成功,变更状态为咨询中');\n visibleJoinDrawer(false);\n if (userIDs.includes(meInfo.id) || currTab === '1') {\n onChangeTab('1'); // 到我的諮詢單\n initInRoom(roomDetail.room.roomID, '1');\n } else {\n onChangeTab('2'); // 到其他諮詢中\n initGetRoom(roomDetail.room.roomID, '2');\n }\n };\n\n /**\n * 離開房間\n * */\n const [leaveRoom, { loading: leaveLdg }] = useMutationApi(\n apiType.LEAVE_GROUP,\n );\n const leaveRoomHandle = async roomID => {\n const [err] = await leaveRoom({ roomID });\n if (err) return;\n onSuccessMsg('已离开房间');\n onChangeTab(currTab);\n resetCurrRoomLocation();\n };\n\n /**\n * 封存房間\n */\n const [updateRoom, { loading: updateRoomLdg }] = useMutationApi(\n apiType.UPDATE_ROOM,\n );\n const csRoomStatusDeactivated = ({ roomID }) => {\n currTab !== '0' && onChangeTab(currTab);\n roomDetail?.room.roomID === roomID && resetCurrRoomLocation();\n };\n const deactivateRoomHandle = async id => {\n const [err] = await updateRoom({\n filter: { room: { id } },\n in: { status: RoomStatusKeys['Deactivated'] },\n });\n if (err) return;\n onSuccessMsg('已封存房间');\n csRoomStatusDeactivated({ roomID: id });\n };\n\n /**\n * 釘選房間\n */\n const [updateUserRoom, { loading: updateUserRoomLdg }] = useMutationApi(\n apiType.UPDATE_USER_ROOM,\n );\n const pinRoomHandle = useCallback(async () => {\n const isPinned = roomDetail.extraInfo.isPinned;\n const [err] = await updateUserRoom({\n filter: { userRoom: { roomID: roomDetail.room.roomID } },\n in: { isPinned: isPinned ? 'No' : 'Yes' },\n });\n if (!err) {\n dispatch(\n setRoomDetail({\n ...roomDetail,\n extraInfo: { ...roomDetail.extraInfo, isPinned: !isPinned },\n }),\n );\n fetchMyConsHandle();\n }\n }, [dispatch, roomDetail, updateUserRoom, fetchMyConsHandle]);\n\n /**\n * 加入\n */\n\n const [joinRoom, { loading: joinLd }] = useMutationApi(apiType.JOIN_CS_ROOM, {\n onSuccess: async ({ data }) => {\n await initInRoom(data.joinConsultingRoom.roomID, '1');\n onChangeTab('1'); // 到我的諮詢單\n },\n });\n\n /**\n * 生成訂單\n */\n const [postDeposit] = useMutationApi(apiType.deposit, {\n context: { isShowGeneralError: false },\n onSuccess: () => paymentListModalRef.current.onCancel(),\n onError: err => {\n const msgType = {\n 400000: () => onErrorMsg('银行卡抽取失败,请联系客服'),\n 400002: () => onErrorMsg('已有订单进行中'),\n 402001: () => onErrorMsg('取消次数过多,请完成充值'),\n 500002: () => onErrorMsg('呼叫第三方失败,请联系客服人员'),\n };\n msgType[err.message] ? msgType[err.message]() : onErrorMsg(err.message);\n },\n });\n const postDepositHandle = async inputs => {\n await postDeposit({\n in: {\n payeeID: inputs.payeeID,\n roomID: roomDetail.room.roomID,\n payType: inputs.payType,\n amount: inputs.amount / 100 || '',\n timeExpired: inputs?.time || 600,\n credential: '',\n },\n });\n };\n const postDepositHandleManul = async inputs => {\n await postDeposit({\n in: { payeeID: '-1', roomID: roomDetail.room.roomID, ...inputs },\n });\n };\n\n /**\n * ws 監聽\n */\n // 收到 Typing 正在輸入\n const [typingTxt, setTypingTxt] = useState('');\n const recTypingHandle = useCallback(({ typing }) => {\n const username = typing.username || typing.userID;\n const content = typing.content;\n setTypingTxt(`使用者 ${username} 正在輸入 ${content}`);\n }, []);\n const recMsgCommonType = useCallback(\n recMsg => {\n setHasNewMsgHandle(recMsg);\n setTypingTxt('');\n },\n [setHasNewMsgHandle],\n );\n const recNewMsg = useCallback(\n recMsg => {\n setHasNewMsgHandle(recMsg);\n setRoomMsgHandle('PUSH', { msgList: [recMsg] });\n },\n [setHasNewMsgHandle, setRoomMsgHandle],\n );\n\n useRecMessage({\n roomID: currentInRoomID,\n typing: recTypingHandle,\n msgCommonType: recMsgCommonType,\n orderStatusPending: recNewMsg,\n payList: recNewMsg,\n systemText: recNewMsg,\n csRoomStatusDeactivated,\n });\n\n /**\n * ws status 重連處理\n */\n const disConnectedInterHandle = (roomID = 0) => {\n // eslint-disable-next-line no-unused-vars\n if (!roomID) return;\n disConnectedInterID = setInterval(() => {\n fetchInRoomMsgHandle(roomID);\n fetchRoomInfoHandle(roomID);\n }, 8000);\n };\n const clearDisConnectedInter = () => {\n if (!disConnectedInterID) return;\n window.clearInterval(disConnectedInterID);\n disConnectedInterID = null;\n };\n const wsStatusHandle = ({ status }, roomID) => {\n const type = {\n onDisconnected: () => {\n if (roomID && !disConnectedInterID) {\n disConnectedInterHandle(roomID);\n }\n },\n onReconnected: clearDisConnectedInter,\n onConnected: clearDisConnectedInter,\n };\n type[status] && type[status]();\n };\n useEffect(() => {\n wsStatusHandle(wsStatusInfo, currentInRoomID);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [wsStatusInfo]);\n\n useEffect(() => {\n if (currRoom?.room.roomID) {\n setRoomMsgHandle('RESET');\n currRoom.extraInfo.isExistInRoom\n ? initInRoom(currRoom.room.roomID, currTab)\n : initGetRoom(currRoom.room.roomID, currTab);\n }\n return () => {\n ['onReconnected', 'onConnected'].includes(wsStatusInfo.status) &&\n clearDisConnectedInter();\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currRoom?.room.roomID]);\n\n if (!roomDetail) {\n return (\n \n \n \n \n \n );\n }\n\n const btnGroupRender = () => {\n if (!roomDetail.extraInfo.isExistInRoom) return null;\n return (\n \n );\n };\n const frontDropControlRender = () => {\n return isMonitorType ? null : (\n joinRoom({ roomID: roomDetail.room.roomID })} // 後續處理 > csRoomStatusProcessing\n loading={joinLd}\n disabled={\n getRoomLoading || !authRoutesKey.includes('API_JoinConsultingRoom')\n }>\n 开始咨询\n \n );\n };\n\n return (\n <>\n \n {roomDetail.ownerUserData ? (\n \n \n \n \n \n {typingTxt &&
{typingTxt}
}\n \n clientOrderDetailDrawerRef.current.setVisible(true)\n }\n />\n \n \n // paymentListModalRef?.current?.open()\n // }\n // showPaymentListBtn={isDepositRoom}\n paymentChannelListBtn={\n isDepositRoom && (\n <>\n postDepositHandle(inputs)}\n onSubmitManual={inputs =>\n postDepositHandleManul(inputs)\n }\n />\n postDepositHandle(inputs)}\n onSubmitManual={inputs =>\n postDepositHandleManul(inputs)\n }\n />\n \n )\n }\n loading={getRoomLoading}\n />\n
\n \n\n \n \n inputBarRef.current.setInputValue(p => p + text)\n }\n visibleJoinDrawer={visibleJoinDrawer}\n />\n \n
\n ) : (\n \n 找不到拥有者} />\n
\n )}\n \n \n \n \n \n );\n}\n\nexport default RoomDetailSection;\n","import React, { useEffect, useState, useCallback, useRef } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Badge } from 'antd';\nimport { Row, Col } from '@WRAP_COMP';\nimport { setCurrentInRoomID } from '@/store/room';\nimport { useQueryApi, useMutationApi, apiType } from '@/hook/useApi';\nimport useRoom, { roomFormate } from '@/hook/useRoom';\nimport useRedPoint from '@/hook/useRedPoint';\nimport useRecMessage from '@/hook/useRecMessage';\nimport useMe from '@/hook/useMe';\nimport { RoomStatusKeys, cloneDeep, AccountTypeKeys } from '@/utils';\nimport ContactToMember from './components/ContactToMember';\nimport BatchDeactivated from './components/BatchDeactivated';\nimport RoomTabList from './RoomTabList';\nimport RoomDetailSection from './RoomDetailSection';\n\nconst TabMyCSHeader = ({ csTotalUnRead }) => (\n <>\n 我的咨询中\n \n \n);\nconst sorUserRoomListIsPinedHandle = list => {\n list.sort((a, b) => {\n if (a.extraInfo.isPinned) return -1;\n return a.room.createdAt > b.room.createdAt ? 0 : 1;\n });\n return list;\n};\n\nconst ConsultationChat = () => {\n const { meInfo } = useSelector(({ auth }) => auth);\n const { currentInRoomID, csTotalUnRead } = useSelector(({ room }) => room);\n const dispatch = useDispatch();\n\n const { isMonitorType } = useMe();\n const { initRedPointNotify, setCsTotalUnReadHandle } = useRedPoint();\n const { updateInRoomHandle, fetchRoom } = useRoom();\n\n /**\n * 房間列表\n */\n const [roomList, setRoomList] = useState([]);\n const [pinRoomNum, setPinRoomNum] = useState(0);\n const myConsRoomList = useRef([]);\n\n // 我的諮詢單列表\n const { fetchData: fetchMyCons, loading: myRoomLoading } = useQueryApi(\n apiType.LIST_MY_CS_ROOM,\n );\n const fetchMyConsHandle = useCallback(\n async (isReserve = false) => {\n try {\n const {\n data: {\n listUserRoom: { userRooms },\n },\n } = await fetchMyCons({ userID: meInfo.id });\n let pinnedRoomNum = 0; // 紀錄 pinRoom 數量\n let tempDataSource = []; // 組出 format roomList\n userRooms.forEach(({ room, userRooms, ...props }) => {\n const data = roomFormate.consulting({\n room: { ...room, ...props },\n ownerUserID: room.consultingDetail.ownerUserID,\n userRooms,\n meID: meInfo.id,\n });\n if (data.extraInfo.isPinned) pinnedRoomNum++;\n tempDataSource.push({ ...data });\n });\n // if (tempDataSource.length === 0) initRedPointNotify();\n setPinRoomNum(pinnedRoomNum);\n const tempList = sorUserRoomListIsPinedHandle(tempDataSource);\n isReserve || setRoomList(tempList);\n myConsRoomList.current = tempList;\n } catch (error) {\n console.log('fetchMyConsHandle', error);\n }\n },\n [fetchMyCons, meInfo.id],\n );\n\n // 待諮詢 & 其他諮詢中列表\n const { fetchData: fetchCons, loading: roomLoading } = useQueryApi(\n apiType.LIST_CS_ROOM,\n );\n const fetchConsHandle = useCallback(\n async ({ status }) => {\n const statusType = {\n 0: RoomStatusKeys['Active'],\n 2: RoomStatusKeys['Processing'],\n };\n try {\n const { data } = await fetchCons({\n filter: {\n baseFilter: { sortField: 'room_id', sortType: 'DESC' },\n statusIn: [statusType[status]],\n },\n });\n const {\n listConsultingRoom: { consultingRooms },\n } = data;\n\n // 組出 roomList format\n let tempDataSource = [];\n consultingRooms.forEach(({ userRooms, ...room }) => {\n const data = roomFormate.consulting({\n room,\n ownerUserID: room.ownerUserID,\n userRooms: userRooms,\n meID: meInfo.id,\n });\n\n // 其他諮詢中濾掉有我在的房間\n if (status === RoomStatusKeys['Processing']) {\n !data.extraInfo.isExistInRoom && tempDataSource.push({ ...data });\n } else {\n tempDataSource.push({ ...data });\n }\n });\n if (tempDataSource.length === 0) initRedPointNotify();\n setRoomList(tempDataSource);\n } catch (error) {\n console.log('fetchConsError', error);\n }\n },\n [fetchCons, initRedPointNotify, meInfo.id],\n );\n\n /**\n * RoomList Tab 處理\n */\n const tabPaneArr = () => {\n const tabs = [\n { key: '0', tab: '待咨询' },\n { key: '1', tab: },\n { key: '2', tab: '其他咨询中' },\n ];\n if (isMonitorType) tabs.splice(1, 1);\n return tabs;\n };\n const [currTab, setCurrTab] = useState(tabPaneArr()[0].key);\n const [currRoom, setCurrRoom] = useState(null);\n const onChangeTab = useCallback(\n key => {\n key === '1' ? fetchMyConsHandle() : fetchConsHandle({ status: key });\n setCurrTab(key);\n },\n [fetchConsHandle, fetchMyConsHandle],\n );\n\n /**\n * 處理指定進入房\n * - 列表完成後進進入指定房間\n */\n const [specifyRoomID, setSpecifyRoomID] = useState(0); //\n useEffect(() => {\n if (specifyRoomID) {\n const room = roomList.find(rm => rm.room.roomID === specifyRoomID);\n setCurrRoom(room);\n setSpecifyRoomID(0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [roomList]);\n\n /**\n * 主動聯繫會員\n */\n const [contactToMember, { loading: contactLdg }] = useMutationApi(\n apiType.CREATED_CS_CONTACT,\n {\n onCompleted: ({ createConsultingRoomWithContact }) => {\n onChangeTab('1'); // 到我的諮詢單\n // 設定指定進入房\n setSpecifyRoomID(\n createConsultingRoomWithContact.consultingDetail.roomID,\n );\n },\n },\n );\n\n // sort 房間排序 處理最新訊息排序\n const sortRoomToTop = useCallback(\n roomID => {\n const roomIdx = roomList.findIndex(({ room }) => room.roomID === roomID); // 找到 room index\n if (roomIdx < 0) return;\n if (roomList[roomIdx].extraInfo.isPinned) return; // pinRoom 不再處理最高排序\n let tempList = cloneDeep(roomList);\n tempList.splice(roomIdx, 1);\n tempList.splice(pinRoomNum, 0, roomList[roomIdx]);\n setRoomList(tempList);\n },\n [pinRoomNum, roomList],\n );\n\n // totalUnRead: 處理新訊息 tab totalUnRead\n const setUnReadHandle = useCallback(\n ({ roomID, from, ...props }) => {\n // 當前房 && 自己的訊息不處理\n if (roomID === currentInRoomID || from.userID === meInfo.id) return;\n if (meInfo.accountType === AccountTypeKeys['CustomerService']) {\n setCsTotalUnReadHandle(csTotalUnRead + 1);\n sortRoomToTop(roomID);\n } else {\n // 其他帳號類型都會收到 ws, 判斷是否在我的諮詢中 是的話才處理未讀數量\n const isMyConsRoom = myConsRoomList.current.some(\n rr => rr.room.roomID === roomID,\n );\n if (!isMyConsRoom) return;\n setCsTotalUnReadHandle(csTotalUnRead + 1);\n sortRoomToTop(roomID);\n }\n },\n [\n csTotalUnRead,\n currentInRoomID,\n meInfo.id,\n meInfo.accountType,\n setCsTotalUnReadHandle,\n sortRoomToTop,\n ],\n );\n\n // 有新的諮詢室\n const getActiveRoomHandle = async id => {\n const { data, error } = await fetchRoom({ filter: { room: { id } } });\n if (error) {\n onChangeTab(currTab);\n return;\n }\n const roomDetail = roomFormate.consulting({\n room: { ...data.getRoom },\n ownerUserID: data.getRoom.consultingDetail.ownerUserID,\n userRooms: data.getRoom.userRooms,\n meID: meInfo.id,\n extraInfo: { isNewActiveRoom: true },\n });\n setRoomList(pre => {\n return [roomDetail, ...pre];\n });\n };\n\n /**\n * ws 監聽\n */\n useRecMessage({\n msgCommonType: useCallback(\n recMsg => setUnReadHandle(recMsg),\n [setUnReadHandle],\n ),\n orderStatusPending: useCallback(\n recMsg => setUnReadHandle(recMsg),\n [setUnReadHandle],\n ),\n csRoomStatusActive: data => {\n // 有新的諮詢室\n currTab === '0' && getActiveRoomHandle(data.roomID);\n },\n csRoomStatusProcessing: ({ from }) => {\n // 被自動分到諮詢室\n if (from.userID !== meInfo.id && currTab === '1') {\n onChangeTab(currTab);\n }\n },\n });\n\n useEffect(() => {\n fetchConsHandle({ status: currTab });\n fetchMyConsHandle(true);\n initRedPointNotify();\n return () => {\n // 離開 inRoom 恢復預設\n updateInRoomHandle(0, roomID => dispatch(setCurrentInRoomID(roomID)));\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /**\n * 待諮詢 批量封存\n */\n const [indeterminate, setIndeterminate] = useState(false);\n const [checkAll, setCheckAll] = useState(false);\n const [checkedList, setCheckedList] = useState([]);\n\n const [batchDeactivated] = useMutationApi(\n apiType.BATCH_DEACTIVATED_CS_ROOM,\n {\n onCompleted: () => {\n onChangeTab('0'); // 到我的諮詢單\n setIndeterminate(false)\n setCheckAll(false)\n setCheckedList([])\n },\n },\n );\n\n const onCheckAllChange = e => {\n const list = e.target.checked ? roomList.map(r => r.room.roomID) : [];\n setCheckedList(list);\n setIndeterminate(false);\n setCheckAll(e.target.checked);\n };\n\n const onCheckRoom = list => {\n setCheckedList(list);\n setIndeterminate(!!list.length && list.length < roomList.length);\n setCheckAll(list.length === roomList.length);\n };\n\n return (\n <>\n \n \n \n {currTab === '0' && (\n \n )}\n \n \n )\n }\n />\n \n \n \n \n \n \n );\n};\n\nexport default ConsultationChat;\n","import React from 'react';\nimport { Box, Row, Col } from '@WRAP_COMP';\n\nconst PageWrap = ({ children, bgColor = '', ...props }) => {\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nexport default PageWrap;\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { setVisibleDrawer } from '@/store/global';\nimport { Divider, Button } from 'antd';\nimport TabsScrollBlock from '@/components/TabsScrollBlock';\nimport SpinachInfo from '@/components/User/SpinachInfo';\nimport CSForm from '@/components/ChatRoomContent/CSForm';\nimport RoomDetailDesc from '@/components/CSRoomAdmin/RoomDetailDesc';\nimport RoomUserList from '@/components/CSRoomAdmin/RoomUserList';\nimport { AccountTypeKeys } from '@/utils';\n\nconst INFO_TABS = [\n { key: 'roomInfo', tab: '房间资讯' },\n { key: 'csForm', tab: '询前表单' },\n];\n\nfunction InfoTabsBlock({\n room = null,\n ownerUserData = null,\n roomUsersMap = {},\n}) {\n const dispatch = useDispatch();\n const openUserDetailDrawer = () => {\n dispatch(setVisibleDrawer({ name: 'UserDetailDrawer', visible: true }));\n };\n\n const [currTabKey, setCurrInfoTabKey] = useState(INFO_TABS[0].key);\n const tabContentRender = {\n roomInfo: () => (\n <>\n \n {ownerUserData?.accountType !== AccountTypeKeys['Tourist'] && (\n <>\n 会员资讯\n \n \n 更多資訊\n \n \n )}\n \n \n ),\n csForm: () => (\n \n ),\n };\n\n return (\n <>\n setCurrInfoTabKey(tab)}\n wrapProps={{ py: 0 }}>\n {room && ownerUserData && tabContentRender[currTabKey]()}\n \n \n );\n}\n\nexport default InfoTabsBlock;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { LeftCircleTwoTone, RightCircleTwoTone } from '@ant-design/icons';\nimport { Button, Drawer, Spin } from 'antd';\nimport { setVisibleDrawer } from '@/store/global';\nimport { setRoomDetail } from '@/store/room';\nimport { Box } from '@WRAP_COMP';\nimport useRoomMessage from '@/hook/useRoomMessage';\nimport MsgList from '@/components/MsgList';\nimport ChatRoomContent from '@/components/ChatRoomContent';\nimport InfoTabsBlock from './InfoTabsBlock';\nconst DRAWER_NAME = 'ViewRoomDrawer';\n\nconst ViewDrawer = ({\n title = '查核聊天內容',\n loading = false,\n onChangeRoom = () => {},\n}) => {\n const dispatch = useDispatch();\n const { currentRoomID, roomDetail, roomUsersMap } = useSelector(\n ({ room }) => room,\n );\n const visibleData = useSelector(({ global }) => global.visibleDrawer);\n const [visible, setVisible] = useState(false);\n useEffect(() => {\n visibleData.name === DRAWER_NAME && setVisible(visibleData.visible);\n }, [visibleData]);\n\n const {\n roomMsg,\n setRoomMsgHandle,\n fetchRoomMsgHandle,\n loadMoreMsg,\n loadPreRoomMsg,\n lastReadID,\n } = useRoomMessage({\n currentRoomID,\n currUserRooms: roomDetail?.room.userRooms || [],\n currHistoryRooms: roomDetail?.room.historyRooms || [],\n });\n\n useEffect(() => {\n if (visible && roomDetail) fetchRoomMsgHandle(roomDetail.room.roomID);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visible, roomDetail]);\n\n const closeDrawer = () => {\n setRoomMsgHandle('RESET');\n dispatch(setRoomDetail(null));\n dispatch(setVisibleDrawer({ name: DRAWER_NAME, visible: false }));\n };\n\n const onChangeRoomHandle = v => {\n setRoomMsgHandle('RESET');\n onChangeRoom(v);\n };\n\n return (\n \n onChangeRoomHandle(false)}\n />\n }\n />\n onChangeRoomHandle(true)}\n />\n }\n />\n \n }>\n \n {loading && (\n \n \n \n )}\n {roomDetail && (\n \n \n \n \n \n \n \n \n )}\n \n \n );\n};\n\nViewDrawer.propTypes = {\n children: PropTypes.node,\n loading: PropTypes.bool,\n roomDetail: PropTypes.object,\n roomUsers: PropTypes.object,\n title: PropTypes.string,\n footer: PropTypes.node,\n};\nexport default ViewDrawer;\n","import React from 'react';\nimport { formatDateTime, secondsToHms } from '@/utils';\nimport { Badge, Tooltip } from 'antd';\n\nfunction ConversationTime({ createdAt, deactivatedAt }) {\n const items = [\n { status: 'success', title: '建立时间', text: formatDateTime(createdAt) },\n {\n status: 'success',\n title: '封存时间',\n text: formatDateTime(deactivatedAt),\n },\n {\n status: 'blue',\n title: '对话时间',\n text: secondsToHms(deactivatedAt - createdAt),\n },\n ];\n return (\n <>\n {items.map(({ title, status, text }, idx) => (\n
\n \n \n \n
\n
\n ))}\n \n );\n}\n\nexport default ConversationTime;\n","/**\n * 歷史諮詢紀錄\n */\nimport React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { EyeTwoTone, DownloadOutlined } from '@ant-design/icons';\nimport { setVisibleDrawer } from '@/store/global';\nimport { setRoomDetail } from '@/store/room';\nimport { Space, Tag, Typography } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\n\nimport { useActiveList } from '@/hook/useList';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport useRoom from '@/hook/useRoom';\n\nimport PageWrap from '@/components/PageWrap';\nimport SearchBar from '@/components/SearchBar';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnTooltip from '@/components/Button/BtnTooltip';\nimport ViewRoomDrawer from '@/views/CSRoomDeactivated/ViewRoomDrawer';\nimport UserDetailDrawer from '@/components/Drawer/UserDetailDrawer';\nimport {\n setDateRanges,\n formatSearchDateTime,\n RoomStatusKeys,\n AccountTypeKeys,\n AccountTypeDisplay,\n EnableKey,\n} from '@/utils';\nimport ConversationTime from './ConversationTime';\n\nconst defaultDateTime = setDateRanges(0);\nconst defaultSearch = {\n accessDomain: '',\n ownerUsername: '', // 會員帐号\n deactivatedUsername: '', // 封存客服\n accountType: AccountTypeKeys['Unknown'],\n isEffective: EnableKey['Unknown'],\n date: [defaultDateTime.start, defaultDateTime.end], // 日期套件要用的預設格式\n};\nconst defaultSearchDataFormat = formatSearchDateTime([\n defaultDateTime.start,\n defaultDateTime.end,\n]);\nconst originFilter = {\n statusIn: [RoomStatusKeys['Deactivated']],\n baseFilter: {\n sortField: 'room_id',\n sortType: 'DESC',\n rangeField: 'deactivated_at',\n rangeType: 'ByDateTime',\n greaterThanEqual: defaultSearchDataFormat[0],\n lessThanEqual: defaultSearchDataFormat[1],\n },\n};\n\nexport default function ConsultationChatDeactivated() {\n const { onErrorMsg, onWarningMsg } = useAlertMessage();\n const {\n data: { list, total },\n loading,\n pagination,\n handleSearchFilter,\n handleChangePage,\n refetch,\n } = useActiveList({\n api: 'LIST_DEACTIVATED_CS_ROOM',\n originFilter: { ...originFilter },\n handleData: ({ listConsultingRoom }) => {\n const { consultingRooms = [], meta = {} } = listConsultingRoom;\n let list = [];\n let total = 0;\n try {\n list = consultingRooms.map(item => {\n let obj = { ...item };\n // 封存客服\n obj.deactivatedUsername = obj.deactivatedUserID\n ? item.userRooms.find(u => u.userID === obj.deactivatedUserID)?.user\n .username || '-'\n : '待咨询自动封存';\n // 會員帳號\n obj.username =\n item.userRooms.find(u => u.userID === item.ownerUserID)?.user\n .username || '';\n return obj;\n });\n total = meta?.total || 0;\n } catch (err) {\n onErrorMsg(err);\n }\n return { list, total };\n },\n });\n\n const [currSearch, setCurrSearch] = useState({ ...originFilter });\n const onSearchHandle = ({\n accessDomain,\n isEffective,\n roomID,\n date,\n createdAt,\n ...props\n }) => {\n const formatDate = formatSearchDateTime(date);\n const formatCreatedAt = formatSearchDateTime(createdAt);\n const searchData = {\n statusIn: originFilter.statusIn,\n consultingRoom: { accessDomain, isEffective, roomID },\n ...props,\n baseFilter: {\n ...originFilter.baseFilter,\n greaterThanEqual: formatDate[0],\n lessThanEqual: formatDate[1],\n ...(createdAt && {\n createdAtGTE: formatCreatedAt[0],\n createdAtLTE: formatCreatedAt[1],\n }),\n },\n };\n setCurrSearch({ ...searchData });\n handleSearchFilter({ ...searchData });\n };\n\n const dispatch = useDispatch();\n const setVisibleHandle = visible => {\n if (!visible) dispatch(setRoomDetail(null));\n dispatch(setVisibleDrawer({ name: 'ViewRoomDrawer', visible }));\n };\n\n const { roomDetail } = useSelector(({ room }) => room);\n const [currIdx, setCurrIdx] = useState(0);\n const { getRoomLoading, fetchRoomInfo } = useRoom();\n const fetchRoomInfoHandle = (id, extraInfo) => {\n fetchRoomInfo({ id, extraInfo });\n };\n\n const clickControl = async (data, idx) => {\n setCurrIdx(idx);\n fetchRoomInfoHandle(data.roomID);\n setVisibleHandle(true);\n };\n\n /**\n * 報表下載\n * - 下載限制最多 3 天量\n */\n const [currSearchData, setCurrSearchData] = useState([\n ...defaultSearchDataFormat,\n ]);\n const onChangeData = m => {\n setCurrSearchData([...formatSearchDateTime(m)]);\n };\n const isAllowDownloadDayRange = () => {\n const limitRangeSec = 24 * 60 * 60 * 3;\n const searchRange = currSearchData[1] - currSearchData[0];\n return searchRange <= limitRangeSec;\n };\n const [downloadReport, { loading: downLoading }] = useMutationApi(\n apiType.DOWNLOAD_CS_ROOM_REPORT,\n );\n\n const downloadReportHandle = async () => {\n if (!isAllowDownloadDayRange()) {\n onWarningMsg('下载限制最多三天');\n return;\n }\n const [error, data] = await downloadReport({ filter: { ...currSearch } });\n if (error) return;\n if (data?.data?.downloadConsultingRoomReport) {\n let a = document.createElement('a');\n a.href = data.data.downloadConsultingRoomReport;\n a.click();\n } else {\n onErrorMsg('报表下载失败');\n }\n };\n\n const changePageSpecifyDetail = async ({ Idx, page }) => {\n await handleChangePage({ perPage: pagination.perPage, page });\n const { error, data } = await refetch({\n pagination: { perPage: pagination.perPage, page },\n });\n if (error) return;\n return {\n roomID: data.listConsultingRoom.consultingRooms[Idx]?.roomID || 0,\n };\n };\n\n const onChangeDetailRoom = async (isNext = true) => {\n let Idx = isNext ? currIdx + 1 : currIdx + -1;\n let roomID = list[Idx]?.roomID || 0;\n let page = pagination.page;\n\n // 上一頁\n if (Idx < 0) {\n if (page === 1) {\n onWarningMsg('已是第一笔纪录');\n return;\n }\n Idx = pagination.perPage - 1;\n page = page - 1;\n const data = await changePageSpecifyDetail({ Idx, page });\n roomID = data.roomID;\n }\n\n // 下一頁\n if (Idx === list.length) {\n if (pagination.page > total / pagination.perPage) {\n onWarningMsg('已是最後ㄧ笔纪录');\n return;\n }\n Idx = 0;\n page = page + 1;\n const data = await changePageSpecifyDetail({ Idx, page });\n roomID = data.roomID;\n }\n setCurrIdx(Idx);\n fetchRoomInfoHandle(roomID);\n };\n\n const searchFields = [\n {\n name: 'date',\n type: 'dateRange',\n label: '封存时间',\n showTime: true,\n onChange: onChangeData,\n },\n {\n name: 'createdAt',\n type: 'dateRange',\n label: '创建时间',\n showTime: true,\n allowClear: true,\n },\n { name: 'roomID', type: 'text', label: '房間ID' },\n { name: 'deactivatedUsername', type: 'text', label: '封存客服帐号' },\n { name: 'firstJoinUsername', type: 'text', label: '进线客服帐号' },\n { name: 'ownerUsername', type: 'text', label: '會員帐号' },\n {\n name: 'accountType',\n type: 'select',\n label: '會員帐号类型',\n optionsObj: {\n Unknown: { ...AccountTypeDisplay['Unknown'] },\n CommonUser: { ...AccountTypeDisplay['CommonUser'] },\n Tourist: { ...AccountTypeDisplay['Tourist'] },\n },\n },\n {\n name: 'isEffective',\n type: 'select',\n label: '对话状态',\n optionsObj: {\n Unknown: { searchText: '全部类型' },\n Yes: { searchText: '有效对话' },\n No: { searchText: '无效对话' },\n },\n },\n { name: 'accessDomain', type: 'text', label: '访问域名' },\n ];\n const columns = [\n {\n title: '房間 #ID',\n dataIndex: 'roomID',\n key: 'roomID',\n width: '10%',\n fixed: 'left',\n },\n {\n title: '客戶信息',\n key: 'userInfo',\n width: '15%',\n render: r => (\n <>\n {r.username ? (\n `${r.username} #${r.ownerUserID}`\n ) : (\n 遊客 #{r.ownerUserID}\n )}\n \n ),\n },\n {\n title: '封存客服',\n dataIndex: 'deactivatedUsername',\n key: 'deactivatedUsername',\n width: '10%',\n render: (n, { deactivatedUserID }) => (\n <>\n {n}\n {deactivatedUserID && ` #${deactivatedUserID}`}\n \n ),\n },\n {\n title: '对话时间',\n key: 'conversation',\n render: ({ createdAt, deactivatedAt }) => (\n \n ),\n },\n {\n title: '访问域名',\n dataIndex: 'accessDomain',\n key: 'accessDomain',\n },\n {\n title: '房间资讯',\n key: 'roomInfo',\n render: r => (\n <>\n 裝置: {r.deviceOS}\n
\n IP: {r.ipAddress}\n
\n \n 地區: {r.country} {r.administrativeArea}\n \n \n ),\n },\n {\n title: '动作',\n key: 'action',\n width: '10%',\n fixed: 'right',\n render: (record, d, idx) => (\n \n clickControl(record, idx)}\n tipTitle='查核'\n icon={}>\n \n ),\n },\n ];\n\n return (\n \n \n \n }\n onClick={downloadReportHandle}\n loading={downLoading}>\n 報表下載\n \n \n \n
\n \n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Input, Form, Switch, Drawer as ADrawer } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport AvatarUpload from '@/components/Avatar/AvatarUpload';\n\nconst defaultForm = { name: '', isDisplayEnabled: true };\nfunction Drawer({\n visible,\n setVisible,\n loading,\n detailData = null,\n createdSVS,\n updateSVS,\n}) {\n const [svsForm] = Form.useForm();\n const [isEdit, setIsEdit] = useState(false);\n const [file, setFile] = useState(null);\n const [avatarURL, setAvatarURL] = useState('');\n\n const submitHandle = async fields => {\n if (file) fields.avatarContent = file;\n let variables = {\n in: {\n ...fields,\n isDisplayEnabled: fields.isDisplayEnabled ? 'Yes' : 'No',\n },\n };\n if (isEdit) {\n variables = {\n ...variables,\n filter: { contactCustomerService: { id: detailData.id } },\n };\n await updateSVS(variables);\n } else {\n await createdSVS(variables);\n }\n await closeDrawer();\n };\n\n const closeDrawer = async () => {\n await svsForm.resetFields();\n setFile(null);\n setAvatarURL('');\n setVisible(false);\n };\n\n useEffect(() => {\n const initForm = async () => {\n setIsEdit(detailData ? true : false);\n setAvatarURL(detailData ? detailData.avatarURL : '');\n const formData = detailData\n ? {\n ...detailData,\n isDisplayEnabled: detailData.isDisplayEnabled === 'Yes',\n }\n : defaultForm;\n await svsForm.setFieldsValue(formData);\n };\n visible && initForm();\n }, [detailData, svsForm, visible]);\n\n return (\n \n setFile(file)}\n isEdit={true}\n />\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default Drawer;\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { PlusOutlined, EditTwoTone } from '@ant-design/icons';\nimport { useActiveList } from '@/hook/useList';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport PageWrap from '@/components/PageWrap';\nimport SearchBar from '@/components/SearchBar';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport AvatarFetch from '@/components/Avatar/AvatarFetch';\nimport { EnableKey, formatDateTime, EnableDisplay } from '@/utils';\nimport { Button, Space, Switch } from 'antd';\nimport Drawer from './Drawer';\n\nconst originFilter = {\n contactCustomerService: {\n name: '',\n isDisplayEnabled: EnableKey['Unknown'],\n },\n};\n\nconst searchFields = [\n { name: 'name', type: 'text', label: '客服名称', placeholder: '请输入' },\n {\n name: 'isDisplayEnabled',\n type: 'select',\n label: '启用状态',\n optionsObj: EnableDisplay,\n },\n];\n\nexport default function ContactCustomerService() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const {\n data: { list, total },\n loading,\n pagination,\n refetch,\n handleSearchFilter,\n handleChangePage,\n } = useActiveList({\n api: 'LIST_CONTACT_CUS_SVS',\n originFilter: { ...originFilter },\n handleData: ({ listContactCustomerService }) => ({\n list: listContactCustomerService.contactCustomerServices || [],\n total: listContactCustomerService.meta?.total || 0,\n }),\n });\n\n const onSearchHandle = search => {\n handleSearchFilter({\n contactCustomerService: {\n ...originFilter.contactCustomerService,\n ...search,\n },\n });\n };\n\n const callback = { onCompleted: refetch };\n\n // 刪除\n const [deleteSVS, { loading: deleteLdg }] = useMutationApi(\n apiType.DELETE_CONTACT_CUS_SVS,\n callback,\n );\n\n // 新增 編輯\n const [createdSVS, { loading: createdLdg }] = useMutationApi(\n apiType.CREATED_CONTACT_CUS_SVS,\n callback,\n );\n const [updateSVS, { loading: updateLdg }] = useMutationApi(\n apiType.UPDATE_CONTACT_CUS_SVS,\n callback,\n );\n\n const onChangeEnabled = (checked, record) => {\n updateSVS({\n in: { name: record.name, isDisplayEnabled: checked ? 'Yes' : 'No' },\n filter: { contactCustomerService: { id: record.id } },\n });\n };\n\n const [detailSource, setDetailSource] = useState(null);\n const [visible, setVisible] = useState(false);\n const setVisibleHandle = (visible, record = null) => {\n setDetailSource(record);\n setVisible(visible);\n };\n\n const columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n key: 'id',\n width: '5%',\n fixed: 'left',\n },\n {\n title: '头像',\n dataIndex: 'avatarURL',\n key: 'avatarURL',\n render: avatarURL => ,\n },\n {\n title: '客服名称',\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: '启用状态',\n dataIndex: 'isDisplayEnabled',\n key: 'isDisplayEnabled',\n render: (h, record) => (\n onChangeEnabled(checked, record)}\n />\n ),\n },\n {\n title: '更新时间',\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n render: h => formatDateTime(h),\n },\n {\n title: '动作',\n key: 'action',\n width: '10%',\n fixed: 'right',\n render: record => (\n \n {authRoutesKey.includes('API_ContactCustomerService_Update') && (\n setVisibleHandle(true, record)}\n type='link'\n icon={}\n />\n )}\n {authRoutesKey.includes('API_ContactCustomerService_Delete') && (\n \n deleteSVS({\n filter: { contactCustomerService: { id: record.id } },\n })\n }\n loading={deleteLdg}\n />\n )}\n \n ),\n },\n ];\n\n return (\n \n \n \n }\n onClick={() => setVisibleHandle(true)}>\n 新建联系人客服\n \n \n \n \n );\n}\n","import { useState, useEffect } from 'react';\nimport moment from 'dayjs';\nimport { apiType, useMutationApi } from '@/hook/useApi';\nimport {\n Input,\n Radio,\n Button,\n DatePicker,\n Form,\n Drawer as ADrawer,\n} from 'antd';\nimport useAlertMessage from '@/hook/useAlertMessage';\n\nconst CreateDrawer = ({ visible, setVisible, refetch }) => {\n const [isScheduled, setIsScheduled] = useState(false);\n\n const [pushForm] = Form.useForm();\n const { onSuccessMsg } = useAlertMessage();\n const [cerateFetch, { loading }] = useMutationApi(apiType.CREATE_PUSH); // 新增\n\n // 提交表單\n const submitHandle = async () => {\n const fields = await pushForm.validateFields();\n if (fields.scheduledTime) {\n fields.scheduledTime = fields.scheduledTime.unix();\n }\n const [err] = await cerateFetch({ in: { ...fields } });\n if (!err) {\n onSuccessMsg();\n refetch();\n await closeDrawer(false);\n }\n };\n\n const closeDrawer = async () => {\n await pushForm.resetFields();\n setVisible(false);\n };\n\n useEffect(() => {\n const detailDataHandle = async () => {\n await pushForm.setFieldsValue({\n target: 'ALL',\n isScheduled: 'No',\n });\n };\n if (visible) detailDataHandle();\n }, [visible, pushForm]);\n\n const changeScheduled = e => {\n setIsScheduled(() => e.target.value === 'Yes');\n };\n\n function disabledDate(current) {\n return current < moment().startOf('day');\n }\n\n return (\n \n
\n \n \n \n \n \n \n \n \n 所有用戶\n \n 單個用戶\n \n \n 特定用戶\n \n \n \n \n \n 立即推送\n 定時推送\n \n \n {isScheduled && (\n \n \n \n )}\n \n \n \n \n
\n );\n};\n\nexport default CreateDrawer;\n","/**\n * 聊天室管理\n */\n\nimport React, { useState } from 'react';\nimport { PlusOutlined, StopTwoTone } from '@ant-design/icons';\nimport { Button, Space, Badge } from 'antd';\nimport { Tag } from '@/plugin/wrap-comp';\nimport { useSelector } from 'react-redux';\nimport { apiType, useMutationApi } from '@/hook/useApi';\nimport { useActiveList } from '@/hook/useList';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport PageWrap from '@/components/PageWrap';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport {\n PushStatusKeys,\n PushTargetKey,\n formatDateTime,\n IsScheduledKeys,\n} from '@/utils';\nimport CreateDrawer from './CreateDrawer';\n\nexport default function PushMgm() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const { onSuccessMsg } = useAlertMessage();\n const {\n data: { list, total },\n loading,\n pagination,\n refetch,\n handleChangePage,\n } = useActiveList({\n api: 'LIST_PUSH',\n handleData: ({ listPushNotification }) => ({\n list: listPushNotification.pushNotifications || [],\n total: listPushNotification?.meta?.total || 0,\n }),\n });\n\n // 新增\n const [createVisible, setCreateVisible] = useState(false);\n const [cancelFetch, { loading: cancelLdg }] = useMutationApi(\n apiType.CANCEL_PUSH,\n );\n const cancelFetchHandle = async id => {\n const [err] = await cancelFetch({\n filter: { pushNotification: { id } },\n });\n if (err) return;\n onSuccessMsg();\n refetch();\n };\n\n const pushTimeRender = ({\n isScheduled,\n createdAt,\n scheduledTime,\n status,\n }) => {\n let pushTime = formatDateTime(createdAt);\n if (isScheduled === 'Yes') {\n pushTime = status === 'Success' ? formatDateTime(scheduledTime) : '-';\n }\n return <>{pushTime};\n };\n\n const scheduledTimeRender = (time, row) => {\n return (\n <>\n \n {row.isScheduled === 'Yes' ?

{formatDateTime(time)}

: null}\n \n );\n };\n\n const columns = [\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n fixed: 'left',\n },\n {\n title: '推送时间',\n key: 'pushTime',\n width: '20%',\n render: row => <>{pushTimeRender(row)},\n },\n {\n title: '推送标题',\n dataIndex: 'title',\n key: 'title',\n width: '10%',\n render: h => <>{h},\n },\n {\n title: '推送内容',\n dataIndex: 'content',\n key: 'content',\n render: h => {h},\n },\n {\n title: '目标人群',\n dataIndex: 'target',\n key: 'target',\n width: '10%',\n render: h => <>{PushTargetKey[h].text},\n },\n {\n title: '推送时间设定',\n dataIndex: 'scheduledTime',\n key: 'scheduledTime',\n width: '20%',\n render: (h, row) => <>{scheduledTimeRender(h, row)},\n },\n {\n title: '发送状态',\n dataIndex: 'status',\n key: 'status',\n render: h => (\n {PushStatusKeys[h].text}\n ),\n },\n {\n title: '动作',\n key: 'action',\n width: '10%',\n fixed: 'right',\n render: ({ id, status }) => (\n \n ,\n disabled: status !== 'PENDING',\n }}\n handleOk={() => cancelFetchHandle(id)}\n />\n \n ),\n },\n ];\n\n return (\n \n \n {authRoutesKey.includes('API_Push_Create') && (\n }\n onClick={() => setCreateVisible(true)}>\n 新建推送\n \n )}\n \n \n \n );\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport AvatarFetch from '@/components/Avatar/AvatarFetch';\nimport { Typography } from 'antd';\n\nconst AvatarWithText = React.memo(({ avatarURL, username, size = 'small' }) => {\n return (\n <>\n \n \n {username}\n \n \n );\n});\n\nAvatarWithText.propTypes = {\n avatarURL: PropTypes.string.isRequired,\n username: PropTypes.string.isRequired,\n size: PropTypes.string,\n};\nexport default AvatarWithText;\n","import React, { useState, useCallback, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setVisibleDrawer } from '@/store/global';\nimport { Button, Space, Tooltip, Badge, Typography } from 'antd';\nimport { EditTwoTone, QuestionCircleOutlined } from '@ant-design/icons';\nimport { useActiveList } from '@/hook/useList';\nimport useMerchant from '@/hook/useMerchant';\nimport PageWrap from '@/components/PageWrap';\nimport SearchBar from '@/components/SearchBar';\nimport DataTable from '@/components/Table/DataTable';\nimport AvatarWithText from '@/components/Avatar/AvatarWithText';\nimport UserDetailDrawer from '@/components/Drawer/UserDetailDrawer';\nimport {\n formatDateTime,\n AccountTypeKeys,\n UserStatusKey,\n UserStatusDisplay,\n} from '@/utils';\n\nconst originFilter = {\n user: {\n username: '',\n email: '',\n status: UserStatusKey['Unknown'],\n accountType: AccountTypeKeys['CommonUser'],\n },\n};\n\nconst merchantOptions = list => {\n let optionList = [];\n list.forEach(({ id, key }) => optionList.push({ value: id, label: key }));\n return optionList;\n};\n\nexport default function EmployeeMgm() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const { merchantTableList, loading: merchantLoading } = useMerchant({\n options: { fetchPolicy: 'cache-first' },\n });\n const searchFields = useMemo(\n () => [\n { name: 'username', type: 'text', label: '帐号' },\n { name: 'email', type: 'text', label: '信箱' },\n {\n name: 'merchantID',\n type: 'select',\n label: '所属商户名称',\n options: merchantOptions(merchantTableList),\n },\n { name: 'spinachUserID', type: 'digit', label: '平台使用者ID' },\n ],\n [merchantTableList],\n );\n const {\n data: { list, total },\n loading,\n pagination,\n handleSearchFilter,\n handleChangePage,\n } = useActiveList({\n api: 'LIST_USER',\n originFilter: { ...originFilter },\n handleData: ({ listUser }) => ({\n list: listUser.users || [],\n total: listUser?.meta.total || 0,\n }),\n });\n const onFinish = search => {\n handleSearchFilter({ user: { ...originFilter.user, ...search } });\n };\n\n const dispatch = useDispatch();\n const [user, setUser] = useState(null);\n const openDrawer = useCallback(\n v => {\n v || setUser(() => null);\n dispatch(setVisibleDrawer({ name: 'UserDetailDrawer', visible: v }));\n },\n [dispatch],\n );\n\n const handleUser = user => {\n setUser(() => user);\n openDrawer(true);\n };\n\n const columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n key: 'id',\n width: '5%',\n fixed: 'left',\n },\n {\n title: '会员',\n key: 'commonUser',\n render: ({ avatarURL, username }) => (\n \n ),\n },\n {\n title: '商户资讯',\n key: 'spinach',\n width: '20%',\n render: ({ spinachUserID, spinachPlatformKey }) => (\n <>\n 所属商户: {spinachPlatformKey}\n
\n 平台使用者ID: #{spinachUserID}\n \n ),\n },\n {\n title: '咨询次数',\n dataIndex: 'consultingCount',\n key: 'consultingCount',\n },\n {\n title: () => (\n \n 別名\n \n \n ),\n dataIndex: 'aliasName',\n key: 'aliasName',\n render: h => h || '-',\n },\n {\n title: '信箱',\n dataIndex: 'email',\n key: 'email',\n render: h => h || '-',\n },\n {\n title: '帐号状态',\n dataIndex: 'status',\n key: 'status',\n render: h => (\n \n ),\n },\n {\n title: '更新时间',\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n render: h => formatDateTime(h),\n },\n {\n title: '动作',\n key: 'action',\n width: '10%',\n fixed: 'right',\n render: user => (\n \n {authRoutesKey.includes('API_Member_Update') && (\n handleUser(user)}\n type='link'\n icon={}\n />\n )}\n \n ),\n },\n ];\n\n return (\n \n \n \n {/* 編輯 */}\n \n \n );\n}\n","import { useState, useEffect } from 'react';\nimport { CirclePicker } from 'react-color';\nimport { Input, Form, Select, Button, Drawer as ADrawer } from 'antd';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport { EnableDisplay } from '@/utils';\n\nconst Drawer = ({ openDrawer, visible, isEdit, refetch, detailData = {} }) => {\n const [newTag] = useMutationApi(apiType.CREATE_TAG);\n const [updateTag] = useMutationApi(apiType.UPDATE_TAG);\n const [loading, setLoading] = useState(false);\n const [colorPicker, setColorPicker] = useState('');\n const [tagData, setTagData] = useState({});\n const [tagForm] = Form.useForm();\n\n // 提交表單\n const submitHandle = async () => {\n const fields = await tagForm.validateFields();\n setLoading(true);\n const submitFunc = isEdit ? updateTag : newTag;\n let variables = { in: { name: fields.name, RGBHex: fields.RGBHex.hex } };\n\n if (isEdit) {\n variables.in.isEnable = fields.isEnable;\n variables = { ...variables, filter: { tag: { id: tagData.id } } };\n }\n const [err] = await submitFunc(variables);\n setLoading(false);\n if (!err) {\n refetch();\n await closeDrawer();\n }\n };\n\n const closeDrawer = async () => {\n await tagForm.resetFields();\n await setTagData({});\n setColorPicker('');\n openDrawer(false);\n };\n\n // detail 處理\n useEffect(() => {\n const detailDataHandle = async getTag => {\n await setTagData({ ...getTag });\n await setColorPicker(getTag.RGBHex);\n await tagForm.setFieldsValue(getTag);\n };\n if (isEdit && detailData?.getTag) detailDataHandle(detailData.getTag);\n }, [isEdit, detailData, tagForm]);\n\n useEffect(() => {\n if (visible) tagForm.resetFields();\n }, [visible, tagForm]);\n\n return (\n \n
\n \n \n \n\n {isEdit && (\n \n \n \n )}\n\n \n setColorPicker(hex)}\n width='100%'\n />\n \n\n \n \n \n \n \n );\n};\n\nexport default Drawer;\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { PlusOutlined, EditTwoTone, TagOutlined } from '@ant-design/icons';\nimport { useQueryApi, useMutationApi, apiType } from '@/hook/useApi';\nimport { useActiveList } from '@/hook/useList';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport { Button, Space, Tag, Badge } from 'antd';\nimport PageWrap from '@/components/PageWrap';\nimport SearchBar from '@/components/SearchBar';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport { EnableDisplay } from '@/utils';\nimport Drawer from './Drawer';\n\nconst originFilter = {\n tag: { isEnable: 'Unknown', name: '' },\n};\nconst searchFields = [\n { name: 'name', type: 'text', label: '标签名称' },\n {\n name: 'isEnable',\n type: 'select',\n label: '启用状态',\n optionsObj: EnableDisplay,\n },\n];\n\nconst MemberTagMgm = () => {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const {\n data: { list, total },\n loading,\n pagination,\n refetch,\n handleSearchFilter,\n handleChangePage,\n } = useActiveList({\n api: 'LIST_TAGS',\n originFilter: { ...originFilter },\n handleData: ({ listTag }) => ({\n list: listTag.tags || [],\n total: listTag?.meta?.total || 0,\n }),\n });\n\n const onFinish = search => {\n let searchParams = { tag: { ...originFilter.tag, ...search } };\n handleSearchFilter(searchParams);\n };\n\n const [detailSource, setDetailSource] = useState({});\n const { onErrorMsg } = useAlertMessage();\n const { fetchData: fetchDetail } = useQueryApi(apiType.GET_TAG);\n const [detailLdg, setDetailLdg] = useState(false);\n const fetchDetailHandel = async id => {\n setDetailLdg(true);\n const { data, error } = await fetchDetail({ filter: { tag: { id } } });\n setDetailLdg(false);\n if (error) {\n onErrorMsg(error);\n } else {\n setDetailSource({ ...data });\n openDrawer(true, true);\n }\n };\n\n // 刪除\n const [deleteTag, { loading: deleteLdg }] = useMutationApi(\n apiType.DELETE_TAG,\n );\n const deleteTagHandler = async id => {\n const [err] = await deleteTag({ filter: { tag: { id } } });\n if (!err) refetch();\n };\n\n const [visible, setVisible] = useState(false);\n const [isEdit, setIsEdit] = useState(false);\n const openDrawer = (open, openType) => {\n setVisible(open);\n setIsEdit(() => (open ? openType : false));\n };\n\n // table columns\n const columns = [\n { title: '#ID', dataIndex: 'id', key: 'id', width: '5%', fixed: 'left' },\n {\n title: '標籤',\n dataIndex: 'name',\n key: 'name',\n render: (n, r) => (\n } color={r.RGBHex}>\n {n}\n \n ),\n },\n {\n title: '启用状态',\n dataIndex: 'isEnable',\n key: 'isEnable',\n width: '10%',\n render: h => (\n \n ),\n },\n {\n title: '动作',\n key: 'action',\n width: '10%',\n fixed: 'right',\n render: ({ id }) => (\n \n {authRoutesKey.includes('API_Member_Tag_Update') && (\n fetchDetailHandel(id)}\n type='link'\n icon={}\n />\n )}\n {authRoutesKey.includes('API_Member_Tag_Delete') && (\n deleteTagHandler(id)}\n loading={deleteLdg}\n />\n )}\n \n ),\n },\n ];\n\n return (\n \n \n\n \n {/* 新建 */}\n {authRoutesKey.includes('API_Member_Tag_Create') && (\n }\n onClick={() => openDrawer(true, false)}>\n 新建标签\n \n )}\n \n\n {/* 新增 編輯 */}\n \n \n );\n};\n\nexport default MemberTagMgm;\n","import React from 'react';\nimport styled from 'styled-components';\nconst ResetHtml = styled.div`\n p {\n margin-bottom: 0px;\n }\n`;\n\nfunction ResetHtmlWrap({ html }) {\n return ;\n}\n\nexport default ResetHtmlWrap;\n","import { useState } from 'react';\nimport 'braft-editor/dist/index.css';\nimport Editor from 'braft-editor';\nimport { ContentUtils } from 'braft-utils';\nimport { Upload, Button, Input, Modal } from 'antd';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport ResetHtmlWrap from '@/components/ResetHtmlWrap';\n\nconst defaultState = Editor.createEditorState('

Hello World!

');\n\nconst useEditor = ({ clickPreview = () => {} } = {}) => {\n const [editorState, setEditorState] = useState(defaultState);\n const changeEditorHandle = value => {\n setEditorState(value);\n // console.log('toHTML', value.toHTML());\n };\n\n const setHtmlToEditorState = htmlStr => {\n setEditorState(() => Editor.createEditorState(htmlStr));\n // console.log('htmlStr', htmlStr);\n };\n\n /**\n * 上傳圖片\n */\n const [putImageLoading, setPutImageLoading] = useState(false);\n const [newCreateUpload] = useMutationApi(apiType.NEW_CREATE_UPLOAD);\n const uploadHandler = async param => {\n console.log('uploadHandler param', param);\n if (!param.file) return false;\n\n // 开启加载状态\n setPutImageLoading(true);\n\n try {\n const [err, { data }] = await newCreateUpload({\n in: param.file,\n });\n\n if (err) throw new Error('Failed to create upload URL');\n\n const url = data.newCreateUpload;\n const s3_domain = process.env.REACT_APP_S3_URL;\n const imgUrl = `${s3_domain}/${url}`;\n\n console.log(s3_domain, imgUrl);\n\n // 图片插入编辑器\n setEditorState(() =>\n ContentUtils.insertMedias(editorState, [\n { type: 'IMAGE', url: imgUrl, width: '100%' },\n ]),\n );\n } catch (error) {\n console.error('uploadHandler error:', error);\n } finally {\n setPutImageLoading(false);\n }\n };\n\n const uploadBtnRender = () => (\n \n \n 插入图片\n \n \n );\n\n /**\n * 編輯 html\n */\n const [editHtmlModalVisible, setEditHtmlModalVisible] = useState(false);\n const [editHtml, setEditHtml] = useState('');\n const clickEditHTML = htmlStr => {\n setEditHtml(htmlStr);\n setEditHtmlModalVisible(true);\n };\n const onChangeHtml = e => setEditHtml(e.target.value);\n const clickSubmitHtml = () => {\n setHtmlToEditorState(editHtml);\n setEditHtmlModalVisible(false);\n };\n\n const EditHtmlModal = () => (\n setEditHtmlModalVisible(false)}\n footer={\n \n }>\n \n \n );\n\n const extendControls = [\n {\n key: 'antd-uploader',\n type: 'component',\n component: uploadBtnRender(),\n },\n {\n key: 'editor-html',\n type: 'button',\n text: '编辑HTML',\n onClick: () => clickEditHTML(editorState.toHTML()),\n },\n {\n key: 'preview',\n type: 'button',\n text: '预览',\n onClick: () => clickPreview(editorState.toHTML()),\n },\n ];\n const editorControls = [\n 'undo',\n 'redo',\n 'headings',\n 'font-size',\n 'line-height',\n 'letter-spacing',\n 'bold',\n 'italic',\n 'underline',\n 'text-color',\n 'remove-styles',\n 'blockquote',\n 'code',\n 'hr',\n 'separator',\n 'link',\n 'separator',\n ];\n\n return {\n editorControls,\n extendControls,\n editorState,\n setHtmlToEditorState,\n changeEditorHandle,\n EditHtmlModal,\n };\n};\n\nconst PreviewModal = ({\n visible = false,\n onCancel = () => {},\n htmlStr = '',\n}) => {\n return (\n \n \n \n );\n};\n\nexport { useEditor, Editor, PreviewModal };\n","import React, { useEffect, useState, useRef } from 'react';\nimport {\n Drawer as ADrawer,\n Form,\n Switch,\n Radio,\n Input,\n InputNumber,\n} from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport { Editor, useEditor } from '@/hook/useEditor';\n\nconst { theme } = require('@/plugin/theme');\n\nconst defaultForm = {\n afterSendSec: 0,\n source: '',\n isEnabled: false,\n};\n\nfunction Drawer({\n loading = false,\n consultingRoomOriginID,\n detailData = null,\n visible = false,\n setVisible = () => {},\n createGreeting = () => {},\n updateGreeting = () => {},\n previewVisible = () => {},\n}) {\n const sourceInputEl = useRef(null);\n const [showSecInputEl, setShowSecInputEl] = useState(false);\n const [isEdit, setIsEdit] = useState(false);\n const [greetingForm] = Form.useForm();\n\n const {\n editorControls,\n extendControls,\n editorState,\n setHtmlToEditorState,\n changeEditorHandle,\n EditHtmlModal,\n } = useEditor({\n clickPreview: content => previewVisible(true, content),\n });\n\n const closeDrawer = async () => {\n await greetingForm.resetFields();\n setVisible(false);\n };\n\n const submitHandle = async fieldsObj => {\n let fields = {\n ...fieldsObj,\n isEnabled: fieldsObj.isEnabled ? 'Yes' : 'No',\n content: editorState.toHTML(),\n };\n if (isEdit) {\n await updateGreeting({\n filter: { consultingGreeting: { id: detailData.id } },\n in: { ...fields, consultingRoomOriginID },\n });\n } else {\n await createGreeting({ in: { ...fields, consultingRoomOriginID } });\n }\n await closeDrawer();\n };\n\n useEffect(() => {\n const initDrawer = async () => {\n if (detailData) {\n setIsEdit(true);\n setHtmlToEditorState(detailData.content);\n await greetingForm.setFieldsValue({\n ...detailData,\n isEnabled: detailData.isEnabled === 'Yes',\n });\n } else {\n setIsEdit(false);\n await greetingForm.setFieldsValue({ ...defaultForm });\n }\n };\n visible && initDrawer();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visible]);\n\n return (\n <>\n setVisible(false)}\n width={500}\n title={isEdit ? '编辑' : '新增'}>\n
\n \n \n \n \n \n \n \n setShowSecInputEl(!!e.target.value)}>\n 统一发送\n \n 定向发送\n {showSecInputEl ? (\n \n ) : null}\n \n \n \n \n \n \n \n \n \n \n \n {EditHtmlModal()}\n \n \n );\n}\n\nexport default Drawer;\n","import React, { useState, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { PlusOutlined, EditTwoTone, EyeTwoTone } from '@ant-design/icons';\nimport { Button, Switch, Space } from 'antd';\nimport { useActiveList } from '@/hook/useList';\nimport useOrigin from '@/hook/useOrigin';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport { PreviewModal } from '@/hook/useEditor';\nimport PageWrap from '@/components/PageWrap';\nimport SearchBar from '@/components/SearchBar';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport { EnableKey } from '@/utils';\nimport Drawer from './Drawer';\n\nconst originFilter = {\n consultingGreeting: {\n consultingRoomOriginID: 1,\n isEnabled: EnableKey['Unknown'],\n },\n};\n\nexport default function ConsultingGreeting() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const { originSelectList, loading: originListLoading } = useOrigin({\n options: { fetchPolicy: 'cache-first' },\n });\n\n const searchFields = useMemo(\n () => [\n {\n name: 'consultingRoomOriginID',\n type: 'select',\n label: '所属域名',\n options: originSelectList,\n },\n ],\n [originSelectList],\n );\n\n const [currOriginID, setCurrOriginID] = useState(\n originFilter.consultingGreeting.consultingRoomOriginID,\n );\n\n // table\n const {\n data: { list },\n loading,\n handleSearchFilter,\n refetch,\n } = useActiveList({\n api: 'LIST_CS_GREETING',\n originFilter: { ...originFilter },\n handleData: ({ listConsultingGreeting }) => ({\n list: listConsultingGreeting?.ConsultingGreetings || [],\n }),\n });\n\n // 搜尋Bar\n const searchBarOnFinish = greetingSearch => {\n setCurrOriginID(greetingSearch.consultingRoomOriginID);\n handleSearchFilter({\n ...originFilter,\n consultingGreeting: {\n ...originFilter.consultingGreeting,\n ...greetingSearch,\n },\n });\n };\n\n const onCompletedCallback = { onCompleted: () => refetch() };\n\n // 新增\n const [createGreeting, { loading: createLoading }] = useMutationApi(\n apiType.CREATE_CS_GREETING,\n onCompletedCallback,\n );\n\n // 編輯\n const [updateGreeting, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_CS_GREETING,\n onCompletedCallback,\n );\n\n const onChangeEnabled = (checked, record) => {\n updateGreeting({\n filter: { consultingGreeting: { id: record.id } },\n in: { isEnabled: checked ? 'Yes' : 'No' },\n });\n };\n\n // 刪除\n const [deleteGreeting, { loading: deleteLoading }] = useMutationApi(\n apiType.DELETE_CS_GREETING,\n onCompletedCallback,\n );\n\n const [visible, setVisible] = useState(false);\n const [detailData, setDetailData] = useState(null);\n const openDrawer = (data = null) => {\n setDetailData(data);\n setVisible(true);\n };\n\n const [modalVisible, setModalVisible] = useState(false);\n const [previewContent, setPreviewContent] = useState(null);\n const previewVisible = (val, content) => {\n setModalVisible(val);\n setPreviewContent(() => (val ? content : null));\n };\n\n const columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n key: 'id',\n width: '5%',\n fixed: 'left',\n },\n {\n title: '备注',\n dataIndex: 'title',\n key: 'title',\n render: title => <>{title},\n },\n {\n title: '发送时间',\n dataIndex: 'afterSendSec',\n key: 'afterSendSec',\n render: mins => <>{mins} 秒後,\n },\n {\n title: '发送范围',\n dataIndex: 'source',\n key: 'source',\n render: source => <>{source},\n },\n {\n title: '启用状态',\n dataIndex: 'isEnabled',\n key: 'isEnabled',\n render: (h, record) => (\n onChangeEnabled(checked, record)}\n />\n ),\n },\n {\n title: '動作',\n key: 'action',\n width: '15%',\n fixed: 'right',\n render: record => (\n \n previewVisible(true, record.content)}\n type='link'\n icon={}\n />\n {authRoutesKey.includes('API_ConsultingGreeting_Update') && (\n openDrawer(record)}\n type='link'\n icon={}\n />\n )}\n \n deleteGreeting({\n filter: { consultingGreeting: { id: record.id } },\n })\n }\n loading={deleteLoading}\n />\n \n ),\n },\n ];\n\n return (\n <>\n \n \n \n }\n onClick={() => openDrawer()}>\n 新建行销用语\n \n \n \n \n setModalVisible(false)}\n htmlStr={previewContent}\n />\n \n );\n}\n","import React from 'react';\nimport { Card, Tree, Button } from 'antd';\n\nfunction TreeCard({ treeData, onLoadData, loading, setSelectedItem, refetch }) {\n return (\n refetch()}\n style={{ padding: '0px' }}>\n 重新整理\n \n }>\n setSelectedItem(row.node)}\n />\n \n );\n}\n\nexport default TreeCard;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport {\n UpCircleTwoTone,\n DownCircleTwoTone,\n PlusOutlined,\n EyeTwoTone,\n} from '@ant-design/icons';\nimport { Space, Switch } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnTooltip from '@/components/Button/BtnTooltip';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport { formatDate } from '@/utils';\n\nfunction DetailTable({\n loading,\n dataSource,\n pagination,\n total,\n handleChangePage,\n refetch,\n setVisible,\n currentParentItem = {},\n groupByParentID = {},\n previewVisible = () => {},\n}) {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const { id = 0, title = '主项目' } = currentParentItem;\n const { onSuccessMsg, onWarningMsg, onErrorMsg } = useAlertMessage();\n const completed = () => {\n onSuccessMsg();\n refetch();\n };\n\n // 更新\n const [updateFetch] = useMutationApi(apiType.UPDATE_FAQ, {\n onCompleted: completed,\n });\n const updateFetchHandle = (isUp, { id, idx }) => {\n const changeIdx = isUp ? idx - 1 : idx + 1;\n const refer = dataSource[changeIdx];\n if (!refer) {\n onWarningMsg(isUp ? '最上面一筆了' : '最下面一筆了');\n return;\n }\n updateFetch({\n filter: { frequentlyQuestion: { id } },\n in: { sequence: refer.sequence },\n });\n };\n\n // 刪除\n const [deleteFetch] = useMutationApi(apiType.DELETE_FAQ, {\n onCompleted: completed,\n });\n const deleteFetchHandle = ({ id }) => {\n // 檢查 子項目\n if (groupByParentID[id]) {\n onErrorMsg('有子項目不能刪除');\n return;\n }\n deleteFetch({ filter: { frequentlyQuestion: { id } } });\n };\n\n const columns = currID => {\n let columns = [\n {\n title: '排序',\n key: 'index',\n width: '10%',\n fixed: 'left',\n render: (txt, row, idx) => (\n <>\n {idx + 1}\n {/* {idx + 1}--id: {row.id}/ sequence:{row.sequence} */}\n \n ),\n },\n {\n title: '项目标题',\n dataIndex: 'question',\n key: 'question',\n width: '15%',\n },\n {\n title: '项目内文',\n dataIndex: 'asked',\n key: 'asked',\n render: v => (\n previewVisible(true, v)}\n type='link'\n icon={}\n />\n ),\n },\n { title: '来源判断', dataIndex: 'source', key: 'source' },\n {\n title: '建立日期',\n dataIndex: 'createdAt',\n key: 'createdAt',\n width: '15%',\n render: c => formatDate(c),\n },\n {\n title: '启用状态',\n dataIndex: 'isEnabled',\n render: (h, { id }) => (\n \n updateFetch({\n filter: { frequentlyQuestion: { id } },\n in: { isEnabled: v ? 'Yes' : 'No' },\n })\n }\n />\n ),\n },\n {\n title: '操作',\n key: 'action',\n width: '12%',\n fixed: 'right',\n render: (t, row, idx) => (\n \n }\n onClick={() => updateFetchHandle(true, { ...row, idx })}\n />\n }\n onClick={() => updateFetchHandle(false, { ...row, idx })}\n />\n setVisible({ visible: true, editData: row })}\n />\n deleteFetchHandle(row)}\n placement='topRight'\n />\n \n ),\n },\n ];\n currID && columns.splice(3, 1);\n return columns;\n };\n\n return (\n <>\n \n {authRoutesKey.includes('API_FAQ_Create') && (\n }\n onClick={() => setVisible({ visible: true })}>\n 新建{title}\n \n )}\n \n \n );\n}\n\nexport default DetailTable;\n","import React, { useEffect, useState } from 'react';\nimport { Drawer as ADrawer, Input, Select, Form } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport { Editor, useEditor } from '@/hook/useEditor';\nconst { theme } = require('@/plugin/theme');\n\nexport default function Drawer({\n visible = false,\n setVisible = () => {},\n consultingRoomOriginID,\n parentList = [],\n currentParentItem = {},\n editData = null,\n createFAQ = () => {},\n updateFAQ = () => {},\n loading = false,\n previewVisible = () => {},\n}) {\n const { id = 0, title = '主項目' } = currentParentItem;\n const [isEdit, setIsEdit] = useState(false);\n const [faqForm] = Form.useForm();\n const closeDrawer = () => setVisible({ visible: false });\n\n const {\n editorControls,\n extendControls,\n editorState,\n setHtmlToEditorState,\n changeEditorHandle,\n EditHtmlModal,\n } = useEditor({\n clickPreview: content => previewVisible(true, content),\n });\n\n const submitHandle = async fields => {\n if (isEdit) {\n updateFAQ({\n filter: { frequentlyQuestion: { id: editData.id } },\n in: { ...fields, asked: editorState.toHTML() },\n });\n } else {\n await createFAQ({\n in: {\n consultingRoomOriginID,\n ...fields,\n parentID: fields?.parentID || id,\n source: fields?.source || '',\n asked: editorState.toHTML(),\n },\n });\n }\n await closeDrawer();\n };\n useEffect(() => {\n const initDrawer = async () => {\n if (editData) {\n setIsEdit(true);\n setHtmlToEditorState(editData.asked);\n await faqForm.setFieldsValue({ ...editData });\n } else {\n setIsEdit(false);\n await faqForm.resetFields();\n await faqForm.setFieldsValue({ parentID: id });\n }\n };\n visible && initDrawer();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visible, editData, faqForm, id]);\n\n return (\n \n
\n {id > 0 && (\n \n \n \n )}\n \n \n \n {id === 0 && (\n \n \n \n )}\n {/* \n \n */}\n \n \n *\n \n 项目内文\n \n }>\n \n \n \n \n {EditHtmlModal()}\n \n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Row, Col } from 'antd';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport { useActiveList } from '@/hook/useList';\nimport useOrigin from '@/hook/useOrigin';\nimport { PreviewModal } from '@/hook/useEditor';\nimport { cloneDeep } from '@/utils';\n\nimport SearchBar from '@/components/SearchBar';\nimport TreeCard from './TreeCard';\nimport DetailTable from './DetailTable';\nimport Drawer from './Drawer';\n\nconst initTreeData = [{ title: '主项目', key: 0, isLeaf: true }];\nconst defaultSearchBar = { consultingRoomOriginID: 1 };\n\nconst updateTreeData = (list, key, children) => {\n return list.map(item => {\n if (item.key === key) return { ...item, children };\n if (item.children)\n return {\n ...item,\n children: updateTreeData(item.children, key, children),\n };\n return item;\n });\n};\n\nfunction FAQMgm() {\n const { originSelectList, loading: originListLoading } = useOrigin({\n options: { fetchPolicy: 'cache-first' },\n });\n const searchFields = useMemo(\n () => [\n {\n name: 'consultingRoomOriginID',\n type: 'select',\n label: '所属域名',\n options: originSelectList,\n },\n ],\n [originSelectList],\n );\n\n const [currOriginID, setCurrOriginID] = useState(\n defaultSearchBar.consultingRoomOriginID,\n );\n\n // table\n const filterSearch = (\n type = 'tree',\n { parentID = 0, faqSearch = {} } = {},\n ) => {\n let frequentlyQuestion = { ...defaultSearchBar, ...faqSearch };\n if (type === 'table') {\n const parent = parentID => (parentID ? { parentID } : { depth: 1 });\n frequentlyQuestion = { ...frequentlyQuestion, ...parent(parentID) };\n }\n return {\n frequentlyQuestion,\n baseFilter: { sortField: 'sequence', sortType: 'ASC' },\n };\n };\n\n const {\n data: { list, total },\n loading: tableLoading,\n pagination,\n handleSearchFilter: tableSearchFilter,\n handleChangePage,\n refetch: tableRefetch,\n } = useActiveList({\n api: 'LIST_FAQ_DETAIL',\n originFilter: filterSearch('table'),\n handleData: ({ listFrequentlyQuestion }) => ({\n list: listFrequentlyQuestion?.frequentlyQuestions || [],\n total: listFrequentlyQuestion.meta?.total || 0,\n }),\n });\n\n /**\n * treeData 處理所有的 FAQ\n * */\n const [treeData, setTreeData] = useState(initTreeData);\n const [groupByParentID, setGroupByParentID] = useState({});\n const initTreeHandle = (listKeys = []) => {\n const tempList = cloneDeep(listKeys);\n const byParentIdData = tempList.reduce((acc, curr) => {\n curr.key = curr.id;\n curr.title = curr.question;\n acc[curr.parentID] =\n curr.parentID in acc ? [...acc[curr.parentID], curr] : [curr];\n return acc;\n }, {});\n const parentIdData = byParentIdData[0] || [];\n setGroupByParentID(byParentIdData);\n setTreeData([...initTreeData, ...parentIdData]);\n };\n const {\n loading: treeLoading,\n handleSearchFilter: treeSearchFilter,\n refetch: treeRefetch,\n } = useActiveList({\n api: 'LIST_FAQ_KEYS',\n originFilter: filterSearch('tree'),\n options: {\n fetchPolicy: 'no-cache',\n onCompleted: ({ listFrequentlyQuestion }) =>\n initTreeHandle(listFrequentlyQuestion.frequentlyQuestions || []),\n },\n });\n const onLoadData = ({ key, children }) => {\n return new Promise(resolve => {\n if (children) {\n resolve();\n return;\n }\n setTreeData(origin => updateTreeData(origin, key, groupByParentID[key]));\n resolve();\n });\n };\n\n const [treeSelectedItem, setSelectedItem] = useState(initTreeData[0]);\n const setSelectedHandle = itemData => {\n tableSearchFilter(\n filterSearch('table', {\n parentID: itemData.id,\n faqSearch: { consultingRoomOriginID: currOriginID },\n }),\n );\n setSelectedItem(itemData);\n };\n\n // 搜尋Bar\n const searchBarOnFinish = faqSearch => {\n tableSearchFilter(filterSearch('table', { faqSearch }));\n treeSearchFilter(filterSearch('tree', { faqSearch }));\n setCurrOriginID(faqSearch.consultingRoomOriginID);\n };\n\n // 新增\n const [createFAQ, { loading: createdLdg }] = useMutationApi(\n apiType.CREATE_FAQ,\n {\n onCompleted: () => tableRefetch(),\n },\n );\n\n // 更新\n const [updateFAQ, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_FAQ,\n {\n onCompleted: () => tableRefetch(),\n },\n );\n\n const [editData, setEditData] = useState(null);\n const [visible, setVisible] = useState(false);\n const setVisibleHandle = ({ visible, editData = null }) => {\n setVisible(visible);\n setEditData(editData);\n };\n\n const [modalVisible, setModalVisible] = useState(false);\n const [previewContent, setPreviewContent] = useState(null);\n const previewVisible = (val, content) => {\n setModalVisible(val);\n setPreviewContent(() => (val ? content : null));\n };\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n setModalVisible(false)}\n htmlStr={previewContent}\n />\n \n );\n}\n\nexport default FAQMgm;\n","import React, { useEffect } from 'react';\nimport styled from 'styled-components';\nimport {\n CustomerServiceOutlined,\n RightOutlined,\n SoundFilled,\n FullscreenOutlined,\n DownOutlined,\n LeftOutlined,\n} from '@ant-design/icons';\nimport { Avatar, Typography, Space } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport { setCSRoomSettingBeepEnabled } from '@/store/client';\nimport useRWD from '@HOOK/useRWD';\nimport { fullScreenHandle } from '@HOOK/useBrowser';\nimport useIframe from '@HOOK/useIframe';\nimport { SoundMuteIcon } from '@COMP/Icon';\nimport AvatarFetch from '@COMP/Avatar/AvatarFetch';\nimport CsAvatarUrl from '@/assets/cs-avatar.jpg';\nimport { useDispatch } from 'react-redux';\n\nconst { theme } = require('@/plugin/theme');\n\nfunction ClientHeader({\n title = '',\n roomID = null,\n avatarURL = '',\n showBeepBtn = false,\n beepEnabled = false,\n showBackBtn = false,\n backUrl = '',\n backToHandle = () => {},\n rightExtra = null,\n ...props\n}) {\n const { isInIframe } = useIframe();\n const { isMobileDevice } = useRWD();\n const dispatch = useDispatch();\n\n useEffect(() => {\n roomID && console.log('房間編號:', roomID);\n }, [roomID]);\n\n return (\n \n \n {isMobileDevice && showBackBtn && (\n fullScreenHandle(backUrl)}\n icon={}\n />\n )}\n\n {avatarURL ? (\n \n ) : (\n }\n src={CsAvatarUrl}\n style={{ background: theme.secondary }}\n />\n )}\n
\n {title}\n
\n
\n {/* button group */}\n \n {rightExtra}\n {isMobileDevice && (\n <>\n {showBeepBtn && (\n dispatch(setCSRoomSettingBeepEnabled())}\n icon={\n beepEnabled ? (\n \n ) : (\n \n )\n }\n />\n )}\n \n )}\n {isInIframe && (\n <>\n }\n onClick={() => fullScreenHandle()}\n />\n : }\n onClick={backToHandle}\n />\n \n )}\n \n
\n );\n}\n\nconst HeaderWrap = styled.div`\n padding: 0 12px;\n display: flex;\n justify-content: space-between;\n position: relative;\n background: white;\n min-height: ${({ theme }) => theme.comp.headerHeight};\n border-bottom: 1px solid ${({ theme }) => theme['gray-2']};\n`;\n\nexport default React.memo(ClientHeader);\n","import React from 'react'\nimport { Box } from '@/plugin/wrap-comp';\nimport useRWD from '@/hook/useRWD';\n\nfunction ContentWrap({ children }) {\n const { isMobileSize, isMobileDevice } = useRWD();\n const borderSize = isMobileSize || isMobileDevice ? 0 : 12;\n return (\n \n {children}\n \n )\n}\n\nexport default ContentWrap","import React from 'react';\nimport { Box } from '@/plugin/wrap-comp';\nimport useRWD from '@/hook/useRWD';\nimport useIframe from '@/hook/useIframe';\nimport useFile from '@/hook/useFile';\n\nfunction Carousel({ position = 'Right', logoList = [] }) {\n const { isMobileSize } = useRWD();\n const { isInIframe } = useIframe();\n const { changeFileToUrl } = useFile();\n\n const carouselStyle =\n position === 'Right' ? { right: '-55%' } : { left: '-55%' };\n const showContentLogoURL =\n !isMobileSize && !isInIframe && logoList.length > 0;\n\n \n if (!showContentLogoURL) return null;\n \n return (\n \n \n \n {logoList.map((item, idx) => (\n
\n \n \n
\n \n ))}\n
\n
\n \n );\n}\n\nexport default Carousel;\n","import React from 'react';\nimport { Box } from '@WRAP_COMP';\n\nfunction CSRoomFullBg({ children = null, bgImgUrl = '', bgColor = '' }) {\n return (\n \n {children}\n \n );\n}\n\nexport default CSRoomFullBg;\n","/* eslint-disable no-unused-vars */\nimport React, { useEffect, useReducer } from 'react';\nimport styled from 'styled-components';\nimport useRWD from '@/hook/useRWD';\nimport { Box } from '@/plugin/wrap-comp';\n\nfunction Container({\n headerLogoURL = '',\n headerBgColor = '',\n bannerImgURL = '',\n bannerLinkURL = '',\n chatRoomHeader = null,\n chatRoomContent = null,\n chatRoomContentCourse = null,\n}) {\n const [ignored, forceUpdate] = useReducer(x => x + 1, 0);\n\n const { isMobileSize, isMobileDevice } = useRWD();\n const showLogoHeader = !!headerLogoURL;\n const showBanner = !!bannerImgURL;\n\n const borderSize = isMobileSize || isMobileDevice ? 0 : 12;\n const wrapStyle =\n isMobileSize || isMobileDevice ? { height: '100%' } : { height: '700px' };\n const chatRoomHeaderStyle = showLogoHeader\n ? {}\n : {\n borderTopRightRadius: borderSize,\n borderTopLeftRadius: borderSize,\n overflow: 'hidden',\n };\n\n useEffect(() => {\n forceUpdate();\n }, [bannerImgURL]);\n\n // 偵測橫豎屏自動 reload\n // useEffect(() => {\n // window.addEventListener(\n // 'onorientationchange' in window ? 'orientationchange' : 'resize',\n // function () {\n // if (window.orientation === 180 || window.orientation === 0) {\n // alert('偵測橫豎屏自動 reload');\n // window.location.reload();\n // }\n // if (window.orientation === 90 || window.orientation === -90) {\n // alert('偵測橫豎屏自動 reload');\n // window.location.reload();\n // }\n // },\n // false,\n // );\n // }, []);\n\n return (\n <>\n \n {showLogoHeader && (\n \n )}\n {chatRoomHeader}\n\n {showBanner && }\n\n {chatRoomContent}\n {chatRoomContentCourse}\n \n \n );\n}\n\nconst LogoHeaderWrap = styled.div`\n border-top-right-radius: ${({ borderSize }) => `${borderSize}px`};\n border-top-left-radius: ${({ borderSize }) => `${borderSize}px`};\n padding: 10px;\n background: ${({ theme, bgColor }) => bgColor || theme.secondary};\n & img {\n width: 30%;\n }\n`;\n\nconst LogoHeader = ({ logoURL = '', bgColor = '', borderSize = 0 }) => (\n \n {logoURL && LogoUrl}\n \n);\n\nconst BannerWrap = styled.div`\n width: 100%;\n cursor: pointer;\n & img {\n width: 100%;\n }\n`;\n\nconst Banner = ({ imgURL = '', link = '' }) => {\n const onClick = () => {\n if (!link) return;\n let a = document.createElement('a');\n a.href = link;\n a.target = '_blank';\n a.click();\n };\n return (\n \n {imgURL && LogoUrl}\n \n );\n};\n\nexport default Container;\n","import React from 'react';\nimport ChatRoomHeader from '@/components/ChatRoomHeader/ClientHeader';\nimport MsgWrap from '@/components/Msg/MsgWrap';\nimport MsgText from '@/components/Msg/MsgText';\nimport RoomInputBar from '@/components/ChatRoomInputBar';\nimport CSRoomContentWrap from '@/components/ChatRoomContent/ContentWrap';\nimport Carousel from '@/components/ChatRoomContent/Carousel';\n\nimport { Box } from '@/plugin/wrap-comp';\nimport FullBg from './FullBg';\nimport Container from './Container';\n\nconst timestamp = Date.now();\nfunction RoomDemo({\n headerData = {},\n contentData = {},\n contentNode = null,\n bannerData = {},\n}) {\n return (\n \n }\n chatRoomContent={\n \n \n {contentNode ? (\n <>{contentNode}\n ) : (\n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n }\n chatRoomContentCourse={\n \n }\n />\n \n );\n}\n\nexport default RoomDemo;\n","import React from 'react';\nimport { Divider, Space, Collapse } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport { CSFormFieldType, CSFormFieldVerifyType } from '@/utils';\n// import { CloseOutlined } from '@ant-design/icons';\n\nconst unVerifyRule = {\n require: false,\n verifyType: CSFormFieldVerifyType['Text'],\n};\nconst inputContent = { value: '', items: [] };\nconst defaultQsData = [\n {\n id: 1,\n type: CSFormFieldType['Input'],\n label: '会员账号',\n content: { ...inputContent },\n rule: { ...unVerifyRule },\n },\n {\n id: 2,\n type: CSFormFieldType['Input'],\n label: '性别',\n content: { ...inputContent },\n rule: { ...unVerifyRule },\n },\n {\n id: 3,\n type: CSFormFieldType['Input'],\n label: '年龄',\n content: { ...inputContent },\n rule: { require: true, verifyType: CSFormFieldVerifyType['Age'] },\n },\n {\n id: 4,\n type: CSFormFieldType['Input'],\n label: 'QQ',\n content: { ...inputContent },\n rule: { require: true, verifyType: CSFormFieldVerifyType['QQ'] },\n },\n {\n id: 5,\n type: CSFormFieldType['Input'],\n label: '微信',\n content: { ...inputContent },\n rule: { require: true, verifyType: CSFormFieldVerifyType['WeChat'] },\n },\n {\n id: 6,\n type: CSFormFieldType['Input'],\n label: '地址',\n content: { ...inputContent },\n rule: { ...unVerifyRule },\n },\n {\n id: 7,\n type: CSFormFieldType['Input'],\n label: '邮箱',\n content: { ...inputContent },\n rule: { require: true, verifyType: CSFormFieldVerifyType['Email'] },\n },\n {\n id: 8,\n type: CSFormFieldType['Input'],\n label: '备注',\n content: { ...inputContent },\n rule: { ...unVerifyRule },\n },\n];\nconst defaultCusQsData = [\n {\n id: 9,\n type: CSFormFieldType['Input'],\n label: '自定义问题',\n content: { ...inputContent },\n rule: { ...unVerifyRule },\n },\n {\n id: 10,\n type: CSFormFieldType['Radio'],\n label: '自定义单选',\n content: { value: '', items: [{ label: '选项', value: false }] },\n rule: { ...unVerifyRule },\n },\n {\n id: 11,\n type: CSFormFieldType['Checkbox'],\n label: '自定义多选',\n content: { value: '', items: [{ label: '选项', value: false }] },\n rule: { ...unVerifyRule },\n },\n];\n\nfunction AddQsBtn({ selectQsIDs, setSelectQsIDs, selectItem = () => {} }) {\n const clickQsHandle = qsItem => {\n setSelectQsIDs(pre => [...pre, qsItem.id]);\n selectItem(qsItem);\n };\n\n const clickCusQsHandle = qsItem => {\n // 客制按鈕需定義 id\n let tempQsItem = { ...qsItem };\n tempQsItem.id = Date.now();\n selectItem(tempQsItem);\n };\n\n const BtnGroupRender = () => {\n return (\n <>\n \n {defaultQsData.length === selectQsIDs.length && (\n
已选完预设问题
\n )}\n {defaultQsData.map(el => {\n return selectQsIDs.includes(el.id) ? null : (\n clickQsHandle(el)}>\n {el.label}\n \n );\n })}\n
\n \n \n {defaultCusQsData.map(el => (\n clickCusQsHandle(el)}>\n {el.label}\n \n ))}\n \n \n );\n };\n\n return (\n \n \n + 添加问题\n \n }>\n {BtnGroupRender()}\n \n \n );\n}\n\nexport default AddQsBtn;\n","import React, { useState, useRef } from 'react';\nimport { EditOutlined, DeleteOutlined, SaveOutlined } from '@ant-design/icons';\nimport { Input, Button, Space } from 'antd';\nimport { Box } from '@WRAP_COMP';\nimport { cloneDeep } from '@/utils';\n\nfunction QsOption({\n originData,\n updateData = () => {},\n deleteData = () => {},\n}) {\n const [isEdit, setIsEdit] = useState(false);\n const labelEl = useRef(null);\n\n const onChangeLabel = originData => {\n let tempData = cloneDeep(originData);\n tempData.label = labelEl.current.state.value;\n setIsEdit(false);\n updateData(tempData);\n };\n\n return (\n \n {isEdit ? (\n onChangeLabel(originData)}\n onBlur={() => onChangeLabel(originData)}\n />\n ) : (\n <>{originData.label}\n )}\n \n {isEdit ? (\n }\n onClick={() => onChangeLabel(originData)}\n />\n ) : (\n }\n onClick={() => setIsEdit(pre => !pre)}\n />\n )}\n \n \n );\n };\n\n return (\n \n \n {isEdit ? (\n \n ) : (\n <>{originData.label}\n )}\n \n {isEdit ? (\n }\n onClick={onChangeLabel}\n />\n ) : (\n }\n onClick={() => setIsEdit(pre => !pre)}\n />\n )}\n \n \n \n \n \n \n \n \n ) : null\n }\n />\n \n \n );\n}\n\nexport default CSFormMgm;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { PlusOutlined } from '@ant-design/icons';\nimport { Row, Col, Form, Input } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\n\nfunction CreatedForm({ categoryID = null, createdHandle, loading }) {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const [form] = Form.useForm();\n return (\n \n \n createdHandle(field, categoryID, form)}\n layout='inline'>\n \n \n \n \n {authRoutesKey.includes('API_CannedResponse_Create') && (\n }>\n 新建\n \n )}\n \n \n \n \n );\n}\n\nexport default CreatedForm;\n","import React, { useState, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { EditTwoTone, CheckCircleTwoTone } from '@ant-design/icons';\nimport { useActiveList } from '@/hook/useList';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport {\n Empty,\n Divider,\n Collapse,\n Button,\n Input,\n List,\n Space,\n Typography,\n Spin,\n} from 'antd';\nimport { Box } from '@/plugin/wrap-comp';\nimport PageWrap from '@/components/PageWrap';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport { formatDateTime, cloneDeep } from '@/utils';\nimport CreatedForm from './CreatedForm';\n\nconst originFilter = { resCatList: {}, resList: {} };\nexport default function CannedResponseMgm() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const { onSuccessMsg } = useAlertMessage();\n const [dataSource, setDataSource] = useState([]);\n const dataHandle = ({ listCannedResponseCategory, listCannedResponse }) => {\n let tempCatList = cloneDeep(\n listCannedResponseCategory.cannedResponseCategories,\n );\n let tempList = cloneDeep(listCannedResponse.cannedResponses);\n const tempDataSource = tempList.reduce((catList, curr) => {\n catList.forEach(catItem => {\n catItem.list = catItem.list || [];\n catItem.id === curr.categoryID &&\n (catItem.list = [...catItem.list, curr]);\n });\n return catList;\n }, tempCatList);\n setDataSource(tempDataSource);\n };\n const { loading, refetch } = useActiveList({\n api: 'LIST_CANNED',\n cusFilter: { ...originFilter },\n options: { onCompleted: dataHandle },\n });\n\n // 新增\n const [createdCannedCat, { loading: createdCatLdg }] = useMutationApi(\n apiType.CREATE_CANNED_RES_CAT,\n );\n const [createdCanned, { loading: createdLdg }] = useMutationApi(\n apiType.CREATE_CANNED_RES,\n );\n const createdHandle = async ({ content }, categoryID, form) => {\n const createdCallback = () => {\n form.resetFields();\n onSuccessMsg('new');\n refetch();\n };\n if (categoryID) {\n const [err] = await createdCanned({ in: { categoryID, text: content } });\n !err && createdCallback();\n } else {\n const [err] = await createdCannedCat({ in: { name: content } });\n !err && createdCallback();\n }\n };\n\n // 更新\n const [curCatEditId, setCurCatEditId] = useState(0);\n const [curEditId, setCurEditId] = useState(0);\n const editInputEl = useRef(null);\n const updateCallback = () => {\n onSuccessMsg('update');\n refetch();\n setCurEditId(0);\n setCurCatEditId(0);\n };\n const [updateCannedCat] = useMutationApi(apiType.UPDATE_CANNED_RES_CAT, {\n onCompleted: () => updateCallback(),\n });\n const [updateCanned] = useMutationApi(apiType.UPDATE_CANNED_RES, {\n onCompleted: () => updateCallback(),\n });\n const updateHandle = ({ id }, isCat) => {\n isCat\n ? updateCannedCat({\n filter: { cannedResponseCategory: { id } },\n in: { name: editInputEl.current.state.value },\n })\n : updateCanned({\n filter: { cannedResponse: { id } },\n in: { text: editInputEl.current.state.value },\n });\n };\n const updateBtnRender = ({ id }, isCat) => {\n const isEdit = curCatEditId === id || curEditId === id;\n return (\n : }\n onClick={e => {\n e.stopPropagation();\n isCat ? setCurCatEditId(id) : setCurEditId(id);\n isEdit && updateHandle({ id }, isCat);\n }}\n />\n );\n };\n\n // 刪除\n const deleteCallback = () => {\n onSuccessMsg('delete');\n refetch();\n };\n const [deleteCannedCat, { loading: deleteCatLoading }] = useMutationApi(\n apiType.DELETE_CANNED_RES_CAT,\n {\n onCompleted: deleteCallback,\n },\n );\n const [deleteCanned, { loading: deleteLoading }] = useMutationApi(\n apiType.DELETE_CANNED_RES,\n {\n onCompleted: deleteCallback,\n },\n );\n\n const deleteBtnRender = ({ id }, isCat) => {\n return (\n {\n e.stopPropagation();\n isCat\n ? deleteCannedCat({\n filter: { cannedResponseCategory: { id }, forceDelete: true },\n })\n : deleteCanned({\n filter: { cannedResponse: { id } },\n });\n }}\n loading={deleteCatLoading || deleteLoading}\n placement='topRight'\n />\n );\n };\n\n const titleRender = ({ id, createdAt, name, text }, editId) => {\n return (\n \n {editId === id ? (\n e.stopPropagation()}\n onPressEnter={() => updateHandle({ id }, !!name)}\n />\n ) : (\n {name || text}\n )}\n \n 建立時間:{formatDateTime(createdAt)}\n \n \n );\n };\n\n return (\n \n \n \n \n\n {/* }\n style={{ marginBottom: '16px' }}\n /> */}\n\n \n {dataSource.length ? (\n \n {dataSource.map(cat => (\n \n {authRoutesKey.includes('API_CannedResponse_Update') &&\n updateBtnRender({ id: cat.id }, true)}\n \n {authRoutesKey.includes('API_CannedResponse_Delete') &&\n deleteBtnRender({ id: cat.id }, true)}\n \n }>\n <>\n \n (\n \n {titleRender(item, curEditId)}\n \n )}\n />\n \n \n ))}\n \n ) : (\n \n )}\n \n \n \n );\n}\n","import React, { useState } from 'react';\nimport { SketchPicker } from 'react-color';\nimport { Box } from '@WRAP_COMP';\n\nfunction ColorBtn({ color = '', onChange = () => {} }) {\n const [showColorPicker, setShowColorPicker] = useState(false);\n const clickColorBtn = () => setShowColorPicker(pre => !pre);\n\n return (\n <>\n \n \n {showColorPicker && (\n \n onChange(hex)}\n />\n \n )}\n \n \n );\n}\n\nexport default ColorBtn;\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { UploadOutlined, QuestionCircleOutlined } from '@ant-design/icons';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport useOrigin from '@/hook/useOrigin';\nimport useFile from '@/hook/useFile';\nimport { useQueryApi, useMutationApi, apiType } from '@/hook/useApi';\nimport {\n Card,\n Typography,\n Divider,\n Select,\n Button,\n Upload,\n Tooltip,\n Alert,\n Spin,\n Form,\n Input,\n Switch,\n Radio,\n} from 'antd';\nimport { Row, Col } from '@/plugin/wrap-comp';\nimport RoomDemo from '@/components/CSRoomClient/RoomDemo';\nimport ColorBtn from './ColorBtn';\n\nconst { theme } = require('@/plugin/theme');\n\nconst handleInitEnabled = val => (val ? val === 'Yes' : false);\n\nfunction CSRoomSettingMgm() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const [originIDForm] = Form.useForm();\n const { onSuccessMsg, onWarningMsg } = useAlertMessage();\n const { getFileUrl, changeUrlToFile } = useFile();\n\n const { originSelectList, loading: originLoading } = useOrigin({\n options: { fetchPolicy: 'cache-first' },\n });\n\n const [createSetting, { loading: cLdg }] = useMutationApi(\n apiType.CREATE_CS_ROOM_SETTING,\n {\n onCompleted: ({ createConsultingRoomClientSetting }) => {\n onSuccessMsg();\n fetchDataHandle(\n createConsultingRoomClientSetting.consultingRoomOriginID,\n );\n },\n },\n );\n\n const [updateSetting, { loading: uLdg }] = useMutationApi(\n apiType.UPDATE_CS_ROOM_SETTING,\n {\n onCompleted: ({ updateConsultingRoomClientSetting }) => {\n onSuccessMsg();\n fetchDataHandle(\n updateConsultingRoomClientSetting.consultingRoomOriginID,\n );\n },\n },\n );\n\n const [isExist, setIsExist] = useState(false);\n const [roomSettingData, setRoomSettingData] = useState(null);\n const [currCSRoomOriginID, setCurrCSRoomOriginID] = useState(1);\n\n const clickSubmitHandle = async () => {\n const { header, content, banner } = roomSettingData;\n\n const _contentLogoURL = [];\n for (const item of header.contentLogoURL) {\n const file = await changeUrlToFile(item);\n _contentLogoURL.push(file);\n }\n\n let postData = {\n header: {\n isEnabled: header.isEnabled ? 'Yes' : 'No',\n backgroundColor: header.backgroundColor,\n title: header.title,\n ...(header.avatar && { avatar: header.avatar }),\n ...(header.logo && { logo: header.logo }),\n contentLogoEnabled: header.contentLogoEnabled ? 'Yes' : 'No',\n contentLogo: _contentLogoURL,\n contentLogoPosition: header.contentLogoPosition,\n deleteContentLogo: !_contentLogoURL.length,\n },\n content: {\n backgroundColor: content.backgroundColor,\n ...(content.backgroundImage && {\n backgroundImage: content.backgroundImage,\n }),\n boxBackgroundColor: content?.boxBackgroundColor,\n ...(content.boxBackgroundImage && {\n boxBackgroundImage: content.boxBackgroundImage,\n }),\n },\n banner: {\n isEnabled: banner.isEnabled ? 'Yes' : 'No',\n linkUrl: banner.linkUrl,\n ...(banner.image && { image: banner.image }),\n },\n };\n\n if (!isExist) {\n createSetting({\n in: {\n consultingRoomOriginID: originIDForm.getFieldValue(\n 'consultingRoomOriginID',\n ),\n ...postData,\n },\n });\n } else {\n updateSetting({\n filter: { consultingRoomClientSetting: { id: roomSettingData.id } },\n in: { ...postData },\n });\n }\n };\n\n const onChangeDataHeader = changeObj => {\n setRoomSettingData({\n ...roomSettingData,\n header: { ...roomSettingData.header, ...changeObj },\n });\n };\n const onChangeDataContent = changeObj => {\n setRoomSettingData({\n ...roomSettingData,\n content: { ...roomSettingData.content, ...changeObj },\n });\n };\n const onChangeDataBanner = changeObj => {\n setRoomSettingData({\n ...roomSettingData,\n banner: { ...roomSettingData.banner, ...changeObj },\n });\n };\n\n const deleteImg = async (postData = {}) => {\n const [err] = await updateSetting({\n filter: { consultingRoomClientSetting: { id: roomSettingData.id } },\n in: { ...postData },\n });\n if (err) return;\n };\n\n // 輪播處理\n const handleCarousel = file => {\n if (roomSettingData.header.contentLogoURL.length >= 3) {\n onWarningMsg('最多三张');\n return;\n }\n onChangeDataHeader({\n contentLogoURL: [...roomSettingData.header.contentLogoURL, file],\n });\n };\n const deleteCarouselImg = idx => {\n let _list = [...roomSettingData.header.contentLogoURL];\n _list.splice(idx, 1);\n onChangeDataHeader({ contentLogoURL: _list });\n };\n\n const initSettingData = (detail = {}) => {\n const { __typename, ...props } = detail;\n const { header = {}, content = {}, banner = {} } = props;\n\n setRoomSettingData({\n ...props,\n header: {\n ...header,\n avatarURL: header?.avatarURL || '',\n title: header?.title || '',\n backgroundColor: header?.backgroundColor || theme.secondary,\n logoURL: header?.logoURL || '',\n isEnabled: handleInitEnabled(header.isEnabled),\n contentLogoURL: header?.contentLogoURL || [],\n contentLogoEnabled: handleInitEnabled(header.contentLogoEnabled),\n contentLogoPosition: header.contentLogoPosition || 'Right',\n },\n content: {\n ...content,\n backgroundColor: content?.backgroundColor || theme.primary,\n backgroundImageURL: content?.backgroundImageURL || '',\n boxBackgroundColor: content?.boxBackgroundColor || theme['gray-1'],\n boxBackgroundImage: content?.boxBackgroundImage || '',\n },\n banner: {\n ...banner,\n imageURL: banner?.imageURL || '',\n isEnabled: handleInitEnabled(banner.isEnabled),\n linkUrl: banner?.linkUrl || '',\n },\n });\n };\n\n // get CSRoom setting\n const { fetchData, loading } = useQueryApi(apiType.GET_CS_ROOM_SETTING, {\n context: { isShowGeneralError: false },\n });\n const fetchDataHandle = async consultingRoomOriginID => {\n const { error, data } = await fetchData({\n filter: { consultingRoomClientSetting: { consultingRoomOriginID } },\n });\n if (error || error?.message === '404001') {\n initSettingData(); // 尚未建立 使用預設\n setIsExist(false);\n return;\n }\n const { getConsultingRoomClientSetting } = data;\n initSettingData(getConsultingRoomClientSetting);\n setIsExist(true);\n };\n\n const onChangeOriginID = ({ consultingRoomOriginID }) => {\n setCurrCSRoomOriginID(consultingRoomOriginID);\n fetchDataHandle(consultingRoomOriginID);\n };\n\n useEffect(() => {\n fetchDataHandle(1);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const settingList = roomSettingData => [\n {\n title: '浏览器标签设置',\n items: [\n {\n type: 'file',\n title: '商标icon(16x16)',\n showDelete: true,\n options: {\n deleteImgParams: { header: { deleteAvatar: true } },\n beforeUpload: file =>\n onChangeDataHeader({\n avatar: file,\n avatarURL: getFileUrl(file),\n }),\n },\n extra: ({ header }) => (\n <>\n {header?.avatarURL && (\n \n )}\n \n ),\n },\n {\n type: 'inputStr',\n title: '标题(预设为当前域名)',\n options: {\n value: roomSettingData.header.title,\n onChange: val => onChangeDataHeader({ title: val }),\n },\n },\n ],\n },\n {\n title: '咨询室版头设置',\n items: [\n {\n type: 'switch',\n title: '启用状态',\n options: {\n showDelete: true,\n checked: roomSettingData.header.isEnabled,\n onChange: val => onChangeDataHeader({ isEnabled: val }),\n },\n },\n {\n type: 'color',\n title: '背景颜色',\n options: {\n color: roomSettingData.header.backgroundColor,\n onChange: v => onChangeDataHeader({ backgroundColor: v }),\n },\n },\n {\n type: 'file',\n title: '商标图片',\n options: {\n showDelete: false,\n beforeUpload: file =>\n onChangeDataHeader({ logo: file, logoURL: getFileUrl(file) }),\n },\n },\n ],\n },\n {\n title: '咨询室横幅设置',\n items: [\n {\n type: 'switch',\n title: '启用状态',\n options: {\n checked: roomSettingData.banner.isEnabled,\n onChange: val => onChangeDataBanner({ isEnabled: val }),\n },\n },\n {\n type: 'file',\n title: '图片',\n options: {\n showDelete: false,\n beforeUpload: file =>\n onChangeDataBanner({ image: file, imageURL: getFileUrl(file) }),\n },\n },\n {\n type: 'inputStr',\n title: '链结',\n options: {\n value: roomSettingData.banner.linkUrl,\n onChange: val => onChangeDataBanner({ linkUrl: val }),\n },\n },\n ],\n },\n {\n title: '咨询室背景',\n items: [\n {\n type: 'color',\n title: '背景颜色',\n options: {\n color: roomSettingData.content.boxBackgroundColor,\n onChange: v => onChangeDataContent({ boxBackgroundColor: v }),\n },\n },\n {\n type: 'file',\n title: '商标图片',\n options: {\n showDelete: true,\n deleteImgParams: { content: { deleteBoxBackgroundImage: true } },\n beforeUpload: file =>\n onChangeDataContent({\n boxBackgroundImage: file,\n boxBackgroundImageURL: getFileUrl(file),\n }),\n },\n },\n ],\n },\n {\n title: '咨询室左右设置',\n items: [\n {\n type: 'switch',\n title: '启用状态',\n options: {\n checked: roomSettingData.header.contentLogoEnabled,\n onChange: val => onChangeDataHeader({ contentLogoEnabled: val }),\n },\n },\n {\n type: 'radio',\n title: '显示位置',\n options: {\n data: [\n { value: 'Left', label: '左' },\n { value: 'Right', label: '右' },\n ],\n value: roomSettingData.header.contentLogoPosition,\n onChange: val => onChangeDataHeader({ contentLogoPosition: val }),\n },\n },\n {\n type: 'file',\n title: '轮播图片',\n tip: '只设定一张不做轮播动作',\n showDelete: false,\n options: {\n accept: 'image/png',\n beforeUpload: handleCarousel,\n },\n extra: ({ header }) => {\n return (\n <>\n [\n {header.contentLogoURL.map((url, idx) => (\n deleteCarouselImg(idx)}>\n 删除\n \n ))}\n ]\n \n );\n },\n },\n ],\n },\n {\n title: '背景设置',\n items: [\n {\n type: 'color',\n title: '背景颜色',\n options: {\n color: roomSettingData.content.backgroundColor,\n onChange: v => onChangeDataContent({ backgroundColor: v }),\n },\n },\n {\n type: 'file',\n title: '背景图片',\n tip: '背景图片会覆盖背景色',\n options: {\n showDelete: true,\n deleteImgParams: { content: { deleteBackgroundImage: true } },\n beforeUpload: file =>\n onChangeDataContent({\n backgroundImage: file,\n backgroundImageURL: getFileUrl(file),\n }),\n },\n },\n ],\n },\n ];\n\n return (\n \n \n \n \n 所属域名\n \n \n \n \n \n\n \n\n {!isExist && (\n \n )}\n\n {roomSettingData && (\n <>\n {settingList(roomSettingData).map((setting, idx) => {\n return (\n \n \n {setting.title}\n \n {setting.items.map((item, idx) => {\n const { extra, type, options, render, ...props } = item;\n if (type === 'cus') return render();\n return (\n \n {extra && extra(roomSettingData)}\n {type === 'file' && (\n \n )}\n {type === 'inputStr' && (\n \n options.onChange(e.target.value)\n }\n />\n )}\n {type === 'switch' && (\n \n )}\n {type === 'color' && }\n {type === 'radio' && }\n \n }\n />\n );\n })}\n \n \n );\n })}\n
\n \n 保存\n \n
\n \n )}\n
\n
\n \n \n {roomSettingData && (\n \n )}\n \n
\n );\n}\n\nconst SettingItemRender = ({\n tip = null,\n headerTxt = '',\n contentNode = null,\n ...props\n}) => (\n \n \n {tip ? (\n \n {headerTxt}\n \n \n ) : (\n {headerTxt}\n )}\n \n {contentNode}\n \n);\n\nconst FileUpload = ({\n showDelete = false,\n deleteImgParams,\n beforeUpload,\n deleteImg,\n ...props\n}) => {\n return (\n <>\n {showDelete && (\n deleteImg(deleteImgParams)}>\n 删除\n \n )}\n\n {\n beforeUpload(file);\n return false;\n }}\n showUploadList={false}\n listType='picture'\n maxCount={1}\n accept='image/*'\n {...props}>\n \n \n \n );\n};\n\nconst RadioBtn = ({ data = [], onChange = () => {}, value = '' }) => {\n return (\n onChange(e.target.value)} value={value}>\n {data.map((item, idx) => (\n \n {item.label}\n \n ))}\n \n );\n};\n\nexport default CSRoomSettingMgm;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { Button } from '@/plugin/wrap-comp';\nimport { useQueryApi, apiType } from '@/hook/useApi';\nimport DataTable from '@/components/Table/DataTable';\nimport { AccountTypeKeys } from '@/utils';\nconst pagination = { page: 1, perPage: 9999 };\n\nfunction SelectCSTable({\n selectedKeys = [],\n selectedRows = [],\n selectChangeHandle = () => {},\n submit = () => {},\n loading = false,\n}) {\n const [dataSource, setDataSource] = useState([]);\n const [total, setTotal] = useState(0);\n\n const { fetchData, loading: listLoading } = useQueryApi(apiType.LIST_USER);\n const fetchDataHandle = useCallback(\n async (params = {}) => {\n const { data, error } = await fetchData({\n filter: {\n user: {\n accountType: AccountTypeKeys['CustomerService'],\n isDelete: 'No',\n ...params,\n },\n baseFilter: { sortField: 'id', sortType: 'DESC' },\n },\n pagination,\n });\n if (error) return;\n setDataSource(data.listUser?.users || []);\n setTotal(data.listUser?.meta?.total || 0);\n },\n [fetchData],\n );\n\n const submitHandle = () => {\n submit(selectedKeys, selectedRows);\n };\n\n useEffect(() => {\n fetchDataHandle();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n key: 'id',\n },\n {\n title: '帐号',\n dataIndex: 'username',\n key: 'username',\n },\n {\n title: '別名',\n dataIndex: 'aliasName',\n key: 'aliasName',\n render: h => h || '-',\n },\n ];\n\n return (\n <>\n \n \n \n );\n}\n\nexport default SelectCSTable;\n","import React, { useEffect, useState } from 'react';\nimport { Drawer, Form, Input, Select } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport CSSelectTable from '@/components/Table/CSSelectTable';\n\nconst defaultForm = { remark: '' };\nfunction OriginSettingDrawer({\n visible = false,\n merchantSelectList = [],\n detailData = null,\n setVisible = () => {},\n createOrigin = () => {},\n updateOrigin = () => {},\n loading = false,\n}) {\n const [originForm] = Form.useForm();\n const [isEdit, setIsEdit] = useState(false);\n\n const [visibleServiceDrawer, setVisibleServiceDrawer] = useState(false);\n const visibleServiceDrawerHandle = () => setVisibleServiceDrawer(pre => !pre);\n\n const [selected, setSelected] = useState({ keys: [], rows: [] });\n const selectChangeHandle = (keys, rows) => setSelected({ keys, rows });\n const selectSubmit = (keys, rows) => {\n setSelected({ keys, rows });\n visibleServiceDrawerHandle();\n };\n\n const closeDrawer = async () => {\n await originForm.resetFields();\n setSelected({ keys: [], rows: [] });\n setVisible(false);\n };\n\n const submitHandle = async fields => {\n if (isEdit) {\n await updateOrigin({\n filter: { consultingRoomOrigin: { id: detailData.id } },\n in: { ...fields, customerServiceIDs: selected.keys },\n });\n } else {\n await createOrigin({\n in: { ...fields, customerServiceIDs: selected.keys },\n });\n }\n await closeDrawer();\n };\n\n useEffect(() => {\n const initDrawer = async () => {\n if (detailData) {\n const keys = detailData.customerServices.map(c => c.id) || [];\n const rows = detailData.customerServices || [];\n setSelected({ keys, rows });\n setIsEdit(true);\n await originForm.setFieldsValue({ ...detailData });\n } else {\n setIsEdit(false);\n await originForm.setFieldsValue({ ...defaultForm });\n }\n };\n visible && merchantSelectList.length && initDrawer();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visible, merchantSelectList]);\n\n return (\n \n
\n \n \n \n \n \n \n \n {selected.rows.length > 0 &&\n selected.rows.map(item =>

{item.username}

)}\n \n + 新增客服\n \n \n \n \n \n \n \n \n {visibleServiceDrawer && (\n \n )}\n \n \n );\n}\n\nexport default OriginSettingDrawer;\n","import React, { useState } from 'react';\nimport { PlusOutlined, EditTwoTone } from '@ant-design/icons';\nimport { Button, Space, Typography } from 'antd';\nimport useOrigin from '@/hook/useOrigin';\nimport useMerchant from '@/hook/useMerchant';\nimport useMe from '@/hook/useMe';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport OriginSettingDrawer from './OriginSettingDrawer';\nimport { formatDateTime } from '@/utils';\nimport { useSelector } from 'react-redux';\n\nfunction OriginSetting() {\n const { isSystemType } = useMe();\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const {\n loading,\n pagination,\n originTableList,\n originTotal,\n refetch,\n handleChangePage,\n } = useOrigin({ originPagination: { perPage: 10 } });\n\n const {\n merchantTableList,\n merchantSelectList,\n loading: merchantLdg,\n } = useMerchant();\n\n const onCompletedCallback = { onCompleted: () => refetch() };\n\n // 新增\n const [createOrigin, { loading: createdLoading }] = useMutationApi(\n apiType.CREATE_CS_ROOM_ORIGIN,\n onCompletedCallback,\n );\n\n // 編輯\n const [updateOrigin, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_CS_ROOM_ORIGIN,\n onCompletedCallback,\n );\n\n // 刪除\n const [deleteOrigin, { loading: deleteLoading }] = useMutationApi(\n apiType.DELETE_CS_ROOM_ORIGIN,\n onCompletedCallback,\n );\n\n const [visible, setVisible] = useState(false);\n const [detailData, setDetailData] = useState(null);\n const openDrawer = (data = null) => {\n setDetailData(data);\n setVisible(true);\n };\n\n const columns = () => {\n let columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n key: 'id',\n width: '5%',\n fixed: 'left',\n },\n {\n title: '域名',\n dataIndex: 'origin',\n key: 'origin',\n },\n {\n title: '商戶号',\n dataIndex: 'merchantID',\n key: 'merchantID',\n render: id => {\n return <>{merchantTableList.find(mr => mr.id === id)?.key};\n },\n },\n {\n title: '配置客服',\n dataIndex: 'customerServices',\n key: 'customerServices',\n render: list => (\n <>\n {list.map(ll => (\n
\n \n {ll.username} #{ll.id}\n \n
\n ))}\n \n ),\n },\n {\n title: '备注',\n dataIndex: 'remark',\n key: 'remark',\n },\n {\n title: '建立时间',\n dataIndex: 'createdAt',\n key: 'createdAt',\n render: h => formatDateTime(h),\n },\n ];\n columns.push({\n title: '动作',\n key: 'action',\n width: '10%',\n fixed: 'right',\n render: record =>\n record.id === 1 ? null : (\n \n {(isSystemType || authRoutesKey.includes('API_ConsultingRoomQuestion_Update')) && (\n openDrawer(record)}\n type='link'\n icon={}>\n )}\n {(isSystemType || authRoutesKey.includes('API_ConsultingRoomQuestion_Delete')) && (\n \n deleteOrigin({\n filter: { consultingRoomOrigin: { id: record.id } },\n })\n }\n loading={deleteLoading}\n />\n )}\n \n ),\n });\n return columns;\n };\n\n return (\n <>\n \n {/* 新建 */}\n {(isSystemType || authRoutesKey.includes('API_ConsultingRoomQuestion_Create')) && (\n }\n onClick={() => openDrawer()}>\n 新建访问域名\n \n )}\n \n \n \n );\n}\n\nexport default OriginSetting;\n","import React, { useEffect, useState } from 'react';\nimport { Drawer, Form, Input, Select } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport { MerchantTypeKeys } from '@/utils';\n\nfunction MerchantSettingDrawer({\n visible = false,\n detailData = null,\n setVisible = () => {},\n createMerchant = () => {},\n updateMerchant = () => {},\n loading = false,\n}) {\n const [merchantForm] = Form.useForm();\n const [isEdit, setIsEdit] = useState(false);\n\n const closeDrawer = async () => {\n await merchantForm.resetFields();\n setVisible(false);\n };\n\n const submitHandle = async fields => {\n const {\n deposit = '',\n paymentChannel = '',\n cancelDeposit = '',\n queryOrder = '',\n paidDeposit = '',\n expireDeposit = '',\n ...props\n } = fields;\n if (isEdit) {\n await updateMerchant({\n filter: { merchant: { id: detailData.id } },\n in: {\n ...props,\n endpoints: {\n deposit,\n paymentChannel,\n cancelDeposit,\n queryOrder,\n paidDeposit,\n expireDeposit,\n },\n },\n });\n } else {\n await createMerchant({\n in: {\n ...props,\n endpoints: {\n deposit,\n paymentChannel,\n cancelDeposit,\n queryOrder,\n paidDeposit,\n expireDeposit,\n },\n },\n });\n }\n await closeDrawer();\n };\n\n const [required, setRequired] = useState(false);\n const onChangeRequired = val => {\n setRequired(MerchantTypeKeys['Spinach'] === val);\n };\n\n useEffect(() => {\n const initDrawer = async () => {\n if (detailData) {\n onChangeRequired(detailData.merchantType);\n setIsEdit(true);\n await merchantForm.setFieldsValue({\n ...detailData,\n ...detailData.endpoints,\n });\n } else {\n setIsEdit(false);\n await merchantForm.setFieldsValue({\n merchantType: MerchantTypeKeys['Bochat'],\n });\n }\n };\n if (visible) initDrawer();\n }, [detailData, merchantForm, visible]);\n\n return (\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default MerchantSettingDrawer;\n","import React, { useState } from 'react';\nimport { PlusOutlined, EditTwoTone } from '@ant-design/icons';\nimport { Button, Space } from 'antd';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useMerchant from '@/hook/useMerchant';\nimport useMe from '@/hook/useMe';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport { formatDateTime } from '@/utils';\nimport MerchantSettingDrawer from './MerchantSettingDrawer';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport { useSelector } from 'react-redux';\n\nfunction MerchantSetting() {\n const { isSystemType } = useMe();\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const {\n loading,\n pagination,\n merchantTableList,\n merchantTableTotal,\n refetch,\n handleChangePage,\n } = useMerchant({ originPagination: { perPage: 10 } });\n\n const { onSuccessMsg } = useAlertMessage();\n const [visible, setVisible] = useState(false);\n const [detailData, setDetailData] = useState(null);\n const openDrawer = (data = null) => {\n setDetailData(data);\n setVisible(true);\n };\n\n // 新增\n const [createMerchant, { loading: createdLoading }] = useMutationApi(\n apiType.CREATE_MERCHANT,\n {\n onCompleted: () => refetch() && onSuccessMsg(),\n },\n );\n\n // 更新\n const [updateMerchant, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_MERCHANT,\n {\n onCompleted: () => refetch() && onSuccessMsg(),\n },\n );\n\n // 刪除\n const [deleteMerchant, { loading: deleteLoading }] = useMutationApi(\n apiType.DELETE_MERCHANT,\n {\n onCompleted: () => refetch() && onSuccessMsg(),\n },\n );\n\n const columns = () => {\n let columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n key: 'id',\n width: '5%',\n fixed: 'left',\n },\n {\n title: '商户类型',\n dataIndex: 'merchantType',\n key: 'merchantType',\n },\n {\n title: '商戶号',\n dataIndex: 'key',\n key: 'key',\n },\n {\n title: '商户名称',\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: '商戶域名',\n dataIndex: 'host',\n key: 'host',\n },\n {\n title: '商戶密钥',\n dataIndex: 'secretKey',\n key: 'secretKey',\n },\n {\n title: '备注',\n dataIndex: 'remark',\n key: 'remark',\n },\n {\n title: '建立时间',\n dataIndex: 'createdAt',\n key: 'createdAt',\n render: h => formatDateTime(h),\n },\n {\n title: '更新时间',\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n render: h => formatDateTime(h),\n },\n ];\n columns.push({\n title: '动作',\n key: 'action',\n width: '10%',\n fixed: 'right',\n render: record => (\n \n {(isSystemType ||authRoutesKey.includes('API_SpinachPlatformSetting_Update')) && ( \n openDrawer(record)}\n type='link'\n icon={}>\n \n )}\n {(isSystemType ||authRoutesKey.includes('API_SpinachPlatformSetting_Delete')) && (\n \n deleteMerchant({\n filter: { merchant: { id: record.id } },\n })\n }\n loading={deleteLoading}\n />\n )}\n \n ),\n });\n return columns;\n };\n\n return (\n <>\n \n {/* 新建 */}\n {(isSystemType || authRoutesKey.includes('API_SpinachPlatformSetting_Create')) && (\n }\n onClick={() => openDrawer()}>\n 新建商戶\n \n )}\n \n \n \n );\n}\n\nexport default MerchantSetting;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Tabs } from 'antd';\nimport PageWrap from '@/components/PageWrap';\nimport OriginSetting from './OriginSetting';\nimport MerchantSetting from './MerchantSetting';\n\nexport default function OriginMgm() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const tabsData = () => {\n let data = [];\n if (authRoutesKey.includes('API_ConsultingRoomOrigin_ALL'))\n data.push({\n key: 'originSetting',\n tab: '访问域名设置',\n content: () => ,\n });\n if (authRoutesKey.includes('API_SpinachPlatformSetting_ALL'))\n data.push({\n key: 'merchantSetting',\n tab: '商戶列表设置',\n content: () => ,\n });\n return data;\n };\n\n return (\n \n \n {tabsData().map(tab => (\n \n {tab.content()}\n \n ))}\n \n \n );\n}\n","import { useState, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setBeepEnabled, setBeepAudioSrc } from '@/store/global';\nimport { useQueryApi, useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\n\nconst BEEP_FILE_KEY = 'bochat.platform.consulting.beep';\nconst BEEP_ENABLED_KEY = 'bochat.platform.consulting.beep.enabled';\nconst BEEP_CLIENT_ENABLED_KEY =\n 'bochat.platform.consulting.client.beep.enabled';\n\nconst useBeep = () => {\n const { onWarningMsg, onErrorMsg } = useAlertMessage();\n const { beepEnabled, beepAudioSrc } = useSelector(({ global }) => global);\n const dispatch = useDispatch();\n\n const { fetchData, loading } = useQueryApi(apiType.GET_PLATFORM_SETTING);\n const [updateData, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_PLATFORM_SETTING,\n );\n\n // 提示音 音檔\n const fetchBeepFile = useCallback(\n async (key = BEEP_FILE_KEY) => {\n const { error, data } = await fetchData({\n filter: { PlatformSetting: { key } },\n });\n if (!error) {\n dispatch(setBeepAudioSrc(data?.getPlatformSetting?.value));\n }\n },\n [dispatch, fetchData],\n );\n\n // 更新提示音 音檔\n const updateBeepFile = useCallback(\n async ({ data }, key = BEEP_FILE_KEY) => {\n const { error } = await updateData({\n filter: { PlatformSetting: { key } },\n in: data,\n });\n if (!error) fetchBeepFile();\n },\n [fetchBeepFile, updateData],\n );\n\n // 提示音狀態\n const [beepClientEnabled, setClientBeepEnabled] = useState(false);\n const fetchBeepEnabled = useCallback(\n async (key = BEEP_ENABLED_KEY) => {\n const { error, data } = await fetchData({\n filter: { PlatformSetting: { key } },\n });\n if (error) return;\n const callback = {\n [BEEP_ENABLED_KEY]: () =>\n dispatch(setBeepEnabled(data.getPlatformSetting.value === 'Yes')),\n [BEEP_CLIENT_ENABLED_KEY]: () =>\n setClientBeepEnabled(data.getPlatformSetting.value === 'Yes'),\n };\n callback[key]?.();\n },\n [dispatch, fetchData],\n );\n\n // 更新提示音狀態\n const updateBeepEnabled = useCallback(\n async ({ data }, key = BEEP_ENABLED_KEY) => {\n const { error } = await updateData({\n filter: { PlatformSetting: { key } },\n in: data,\n });\n if (!error) fetchBeepEnabled(key);\n },\n [fetchBeepEnabled, updateData],\n );\n\n const playPromise = useCallback(\n audioObj => {\n if (!audioObj) return;\n const playAudioPromise = audioObj.play();\n if (playAudioPromise) {\n playAudioPromise\n .then(() => {})\n .catch(err => {\n err?.name === 'NotAllowedError'\n ? onWarningMsg('请启用浏览器声音播放权限')\n : onErrorMsg(err);\n });\n }\n },\n [onErrorMsg, onWarningMsg],\n );\n\n return {\n beepAudioSrc,\n beepEnabled,\n beepClientEnabled,\n loading,\n updateLoading,\n keys: { BEEP_FILE_KEY, BEEP_ENABLED_KEY, BEEP_CLIENT_ENABLED_KEY },\n playPromise,\n fetchBeepFile,\n fetchBeepEnabled,\n updateBeepEnabled,\n updateBeepFile,\n };\n};\n\nexport default useBeep;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { SoundOutlined } from '@ant-design/icons';\nimport { Switch, Upload, Space, Card, Typography, Divider } from 'antd';\nimport { Box, Button } from '@WRAP_COMP';\nimport useBeep from '@/hook/useBeep';\n\nfunction BeepSetting({ title = '' }) {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const {\n beepAudioSrc,\n beepEnabled,\n beepClientEnabled,\n loading,\n updateLoading,\n keys,\n updateBeepEnabled,\n updateBeepFile,\n fetchBeepFile,\n fetchBeepEnabled,\n } = useBeep();\n\n const onChangeHandle = (checked, key) => {\n const value = checked ? 'Yes' : 'No';\n updateBeepEnabled({ data: { value } }, key);\n };\n\n const [uploadSrc, setUploadSrc] = useState(null);\n const [uploadFile, setUploadFile] = useState(null);\n const beforeAudioUpload = async file => {\n setUploadSrc(() => window.URL.createObjectURL(file));\n setUploadFile(file);\n return false;\n };\n\n const audioUploadHandle = file => {\n updateBeepFile({ data: { file } });\n };\n\n useEffect(() => {\n fetchBeepFile();\n fetchBeepEnabled();\n fetchBeepEnabled(keys.BEEP_CLIENT_ENABLED_KEY);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const audioRender = audioSrc =>\n React.createElement('audio', { controls: true, src: audioSrc });\n\n return (\n \n \n {audioRender(uploadSrc || beepAudioSrc)}\n \n \n \n \n audioUploadHandle(uploadFile)}>\n 确认上传\n \n \n \n \n \n
\n 后台提示音提醒\n 后台回复咨询信息时播放提示音提醒\n
\n onChangeHandle(checked, keys.BEEP_ENABLED_KEY)}\n />\n
\n \n
\n 用户端提示音提醒\n 客服用户端收到新讯息提示音\n
\n \n onChangeHandle(checked, keys.BEEP_CLIENT_ENABLED_KEY)\n }\n />\n
\n
\n );\n}\n\nexport default BeepSetting;\n","import React from 'react';\nimport { Box } from '@WRAP_COMP';\nimport { Card, Typography, Switch } from 'antd';\nfunction SettingCardStyle({\n title = '',\n subTitle = '',\n content = null,\n hasEnable = false,\n defaultChecked = false,\n loading = false,\n disabled = false,\n onChange = () => {},\n ...props\n}) {\n return (\n \n \n {title && (\n
\n {title}\n {subTitle}\n
\n )}\n {hasEnable && (\n \n )}\n
\n <>{content}\n
\n );\n}\n\nexport default SettingCardStyle;\n","/**\n * 自動輪派\n */\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport SettingCard from './SettingCard';\n\nfunction AutoDistribute({ title = '', AUTO_DISTRIBUTE, configKeysValue = {} }) {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const enable = configKeysValue[AUTO_DISTRIBUTE].value === 'Yes';\n const { onSuccessMsg } = useAlertMessage();\n const [updateData, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_PLATFORM_SETTING,\n { onCompleted: () => onSuccessMsg() },\n );\n return (\n \n updateData({\n filter: { PlatformSetting: { key: AUTO_DISTRIBUTE } },\n in: { value: checked ? 'Yes' : 'No' },\n })\n }\n />\n );\n}\n\nexport default AutoDistribute;\n","/**\n * 自動封存\n */\nimport React, { useState } from 'react';\nimport { InputNumber, Card, Typography, Divider } from 'antd';\nimport { Box, Button } from '@WRAP_COMP';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport InputTextArea from '@/components/InputTextArea';\nimport SettingCard from './SettingCard';\n\nfunction AutoDeactivate({\n title = '',\n AUTO_DEACTIVATE_ENABLED, // 自動封存啟用\n AUTO_DEACTIVATE_MIN, // 自動封存分數\n DEACTIVATE_TIP_ENABLED, // 封存提示訊息 啟用\n DEACTIVATE_TIP_MANUAL, // 手動封存提示訊息\n DEACTIVATE_TIP_AUTO, // 自動封存提示訊息\n configKeysValue = {},\n}) {\n const [min, setMin] = useState(() =>\n Number(configKeysValue[AUTO_DEACTIVATE_MIN].value),\n );\n const [tipManual, setTipManual] = useState(\n () => configKeysValue[DEACTIVATE_TIP_MANUAL].value,\n );\n const [tipAuto, setTipAuto] = useState(\n () => configKeysValue[DEACTIVATE_TIP_AUTO].value,\n );\n const isEnabled = key => configKeysValue[key].value === 'Yes';\n\n const { onSuccessMsg } = useAlertMessage();\n const [update, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_PLATFORM_SETTING,\n {\n onCompleted: ({ updatePlatformSetting }) => {\n if (updatePlatformSetting.key === AUTO_DEACTIVATE_MIN) {\n setMin(Number(updatePlatformSetting.value));\n onSuccessMsg();\n }\n },\n },\n );\n\n const onChangeEnable = key => async checked => {\n const [err] = await update({\n filter: { PlatformSetting: { key } },\n in: { value: checked ? 'Yes' : 'No' },\n });\n err || onSuccessMsg();\n };\n\n const onClickTipsConfirm = () => {\n Promise.all(\n [\n { key: DEACTIVATE_TIP_MANUAL, value: tipManual },\n { key: DEACTIVATE_TIP_AUTO, value: tipAuto },\n ].map(({ key, value }) =>\n update({\n filter: { PlatformSetting: { key } },\n in: { value },\n }),\n ),\n ).finally(() => onSuccessMsg());\n };\n\n return (\n \n \n
\n \n setMin(v)}\n size='small'\n />\n \n 分钟未产生新对话,自动封存该咨询房\n
\n \n update({\n filter: { PlatformSetting: { key: AUTO_DEACTIVATE_MIN } },\n in: { value: String(min) },\n })\n }>\n 确认\n \n
\n }\n />\n\n \n\n \n \n \n \n \n 客服手动结束时对话提示内容\n \n setTipManual(e.target.value)}\n rows={2}\n />\n \n \n 系统自动关闭时对话提示内容\n \n setTipAuto(e.target.value)}\n rows={2}\n />\n \n \n 确认\n \n \n \n }\n />\n \n );\n}\n\nexport default AutoDeactivate;\n","/**\n * 自動進線\n */\nimport React from 'react';\nimport SettingCard from './SettingCard';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\n\nfunction AutoCreatedCS({ title = '', AUTO_CREATED_CS, configKeysValue = {} }) {\n const enable = configKeysValue[AUTO_CREATED_CS].value === 'Yes';\n const { onSuccessMsg } = useAlertMessage();\n const [update, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_PLATFORM_SETTING,\n { onCompleted: () => onSuccessMsg() },\n );\n return (\n \n update({\n filter: { PlatformSetting: { key: AUTO_CREATED_CS } },\n in: { value: checked ? 'Yes' : 'No' },\n })\n }\n />\n );\n}\n\nexport default AutoCreatedCS;\n","import React from 'react';\nimport { Box } from '@WRAP_COMP';\nimport { Button, Form, Input, InputNumber } from 'antd';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\n\nfunction QusListForm({\n qusData = null,\n updateQsHandle = () => {},\n deleteQsHandle = () => {},\n deleteLoading = false,\n}) {\n const [updateForm] = Form.useForm();\n const deleteBtnRender = (id = 0) => {\n return (\n {\n e.stopPropagation();\n deleteQsHandle(id);\n }}\n loading={deleteLoading}\n placement='topRight'\n />\n );\n };\n\n return (\n \n \n \n \n \n \n \n \n\n \n \n {deleteBtnRender(qusData?.id)}\n \n \n );\n}\n\nexport default QusListForm;\n","import React, { useState } from 'react';\nimport { Collapse, List, Popover, Form, Input, InputNumber } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport { useMutationApi, useQueryApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport QusListForm from './QusListForm';\n\nfunction QusMgm() {\n const [qsList, setQsList] = useState([]);\n const { onSuccessMsg } = useAlertMessage();\n\n const { fetchData, loading } = useQueryApi(apiType.LIST_CS_QUEUE_QUS);\n const fetchQsList = async v => {\n const { error, data } = await fetchData();\n if (error) return;\n setQsList(data.listConsultingRoomQuestion.consultingRoomQuestions);\n };\n const onChange = k => {\n if (k.length) fetchQsList();\n };\n\n /**\n * 新增\n */\n const [createdForm] = Form.useForm();\n const [visible, setVisible] = useState(false);\n const handleVisibleChange = v => {\n v || createdForm.resetFields();\n setVisible(v);\n };\n const [createQs, { loading: createdQsLdg }] = useMutationApi(\n apiType.CREATED_CS_QUEUE_QUS,\n );\n const createQsHandle = async fields => {\n const { error } = await createQs({ in: { ...fields } });\n if (error) return;\n handleVisibleChange(false);\n onSuccessMsg();\n fetchQsList();\n };\n const createdFormRender = () => {\n return (\n \n \n \n \n \n \n \n \n 确认\n \n \n );\n };\n\n /**\n * 編輯\n */\n const [updateQs, { loading: updateQsLdg }] = useMutationApi(\n apiType.UPDATE_CS_QUEUE_QUS,\n );\n const updateQsHandle = async ({ id, ...fields }) => {\n const { error } = await updateQs({\n filter: { consultingRoomQuestion: { id } },\n in: { ...fields },\n });\n if (error) return;\n onSuccessMsg();\n fetchQsList();\n };\n\n /**\n * 刪除\n */\n const [deleteQs, { loading: deleteQsLdg }] = useMutationApi(\n apiType.DELETE_CS_QUEUE_QUS,\n );\n const deleteQsHandle = async id => {\n const { error } = await deleteQs({\n filter: { consultingRoomQuestion: { id } },\n });\n if (error) return;\n onSuccessMsg();\n fetchQsList();\n };\n\n return (\n \n \n 进阶设定\n \n }>\n <>\n \n \n \n (\n \n \n \n )}\n />\n \n \n \n );\n}\n\nexport default QusMgm;\n","/**\n * 排隊機制\n */\nimport React, { useState } from 'react';\nimport { Box } from '@WRAP_COMP';\nimport { InputNumber, Button, Typography } from 'antd';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport SettingCard from '../SettingCard';\nimport QusMgm from './QusMgm';\n\nfunction QueueMaxCount({ title = '', QUEUE_MAX_COUNT, configKeysValue = {} }) {\n const [count, setCount] = useState(() =>\n Number(configKeysValue[QUEUE_MAX_COUNT].value),\n );\n const { onSuccessMsg } = useAlertMessage();\n const [update, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_PLATFORM_SETTING,\n {\n onCompleted: ({ updatePlatformSetting }) => {\n setCount(Number(updatePlatformSetting.value));\n onSuccessMsg();\n },\n },\n );\n return (\n \n \n
\n 最大容许进行中数量\n setCount(v)}\n size='small'\n style={{ marginLeft: '8px' }}\n />\n (设定0为关闭)\n
\n \n update({\n filter: { PlatformSetting: { key: QUEUE_MAX_COUNT } },\n in: { value: String(count) },\n })\n }>\n 确认\n \n
\n \n \n }\n />\n );\n}\n\nexport default QueueMaxCount;\n","import React, { useState } from 'react';\nimport { InputNumber, Button } from 'antd';\nimport { Box } from '@WRAP_COMP';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport SettingCard from './SettingCard';\n\nfunction DialogueTimeout({\n title,\n DIALOGUE_TIMEOUT_SEC,\n DIALOGUE_TIMEOUT_SEC_ENABLED,\n configKeysValue = {},\n}) {\n const enable = configKeysValue[DIALOGUE_TIMEOUT_SEC_ENABLED].value === 'Yes';\n const [sec, setSec] = useState(() =>\n Number(configKeysValue[DIALOGUE_TIMEOUT_SEC].value),\n );\n const { onSuccessMsg } = useAlertMessage();\n const [update, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_PLATFORM_SETTING,\n {\n onCompleted: ({ updatePlatformSetting }) => {\n updatePlatformSetting.key === DIALOGUE_TIMEOUT_SEC &&\n setSec(Number(updatePlatformSetting.value));\n onSuccessMsg();\n },\n },\n );\n\n return (\n {\n update({\n filter: { PlatformSetting: { key: DIALOGUE_TIMEOUT_SEC_ENABLED } },\n in: { value: checked ? 'Yes' : 'No' },\n });\n }}\n content={\n \n
\n 超时提醒:当顾客发送消息后,客服超过\n \n setSec(v)} size='small' />\n \n 秒后无响应自动给出超时提示\n
\n \n update({\n filter: { PlatformSetting: { key: DIALOGUE_TIMEOUT_SEC } },\n in: { value: String(sec) },\n })\n }>\n 确认\n \n
\n }\n />\n );\n}\n\nexport default DialogueTimeout;\n","import React, { useState } from 'react';\nimport { InputNumber } from 'antd';\nimport { Box, Button } from '@WRAP_COMP';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport InputTextArea from '@/components/InputTextArea';\nimport SettingCard from './SettingCard';\n\nfunction NoResponse({\n title = '',\n NO_RESPONSE_ENABLED,\n NO_RESPONSE_SEC,\n NO_RESPONSE_TIP,\n configKeysValue = {},\n}) {\n const enable = configKeysValue[NO_RESPONSE_ENABLED].value === 'Yes';\n const [sec, setSec] = useState(() =>\n Number(configKeysValue[NO_RESPONSE_SEC].value),\n );\n const [tip, setTip] = useState(() => configKeysValue[NO_RESPONSE_TIP].value);\n\n const { onSuccessMsg } = useAlertMessage();\n const [update, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_PLATFORM_SETTING,\n {\n onCompleted: ({ updatePlatformSetting }) => {\n updatePlatformSetting.key === NO_RESPONSE_SEC &&\n setSec(Number(updatePlatformSetting.value));\n updatePlatformSetting.key === NO_RESPONSE_ENABLED && onSuccessMsg();\n },\n },\n );\n\n const onClickConfirm = () => {\n Promise.all(\n [\n { key: NO_RESPONSE_SEC, value: String(sec) },\n { key: NO_RESPONSE_TIP, value: tip },\n ].map(({ key, value }) =>\n update({\n filter: { PlatformSetting: { key } },\n in: { value },\n }),\n ),\n ).finally(() => onSuccessMsg());\n };\n\n return (\n {\n update({\n filter: { PlatformSetting: { key: NO_RESPONSE_ENABLED } },\n in: { value: checked ? 'Yes' : 'No' },\n });\n }}\n content={\n <>\n \n 客服超过\n \n setSec(v)} size='small' />\n \n 秒后无响应自动发送\n \n \n setTip(e.target.value)}\n rows={2}\n />\n \n 确认\n \n \n \n }\n />\n );\n}\n\nexport default NoResponse;\n","/**\n * 自動輪派\n */\nimport React from 'react';\n// import { useSelector } from 'react-redux';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport SettingCard from './SettingCard';\n\nfunction RedirectVerify({\n title = '',\n REDIRECT_VERIFY_ENABLED,\n configKeysValue = {},\n}) {\n // const { authRoutesKey } = useSelector(({ auth }) => auth);\n const enable = configKeysValue[REDIRECT_VERIFY_ENABLED].value === 'Yes';\n const { onSuccessMsg } = useAlertMessage();\n const [updateData, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_PLATFORM_SETTING,\n { onCompleted: () => onSuccessMsg() },\n );\n return (\n \n updateData({\n filter: { PlatformSetting: { key: REDIRECT_VERIFY_ENABLED } },\n in: { value: checked ? 'Yes' : 'No' },\n })\n }\n />\n );\n}\n\nexport default RedirectVerify;\n","import React from 'react';\nimport { Row, Col, Spin } from 'antd';\nimport PageWrap from '@/components/PageWrap';\nimport { useActiveList } from '@/hook/useList';\nimport { PlatFormSettingKey } from '@/utils';\n\nimport BeepSetting from './BeepSetting';\nimport AutoDistribute from './AutoDistribute';\nimport AutoDeactivate from './AutoDeactivate';\nimport AutoCreatedCS from './AutoCreatedCS';\nimport QueueMaxCount from './QueueMaxCount';\nimport DialogueTimeout from './DialogueTimeout';\nimport NoResponse from './NoResponse';\nimport RedirectVerify from './RedirectVerify';\n\nconst {\n BEEP, // 提示音\n AUTO_DISTRIBUTE, // 自動輪派\n AUTO_DEACTIVATE_ENABLED, // 自動封存啟用\n AUTO_DEACTIVATE_MIN, // 自動封存分數\n DEACTIVATE_TIP_ENABLED, // 封存提示訊息 啟用\n DEACTIVATE_TIP_MANUAL, // 手動封存提示訊息\n DEACTIVATE_TIP_AUTO, // 自動封存提示訊息\n AUTO_CREATED_CS, // 自動進線\n QUEUE_MAX_COUNT, // 進線排隊\n DIALOGUE_TIMEOUT_SEC, // 對話超時提醒\n DIALOGUE_TIMEOUT_SEC_ENABLED, // 對話超時提醒 起用\n NO_RESPONSE_ENABLED, // 無回覆 自動發訊息 啟用\n NO_RESPONSE_SEC, // 無回覆 自動發訊息 秒數\n NO_RESPONSE_TIP, // 無回覆 自動發訊息\n REDIRECT_VERIFY_ENABLED, // 检测设置 啟用\n} = PlatFormSettingKey;\n\nfunction PlatformSettingMgm() {\n const {\n data: { list },\n loading,\n } = useActiveList({\n api: 'LIST_PLATFORM_SETTING',\n cusFilter: {},\n originPagination: { perPage: 999 },\n handleData: ({ listPlatformSetting }) => ({\n list: listPlatformSetting?.PlatformSettings || [],\n }),\n });\n const settingCardData = (settingList = []) => {\n if (!settingList.length) return;\n let itemCard = [];\n const itemCardsConfig = [\n {\n key: 'beep',\n title: '訊息提示音設置',\n configKeys: [BEEP],\n configKeysValue: {},\n content: props => ,\n },\n {\n key: 'auto_deactivate',\n title: '封存咨询房',\n configKeys: [\n AUTO_DEACTIVATE_ENABLED,\n AUTO_DEACTIVATE_MIN,\n DEACTIVATE_TIP_ENABLED,\n DEACTIVATE_TIP_MANUAL,\n DEACTIVATE_TIP_AUTO,\n ],\n configKeysValue: {},\n content: props => (\n \n ),\n },\n {\n key: 'redirect_verify',\n title: '检测设置',\n configKeys: [REDIRECT_VERIFY_ENABLED],\n configKeysValue: {},\n content: props => (\n \n ),\n },\n {\n key: 'auto_distribute',\n title: '自动轮派咨询单',\n configKeys: [AUTO_DISTRIBUTE],\n configKeysValue: {},\n content: props => (\n \n ),\n },\n {\n key: 'enter_directly',\n title: '自动进线',\n configKeys: [AUTO_CREATED_CS],\n configKeysValue: {},\n content: props => (\n \n ),\n },\n {\n key: 'dialogue_time_out',\n title: '对话超时提醒',\n configKeys: [DIALOGUE_TIMEOUT_SEC, DIALOGUE_TIMEOUT_SEC_ENABLED],\n configKeysValue: {},\n content: props => (\n \n ),\n },\n {\n key: 'no_response',\n title: '客服无应答时消息',\n configKeys: [NO_RESPONSE_ENABLED, NO_RESPONSE_SEC, NO_RESPONSE_TIP],\n configKeysValue: {},\n content: props => (\n \n ),\n },\n {\n key: 'max_processing_count',\n title: '进线排队设定',\n configKeys: [QUEUE_MAX_COUNT],\n configKeysValue: {},\n content: props => (\n \n ),\n },\n ];\n itemCardsConfig.forEach(el => {\n el.configKeys.forEach(ck => {\n const idx = settingList.findIndex(s => s.key === ck);\n if (idx > 0) el.configKeysValue[ck] = settingList[idx];\n });\n itemCard.push({ ...el });\n });\n return itemCard;\n };\n\n return (\n \n \n \n {!loading && (\n <>\n {settingCardData(list).map(item => (\n \n {item.content({\n title: item.title,\n configKeysValue: { ...item.configKeysValue },\n })}\n \n ))}\n \n )}\n \n \n \n );\n}\n\nexport default PlatformSettingMgm;\n","import React, { useEffect, useState } from 'react';\nimport { Drawer as ADrawer, Form, Switch, Input } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\n\nconst defaultForm = {\n afterSendSec: 0,\n source: '',\n isEnabled: false,\n};\n\nfunction Drawer({\n visible = false,\n detailData = null,\n loading = false,\n setVisible = () => {},\n create = () => {},\n update = () => {},\n}) {\n const [isEdit, setIsEdit] = useState(false);\n const [form] = Form.useForm();\n\n const closeDrawer = async () => {\n await form.resetFields();\n setVisible(false);\n };\n\n const submitHandle = async fieldsObj => {\n let fields = {\n ...fieldsObj,\n isEnabled: fieldsObj.isEnabled ? 'Yes' : 'No',\n };\n isEdit\n ? await update({\n filter: { hostsDeny: { id: detailData.id } },\n in: { ...fields },\n })\n : await create({ in: { ...fields } });\n await closeDrawer();\n };\n\n useEffect(() => {\n const initDrawer = async () => {\n if (detailData) {\n setIsEdit(true);\n await form.setFieldsValue({\n ...detailData,\n isEnabled: detailData.isEnabled === 'Yes',\n });\n } else {\n setIsEdit(false);\n await form.setFieldsValue({ ...defaultForm });\n }\n };\n visible && initDrawer();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visible, detailData]);\n\n return (\n <>\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default Drawer;\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Button, Switch, Space } from 'antd';\nimport { PlusOutlined, EditTwoTone } from '@ant-design/icons';\nimport { useActiveList } from '@/hook/useList';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport PageWrap from '@/components/PageWrap';\nimport SearchBar from '@/components/SearchBar';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport { EnableKey, EnableDisplay, formatDateTime } from '@/utils';\nimport Drawer from './Drawer';\n\nconst originFilter = {\n hostsDeny: { isEnabled: EnableKey['Unknown'] },\n};\nconst searchFields = [\n { name: 'ipAddress', type: 'text', label: 'IP' },\n {\n name: 'isEnabled',\n type: 'select',\n label: '启用状态',\n optionsObj: EnableDisplay,\n },\n];\n\nfunction HostsDenyMgm() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const {\n data: { list, total },\n loading,\n pagination,\n handleSearchFilter,\n handleChangePage,\n refetch,\n } = useActiveList({\n api: 'LIST_HOSTS_DENY',\n originFilter: { ...originFilter },\n handleData: ({ listHostsDeny }) => ({\n list: listHostsDeny?.hostsDenys || [],\n total: listHostsDeny?.meta?.total || 0,\n }),\n });\n const onFinishSearch = search => {\n handleSearchFilter({\n hostsDeny: {\n ...originFilter.hostsDeny,\n ...search,\n },\n });\n };\n\n const onCompletedCallback = { onCompleted: () => refetch() };\n const [createHostsDeny, { loading: createLoading }] = useMutationApi(\n apiType.CREATE_HOSTS_DENY,\n onCompletedCallback,\n );\n const [updateHostsDeny, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_HOSTS_DENY,\n onCompletedCallback,\n );\n const [deleteHostsDeny, { loading: deleteLoading }] = useMutationApi(\n apiType.DELETE_HOSTS_DENY,\n onCompletedCallback,\n );\n\n const [visible, setVisible] = useState(false);\n const [detailData, setDetailData] = useState(null);\n const visibleDrawer = (v, data = null) => {\n setDetailData(data);\n setVisible(v);\n };\n\n const columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n width: '5%',\n fixed: 'left',\n },\n {\n title: 'IP',\n dataIndex: 'ipAddress',\n },\n {\n title: '备注',\n dataIndex: 'remark',\n },\n {\n title: '建立时间',\n dataIndex: 'createdAt',\n key: 'createdAt',\n render: h => formatDateTime(h),\n },\n {\n title: '启用状态',\n dataIndex: 'isEnabled',\n render: (h, { id }) => (\n \n updateHostsDeny({\n filter: { hostsDeny: { id } },\n in: { isEnabled: v ? 'Yes' : 'No' },\n })\n }\n />\n ),\n },\n {\n title: '動作',\n key: 'action',\n width: '15%',\n fixed: 'right',\n render: record => (\n \n {authRoutesKey.includes('API_HostsDeny_Update') && (\n visibleDrawer(true, record)}\n type='link'\n icon={}\n />\n )}\n {authRoutesKey.includes('API_HostsDeny_Delete') && (\n \n deleteHostsDeny({\n filter: { hostsDeny: { id: record.id } },\n })\n }\n loading={deleteLoading}\n />\n )}\n \n ),\n },\n ];\n\n return (\n \n \n\n \n {authRoutesKey.includes('API_HostsDeny_Create') && (\n }\n onClick={() => visibleDrawer(true)}>\n 新增黑名单\n \n )}\n \n \n \n );\n}\n\nexport default HostsDenyMgm;\n","import React, { useEffect, useState } from 'react';\nimport { Drawer as ADrawer, Form, Select, Input, Spin, Radio } from 'antd';\nimport { Button } from '@/plugin/wrap-comp';\nimport useOrigin from '@/hook/useOrigin';\nimport { AdTrackingType } from '@/utils';\n\nfunction Drawer({\n consultingRoomOriginID = null,\n visible = false,\n detailData = null,\n loading = false,\n setVisible = () => {},\n create = () => {},\n update = () => {},\n}) {\n const { originSelectList, loading: originListLoading } = useOrigin({\n options: { fetchPolicy: 'cache-first' },\n });\n const [isEdit, setIsEdit] = useState(false);\n const [form] = Form.useForm();\n const closeDrawer = async () => {\n await form.resetFields();\n setVisible(false);\n };\n\n const submitHandle = async fields => {\n fields.adTrackingCode = fields.adTrackingCode.trim();\n isEdit\n ? await update({\n filter: { adTracking: { id: detailData.id } },\n in: { ...fields },\n })\n : await create({ in: { ...fields } });\n await closeDrawer();\n };\n\n const adTrackingCodeValid = async (_, val) => {\n const adTrackingType = form.getFieldValue('adTrackingType');\n if (!/<[^>]+>/g.test(val)) throw new Error('不是正确的 HTML 文本');\n const validType = {\n [AdTrackingType['CNZZ']]: v => {\n if (v.includes('cnzz.com')) return;\n throw new Error('不是正确的 CNZZ 广告代码文本');\n },\n [AdTrackingType['Google']]: v => {\n if (v.includes('www.googletagmanager.com')) return;\n throw new Error('不是正确的 Google 广告代码文本');\n },\n [AdTrackingType['Baidu']]: v => {\n if (v.includes('baidu.com')) return;\n throw new Error('不是正确的 Baidu 广告代码文本');\n },\n };\n validType[adTrackingType]\n ? validType[adTrackingType](val)\n : console.log('缺少驗證Type');\n };\n\n useEffect(() => {\n const initDrawer = async () => {\n if (detailData) {\n setIsEdit(true);\n await form.setFieldsValue({\n ...detailData,\n isEnabled: detailData.isEnabled === 'Yes',\n });\n } else {\n setIsEdit(false);\n await form.setFieldsValue({\n consultingRoomOriginID,\n adTrackingType: AdTrackingType['CNZZ'],\n });\n }\n };\n visible && initDrawer();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [visible, detailData]);\n\n return (\n <>\n \n \n
\n \n \n \n \n form.validateFields()}>\n {Object.keys(AdTrackingType).map(el => (\n \n {el}\n \n ))}\n \n \n \n \n \n \n \n
\n \n \n );\n}\n\nexport default Drawer;\n","import React, { useState, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Button, Space, Modal, Input } from 'antd';\nimport { PlusOutlined, EditTwoTone, EyeTwoTone } from '@ant-design/icons';\nimport { useActiveList } from '@/hook/useList';\nimport useOrigin from '@/hook/useOrigin';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport PageWrap from '@/components/PageWrap';\nimport SearchBar from '@/components/SearchBar';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport { formatDateTime, AdTrackingType } from '@/utils';\nimport Drawer from './Drawer';\n\nfunction AdTrackingMgm() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const { originSelectList, loading: originListLoading } = useOrigin({\n options: { fetchPolicy: 'cache-first' },\n });\n const searchFields = useMemo(\n () => [\n {\n name: 'consultingRoomOriginID',\n type: 'select',\n label: '所属域名',\n options: originSelectList,\n },\n ],\n [originSelectList],\n );\n\n const {\n data: { list, total },\n loading,\n pagination,\n handleSearchFilter,\n handleChangePage,\n refetch,\n } = useActiveList({\n api: 'LIST_AD_TRACKING',\n handleData: ({ listAdTracking }) => ({\n list: listAdTracking?.adTrackings || [],\n total: listAdTracking?.meta?.total || 0,\n }),\n });\n\n const [currOriginID, setCurrOriginID] = useState(null);\n const onFinishSearch = search => {\n setCurrOriginID(search.consultingRoomOriginID);\n handleSearchFilter({ adTracking: { ...search } });\n };\n\n const onCompletedCallback = { onCompleted: () => refetch() };\n const [createAdTracking, { loading: createLoading }] = useMutationApi(\n apiType.CREATE_AD_TRACKING,\n onCompletedCallback,\n );\n const [updateAdTracking, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_AD_TRACKING,\n onCompletedCallback,\n );\n const [deleteAdTracking, { loading: deleteLoading }] = useMutationApi(\n apiType.DELETE_AD_TRACKING,\n onCompletedCallback,\n );\n\n const [visible, setVisible] = useState(false);\n const [detailData, setDetailData] = useState(null);\n const visibleDrawer = (v, data = null) => {\n setDetailData(data);\n setVisible(v);\n };\n\n const [previewVisible, setPreviewVisible] = useState(false);\n const setPreviewVisibleHandel = (v, data = null) => {\n setDetailData(data);\n setPreviewVisible(v);\n };\n\n const columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n width: '5%',\n fixed: 'left',\n },\n {\n title: '所属域名',\n dataIndex: 'origin',\n },\n {\n title: '广告类型',\n dataIndex: 'adTrackingType',\n render: t => AdTrackingType[t],\n },\n {\n title: '广告代码',\n dataIndex: 'adTrackingCode',\n render: (v, record) => (\n setPreviewVisibleHandel(true, record)}\n type='link'\n icon={}\n />\n ),\n },\n {\n title: '建立时间',\n dataIndex: 'createdAt',\n render: h => formatDateTime(h),\n },\n {\n title: '動作',\n key: 'action',\n width: '15%',\n fixed: 'right',\n render: record => (\n \n {authRoutesKey.includes('API_HostsDeny_Update') && (\n visibleDrawer(true, record)}\n type='link'\n icon={}\n />\n )}\n {authRoutesKey.includes('API_HostsDeny_Delete') && (\n \n deleteAdTracking({\n filter: { adTracking: { id: record.id } },\n })\n }\n loading={deleteLoading}\n />\n )}\n \n ),\n },\n ];\n\n return (\n \n \n\n \n {authRoutesKey.includes('API_Employee_Create') && (\n }\n onClick={() => visibleDrawer(true)}>\n 新增广告埋点\n \n )}\n \n \n setPreviewVisibleHandel(false)}\n footer={null}>\n \n \n \n );\n}\n\nexport default AdTrackingMgm;\n","import React, { useEffect } from 'react';\nimport { Drawer, Form, Input, Select, Button } from 'antd';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useMerchant from '@/hook/useMerchant';\nimport { AccountTypeKeys, MerchantTypeKeys, AccountTypeDisplay } from '@/utils';\nimport useAlertMessage from '@/hook/useAlertMessage';\n\nconst accTypeConfig = [\n {\n value: AccountTypeKeys['Manager'],\n label: AccountTypeDisplay[AccountTypeKeys['Manager']].text,\n },\n {\n value: AccountTypeKeys['CustomerService'],\n label: AccountTypeDisplay[AccountTypeKeys['CustomerService']].text,\n },\n {\n value: AccountTypeKeys['Monitor'],\n label: AccountTypeDisplay[AccountTypeKeys['Monitor']].text,\n },\n];\n\nfunction CreateUserDrawer({\n title = '新增',\n accountTypes = [AccountTypeKeys['Manager']], // 指定新增的 accountTypes\n visible = false,\n setVisible = () => {},\n callback = () => {},\n}) {\n const [userForm] = Form.useForm();\n const { onSuccessMsg } = useAlertMessage();\n const { merchantSelectList, loading: merchantLoading } = useMerchant({\n options: { fetchPolicy: 'cache-first' },\n });\n const closeDrawer = async () => {\n await userForm.resetFields();\n setVisible(false);\n };\n const [createUser] = useMutationApi(apiType.CREATED_USER);\n const onFinish = async fields => {\n const [err] = await createUser({ in: { ...fields } });\n if (err) return;\n onSuccessMsg();\n callback();\n await closeDrawer();\n };\n\n useEffect(() => {\n const initDrawer = async () => await userForm.setFieldsValue({});\n if (visible) initDrawer();\n }, [userForm, visible]);\n\n return (\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default CreateUserDrawer;\n","import React, { useState, useCallback } from 'react';\nimport {\n EditTwoTone,\n PlusOutlined,\n QuestionCircleOutlined,\n} from '@ant-design/icons';\nimport { Box } from '@WRAP_COMP';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setVisibleDrawer } from '@/store/global';\nimport { Button, Space, Tooltip, Badge, Tabs } from 'antd';\nimport { useActiveList, defaultFilter } from '@/hook/useList';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useMerchant from '@/hook/useMerchant';\nimport PageWrap from '@/components/PageWrap';\nimport SearchBar from '@/components/SearchBar';\nimport DataTable from '@/components/Table/DataTable';\nimport AvatarWithText from '@/components/Avatar/AvatarWithText';\nimport UserDetailDrawer from '@/components/Drawer/UserDetailDrawer';\nimport CreateUserDrawer from '@/components/Drawer/CreateUserDrawer';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport {\n formatDateTime,\n AccountTypeKeys,\n AccountTypeDisplay,\n UserStatusKey,\n UserStatusDisplay,\n} from '@/utils';\n\nconst originFilter = {\n user: {\n username: '',\n email: '',\n status: UserStatusKey['Unknown'],\n accountType: AccountTypeKeys['Manager'],\n isDelete: 'No',\n },\n};\n\nconst searchFields = [\n { name: 'username', type: 'text', label: '管理员帐号' },\n { name: 'email', type: 'text', label: '信箱' },\n {\n name: 'status',\n type: 'select',\n label: '帐号狀態',\n optionsObj: UserStatusDisplay,\n },\n];\n\nexport default function EmployeeMgm() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n\n // 商戶列表\n const { merchantTableList } = useMerchant();\n const merchantRender = id => {\n const merchant = merchantTableList.find(el => el.id === id);\n return (\n <>\n {merchant?.key || '-'}\n {merchant?.merchantType ? ` (${merchant.merchantType})` : null}\n \n );\n };\n\n // 使用者列表\n const {\n data: { list, total },\n loading,\n pagination,\n handleSearchFilter,\n handleChangePage,\n refetch,\n } = useActiveList({\n api: 'LIST_USER',\n originFilter: { ...originFilter },\n handleData: ({ listUser }) => ({\n list: listUser.users || [],\n total: listUser?.meta?.total || 0,\n }),\n });\n\n const onFinish = search => {\n handleSearchFilter({\n ...originFilter,\n user: { ...originFilter.user, ...search },\n });\n };\n\n /**\n * created user drawer\n */\n const [createDrawer, setCreateDrawer] = useState(false);\n const openCreateUserDrawer = v => {\n setCreateDrawer(v);\n };\n\n /**\n * view&edit user\n */\n const dispatch = useDispatch();\n const [user, setUser] = useState(null);\n const openDrawer = useCallback(\n v => {\n v || setUser(() => null);\n dispatch(setVisibleDrawer({ name: 'UserDetailDrawer', visible: v }));\n },\n [dispatch],\n );\n\n const handleUser = user => {\n setUser(() => user);\n openDrawer(true);\n };\n\n /**\n * delete user\n */\n const [deleteUser, { loading: deleteLdg }] = useMutationApi(\n apiType.DELETE_USER,\n {\n onCompleted: () => refetch(),\n },\n );\n\n /**\n * table\n */\n const columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n key: 'id',\n width: '5%',\n fixed: 'left',\n },\n {\n title: '管理员',\n key: 'manager',\n fixed: 'left',\n render: ({ username, avatarURL }) => (\n \n ),\n },\n {\n title: () => (\n \n 別名\n \n \n ),\n dataIndex: 'aliasName',\n key: 'aliasName',\n render: h => h || '-',\n },\n {\n title: '所属商户号(类型)',\n dataIndex: 'merchantID',\n key: 'merchantID',\n render: merchantID => merchantRender(merchantID),\n },\n {\n title: '信箱',\n dataIndex: 'email',\n key: 'email',\n render: h => h || '-',\n },\n {\n title: '帐号狀態',\n dataIndex: 'status',\n key: 'status',\n render: h => (\n \n ),\n },\n {\n title: '更新时间',\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n render: h => formatDateTime(h),\n },\n {\n title: '动作',\n key: 'action',\n width: '10%',\n fixed: 'right',\n render: user => (\n \n {authRoutesKey.includes('API_Employee_Update') && (\n handleUser(user)}\n type='link'\n icon={}\n />\n )}\n {authRoutesKey.includes('API_Employee_Delete') && (\n deleteUser({ filter: { user: { id: user.id } } })}\n loading={deleteLdg}\n />\n )}\n \n ),\n },\n ];\n const tableRender = () => {\n return (\n \n );\n };\n\n const onChangeTab = key => {\n refetch({\n filter: {\n ...defaultFilter,\n user: { ...originFilter.user, accountType: key },\n },\n });\n };\n\n const tabTableRender = () => {\n const tabs = [\n {\n key: AccountTypeKeys['Manager'],\n tab: AccountTypeDisplay[AccountTypeKeys['Manager']].text,\n },\n {\n key: AccountTypeKeys['Monitor'],\n tab: AccountTypeDisplay[AccountTypeKeys['Monitor']].text,\n },\n ];\n\n return (\n \n }\n onClick={() => openCreateUserDrawer(true)}>\n 新增员工 / 监察员\n \n )\n }>\n {tabs.map(tt => (\n \n {tableRender()}\n \n ))}\n \n \n );\n };\n\n return (\n \n \n\n {tabTableRender()}\n\n {/* 編輯 */}\n \n\n {/* 新增 */}\n setCreateDrawer(v)}\n callback={refetch}\n accountTypes={[AccountTypeKeys['Manager'], AccountTypeKeys['Monitor']]}\n />\n \n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Button, Typography, Divider, Form, Switch } from 'antd';\nimport DateRangePicker from 'src/components/DateRangePicker';\nimport { setDateRanges, formatSearchDateTime, toMoment } from 'src/utils';\n\nconst defaultDateTime = setDateRanges(0);\nconst defaultForm = {\n allowStatus: false,\n date: [defaultDateTime.start, defaultDateTime.end],\n};\n\nfunction AllowTimeForm({\n setting = null,\n loading = false,\n updateSetting = () => {},\n}) {\n const [allowForm] = Form.useForm();\n const [dateRequire, setRateRequire] = useState(false);\n const onFinish = ({ allowStatus = false, date = [0, 0] }) => {\n const unixData = formatSearchDateTime(date);\n updateSetting({\n filter: { userSetting: { userID: setting.userID } },\n in: {\n allowLoginStartAt: allowStatus ? unixData[0] : 0,\n allowLoginEndAt: allowStatus ? unixData[1] : 0,\n },\n });\n };\n\n const onChangeStatus = v => {\n setRateRequire(v);\n v && allowForm.validateFields(['date']);\n };\n\n useEffect(() => {\n if (setting) {\n const { allowLoginEndAt, allowLoginStartAt } = setting;\n let initForm = { ...defaultForm };\n initForm.allowStatus = !!(allowLoginEndAt && allowLoginStartAt); // 只要有一個為0就為停用\n initForm.allowStatus &&\n (initForm.date = [\n toMoment(allowLoginStartAt),\n toMoment(allowLoginEndAt),\n ]);\n setRateRequire(initForm.allowStatus);\n allowForm.setFieldsValue({ ...initForm });\n } else {\n setRateRequire(false);\n allowForm.setFieldsValue({ ...defaultForm });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n
\n 授权时间\n
\n \n \n \n {dateRequire && (\n \n )}\n \n \n 确认\n \n \n \n\n \n
\n );\n}\n\nexport default AllowTimeForm;\n","/**\n * 客服管理\n */\nimport React, { useState, useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport {\n EditTwoTone,\n QuestionCircleOutlined,\n PlusOutlined,\n} from '@ant-design/icons';\nimport { setVisibleDrawer } from '@/store/global';\nimport { Button, Space, Tooltip, Typography } from 'antd';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport { useActiveList } from '@/hook/useList';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport useMerchant from '@/hook/useMerchant';\nimport useMe from '@/hook/useMe';\nimport PageWrap from '@/components/PageWrap';\nimport SearchBar from '@/components/SearchBar';\nimport DataTable from '@/components/Table/DataTable';\nimport AvatarWithText from '@/components/Avatar/AvatarWithText';\nimport UserDetailDrawer from '@/components/Drawer/UserDetailDrawer';\nimport CreateUserDrawer from '@/components/Drawer/CreateUserDrawer';\nimport OnlineStatusBadge from '@/components/User/OnlineStatusBadge';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport {\n formatDateTime,\n AccountTypeKeys,\n UserStatusKey,\n UserStatusDisplay,\n} from '@/utils';\nimport AllowTimeForm from './AllowTimeForm';\n\nconst originFilter = {\n user: {\n username: '',\n email: '',\n status: UserStatusKey['Unknown'],\n accountType: AccountTypeKeys['CustomerService'],\n isDelete: 'No',\n },\n};\n\nconst searchFields = [\n { name: 'username', type: 'text', label: '帐号' },\n { name: 'email', type: 'text', label: '信箱' },\n {\n name: 'status',\n type: 'select',\n label: '帐号狀態',\n optionsObj: UserStatusDisplay,\n },\n];\n\nexport default function EmployeeCSMgm() {\n const { meInfo, authRoutesKey, isSystemType } = useMe();\n const { onSuccessMsg } = useAlertMessage();\n\n // 商戶列表\n const { merchantTableList } = useMerchant();\n const merchantRender = id => {\n const merchant = merchantTableList.find(el => el.id === id);\n return (\n <>\n {merchant?.key || '-'}\n {merchant?.merchantType ? ` (${merchant.merchantType})` : null}\n \n );\n };\n\n // 使用者列表\n const {\n data: { list, total },\n loading,\n pagination,\n handleSearchFilter,\n handleChangePage,\n refetch,\n } = useActiveList({\n api: 'LIST_USER',\n originFilter: { ...originFilter },\n handleData: ({ listUser }) => ({\n list: listUser?.users || [],\n total: listUser?.meta?.total || 0,\n }),\n });\n\n const [updateSetting, { loading: updateSettingLdg }] = useMutationApi(\n apiType.UPDATE_USER_SETTING,\n {\n onCompleted: () => {\n refetch();\n onSuccessMsg('update');\n },\n },\n );\n\n const onFinishSearch = search => {\n handleSearchFilter({\n ...originFilter,\n user: { ...originFilter.user, ...search },\n });\n };\n\n /**\n * created user drawer\n */\n const [createDrawer, setCreateDrawer] = useState(false);\n const openCreateUserDrawer = v => setCreateDrawer(v);\n\n const [user, setUser] = useState(null);\n const dispatch = useDispatch();\n const openDrawer = useCallback(\n v => {\n v || setUser(null);\n dispatch(setVisibleDrawer({ name: 'UserDetailDrawer', visible: v }));\n },\n [dispatch],\n );\n\n const handleUser = user => {\n setUser(() => user);\n openDrawer(true);\n };\n\n /**\n * delete user\n */\n const [deleteUser, { loading: deleteLdg }] = useMutationApi(\n apiType.DELETE_USER,\n {\n onCompleted: () => refetch(),\n },\n );\n const systemAccCols = () => {\n if (!isSystemType) return [];\n return [\n {\n title: '授权时间狀態',\n dataIndex: 'setting',\n key: 'allowStatus',\n render: record => (\n \n {record?.allowLoginEndAt ? '啟用' : '停用'}\n \n ),\n },\n {\n title: '授权时间起讫',\n dataIndex: 'setting',\n key: 'allowTime',\n render: record => {\n if (!record || !record?.allowLoginEndAt) return <>-;\n return `${formatDateTime(\n record.allowLoginStartAt,\n )} ~ ${formatDateTime(record.allowLoginEndAt)}`;\n },\n },\n ];\n };\n\n const columns = [\n {\n title: '#ID',\n dataIndex: 'id',\n key: 'id',\n width: '5%',\n fixed: 'left',\n },\n {\n title: '客服',\n key: 'manager',\n fixed: 'left',\n render: ({ username, avatarURL }) => (\n \n ),\n },\n {\n title: () => (\n \n 別名\n \n \n ),\n dataIndex: 'aliasName',\n key: 'aliasName',\n render: h => h || '-',\n },\n {\n title: '在线状态',\n key: 'isOnlineStatus',\n render: ({ isOnline, setting }) => {\n const isStealth = setting ? setting.isStealth : 'No';\n return (\n \n );\n },\n },\n {\n title: '所属商户号(类型)',\n dataIndex: 'merchantID',\n key: 'merchantID',\n render: merchantID => merchantRender(merchantID),\n },\n {\n title: '信箱',\n dataIndex: 'email',\n key: 'email',\n render: h => h || '-',\n },\n {\n title: '帐号狀態',\n dataIndex: 'status',\n key: 'status',\n render: h => (\n \n {UserStatusDisplay[h].text}\n \n ),\n },\n ...systemAccCols(meInfo.accountType),\n {\n title: '更新时间',\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n render: h => formatDateTime(h),\n },\n {\n title: '动作',\n key: 'action',\n width: '10%',\n fixed: 'right',\n render: user => (\n \n {authRoutesKey.includes('API_Employee_Update') && (\n handleUser(user)}\n type='link'\n icon={}\n />\n )}\n {authRoutesKey.includes('API_Employee_Delete') && (\n deleteUser({ filter: { user: { id: user.id } } })}\n loading={deleteLdg}\n />\n )}\n \n ),\n },\n ];\n\n return (\n \n \n\n \n {authRoutesKey.includes('API_Employee_Create') && (\n }\n onClick={() => openCreateUserDrawer(true)}>\n 新增客服\n \n )}\n \n\n {/* 編輯 */}\n openDrawer(false)}>\n {user && isSystemType && (\n \n )}\n \n\n {/* 新增 */}\n setCreateDrawer(v)}\n callback={refetch}\n accountTypes={AccountTypeKeys['CustomerService']}\n />\n \n );\n}\n","import { useEffect, useState, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setMenuList } from '@/store/global';\nimport { useQueryApi, apiType } from '@/hook/useApi';\nimport { cloneDeep } from '@/utils';\n\n/**\n * 取得全部 menu 用於新增角色選擇 menu\n * @param {String} accType\n * @returns {Object}\n * {Array} treeData: 組出樹狀 arr 給新增元件用\n * {Function} refetch: 重新取得 menuList\n * {Function} authorityDataHandle: 根據選完的樹狀 keys 組出提交 arr 給新增用\n * {Function} authorityKeysForTreeHandle: 根據 detail arr 組出 API key (樹狀元件吃最後一層 key 值)\n */\nconst useMenuList = () => {\n const { menuList } = useSelector(({ global }) => global);\n\n /**\n * 組出樹狀 arr 給新增元件用\n * @param {Array} listMenu\n * @returns {Array} 樹狀 arr\n */\n const treeDataHandle = useCallback(list => {\n if (!Array.isArray(list)) return;\n return list.map(item => {\n return {\n title: `${item.name}`,\n key: item.key,\n children: treeDataHandle(item.next),\n };\n });\n }, []);\n\n /**\n * 根據 keys 組出 arr\n * @param {Array} keys 選中的 key 值\n * @param {Array} array 預設為 data.listMenu\n * @returns {Array} array\n */\n const authorityDataHandle = (keys = [], array) => {\n if (!array) array = cloneDeep(menuList);\n return array.filter(item => {\n if (keys.includes(item.key)) {\n delete item.__typename;\n delete item.name;\n if (Array.isArray(item.next)) {\n return (item.next = authorityDataHandle(keys, item.next));\n } else {\n return (item.next = []);\n }\n }\n return false;\n });\n };\n\n /**\n * 根據 arr 組出最後的 lastKey\n * @param {Array} arr\n * @return {Array} [{lastKey}, {lastKey}, {lastKey}]\n */\n const authorityKeysForTreeHandle = useCallback(arr => {\n return arr.reduce((acc, cur) => {\n return acc.concat(\n cur.next.length > 0 ? authorityKeysForTreeHandle(cur.next) : cur.key,\n );\n }, []);\n }, []);\n\n const [treeData, setTreeData] = useState([]);\n useEffect(() => {\n if (menuList.length > 0) {\n const tree = treeDataHandle(menuList);\n setTreeData(tree);\n }\n }, [menuList, treeDataHandle]);\n\n /**\n * menuList 存放\n * @param {Object} meData\n */\n const dispatch = useDispatch();\n\n const { fetchData } = useQueryApi(apiType.GET_MENU_LIST);\n const fetchMenuHandle = useCallback(async () => {\n const { data, error } = await fetchData();\n if (!error) {\n await dispatch(setMenuList(data.listMenu));\n }\n return { data, error };\n }, [dispatch, fetchData]);\n\n return {\n listMenu: menuList,\n treeData,\n fetchMenuHandle,\n authorityDataHandle,\n authorityKeysForTreeHandle,\n };\n};\nexport default useMenuList;\n","import React, { useState } from 'react';\nimport { Tree } from 'antd';\n\nconst treeData = [\n {\n title: '0-0',\n key: '0-0',\n children: [\n {\n title: '0-0-0',\n key: '0-0-0',\n children: [\n {\n title: '0-0-0-0',\n key: '0-0-0-0',\n },\n {\n title: '0-0-0-1',\n key: '0-0-0-1',\n },\n {\n title: '0-0-0-2',\n key: '0-0-0-2',\n },\n ],\n },\n {\n title: '0-0-1',\n key: '0-0-1',\n children: [\n {\n title: '0-0-1-0',\n key: '0-0-1-0',\n },\n {\n title: '0-0-1-1',\n key: '0-0-1-1',\n },\n {\n title: '0-0-1-2',\n key: '0-0-1-2',\n },\n ],\n },\n {\n title: '0-0-2',\n key: '0-0-2',\n },\n ],\n },\n {\n title: '0-1',\n key: '0-1',\n children: [\n {\n title: '0-1-0-0',\n key: '0-1-0-0',\n },\n {\n title: '0-1-0-1',\n key: '0-1-0-1',\n },\n {\n title: '0-1-0-2',\n key: '0-1-0-2',\n },\n ],\n },\n {\n title: '0-2',\n key: '0-2',\n },\n];\n\nconst AntMenuTree = ({ ...props }) => {\n const [checkedKeys, setCheckedKeys] = useState(['0-0-0']);\n const [autoExpandParent, setAutoExpandParent] = useState(true);\n\n const onExpand = () => {\n setAutoExpandParent(false);\n };\n\n const onCheck = checkedKeysValue => {\n setCheckedKeys(checkedKeysValue);\n };\n\n return (\n \n );\n};\n\nexport default AntMenuTree;\n","import { useState, useEffect } from 'react';\nimport { Input, Button, Select, Form, Drawer as ADrawer } from 'antd';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useMenuList from '@/hook/useMenuList';\nimport AntMenuTree from '@/components/AntMenuTree';\nimport { AccountTypeKeys } from '@/utils';\nimport useMe from '@/hook/useMe';\n\nconst accTypeArray = [\n { value: AccountTypeKeys['Manager'], label: '管理员角色' },\n { value: AccountTypeKeys['CustomerService'], label: '客服角色' },\n { value: AccountTypeKeys['Monitor'], label: '监察角色' },\n];\n\nconst Drawer = ({ visible, setVisible, isEdit, detailData = {}, refetch }) => {\n const {\n treeData,\n authorityDataHandle,\n authorityKeysForTreeHandle,\n } = useMenuList();\n const { authorityKeysHandle } = useMe();\n const [roleForm] = Form.useForm();\n\n // 提交表單\n const [checkedMenuKeysResult, setCheckedMenuKeysResult] = useState([]); // 送出樹狀 checked, 包含父層 keys\n const [expandedKeys, setExpandedKeys] = useState([]); // 控制樹狀 checked\n const [checkedMenuKeys, setCheckedMenuKeys] = useState([]); // 控制樹狀 checked\n\n // 樹狀處理\n const onCheckMenuTree = (checkedKeysValue, info) => {\n setCheckedMenuKeys([...checkedKeysValue]);\n setCheckedMenuKeysResult([...checkedKeysValue, ...info.halfCheckedKeys]);\n };\n\n // detail 處理\n const [roleData, setRoleData] = useState({});\n const detailDataHandle = async getRole => {\n await setRoleData({ ...getRole });\n await roleForm.setFieldsValue(getRole);\n setCheckedMenuKeys(authorityKeysForTreeHandle(getRole.authority));\n setCheckedMenuKeysResult(authorityKeysHandle(getRole.authority));\n };\n\n const mutationCallBack = {\n onCompleted: () => {\n refetch();\n closeDrawer();\n },\n };\n const [createdRole, { loading: createdLoading }] = useMutationApi(\n apiType.CREATED_ROLE,\n mutationCallBack,\n );\n const [updateRole, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_ROLE,\n mutationCallBack,\n );\n\n const submitHandle = async fields => {\n const authority = authorityDataHandle(checkedMenuKeysResult); // 回傳 menu 送出格式\n let variables = { in: { ...fields, authority } };\n if (isEdit) {\n variables = { ...variables, filter: { role: { id: roleData.id } } };\n updateRole(variables);\n } else {\n createdRole(variables);\n }\n };\n\n const closeDrawer = async () => {\n await roleForm.resetFields();\n setExpandedKeys(() => []);\n setCheckedMenuKeys([]);\n setVisible(false);\n };\n\n useEffect(() => {\n if (isEdit && detailData?.getRole) detailDataHandle(detailData.getRole);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isEdit, detailData]);\n\n return (\n \n
\n \n \n \n\n \n \n \n\n \n setExpandedKeys(() => [...keys])}\n expandedKeys={expandedKeys}\n />\n \n\n \n \n 提交\n \n \n \n \n );\n};\n\nexport default Drawer;\n","import React, { useEffect, useState } from 'react';\nimport { EditTwoTone } from '@ant-design/icons';\nimport { Button, Space } from 'antd';\nimport DataTable from '@/components/Table/DataTable';\nimport BtnDeleteConfirm from '@/components/Button/BtnDeleteConfirm';\nimport { formatDateTime, Pagination } from '@/utils';\n\nexport default function TabTable({\n defaultSearch,\n supportAccountType,\n defaultRoleID,\n meta = {},\n loadingObj = {},\n dataSource = [],\n fetchListHandle = () => {},\n fetchDetailHandel = () => {},\n deleteRoleHandler = () => {},\n reload = false,\n authRoutesKey = [],\n}) {\n const [pagination, setPagination] = useState({\n ...Pagination,\n });\n const [searchData] = useState(() => ({ supportAccountType }));\n\n const clickDeleteRole = async id => {\n const err = await deleteRoleHandler(id);\n if (!err) fetchListHandle(searchData, pagination);\n };\n\n const handleChangePage = pagination => {\n setPagination({ ...pagination });\n fetchListHandle(searchData, pagination);\n };\n\n useEffect(() => {\n if (meta?.total) {\n setPagination(pre => ({ ...pre, total: meta.total }));\n }\n }, [meta]);\n\n useEffect(() => {\n fetchListHandle(searchData, pagination);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultSearch, reload]);\n\n const columns = [\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n width: '5%',\n fixed: 'left',\n },\n {\n title: '角色名稱',\n dataIndex: 'name',\n key: 'name',\n },\n {\n title: '更新时间',\n dataIndex: 'updatedAt',\n key: 'updatedAt',\n render: h => formatDateTime(h),\n },\n {\n title: '动作',\n key: 'action',\n width: '10%',\n fixed: 'right',\n render: ({ id }) => (\n \n {authRoutesKey.includes('API_Employee_Role_Update') && (\n fetchDetailHandel(id)}\n type='link'\n icon={}\n />\n )}\n {/* 預設角色不能刪除 */}\n {defaultRoleID !== id &&\n authRoutesKey.includes('API_Employee_Role_Delete') && (\n clickDeleteRole(id)}\n loading={loadingObj.delete}\n />\n )}\n \n ),\n },\n ];\n\n return (\n \n );\n}\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { PlusOutlined } from '@ant-design/icons';\nimport { Box } from '@WRAP_COMP';\nimport { Tabs, Button } from 'antd';\nimport { useQueryApi, useMutationApi, apiType } from '@/hook/useApi';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport PageWrap from '@/components/PageWrap';\nimport SearchBar from '@/components/SearchBar';\nimport { AccountTypeKeys } from '@/utils';\nimport Drawer from './Drawer';\nimport TabTable from './TabTable';\n\nconst initSearch = { name: '' };\nconst searchFields = [{ name: 'name', type: 'text', label: '角色名称' }];\n\nconst EmployeeRoleMgm = () => {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const [loadingObj, setLoadingObj] = useState({ list: false, delete: false });\n const [defaultSearch, setDefaultSearchData] = useState({ ...initSearch });\n\n const [managerData, setManagerData] = useState({}); // 管理員角色\n const [customerServiceData, setCustomerServiceData] = useState({}); // 客服角色\n const [monitorData, setMonitorData] = useState({}); // 監察角色\n\n const [detailSource, setDetailSource] = useState({});\n const [visible, setVisible] = useState(false);\n const [isEdit, setIsEdit] = useState(false);\n const [reload, setReload] = useState(false);\n\n const { onErrorMsg } = useAlertMessage();\n const { fetchData: fetchList } = useQueryApi(apiType.LIST_ROLE);\n const { fetchData: fetchDetail } = useQueryApi(apiType.GET_ROLE);\n const [deleteRole] = useMutationApi(apiType.DELETE_ROLE); // 刪除\n\n const tabsData = [\n {\n key: AccountTypeKeys['Manager'],\n title: '管理員角色',\n defaultRoleID: 1,\n data: managerData,\n setData: setManagerData,\n },\n {\n key: AccountTypeKeys['CustomerService'],\n title: '客服角色',\n defaultRoleID: 2,\n data: customerServiceData,\n setData: setCustomerServiceData,\n },\n {\n key: AccountTypeKeys['Monitor'],\n title: '监察角色',\n defaultRoleID: 4,\n data: monitorData,\n setData: setMonitorData,\n },\n ];\n\n // data 處理\n const tableDataHandle = ({ roles = [], meta = {} }, key) => {\n try {\n tabsData.forEach(\n t => t.key === key && t.setData(() => ({ list: roles, meta })),\n );\n } catch (err) {\n onErrorMsg(err);\n }\n };\n\n const fetchListHandle = async (searchData, { page, perPage }) => {\n const { supportAccountType } = searchData;\n const searchParams = { ...defaultSearch, ...searchData };\n setLoadingObj(pre => ({ ...pre, list: true }));\n const { data, error } = await fetchList({\n filter: {\n role: { ...searchParams },\n baseFilter: { sortField: 'id', sortType: 'DESC' },\n },\n pagination: { page, perPage },\n });\n setLoadingObj(pre => ({ ...pre, list: false }));\n if (error) return;\n tableDataHandle(data?.listRole || {}, supportAccountType);\n setReload(false);\n };\n\n const fetchDetailHandel = async id => {\n setLoadingObj(pre => ({ ...pre, list: true }));\n const { data, error } = await fetchDetail({ filter: { role: { id } } });\n setLoadingObj(pre => ({ ...pre, list: false }));\n if (error) {\n onErrorMsg(error);\n } else {\n setDetailSource({ ...data });\n openDrawer(true, true);\n }\n };\n\n const deleteRoleHandler = async id => {\n setLoadingObj(pre => ({ ...pre, delete: true }));\n const [err] = await deleteRole({ filter: { role: { id } } });\n setLoadingObj(pre => ({ ...pre, delete: false }));\n return err;\n };\n\n const openDrawer = (open, openType) => {\n setVisible(open);\n setIsEdit(() => (open ? openType : false));\n };\n\n const tableRender = ({ key, data, defaultRoleID }) => {\n return (\n \n );\n };\n\n return (\n <>\n \n \n \n }\n onClick={() => openDrawer(true, false)}>\n 新建角色\n \n )\n }>\n {tabsData.map(tab => (\n {tab.title}}\n key={tab.key}\n forceRender>\n {/* 列表 */}\n {tableRender(tab)}\n \n ))}\n \n \n \n setReload(true)}\n detailData={detailSource}\n />\n \n );\n};\n\nexport default EmployeeRoleMgm;\n","import React from 'react';\nimport { Empty, Tag, Collapse, Typography } from 'antd';\nimport RoomCard from '@/components/CSRoomAdmin/RoomCard';\nimport { AccountTypeDisplay, AccountTypeKeys } from '@/utils';\n\nfunction CSRoomList({\n activeKey = '',\n merchantList = [],\n csRoomList = [],\n currRoomID = 0,\n clickCurrRoom = () => {},\n onChangePanel = () => {},\n}) {\n const tagsRender = ({ isTourist, isProactive }) => {\n if (isTourist) {\n return (\n \n {AccountTypeDisplay['Tourist'].text}\n \n );\n }\n if (isProactive) return 联系;\n return null;\n };\n const csRoomListRender = list => {\n if (!list.length) return ;\n return csRoomList.map(({ room, ownerUserData, extraInfo, ...props }) => (\n \n clickCurrRoom({ room, ownerUserData, extraInfo, ...props })\n }>\n \n \n ));\n };\n\n return (\n \n {merchantList.map(mr => (\n \n {mr.name}\n 商户号:{mr.key}\n \n }\n extra={\n \n {mr.csRoomTotal}\n \n }>\n {csRoomListRender(csRoomList)}\n \n ))}\n \n );\n}\n\nexport default CSRoomList;\n","import React, { useEffect } from 'react';\nimport { Box } from '@WRAP_COMP';\nimport { Typography } from 'antd';\nimport ChatRoomHeader from '@/components/ChatRoomHeader/AdminHeader';\nimport ChatRoomContent from '@/components/ChatRoomContent';\nimport MsgList from '@/components/MsgList';\nimport useRoomMessage from '@/hook/useRoomMessage';\nimport { createdUsersMap } from '@/hook/useRoom';\nfunction RoomView({\n roomID = 0,\n accessDomain = '',\n userRooms = [],\n ownerUserData = {},\n}) {\n const { roomMsg, fetchRoomMsgHandle, loadMoreMsg } = useRoomMessage({\n currentRoomID: roomID,\n });\n\n useEffect(() => {\n roomID && fetchRoomMsgHandle(roomID);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [roomID]);\n\n return (\n \n \n \n {`房間ID #${roomID}`}\n \n
\n \n {`来源域名 ${accessDomain}`}\n \n \n }\n />\n \n \n \n \n );\n}\n\nexport default RoomView;\n","import React from 'react';\nimport { Box } from '@WRAP_COMP';\nimport { Empty, Row, Col } from 'antd';\nimport RoomView from './RoomView';\nfunction RoomViewList({\n isShowAll = false,\n merchantList = [],\n csRoomList = [],\n clickCurrRoom = () => {},\n}) {\n const roomViewRender = ({ roomItem }) => {\n return (\n clickCurrRoom(roomItem)}\n style={{ cursor: 'pointer' }}>\n \n \n );\n };\n return (\n <>\n {csRoomList.length > 0 ? (\n \n {isShowAll &&\n merchantList.map(mr =>\n csRoomList.map(roomItem => {\n return roomItem.room.merchantID === mr.id\n ? roomViewRender({ roomItem })\n : null;\n }),\n )}\n {!isShowAll &&\n csRoomList.map(roomItem => roomViewRender({ roomItem }))}\n \n ) : (\n \n \n \n )}\n \n );\n}\n\nexport default RoomViewList;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Modal } from 'antd';\nimport { Button, Col, Row } from '@/plugin/wrap-comp';\nimport useMerchant from '@/hook/useMerchant';\nimport { useQueryApi, apiType } from '@/hook/useApi';\nimport { roomFormate } from '@/hook/useRoom';\nimport useOrigin from '@/hook/useOrigin';\nimport { cloneDeep } from '@/utils';\n\nimport RoomList from './RoomList';\nimport RoomViewList from './RoomViewList';\nimport RoomView from './RoomView';\nimport useRecMessage from '@/hook/useRecMessage';\n\nfunction MonitorMgm() {\n const { meInfo } = useSelector(({ auth }) => auth);\n\n /**\n * 域名列表\n */\n const { accessDomainTextFormate } = useOrigin({\n options: { fetchPolicy: 'cache-first' },\n });\n\n /**\n * 待諮詢列表\n * */\n const [csRoomList, setCsRoomList] = useState([]);\n const { fetchData: fetchCSRoomList } = useQueryApi(\n apiType.LIST_MONITOR_CS_ROOM,\n );\n const fetchCSRoomListHandle = async merchantID => {\n const { error, data } = await fetchCSRoomList({\n filter: {\n baseFilter: { sortField: 'room_id', sortType: 'DESC' },\n consultingRoom: { merchantID, status: 'Processing' },\n },\n });\n if (error) return;\n let tempListSource = [];\n data.listConsultingRoom.consultingRooms.forEach(\n ({ userRooms, ...room }) => {\n const formateRoom = roomFormate.consulting({\n room: {\n ...room,\n accessDomain: accessDomainTextFormate(room.accessDomain),\n },\n ownerUserID: room.ownerUserID,\n userRooms: userRooms,\n meID: meInfo.id,\n });\n tempListSource.push({ ...formateRoom });\n },\n );\n setMerchantList(pre => {\n pre.forEach(el => {\n el.id === Number(merchantID) &&\n (el.csRoomTotal = tempListSource.length);\n });\n return pre;\n });\n\n setCsRoomList(tempListSource);\n return tempListSource;\n };\n const [currMerchantID, setCurrMerchantID] = useState(0);\n const onChangeMerchant = async (mrID = 0) => {\n mrID ? await fetchCSRoomListHandle(mrID) : setCsRoomList([]);\n setCurrMerchantID(Number(mrID));\n setIsShowAll(false);\n };\n\n /**\n * 商戶列表\n */\n const [merchantList, setMerchantList] = useState([]);\n const { merchantTableList } = useMerchant({\n originPagination: { perPage: 999, page: 1 },\n });\n const mrRoomTotalHandle = (recMrID, isAdd = true) => {\n const idx = merchantList.findIndex(mr => mr.id === recMrID);\n if (idx < 0) return;\n let tempList = cloneDeep(merchantList);\n isAdd ? tempList[idx].csRoomTotal++ : tempList[idx].csRoomTotal--;\n setMerchantList(tempList);\n };\n const mrListRoomTotalHandel = async list => {\n const { error, data } = await fetchCSRoomList({\n filter: {\n baseFilter: { sortField: 'room_id', sortType: 'DESC' },\n consultingRoom: { status: 'Processing' },\n },\n });\n let temp = cloneDeep(list);\n temp.forEach(ll => {\n ll.csRoomTotal = error\n ? 0\n : data.listConsultingRoom.consultingRooms.filter(\n cc => cc.merchantID === ll.id,\n ).length;\n });\n setMerchantList(temp);\n };\n useEffect(() => {\n merchantTableList.length > 0 && mrListRoomTotalHandel(merchantTableList);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [merchantTableList]);\n\n /**\n * 展開所有房間\n */\n const [isShowAll, setIsShowAll] = useState(false);\n const openAllCSRoom = show => {\n setIsShowAll(show);\n setCurrMerchantID(0);\n show ? fetchCSRoomListHandle(0) : setCsRoomList([]);\n };\n\n /**\n * 當前房間處理\n */\n const [currRoom, setCurrRoom] = useState({});\n const [visible, setVisible] = useState(false);\n const openCurrRoomModal = (isOpen = false, roomData = {}) => {\n setCurrRoom(roomData);\n setVisible(isOpen);\n };\n\n /**\n * 監聽\n */\n const recRoomUpdateHandle = ({ merchantID, roomID }) => {\n if (!isShowAll && !currMerchantID) return;\n if (currRoom.room && currRoom.room.roomID === roomID) {\n openCurrRoomModal(false);\n }\n if (isShowAll) {\n fetchCSRoomListHandle(0);\n return;\n }\n if (currMerchantID === merchantID) fetchCSRoomListHandle(currMerchantID);\n };\n useRecMessage({\n csRoomStatusProcessing: ({ roomUpdate }) => {\n mrRoomTotalHandle(roomUpdate.consultingDetail.merchantID, true);\n recRoomUpdateHandle(roomUpdate.consultingDetail);\n },\n csRoomStatusDeactivated: ({ roomUpdate }) => {\n recRoomUpdateHandle(roomUpdate.consultingDetail);\n },\n });\n\n return (\n <>\n \n \n openAllCSRoom(!isShowAll)}\n block\n mb='2'>\n {isShowAll ? '收合所有咨询房' : '展开所有咨询房'}\n \n openCurrRoomModal(true, data)}\n setCurrRoom={setCurrRoom}\n onChangePanel={onChangeMerchant}\n />\n \n \n openCurrRoomModal(true, data)}\n />\n \n \n setVisible(false)}\n centered\n destroyOnClose\n footer={null}\n bodyStyle={{ padding: '0px', height: '50%' }}\n width='50%'>\n {currRoom.room && (\n
\n \n
\n )}\n \n \n );\n}\n\nexport default MonitorMgm;\n","import React from 'react';\nimport { Navigate } from 'react-router-dom';\nimport { Outlet } from 'react-router-dom';\nimport CenterLayout from '@/components/Layout/CenterLayout';\nimport AdminContainer from '@/components/Layout/Admin/Container';\n\nimport Login from '@/views/Login';\nimport Error403 from '@/views/Error403';\nimport Error404 from '@/views/Error404';\nimport Dashboard from '@/views/Dashboard';\n\nimport ReportCommonUserMgm from '@/views/ReportCommonUserMgm';\nimport ReportConsultingRoomMgm from '@/views/ReportConsultingRoomMgm';\nimport ReportCustomerServiceMgm from '@/views/ReportCustomerServiceMgm';\n\nimport CSRoom from '@/views/CSRoom';\nimport CSRoomDeactivated from '@/views/CSRoomDeactivated';\nimport ContactCustomerService from '@/views/ContactCustomerService';\n\nimport PushMgm from '@/views/PushMgm';\nimport MemberMgm from '@/views/MemberMgm';\nimport MemberTagMgm from '@/views/MemberTagMgm';\n\nimport CSGreeting from '@/views/CSGreeting';\nimport FAQMgm from '@/views/FAQMgm';\nimport CSFormMgm from '@/views/CSFormMgm';\nimport CannedResponseMgm from '@/views/CannedResponseMgm';\nimport CSRoomSettingMgm from '@/views/CSRoomSettingMgm';\nimport OriginMgm from '@/views/OriginMgm';\nimport PlatformSettingMgm from '@/views/PlatformSettingMgm';\nimport HostsDenyMgm from '@/views/HostsDenyMgm';\nimport AdTrackingMgm from '@/views/AdTrackingMgm';\n\nimport EmployeeMgm from '@/views/EmployeeMgm';\nimport EmployeeCSMgm from '@/views/EmployeeCSMgm';\nimport EmployeeRoleMgm from '@/views/EmployeeRoleMgm';\n\nimport MonitorMgm from '@/views/MonitorMgm';\n\nexport const adminLogin = [\n {\n key: 'Main',\n path: '/',\n element: ,\n children: [\n { index: true, element: },\n { path: '*', element: },\n ],\n },\n];\n\nexport const adminContainer = [\n {\n path: '/',\n element: ,\n children: [\n { path: '403', element: },\n\n {\n path: 'Dashboard',\n title: '儀表板',\n element: ,\n },\n\n // 報表系統\n {\n path: 'Report_System',\n title: '报表系统',\n element: ,\n children: [\n {\n path: '',\n element: ,\n },\n {\n path: 'CommonUserReport_Management',\n title: '会员统计数据',\n element: ,\n },\n {\n path: 'ConsultingRoomReport_Management',\n title: '客服统计数据',\n element: ,\n },\n {\n path: 'CustomerServiceReport_Management',\n title: '客服个人数据',\n element: ,\n },\n ],\n },\n\n // 客服系統\n {\n path: 'CustomerService_System',\n title: '客服系統',\n element: ,\n children: [\n {\n path: '',\n element: ,\n },\n {\n path: 'ConsultationChat_Management',\n title: '咨询聊天室',\n element: ,\n },\n {\n path: 'MothballConsultationChat',\n title: '历史咨询纪录',\n element: ,\n },\n {\n path: 'ContactCustomerService_Management',\n title: '联系人客服设定',\n element: ,\n },\n ],\n },\n\n // 訊息系統\n {\n path: 'Message_System',\n title: '讯息系统',\n element: ,\n children: [\n {\n path: '',\n element: ,\n },\n {\n path: 'Push_Management',\n title: '推送管理',\n element: ,\n },\n ],\n },\n\n // 會員系統\n {\n path: 'Member_System',\n title: '会员系统',\n element: ,\n children: [\n {\n path: '',\n element: ,\n },\n {\n path: 'Member_Management',\n title: '会员管理',\n element: ,\n },\n {\n path: 'Member_Role_Management',\n title: '標籤管理',\n element: ,\n },\n ],\n },\n\n // 運營系統\n {\n path: 'Operating_System',\n title: '运营系统',\n element: ,\n children: [\n {\n path: '',\n element: ,\n },\n {\n path: 'ConsultingGreeting_Management',\n title: '行銷问候语管理',\n element: ,\n },\n {\n path: 'FAQ_Management',\n title: 'FAQ管理',\n element: ,\n },\n {\n path: 'ConsultingRoomForm_Management',\n title: '询前表单管理',\n element: ,\n },\n {\n path: 'ConsultingRoomClient_Management',\n title: '咨询窗口管理',\n element: ,\n },\n {\n path: 'CannedResponse_Management',\n title: '快捷回复管理',\n element: ,\n },\n {\n path: 'ConsultingRoomOrigin_Management',\n title: '域名设定管理',\n element: ,\n },\n {\n path: 'PlatformSetting_Management',\n title: '后台设定管理',\n element: ,\n },\n {\n path: 'HostsDeny_Management',\n title: '黑名单管理',\n element: ,\n },\n {\n path: 'AdTracking_Management',\n title: '广告代码管理',\n element: ,\n },\n ],\n },\n\n // 員工系統\n {\n path: 'Employee_System',\n title: '员工系统',\n element: ,\n children: [\n {\n path: '',\n element: ,\n },\n {\n path: 'Employee_Management',\n title: '员工管理',\n element: ,\n },\n {\n path: 'CustomerService_Management',\n title: '客服管理',\n element: ,\n },\n {\n path: 'Employee_Role_Management',\n title: '角色管理',\n element: ,\n },\n ],\n },\n\n // 監聽系統\n {\n path: 'Surveillance_System',\n title: '监听系统',\n element: ,\n children: [\n {\n path: '',\n element: ,\n },\n {\n path: 'Surveillance_Management',\n title: '监听管理',\n element: ,\n },\n ],\n },\n\n { path: '*', element: },\n ],\n },\n];\n","import { useCallback, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport { adminContainer, adminLogin } from '@/router/admin';\n\nexport const isDefaultKey = key => ['', '403', '404'].includes(key);\nexport const initRoutes = isLogin => (isLogin ? adminContainer : adminLogin);\nexport const authMenu = adminContainer[0].children;\n\nexport default function useAuthRoutes() {\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const { onErrorMsg } = useAlertMessage();\n const navigate = useNavigate();\n\n /**\n * 預設導到第一個權限頁面\n */\n const toDefaultAuthPage = useCallback(keys => {\n let pathname = '/';\n for (let i = 0; i < authMenu.length; i++) {\n if (!isDefaultKey(authMenu[i].path) && keys.includes(authMenu[i].path)) {\n if (authMenu[i].children) {\n const children = authMenu[i].children.find(c =>\n keys.includes(c.path),\n );\n pathname = children?.path\n ? `/${authMenu[i].path}/${children?.path}`\n : '/';\n break;\n } else {\n pathname = `/${authMenu[i].path}`;\n break;\n }\n }\n }\n return pathname;\n }, []);\n\n const { pathname } = useLocation();\n const routerAuthHandle = useCallback(\n (pathname, authRoutesKey) => {\n if (pathname === '/') {\n navigate(toDefaultAuthPage(authRoutesKey));\n return;\n }\n const pathArr = pathname.split('/');\n pathArr.shift();\n const isAllow = pathArr.every(path =>\n path ? isDefaultKey(path) || authRoutesKey.includes(path) : true,\n );\n if (isAllow) return;\n onErrorMsg('抱歉,找不到此页面');\n },\n [navigate, onErrorMsg, toDefaultAuthPage],\n );\n\n useEffect(() => {\n routerAuthHandle(pathname, authRoutesKey);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname, authRoutesKey]);\n\n return { adminContainer };\n}\n","import React from 'react';\nimport { Spin } from 'antd';\n\nconst DelayedFallback = ({ children }) => {\n return {children};\n};\nexport default DelayedFallback;\n","import { useCallback } from 'react';\nimport { notification } from 'antd';\n\nconst useNotification = () => {\n const handleNotify = useCallback(\n ({ message = '新訊息', description = '', icon = null } = {}) => {\n const settingObj = { message, description, icon };\n notification.destroy();\n notification.open(settingObj);\n },\n [],\n );\n\n const handleNotifyType = useCallback((type = 'warning', content = {}) => {\n // notification.destroy();\n notification[type]({ ...content });\n }, []);\n\n return {\n onNotify: useCallback((...arg) => handleNotify(...arg), [handleNotify]),\n onWarningNotify: useCallback(\n content => handleNotifyType('warning', content),\n [handleNotifyType],\n ),\n onErrorNotify: useCallback(\n content => handleNotifyType('error', content),\n [handleNotifyType],\n ),\n };\n};\n\nexport default useNotification;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useSubscription } from '@apollo/client';\nimport { MessageOutlined, InfoCircleOutlined } from '@ant-design/icons';\nimport moment from 'dayjs';\nimport { wsStatusHandle } from '@/plugin/ws';\nimport { Typography, Divider } from 'antd';\nimport { setRecMsg, setWsStatusInfo } from '@/store/subscribe';\nimport { useQueryApi, apiType } from '@/hook/useApi';\nimport useAuthRoutes from '@/hook/useAuthRoutes';\nimport useMenuList from '@/hook/useMenuList';\nimport useRedPoint from '@/hook/useRedPoint';\nimport useNotification from '@/hook/useNotification';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport useBeep from '@/hook/useBeep';\nimport useMe from '@/hook/useMe';\nimport useCrypto from '@/hook/useCrypto';\nimport useRecMessage from '@/hook/useRecMessage';\nimport {\n getDeviceId,\n getToken,\n ReceiveMsgContentType,\n RoomStatusKeys,\n AccountTypeKeys,\n} from '@/utils';\n\nconst {\n theme: { primary },\n} = require('@/plugin/theme');\n\nlet timeoutSecID = null;\nlet carouselPlayInterID = null;\nlet hasPlayTimeoutID = null;\n\nexport default function GlobalAdmin({ children, setRoute }) {\n const { meInfo, loginInfo } = useSelector(({ auth, global }) => ({\n ...auth,\n ...global,\n }));\n const { currentInRoomID } = useSelector(({ room }) => room);\n const dispatch = useDispatch();\n const { initRedPointNotify } = useRedPoint();\n const { onNotify, onWarningNotify } = useNotification();\n\n const { fetchMenuHandle } = useMenuList();\n const { fetchMeHandler, isMonitorType } = useMe();\n\n /**\n * ws 狀態\n */\n const { wsStatusNotify } = useAlertMessage();\n const { wsStatusInfo } = useSelector(({ subscribe }) => subscribe);\n useEffect(() => {\n wsStatusNotify(wsStatusInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [wsStatusInfo]);\n\n /**\n * 音效處理\n */\n const {\n beepEnabled,\n beepAudioSrc,\n fetchBeepFile,\n fetchBeepEnabled,\n playPromise,\n } = useBeep();\n const [beep, setBeep] = useState(null);\n const lazyPlay = () => {\n if (hasPlayTimeoutID) return;\n playPromise(beep);\n hasPlayTimeoutID = setInterval(function () {\n clearInterval(hasPlayTimeoutID);\n hasPlayTimeoutID = null;\n }, 3000);\n };\n useEffect(() => {\n if (beepAudioSrc) {\n setBeep(new Audio(beepAudioSrc));\n if (timeoutSecID || carouselPlayInterID) {\n clearTimeoutInterval();\n setUnReadRoom([]);\n }\n }\n }, [beepAudioSrc]);\n\n /**\n * 未讀房間處理 (有未讀房就會啟動計時輪播音效\n */\n const [unReadRoom, setUnReadRoom] = useState([]);\n\n // 新增未讀房間\n const addUnReadRoom = recMsg => {\n const { roomID, contentType } = recMsg;\n const carouselType = [\n ReceiveMsgContentType['Text'],\n ReceiveMsgContentType['File'],\n ReceiveMsgContentType['Voice'],\n ];\n if (!carouselType.includes(contentType)) return;\n // 排除當前&已存在的\n if (currentInRoomID !== roomID && !unReadRoom.includes(roomID))\n setUnReadRoom(pre => [...pre, roomID]);\n };\n\n // 移除未讀房間 (進入未讀房)\n const removeUnReadRoom = (roomID = 0) => {\n if (!unReadRoom.includes(roomID)) return;\n setUnReadRoom(pre => pre.filter(p => p !== roomID));\n };\n\n useEffect(() => {\n currentInRoomID && removeUnReadRoom(currentInRoomID);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentInRoomID]);\n\n /**\n * 未讀 計時輪播音效處理\n */\n // 輪播處理\n const carouselPlayHandle = (sec = 3500) => {\n carouselPlayInterID = setInterval(() => {\n playPromise(beep);\n }, sec);\n };\n // 計時 30 秒後執行輪播\n const countSec = (sec = 30000) => {\n timeoutSecID = window.setTimeout(() => {\n carouselPlayHandle();\n }, sec);\n };\n // 清除計時器\n const clearTimeoutInterval = () => {\n window.clearTimeout(timeoutSecID);\n window.clearInterval(carouselPlayInterID);\n timeoutSecID = null;\n carouselPlayInterID = null;\n };\n // 新增 || 清除計時器\n useEffect(() => {\n if (unReadRoom.length && !timeoutSecID && !carouselPlayInterID) countSec();\n if (!unReadRoom.length && (timeoutSecID || carouselPlayInterID)) {\n clearTimeoutInterval();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [unReadRoom]);\n\n /**\n * ws 連線\n */\n const [skip, setSkip] = useState(true);\n const { data: receiveData } = useSubscription(apiType.RECEIVE_MSG, {\n skip,\n variables: { userAuth: { token: getToken(), deviceUID: getDeviceId() } },\n });\n useEffect(() => {\n if (!receiveData?.receiveMessage) return;\n const { receiveMessage } = receiveData;\n // console.log('receiveMessage', receiveMessage);\n dispatch(setRecMsg(receiveMessage));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [receiveData]);\n\n /**\n * ws 訊息處理\n */\n const { fetchData: fetchUserData } = useQueryApi(apiType.GET_USER);\n const fetchUserDataHandle = async id => {\n const { data, error } = await fetchUserData({\n filter: { user: { id }, spinachUserIDs: [], tagIDs: [], roleIDs: [] },\n });\n return error ? {} : data.getUser;\n };\n const userInfoRender = ({ username, userID, roomID }) => {\n return (\n <>\n \n {username}(#{userID})\n \n \n 房間ID{roomID}\n \n );\n };\n const { decryptStrHandle } = useCrypto(loginInfo.token);\n const recMsgCommonType = async recMsg => {\n if (isMonitorType) return; // 監察員不處理 (不跳 notify, 不放提示音)\n const {\n from: { userID },\n text,\n roomID,\n contentType,\n } = recMsg;\n\n if (userID === meInfo.id) return;\n const { username, accountType } = await fetchUserDataHandle(userID);\n let showName =\n !username && accountType === AccountTypeKeys['Tourist']\n ? '遊客'\n : username;\n\n const handleTypeKeys = {\n [ReceiveMsgContentType['Text']]: {\n icon: ,\n message: userInfoRender({ username: showName, userID, roomID }),\n description: (\n \n {text?.isEncrypt ? decryptStrHandle(text?.text) : text?.text}\n \n ),\n },\n [ReceiveMsgContentType['Voice']]: {\n icon: ,\n message: userInfoRender({ username: showName, userID, roomID }),\n description: {'传送音讯'},\n },\n [ReceiveMsgContentType['File']]: {\n icon: ,\n message: userInfoRender({ username: showName, userID, roomID }),\n description: {'传送图档'},\n },\n [ReceiveMsgContentType['Invite']]: {\n icon: ,\n message: '收到邀请',\n description: userInfoRender({ username: showName, userID, roomID }),\n },\n [ReceiveMsgContentType['Join']]: {\n icon: ,\n message: (\n <>\n \n {showName}(#{userID}) 加入房間(#{roomID})\n \n \n ),\n },\n };\n if (!handleTypeKeys[contentType]) {\n console.log('no mapping msg ', recMsg);\n return;\n }\n if (beepEnabled) {\n addUnReadRoom(recMsg);\n lazyPlay(); // 音效\n }\n onNotify({ ...handleTypeKeys[contentType] });\n };\n const recRoomUpdateMsg = async recMsg => {\n const {\n from: { userID },\n roomUpdate: { roomID, consultingDetail },\n } = recMsg;\n if (userID === meInfo.id) return;\n\n // 諮詢單處理\n if (consultingDetail) {\n const { status, ownerUserID, deactivatedUserID } = consultingDetail;\n if (status === RoomStatusKeys['Processing']) return;\n\n // 新的咨询单\n if (status === RoomStatusKeys['Active']) {\n onNotify({\n icon: ,\n message: '有新的咨询单',\n description: userInfoRender({\n username: '游客',\n userID: ownerUserID,\n roomID,\n }),\n });\n }\n\n // 封存諮詢單\n if (status === RoomStatusKeys['Deactivated']) {\n removeUnReadRoom(roomID);\n const { username } = await fetchUserDataHandle(deactivatedUserID);\n onNotify({\n icon: ,\n message: (\n <>\n \n {username}(#{deactivatedUserID}) 封存咨询单(#{roomID})\n \n \n ),\n description: '可至「历史咨询纪录」查看',\n });\n }\n\n initRedPointNotify();\n }\n };\n const recBizSysMsg = ({ businessSystemNotification }) => {\n onNotify({\n icon: ,\n message: '业务系统通知',\n description: businessSystemNotification?.message || '',\n });\n };\n\n useRecMessage({\n msgCommonType: recMsgCommonType,\n roomUpdate: recRoomUpdateMsg,\n bizSystem: recBizSysMsg,\n });\n\n /**\n * 允許登入時間提示處理\n */\n const allowLoginNotifyHandle = useCallback(\n ({ allowLoginEndAt = 0 }) => {\n if (!allowLoginEndAt) return;\n const allowMoment = moment.unix(allowLoginEndAt);\n const todayMoment = moment();\n const overDay = Math.ceil(allowMoment.diff(todayMoment, 'days', true));\n if (overDay > 10) return;\n let description =\n overDay === 1 ? (\n \n 授权时间最后1日,请尽速联系窗口\n \n ) : (\n `授权时间剩下 ${overDay} 天,请尽速联系窗口`\n );\n onWarningNotify({ message: `时间快到啰!!`, description });\n },\n [onWarningNotify],\n );\n useEffect(() => {\n if (meInfo.setting) allowLoginNotifyHandle(meInfo.setting);\n }, [meInfo, allowLoginNotifyHandle]);\n\n /**\n * 權限頁面處理;\n */\n useAuthRoutes();\n\n /**\n * init\n */\n const wsStatusCallBack = ({ status, data }) => {\n dispatch(setWsStatusInfo({ status, data }));\n };\n useEffect(() => {\n // 必要\n fetchMenuHandle();\n fetchMeHandler();\n\n // ws\n setSkip(false);\n wsStatusHandle(wsStatusCallBack);\n\n // 其他\n initRedPointNotify();\n fetchBeepFile();\n fetchBeepEnabled();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return <>{children};\n}\n","import React, { useState, useCallback } from 'react';\nimport { MenuOutlined } from '@ant-design/icons';\nimport { Drawer, List, Typography, Space } from 'antd';\nimport { Box, Button } from '@WRAP_COMP';\nimport useRecMessage from '@HOOK/useRecMessage';\nimport { formatDateTime, setStorage, getStorage } from '@UTILS';\nconst getStorageHandle = () => getStorage('businessSystemMsgLog') || [];\n\nfunction ReceiveMsgLogDrawer() {\n const [visible, setVisible] = useState(false);\n const [dataSource, setDataSource] = useState(() => getStorageHandle());\n const showDrawer = () => setVisible(true);\n const onClose = () => setVisible(false);\n\n const bizSystemHandle = useCallback(\n ({ businessSystemNotification }) => {\n let source = [...dataSource];\n if (source.length === 20) source.pop();\n source = [businessSystemNotification, ...source];\n setDataSource(source);\n try {\n setStorage('businessSystemMsgLog', source);\n } catch (error) {\n console.log('bizSystemHandle error', error);\n }\n },\n [dataSource],\n );\n\n useRecMessage({\n bizSystem: useCallback(arg => bizSystemHandle(arg), [bizSystemHandle]),\n });\n\n return (\n <>\n \n }\n />\n \n \n (\n \n \n {item.message}\n \n {formatDateTime(item.createdAt)}\n \n \n \n )}\n />\n \n \n );\n}\n\nexport default ReceiveMsgLogDrawer;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Alert } from 'antd';\n\nconst WsStatusNotify = ({ collapsed }) => {\n /**\n * ws 狀態顯示\n */\n const { wsStatusInfo, recMsg } = useSelector(({ subscribe }) => subscribe);\n\n const [currWsStatus, setCurrWsStatus] = useState({});\n const wsStatusShowInfo = {\n onError: () => ({\n type: 'error',\n message: 'socket 錯誤',\n }),\n onClose: ({ code, reason }) => ({\n type: 'warning',\n message: `socket 關閉 (${code}, ${reason})`,\n }),\n onConnecting: () => ({\n type: 'success',\n message: 'socket 连线中',\n }),\n // onConnected & Hi\n onConnected: () => ({\n type: 'success',\n message: 'socket 已连线',\n }),\n onReconnecting: () => ({\n type: 'warning',\n message: 'socket 重新連连线中',\n }),\n onReconnected: () => ({\n type: 'success',\n message: 'socket 重新连上线',\n }),\n onDisconnected: () => ({\n type: 'warning',\n message: 'socket 已断开连线',\n }),\n onElse: status => ({\n type: 'warning',\n message: `socket ${status}`,\n }),\n };\n\n const alertConfig = ({ status, data }) => {\n return wsStatusShowInfo[status]\n ? wsStatusShowInfo[status](data)\n : wsStatusShowInfo['onElse'](status);\n };\n\n useEffect(() => {\n setCurrWsStatus(wsStatusInfo);\n }, [wsStatusInfo]);\n\n useEffect(() => {\n // 顯示 Hi 代表已連線\n if (recMsg && recMsg.contentType === 'Hi') {\n setCurrWsStatus({ status: 'onConnected' });\n }\n }, [recMsg]);\n\n return (\n \n );\n};\n\nexport default WsStatusNotify;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Link, useLocation } from 'react-router-dom';\nimport {\n PieChartOutlined,\n MessageOutlined,\n UserOutlined,\n TeamOutlined,\n SettingOutlined,\n MailOutlined,\n LineChartOutlined,\n CustomerServiceOutlined,\n EyeOutlined,\n} from '@ant-design/icons';\nimport { Layout, Menu, Badge } from 'antd';\nimport { Box } from '@WRAP_COMP';\nimport { isDefaultKey, authMenu } from '@/hook/useAuthRoutes';\nimport WsStatusNotify from '@/components/WsStatusNotify';\n\nconst iconRender = {\n Dashboard: ,\n Chatroom_System: ,\n Employee_System: ,\n Member_System: ,\n CustomerService_System: ,\n Operating_System: ,\n Message_System: ,\n Report_System: ,\n Surveillance_System: ,\n};\nconst menuItemRender = ({ path, title }, redPoint = null) => (\n \n {title}\n {redPoint}\n \n);\n\nconst Sidebar = ({ collapsed = false, setCollapsed = () => {} }) => {\n const { redPoint } = useSelector(({ room }) => room);\n const redPointRender = useCallback(\n key =>\n redPoint[key]?.isShow && (\n \n ),\n [redPoint],\n );\n\n const { pathname } = useLocation();\n const [openKeys, setOpenKeys] = useState([]);\n const onOpenChange = items => setOpenKeys(items);\n useEffect(() => {\n // 取得 menu item 父層 並展開\n setOpenKeys([`${pathname.substring(1, pathname.lastIndexOf('/'))}`]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname]);\n\n const { authRoutesKey } = useSelector(({ auth }) => auth);\n const authMenuRender = useCallback(() => {\n return authMenu.map(menu => {\n if (isDefaultKey(menu.path)) return null;\n if (!authRoutesKey.includes(menu.path)) return null;\n return !menu.children ? (\n menuItemRender({ path: menu.path, title: menu.title })\n ) : (\n \n {menu.title}\n {redPointRender(menu.path)}\n \n }\n icon={iconRender[menu.path]}>\n {menu.children.map(sub =>\n sub.path && authRoutesKey.includes(sub.path)\n ? menuItemRender(\n { path: `${menu.path}/${sub.path}`, title: sub.title },\n redPointRender(sub.key),\n )\n : null,\n )}\n \n );\n });\n }, [redPointRender, authRoutesKey]);\n\n return (\n setCollapsed(broken)}\n style={{\n overflow: 'auto',\n height: '100vh',\n position: 'fixed',\n left: 0,\n }}>\n \n \n Bochat Admin\n \n \n {authMenuRender()}\n \n \n \n \n \n \n );\n};\n\nexport default Sidebar;\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Box } from '@WRAP_COMP';\nimport {\n MenuFoldOutlined,\n MenuUnfoldOutlined,\n LogoutOutlined,\n UserOutlined,\n} from '@ant-design/icons';\nimport {\n Layout,\n Button,\n Typography,\n Dropdown,\n Menu,\n Space,\n Badge,\n Drawer,\n} from 'antd';\nimport AvatarFetch from '@/components/Avatar/AvatarFetch';\nimport useAlertMessage from '@/hook/useAlertMessage';\nimport { useMutationApi, apiType } from '@/hook/useApi';\nimport useLogin from '@/hook/useLogout';\nimport useMe from '@/hook/useMe';\nimport BasicForm from '@/components/User/BasicForm/Form';\nimport AvatarUpload from '@/components/Avatar/AvatarUpload';\n\nconst { theme } = require('@/plugin/theme');\n\nconst ContainerNavbar = ({ collapsed, onCollapse }) => {\n const { meInfo } = useSelector(({ auth }) => auth);\n const { onSuccessMsg } = useAlertMessage();\n const { fetchLogout } = useLogin();\n const logoutHandle = async () => await fetchLogout();\n\n // 上下線\n const [isStealth, setIsStealth] = useState('Yes');\n useEffect(() => {\n meInfo?.isStealth && setIsStealth(meInfo.isStealth);\n }, [meInfo]);\n\n const { fetchMeHandler } = useMe();\n const [updateUserSetting, { loading }] = useMutationApi(\n apiType.UPDATE_USER_SETTING,\n {\n onCompleted: ({ updateUserSetting }) => {\n setIsStealth(updateUserSetting.isStealth);\n fetchMeHandler();\n },\n },\n );\n const onlineHandle = () => {\n if (loading) return;\n updateUserSetting({\n filter: { userSetting: { userID: meInfo.id } },\n in: { isStealth: isStealth === 'Yes' ? 'No' : 'Yes' },\n });\n };\n\n // 編輯個人資訊\n const [profiledVisible, setProfiledVisible] = useState(false);\n const profiledVisibleHandel = (v = true) => {\n setProfiledVisible(v);\n };\n const [file, setFile] = useState(null);\n const [updateUser, { loading: updateLoading }] = useMutationApi(\n apiType.UPDATE_USER,\n );\n const updateUserHandle = async fields => {\n let formFields = { ...fields };\n if (file) formFields.avatarContent = file;\n const [err] = await updateUser({\n filter: { user: { id: meInfo.id } },\n in: { ...formFields },\n });\n if (err) return;\n fetchMeHandler();\n onSuccessMsg('update');\n };\n\n const dotColor = isStealth =>\n isStealth === 'Yes' ? theme.warning : theme.success;\n\n const menu = (\n \n \n \n {isStealth === 'Yes' ? (\n \n ) : (\n \n )}\n \n \n \n \n \n \n 个人资讯\n \n \n \n \n \n 退出登入\n \n \n \n );\n\n return (\n <>\n \n \n \n ) : (\n \n )\n }\n onClick={() => onCollapse(!collapsed)}\n />\n \n \n \n \n \n \n \n {meInfo.username}\n \n \n \n \n \n \n profiledVisibleHandel(false)}>\n setFile(file)}\n isEdit={true}\n />\n \n \n \n );\n};\n\nexport default ContainerNavbar;\n","import React, { useState } from 'react';\nimport { Layout, Spin } from 'antd';\nimport ReceiveMsgLogDrawer from '@/components/Drawer/ReceiveMsgLogDrawer';\nimport Sidebar from './Sidebar';\nimport Navbar from './Navbar';\nexport default function Admin({ children, loading }) {\n // 控制 sideBar 收起\n const [collapsed, setCollapsed] = useState(false);\n const onCollapse = c => setCollapsed(c);\n\n return (\n \n \n \n \n \n \n \n {children}\n \n BoChat-admin ©2021 Created by Miyo\n \n \n \n \n \n );\n}\n","import { Suspense } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useRoutes } from 'react-router-dom';\nimport { initRoutes } from '@/hook/useAuthRoutes';\nimport DelayedFallback from '@/components/DelayedFallback';\nimport GlobalAdmin from '@/views/GlobalAdmin';\nimport AdminLayout from '@/components/Layout/Admin';\n\nconst AdminApp = () => {\n const { isLogin, loading } = useSelector(({ global }) => global);\n const routing = useRoutes(initRoutes(isLogin));\n if (!isLogin) return <>{routing};\n return (\n \n \n }>{routing}\n \n \n );\n};\n\nexport default AdminApp;\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React from 'react';\nimport { render } from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport { Provider as ReduxProvider } from 'react-redux';\nimport { CusApolloProvider } from './plugin/apollo';\nimport { CusThemeProvider } from './plugin/styled';\nimport { initSentry } from './plugin/sentry';\nimport store from './store';\nimport App from '@APP_NAME';\nimport './globel.css';\n\ninitSentry();\nfunction Root() {\n return (\n \n \n \n \n \n \n \n \n \n );\n}\nrender(, document.getElementById('root'));\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\n// reportWebVitals();\n","// 收集所有\r\n\r\nconst currFolderFiles = require.context('./', false, /\\.js$/);\r\n\r\n// 取得目錄下所有檔案名稱,並過濾不需要的檔案\r\nconst getModuleFiles = currFolderFiles.keys().filter((item) => {\r\n // 不需要的檔案寫進來\r\n const excludeFiles = ['./index.js'];\r\n\r\n return !excludeFiles.includes(item);\r\n});\r\n\r\nconst APIs = (function outputAPI() {\r\n // 將需要的檔案export default組成物件\r\n let allAPI = {};\r\n getModuleFiles.forEach((path) => {\r\n // 用來集合所有API的物件\r\n const apiFuncs = {};\r\n\r\n // 取得非default export的內容,\r\n const apiNameList = Object.keys(currFolderFiles(path));\r\n apiNameList.forEach((ele) => {\r\n if (ele !== 'default') {\r\n apiFuncs[ele] = currFolderFiles(path)[ele];\r\n }\r\n });\r\n\r\n // 取得非default export的內容\r\n if (currFolderFiles(path).default) {\r\n const defaultAPIName = path.replace(/((.\\/)|(.js))/g, '');\r\n apiFuncs[defaultAPIName] = currFolderFiles(path).default;\r\n }\r\n\r\n allAPI = {\r\n ...allAPI,\r\n ...apiFuncs\r\n };\r\n });\r\n\r\n return allAPI;\r\n})();\r\n\r\nexport const defaultOptions = {\r\n isShowGeneralError: true, // api error 是否出現攔截器的錯誤視窗\r\n /**\r\n * api如果有錯, 會呼叫getError function讓組件處理錯誤\r\n * @param {String} message 錯誤碼\r\n * @param {Function} originHandler api攔截器原來的錯誤處理, 當遇到不需要特別處理的錯誤碼時, 可以呼叫它來執行原來的錯誤處理\r\n */\r\n getError: () => {}\r\n};\r\n\r\nexport default APIs;\r\n","/**\n * 菜單單\n */\n\nimport { gql } from '@apollo/client';\n\nexport const COMMENT_MENU = gql`\n fragment menuFields on Menu {\n name\n key\n # superKey\n # category\n # router\n # publicAPI\n }\n`;\n\nexport const GET_MENU_LIST = gql`\n ${COMMENT_MENU}\n query listMenu {\n listMenu {\n ...menuFields\n next {\n ...menuFields\n next {\n ...menuFields\n next {\n ...menuFields\n }\n }\n }\n }\n }\n`;\n","export default __webpack_public_path__ + \"static/media/cs-avatar.a6d4e81b.jpg\";","/**\n * format unix timestamp\n */\nimport moment from 'dayjs';\nvar utc = require('dayjs/plugin/utc');\nmoment.extend(utc);\n\n//日期格式\nexport const dateFormat = { YMD: 'YYYY-MM-DD' };\nexport const timeFormat = { hm: 'HH:mm', hms: 'HH:mm:ss' };\n\n// unix 轉 format\nexport const formatDate = s => moment.unix(s).format(dateFormat.YMD);\nexport const formatTime = s => moment.unix(s).format(timeFormat.hm);\nexport const formatDateTime = s =>\n moment.unix(s).format(`${dateFormat.YMD} ${timeFormat.hms}`);\n\nexport const getNow = () => moment().unix();\nexport const getToday = () => moment.unix().startOf('days').subtract(1, 'day');\nexport const formatMatchesTime = s => moment.unix(s).format('MM-DD HH:mm:ss');\n\nexport const formatDateStr = (dataStr, format = 'YYYY-MM-DD') => {\n return moment(dataStr).format(format);\n};\n\n// time to unix\nexport const toUnix = dateTime => moment(dateTime).unix();\n\n// unix to moment\nexport const toMoment = unix => moment.unix(unix);\n\n// format searchDate\nexport const formatSearchDate = (dateArr = []) => {\n if (dateArr.length) {\n return [\n moment(dateArr[0]).startOf('day').unix(),\n moment(dateArr[1]).endOf('day').unix(),\n ];\n }\n};\n\n// format searchDateTime\nexport const formatSearchDateTime = (dateArr = []) => {\n if (dateArr.length) {\n return [moment(dateArr[0]).unix(), moment(dateArr[1]).unix()];\n }\n};\n\n// ----------- ----------- ----------- -----------\n\n//時間的按鈕 0當日、1最近一週、2最近一個月、3最近三個月\nexport const setDateRanges = (val, isAdd = false) => {\n const subtractRange = {\n 0: {\n start: moment().startOf('day'),\n end: moment().endOf('day'),\n },\n 1: {\n start: moment().subtract(6, 'day').startOf('day'),\n end: moment().endOf('day'),\n },\n 2: {\n start: moment().subtract(1, 'month').startOf('day'),\n end: moment().endOf('day'),\n },\n 3: {\n start: moment().subtract(3, 'month').startOf('day'),\n end: moment().endOf('day'),\n },\n 4: {\n start: moment().subtract(2, 'day').startOf('day'),\n end: moment().endOf('day'),\n },\n };\n const addRange = {\n 0: {\n start: moment().startOf('day'),\n end: moment().endOf('day'),\n },\n 1: {\n start: moment().startOf('day'),\n end: moment().add(6, 'day').endOf('day'),\n },\n 2: {\n start: moment().startOf('day'),\n end: moment().add(1, 'month').endOf('day'),\n },\n 3: {\n start: moment().startOf('day'),\n end: moment().add(3, 'month').endOf('day'),\n },\n };\n if (isAdd) return addRange[val] || addRange[0];\n return subtractRange[val] || subtractRange[0];\n};\n\nexport const datePickerRanges = (isAdd = false) => {\n return {\n 今天: [setDateRanges(0, isAdd).start, setDateRanges(0, isAdd).end],\n 最近一週: [setDateRanges(1, isAdd).start, setDateRanges(1, isAdd).end],\n 最近一個月: [setDateRanges(2, isAdd).start, setDateRanges(2, isAdd).end],\n 最近三個月: [setDateRanges(3, isAdd).start, setDateRanges(3, isAdd).end],\n };\n};\n\n// 秒數換 hh:mm:ss\n// export const secondsToHms = s => s;\nexport const secondsToHms = s => moment.utc(s * 1000).format('HH:mm:ss');\n\n// 比較\nexport const compareRangeDateStrSize = (d1Str, d2Str) => {\n const date1 = moment(d1Str);\n const date2 = moment(d2Str);\n\n if (date1.isBefore(date2)) {\n console.log('date1 在 date2 之前');\n return true;\n } else if (date1.isSame(date2)) {\n console.log('date1 和 date2 相同');\n return true;\n } else {\n console.log('date1 在 date2 之後');\n return false;\n }\n};\n\nexport const labelRenderer = (type, data) => {\n switch (type) {\n case 'year':\n return data + '年';\n case 'month':\n return data + '月';\n case 'day':\n return data + '日';\n case 'hour':\n return data + '时';\n case 'minute':\n return data + '分';\n case 'second':\n return data + '秒';\n default:\n return data;\n }\n};\n","import { Base64 as base64 } from 'js-base64';\n\n//加密規則\nconst encode = value => {\n try {\n return base64.encode(encodeURIComponent(JSON.stringify(value)));\n } catch (error) {\n console.log('encode error', error, value);\n return '';\n }\n};\n\n//解密規則\n\nexport const decode = value => {\n try {\n return value ? decodeURIComponent(base64.decode(value)) : '';\n } catch (error) {\n console.log('decode error', error, value);\n return '';\n }\n};\n\nexport const decodeToJson = value => {\n try {\n if (typeof value === 'undefined') return '';\n return value ? JSON.parse(decodeURIComponent(base64.decode(value))) : '';\n } catch (error) {\n console.log('decodeToJson error', error, value);\n return '';\n }\n};\n\nconst storageList = {\n loginInfo: 'loginInfo', // {Object}\n meInfo: 'meInfo', // {Object}\n authRoutesInfo: 'authRoutesInfo', // [array]\n errorInfo: 'errorInfo', // {Object}\n clientUserInfo: 'clientUserInfo',\n businessSystemMsgLog: 'businessSystemMsgLog',\n authRoutesKey: 'authRoutesKey',\n};\n\nexport const isStorageAccessAllow = () => {\n try {\n if ('localStorage' in window && window['localStorage'] !== null) {\n return true;\n } else {\n console.log('getStorage error');\n return false;\n }\n } catch (e) {\n console.log('getStorage error', e);\n return false;\n }\n};\n\n/**\n * 設置 Storage\n */\nexport const setStorage = (key = '', value = '') => {\n if (isStorageAccessAllow()) {\n if (key && storageList[key]) {\n localStorage && localStorage.setItem(storageList[key], encode(value));\n } else {\n console.error('儲存 localstorage 的格式錯誤,請確認有設定相關的數值');\n }\n }\n};\n\n/**\n * 取得 Storage\n */\nexport const getStorage = key => {\n if (isStorageAccessAllow()) {\n let value = localStorage ? localStorage.getItem(storageList[key]) : '';\n return value ? decodeToJson(value) : '';\n }\n return '';\n};\n\nexport const asyncLocalStorage = {\n setItem: async (key, value) => {\n await null;\n if (isStorageAccessAllow()) return localStorage.setItem(key, encode(value));\n return '';\n },\n getItem: async key => {\n await null;\n if (isStorageAccessAllow()) {\n const value = decodeToJson(localStorage.getItem(key));\n return value;\n }\n return '';\n },\n removeItem: async key => {\n await null;\n if (isStorageAccessAllow()) localStorage.removeItem(key);\n },\n};\n\n/**\n * 取得 token\n */\nexport const getToken = (showBearer = false, key = 'loginInfo') => {\n const token = getStorage(key)?.token || '';\n return token && showBearer ? `Bearer ${token}` : token;\n};\n\n/**\n * 取得 device id\n */\nexport const getDeviceId = (key = 'loginInfo') => {\n return getStorage(key)?.deviceUID || '';\n};\n\n/**\n * 刪除 Storage\n */\nexport const removeStorage = key => {\n if (key && storageList[key]) {\n localStorage.removeItem(key);\n } else {\n console.error('欲刪除的 localstorage 格式有誤,請確認key值');\n }\n};\n\n/**\n * 刪除全部 Storage\n */\nexport const removeAllStorage = () => {\n let list = Object.keys(storageList);\n list.forEach(i => {\n localStorage.removeItem(i);\n });\n};\n","import {\n AndroidFilled,\n AppleFilled,\n WindowsOutlined,\n NumberOutlined,\n MobileFilled,\n} from '@ant-design/icons';\n\nimport alipayUrl from '@/assets/alipay.svg';\nimport wxUrl from '@/assets/wxUrl.svg';\nimport bankUrl from '@/assets/bank.png';\nimport ecnyUrl from '@/assets/ecnyUrl.svg';\n\nconst { theme } = require('@/plugin/theme');\n\nexport const EnableKey = { Unknown: 'Unknown', No: 'No', Yes: 'Yes' };\n\nexport const EnableDisplay = {\n Unknown: { text: '不明', searchText: '全部狀態', color: '' },\n No: { text: '停用', searchText: '停用状态', color: theme['gray-2'] },\n Yes: { text: '啟用', searchText: '启用状态', color: theme['primary'] },\n};\n\n// ------- User ---------------------------------------------\n/**\n * 帐号類型\n */\nexport const AccountTypeKeys = {\n Unknown: 'Unknown',\n Manager: 'Manager', // 管理員\n CustomerService: 'CustomerService', // 客服\n CommonUser: 'CommonUser', // 一般會員\n Tourist: 'Tourist', // 遊客\n System: 'System', // 系統\n Monitor: 'Monitor', // 監察人\n};\n\nexport const AccountTypeDisplay = {\n Unknown: { text: '不明', searchText: '全部类型', color: theme['gray-0'] },\n Manager: { text: '管理員', searchText: '管理員', color: 'blue' },\n CommonUser: { text: '會員', searchText: '會員', color: 'green' },\n CustomerService: { text: '客服', searchText: '客服', color: 'purple' },\n Tourist: { text: '遊客', searchText: '遊客', color: 'orange' },\n System: { text: '系統', searchText: '系統', color: theme['danger'] },\n Monitor: { text: '监察员', searchText: '监察员', color: theme['danger'] },\n};\n\n/**\n * User status key\n */\nexport const UserStatusKey = {\n Unknown: 'Unknown',\n Active: 'Active',\n Lock: 'Lock',\n Delete: 'Delete',\n};\n\nexport const UserStatusDisplay = {\n Unknown: { text: '不明', searchText: '全部狀態', color: '' },\n Active: { text: '啟用', searchText: '启用状态', color: theme.success },\n Lock: { text: '停用', searchText: '停用狀態', color: theme.warning },\n Delete: { text: '刪除', searchText: '刪除狀態', color: theme['gray-2'] },\n};\n\n// ------- Room ---------------------------------------------\n\nexport const RoomTypeKey = {\n Unknown: 'Unknown',\n Direct: 'Direct', // 私聊\n Group: 'Group', // 群組\n Consulting: 'Consulting', // 諮詢\n Invite: 'Invite', // 邀請\n};\n\n// 房間型態\nexport const RoomTypeDisplay = {\n Unknown: { text: '不明', searchText: '全部型態', color: '' },\n Direct: { text: '私聊', searchText: '私聊型態', color: 'purple' },\n Group: { text: '群組', searchText: '群組型態', color: 'blue' },\n Consulting: { text: '諮詢', searchText: '諮詢型態', color: 'warning' },\n};\n\n// 加入的層級\nexport const InviteLevel = {\n Unknown: { key: 'Unknown', label: '不明' },\n Member: { key: 'Member', label: '群员' },\n Admin: { key: 'Admin', label: '管理员' },\n Owner: { key: 'Owner', label: '拥有者' },\n};\n\n// 陌生人的等級\nexport const StrangerLevel = {\n Unknown: { key: 'Unknown', label: '不明' },\n All: { key: 'All', label: '所有人' },\n Password: { key: 'Password', label: '需要密码' },\n Close: { key: 'Close', label: '关闭' },\n};\n\n// Room Status\nexport const RoomStatusKeys = {\n Unknown: 'Unknown',\n Active: 'Active', // 開啟\n Deactivated: 'Deactivated', // 封存\n Processing: 'Processing', // 處理中\n};\n\nexport const RoomStatusDisplay = {\n Unknown: { text: '不明' },\n Active: { text: '開啟' },\n Deactivated: { text: '封存' },\n Processing: { text: '處理中' },\n};\n\nexport const CSRoomTypeKey = {\n Consulting: 'Consulting',\n Deposit: 'Deposit', // 充值\n};\n\n// ------- message ---------------------------------------------\n// post message\nexport const MsgContentTypeKeys = {\n Unknown: 'Unknown',\n Text: 'Text', // 文字\n File: 'File', // 檔案\n Voice: 'Voice', // 錄音\n Join: 'Join', // 加入\n Leave: 'Leave', // 離開\n Invite: 'Invite', // 邀請\n LastRead: 'LastRead', // 已讀\n System: 'System', // 系統訊息\n Bubble: 'Bubble', // 客制組合訊息\n};\n\n// post message\nexport const ReceiveMsgContentType = {\n Unknown: 'Unknown',\n Hi: 'Hi', // 確認連線\n Text: 'Text', // 文字\n File: 'File', // 檔案\n Voice: 'Voice', // 錄音\n Invite: 'Invite', // 邀請\n Join: 'Join', // 加入\n Leave: 'Leave', // 離開\n LastRead: 'LastRead', // 最後讀取訊息\n Consulting: 'Consulting', // 有新的諮詢聊天室\n Geo: 'Geo', // 位置資訊\n Typing: 'Typing', // 正在輸入\n RoomUpdate: 'RoomUpdate', // 房間 detail 更新\n UserOnlineInfo: 'UserOnlineInfo', // 使用者上下線\n BusinessSystemNotification: 'BusinessSystemNotification', // 業務系統通知\n System: 'System', // 系統訊息\n Bubble: 'Bubble', // 客制組合訊息\n};\n\nexport const MsgStatusKeys = {\n Unknown: 'Unknown',\n Initial: 'Initial', // 初始狀態\n Retract: 'Retract', // 收回\n Edit: 'Edit', // 修改\n};\n\nexport const MsgSystemType = {\n PayList: 'PayList',\n UserOrder: 'UserOrder',\n Text: 'Text',\n};\n\nexport const MsgFromTags = {\n AutoReplay: 'AutoReplay',\n};\n\n// 前端自定義訊息\nexport const CusMsgContentType = 'CusMsgContentType';\n\n// ------- order ---------------------------------------------\n\n// 支付方式\nexport const PayType = {\n wx: { key: 'wx', label: '微信' },\n alipay: { key: 'alipay', label: '支付宝', describe: '' },\n bank: { key: 'bank', label: '银行卡' },\n ecny: { key: 'ecny', label: '数字人民币' },\n sub_alipay: { key: 'sub_alipay', label: '支付宝' },\n // union: { key: 'union', label: '云闪付' },\n // qq: { key: 'qq', label: 'QQ支付' },\n // jd: { key: 'jd', label: '京东支付' },\n // crypto: { key: 'crypto', label: '加密货币' },\n // xlpay: { key: 'xlpay', label: '闲聊支付' },\n};\n\nexport const PayTypeImg = {\n [PayType['wx'].key]: wxUrl, // 微信\n [PayType['alipay'].key]: alipayUrl, // 支付寶\n [PayType['bank'].key]: bankUrl, // 銀行卡\n [PayType['ecny'].key]: ecnyUrl, // 數字人民幣\n};\n\n// 支付方法\nexport const PayMethod = {\n redirect: 'redirect',\n qrcode: 'qrcode',\n bank: 'bank',\n sub_alipay: 'sub_alipay',\n};\n\nexport const OrderStatusKeys = {\n Unknown: { key: 'Unknown', label: '全部', color: '' },\n // New: { key: 'New', label: '等待支付', color: 'orange' },\n Pending: { key: 'Pending', label: '等待支付', color: '#ed9c23' },\n Waiting: { key: 'Waiting', label: '等待到账', color: '#e43737' },\n Canceled: { key: 'Canceled', label: '已取消', color: '#7f7f7f' },\n Succeeded: { key: 'Succeeded', label: '成功', color: '#37cb69' },\n Failed: { key: 'Failed', label: '拒绝', color: '#7f7f7f' },\n Denied: { key: 'Denied', label: '审核拒绝', color: '#7f7f7f' },\n Expired: { key: 'Expired', label: '超时', color: '#7837cb' },\n};\n\nexport const ConsultingOrderTypeKeys = {\n Consulting: 'Consulting',\n Urging: 'Urging',\n};\n\n// ------- PushNotifications ---------------------------------------------\n\nexport const PushStatusKeys = {\n PENDING: { text: '待發送', variant: 'outline-warning' },\n SUCCESS: { text: '已發送', variant: 'outline-success' },\n FAIL: { text: '失敗', variant: 'outline-danger' },\n CANCELED: { text: '已撤回', variant: 'outline-secondary' },\n};\n\nexport const PushTargetKey = {\n ALL: { text: '所有用戶' },\n SINGLE_USER: { text: '單個用戶' },\n};\n\nexport const IsScheduledKeys = {\n Yes: { text: '定時推送', color: theme.primary },\n No: { text: '立即推送', color: theme.success },\n};\n\n// ------- PushNotifications ---------------------------------------------\n\nexport const MoreInformationTypeKey = {\n Unknown: 'Unknown',\n HTML: 'HTML',\n URL: 'URL',\n};\n\n// ------- deviceOS ---------------------------------------------\n\nexport const deviceOSKeys = {\n Unknown: {\n text: '不明',\n icon: style => ,\n },\n IOS: {\n text: 'IOS',\n icon: style => ,\n },\n Mac: {\n text: 'Mac',\n icon: style => ,\n },\n Android: {\n text: 'Android',\n icon: style => ,\n },\n Windows: {\n text: 'Windows',\n icon: style => ,\n },\n Other: {\n text: '其他',\n icon: style => ,\n },\n};\n\n// ------- CSForm ---------------------------------------------\n\nexport const CSFormFieldType = {\n Input: 'Input',\n Radio: 'Radio',\n Checkbox: 'Checkbox',\n};\n\nexport const CSFormFieldVerifyType = {\n Text: 'Text', // 不驗證\n Email: 'Email',\n Age: 'Age',\n QQ: 'QQ',\n WeChat: 'WeChat',\n};\n\n// ------- Merchant ---------------------------------------------\n\nexport const MerchantTypeKeys = {\n Unknown: 'Unknown',\n Bochat: 'Bochat',\n Spinach: 'Spinach',\n};\n\n// ------- PlatFormSettingKey ---------------------------------------------\n\nexport const PlatFormSettingKey = {\n BEEP: 'bochat.platform.consulting.beep',\n AUTO_DISTRIBUTE: 'bochat.platform.consulting.auto_distribute',\n AUTO_DEACTIVATE_MIN: 'bochat.platform.consulting.deactivate',\n AUTO_DEACTIVATE_ENABLED: 'bochat.platform.consulting.deactivate.enabled',\n AUTO_CREATED_CS: 'bochat.platform.consulting.client.enter_directly',\n QUEUE_MAX_COUNT: 'bochat.platform.consulting.max_processing_count',\n DIALOGUE_TIMEOUT_SEC: 'bochat.platform.consulting.time_out.sec',\n DIALOGUE_TIMEOUT_SEC_ENABLED: 'bochat.platform.consulting.time_out.enabled',\n NO_RESPONSE_TIP: 'bochat.platform.consulting.no_response.tip',\n NO_RESPONSE_SEC: 'bochat.platform.consulting.no_response.sec',\n NO_RESPONSE_ENABLED: 'bochat.platform.consulting.no_response.enabled',\n DEACTIVATE_TIP_MANUAL: 'bochat.platform.consulting.deactivate.tip.manual',\n DEACTIVATE_TIP_AUTO: 'bochat.platform.consulting.deactivate.tip.auto',\n DEACTIVATE_TIP_ENABLED: 'bochat.platform.consulting.deactivate.tip.enabled',\n REDIRECT_VERIFY_ENABLED:\n 'bochat.platform.consulting.client.redirect_verify.enabled',\n};\n\n// ------- Other ---------------------------------------------\n\n/**\n * pagination\n */\nexport const Pagination = {\n page: 1,\n perPage: 10,\n total: 0,\n};\n\n/**\n * 瀏覽器\n */\nexport const BrowserType = {\n IE: 'MSIE',\n Edge: 'Edg',\n Firefox: 'Firefox',\n Sogou: 'MetaSr',\n Opera: 'OPR',\n Chrome: 'Chrome',\n Safari: 'Safari',\n Netscape: 'Netscape',\n UC: 'UCBrowser',\n};\n\nexport const Currency = {\n RMB: '¥',\n};\n\n/**\n * 追蹤碼類型\n */\nexport const AdTrackingType = {\n CNZZ: 'CNZZ',\n Google: 'Google',\n Baidu: 'Baidu',\n};\n","// |狀態碼|系統定義|說明|\n// |-|-|-|\n// |400|400000|輸入可能有誤, 或請求資源失敗|\n// |400|400001|輸入有誤, 或所需要的欄位為空|\n// |400|400002|資源已被綁定|\n\n// |401|401001|需要有身份驗證|\n// |401|401002|token 不存在, 重新登錄|\n// |401|401003|帐号或密碼錯誤|\n// |401|401004|系統更新, token 失效, 請重新登錄|\n// |401|401004|帐号已被停用|\n// |401|401005|IP非法|\n\n// |403|403000|權限不足|\n// |403|403001|不允許操作|\n\n// |404|404001|資源不存在|\n// |405|405001|該請求方法不存在|\n// |408|408001|請求超時|\n// |409|409000|資源衝突|\n// |409|409001|該資源已存在|\n// |500|500000|伺服器錯誤|\n// |500|500001|伺服器內部錯誤|\n\nexport const errorCodes = {\n 400000: '输入可能有误, 或请求资源失败',\n 400001: '栏位参数错误', // \"GRAPHQL_VALIDATION_FAILED\"\n 400002: '资源已被绑定',\n 400003: '使用者已注册',\n 400106: '会员不在线上,无法联系',\n\n 401001: '需要身份验证',\n 401002: '身份不存在',\n 401003: '帐号或密碼錯誤',\n 401004: '权限过期,请重新登录',\n 401005: 'IP非法',\n\n 403000: '权限不足',\n 403001: '不允许操作',\n 403002: '帐号已被停用',\n\n 404001: '资源不存在',\n 405001: '请求方法不存在',\n 408001: '请求超时',\n\n 409000: '资源冲突',\n 409001: '该资源已存在',\n 500000: '伺服器错误',\n 500001: '500 伺服器内部错误',\n};\n\n/**\n * 取得錯誤代碼的i18n key\n * @param {} code error code\n */\nexport const getErrorMessage = code => {\n return errorCodes[code] || code;\n};\n\nexport const isLogoutErrorCode = code => {\n return ['401001', '401002', '401004'].indexOf(code) > -1;\n};\n\nexport const isSendSentryErrorCode = code => {\n return ['500000', '500001'].indexOf(code) > -1;\n};\n","/**\n * filter-加上千分位符號\n * @param {Any}\n * @return {String} 加上千分號的字串數字 || '-'\n * */\nexport const commaFormat = value => {\n let info = '0';\n value &&\n (info = value\n .toString()\n .replace(\n /^(-?\\d+?)((?:\\d{3})+)(?=\\.\\d+$|$)/,\n (all, pre, groupOf3Digital) => {\n return pre + groupOf3Digital.replace(/\\d{3}/g, ',$&');\n },\n ));\n return info;\n};\n\n/**\n * __typename in query\n * https://github.com/apollographql/apollo-client/issues/1913#issuecomment-393721604\n */\nexport const omitTypename = (key, value) =>\n key === '__typename' ? undefined : value;\nexport const omitTypenameHandle = payload =>\n JSON.parse(JSON.stringify(payload), omitTypename);\n\n/**\n * 深層複製資料\n * 如果不是 null、undefined、空字串、數字0就使用 JSON方法過濾, 否則直接返回 info 預設值(空字串)\n */\nexport const cloneDeep = object => {\n let info = '';\n if (!!object) info = JSON.parse(JSON.stringify(object));\n return info;\n};\nexport const isFunction = v => typeof v === 'function';\n\n/**\n * 回傳一級域名\n * @param {string} url\n * @return {string} 一級域名\n */\nexport const filterSubDomain = url => {\n if (url.match(/\\.\\w*\\b/g).length > 1) {\n let arr = url.split('.');\n return arr.slice(arr.length - 2).join('.');\n }\n return url;\n};\n\n/**\n * 字串 濾掉 html tag\n */\nexport const stripHtmlTag = str => str.replace(/(<([^>]+)>)/gi, '').trim();\n\n/**\n * lazyRetry avoid chunk load error\n * to update the code to the latest version\n * will handle refreshing the browser in the event of an error\n */\nexport const lazyRetry = (componentImport, componentName) => {\n return new Promise((resolve, reject) => {\n // check if the window has already been refreshed\n const hasRefreshed = JSON.parse(\n window.sessionStorage.getItem(`retry-${componentName}-refreshed`) ||\n 'false',\n );\n componentImport()\n .then(component => {\n window.sessionStorage.setItem(\n `retry-${componentName}-refreshed`,\n 'false',\n ); // success so reset the refresh\n resolve(component);\n })\n .catch(error => {\n if (!hasRefreshed) {\n // not been refreshed yet\n window.sessionStorage.setItem(\n `retry-${componentName}-refreshed`,\n 'true',\n ); // we are now going to refresh\n return window.location.reload(); // refresh the page\n }\n reject(error);\n });\n });\n};\n","import { decode } from './storage';\n\nconst handleDecode = name => (URL_PARAMS[name] ? decode(URL_PARAMS[name]) : '');\nconst URL_SEARCH = window.location.search;\nconst URL_SEARCH_PARAMS = new URLSearchParams(URL_SEARCH);\nconst URL_PARAMS = Object.fromEntries(URL_SEARCH_PARAMS.entries());\nconst autoContact = URL_PARAMS.contact || '';\nconst roomType = URL_PARAMS.roomType\n ? URL_PARAMS.roomType.replace(/^./, URL_PARAMS.roomType[0].toUpperCase())\n : '';\nconst username = handleDecode('userName') || handleDecode('username');\nconst realName = handleDecode('realName'); // 真實姓名\nconst reqUrl = handleDecode('reqUrl');\nconst backUrl = handleDecode('backUrl'); // 返回鍵要返回的路由\nconst depositToken = URL_PARAMS.depositToken || '';\nconst depositAmount = URL_PARAMS.depositAmount || 0; // 充值金額\nconst payType = URL_PARAMS.payType || ''; // 支付類型\nconst jobID = URL_PARAMS.jobID || ''; // 返利類型 非必填\nconst sourceDomain = reqUrl ? reqUrl.substring(reqUrl.indexOf('://') + 3) : ''; // 來源域名\n\nexport const csRoomUrlParams = {\n ...URL_PARAMS,\n roomType,\n username,\n realName,\n reqUrl,\n backUrl,\n depositToken,\n depositAmount,\n payType,\n jobID,\n sourceDomain,\n autoContact,\n};\n","import { useCallback } from 'react';\nimport { message as antdMessage } from 'antd';\nimport { getErrorMessage } from '@/utils';\nconst useAlertMessage = () => {\n /**\n * 提示 message\n */\n const onSuccessMsg = useCallback((content = null, config = {}) => {\n content = content ? content : '操作成功';\n antdMessage.success({ content, ...config });\n }, []);\n const onWarningMsg = useCallback((content = null, config = {}) => {\n content = content ? content : '警告';\n antdMessage.warning({ content, ...config });\n }, []);\n const onErrorMsg = useCallback((content = null, config = {}) => {\n let showContent = '';\n if (typeof content === 'string') {\n if (content === '401004') antdMessage.destroy();\n showContent = getErrorMessage(content);\n } else if (content?.message) {\n showContent = content.message;\n } else {\n showContent = content || '錯誤';\n }\n antdMessage.error({ content: showContent, ...config });\n }, []);\n\n /**\n * ws 狀態提示\n */\n const WS_ALERT_MSG_KEY = 'wsAlertMsg';\n const wsStatusNotify = useCallback(({ status } = {}) => {\n const success = () =>\n antdMessage.success({ content: '连线稳定', key: WS_ALERT_MSG_KEY });\n const loading = content =>\n antdMessage.loading({ content, duration: 0, key: WS_ALERT_MSG_KEY });\n\n const type = {\n onDisconnected: () => loading('网路不稳'),\n onReconnecting: () => loading('网路连线中'),\n onConnected: success,\n onReconnected: success,\n };\n type[status] && type[status]();\n }, []);\n\n return {\n onSuccessMsg,\n onWarningMsg,\n onErrorMsg,\n wsStatusNotify,\n };\n};\n\nexport default useAlertMessage;\n","import { useCallback } from 'react';\nimport { Button, message } from 'antd';\n\nexport const copyText = async val => {\n await navigator.clipboard.writeText(val);\n message.success('复制成功');\n};\n\nexport const CopyBtn = ({ value, style = {} }) => (\n copyText(value)}\n size='small'\n style={{\n borderColor: '#1591dc',\n borderRadius: '4px',\n color: '#1591dc',\n padding: '0 5px',\n height: '22px',\n fontSize: '12px',\n ...style,\n }}>\n 复制\n \n);\n\nfunction useCopy() {\n const createImage = useCallback(options => {\n options = options || {};\n const img = document.createElement('img');\n if (options.src) {\n img.src = options.src;\n }\n return img;\n }, []);\n\n const copyMediaToClipboard = useCallback(async pngBlob => {\n try {\n await navigator.clipboard.write([\n // eslint-disable-next-line no-undef\n new ClipboardItem({\n [pngBlob.type]: pngBlob,\n }),\n ]);\n console.log('Image copied');\n } catch (error) {\n console.error(error);\n }\n }, []);\n\n const convertToPng = useCallback(\n imgBlob => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const imageEl = createImage({ src: window.URL.createObjectURL(imgBlob) });\n imageEl.onload = e => {\n canvas.width = e.target.width;\n canvas.height = e.target.height;\n ctx.drawImage(e.target, 0, 0, e.target.width, e.target.height);\n canvas.toBlob(copyMediaToClipboard, 'image/png', 1);\n };\n },\n [copyMediaToClipboard, createImage],\n );\n\n const copyImg = useCallback(\n async src => {\n const img = await fetch(src);\n const imgBlob = await img.blob();\n const extension = src.split('.').pop();\n const supportedToBeConverted = ['jpeg', 'jpg', 'gif'];\n if (supportedToBeConverted.indexOf(extension.toLowerCase())) {\n return convertToPng(imgBlob);\n } else if (extension.toLowerCase() === 'png') {\n return copyMediaToClipboard(imgBlob);\n }\n console.error('Format unsupported');\n return;\n },\n [convertToPng, copyMediaToClipboard],\n );\n\n return { copyImg, copyText };\n}\n\nexport default useCopy;\n","import { gql } from '@apollo/client';\n\n/**\n * ROOM 相關\n */\n// CS_ROOM ----------------------------------\nexport const CS_DETAIL_FIELD = gql`\n fragment consultingDetailField on RoomConsultingDetail {\n roomID\n deactivatedAt\n deactivatedUserID\n ipAddress\n country\n administrativeArea\n sourceDomain\n accessDomain\n questionID\n deviceOS\n ownerUserID\n status\n isProactive\n createdAt\n question\n type\n userOrder {\n orderNo\n amount\n payType\n currency\n status\n createdAt\n }\n }\n`;\n\nexport const CS_DETAIL_FIELD_LESS = gql`\n fragment consultingDetailLessField on RoomConsultingDetail {\n roomID\n ipAddress\n country\n administrativeArea\n sourceDomain\n accessDomain\n ownerUserID\n status\n isProactive\n createdAt\n type\n }\n`;\n\nexport const CS_SETTING_FIELD = gql`\n fragment CSSetting on ConsultingRoomClientSetting {\n id\n consultingRoomOriginID\n backgroundColor\n backgroundImageURL\n header {\n title\n backgroundImageURL\n backgroundColor\n logoURL\n avatarURL\n isEnabled\n contentLogoEnabled\n contentLogoURL\n contentLogoPosition\n }\n content {\n backgroundColor\n backgroundImageURL\n boxBackgroundColor\n boxBackgroundImageURL\n }\n banner {\n imageURL\n linkUrl\n isEnabled\n }\n beepURL\n beepEnabled\n queueEnabled\n enterDirectlyEnabled\n redirectVerifyEnabled\n createdAt\n }\n`;\nexport const CS_GREETING_FIELD = gql`\n fragment CSGreeting on ConsultingGreeting {\n id\n consultingRoomOriginID\n title\n content\n source\n afterSendSec\n isEnabled\n }\n`;\nexport const CS_FORM_FIELD = gql`\n fragment CSForm on ConsultingRoomForm {\n id\n consultingRoomOriginID\n title\n isEnabled\n isVerificationCode\n formData {\n id\n type\n label\n content {\n value\n items {\n label\n value\n }\n }\n rule {\n require\n verifyType\n }\n }\n }\n`;\nexport const CS_ORIGIN_FIELD = gql`\n fragment CSRoomOrigin on ConsultingRoomOrigin {\n id\n origin\n spinachPlatformKey\n merchantID\n customerServices {\n id\n username\n }\n remark\n createdAt\n }\n`;\n\n// USER_ROOMS\nexport const COMMENT_USER_ROOMS = gql`\n fragment userRoomsFields on UserRoom {\n id\n userID\n isOperator\n deletedAt # 用來判斷是否已離開房間 重新加入會 = 0\n lastReadMessageID\n isPinned\n user {\n ...userRoomFields\n }\n }\n fragment userRoomFields on User {\n id\n username\n aliasName\n avatarURL\n accountType\n status\n email\n area\n notes\n isOnline\n }\n`;\n\n/**\n * MSG 相關\n */\n// SYSTEM\nexport const MSG_SYSTEM = gql`\n fragment MsgSystemField on MsgSystem {\n type\n content {\n ... on MsgSystemOrder {\n payType\n payMethod\n orderNo\n orderID\n orderStatus\n orderAmount\n remark\n createdAt\n updatedAt\n expiredAt\n bank {\n bankName\n branchName\n bankCode\n accountName\n cardNo\n }\n qrcode {\n url\n qUrl\n account\n accountName\n }\n redirect {\n url\n }\n }\n ... on MsgSystemPayList {\n amount\n payList {\n payeeID\n alias\n payType\n }\n }\n ... on MsgText {\n text\n isEncrypt\n }\n }\n }\n`;\n\n// BUBBLE\nexport const MSG_BUBBLE = gql`\n fragment MsgBubbleField on MsgBubble {\n type\n header {\n ...MsgBoxDetail\n ...MsgBoxRecursive\n }\n hero {\n ...MsgImageDetail\n }\n body {\n ...MsgBoxDetail\n ...MsgBoxRecursive\n }\n footer {\n ...MsgBoxDetail\n ...MsgBoxRecursive\n }\n }\n fragment MsgTextDeteil on MsgText {\n align\n color\n copied\n flex\n isEncrypt\n label\n margin\n size\n text\n type\n weight\n }\n\n fragment MsgActionDetail on MsgAction {\n type\n data\n text\n uri\n }\n\n fragment MsgImageDetail on MsgImage {\n action {\n ...MsgActionDetail\n }\n size\n type\n }\n\n fragment MsgButtonDetail on MsgButton {\n action {\n ...MsgActionDetail\n }\n color\n height\n width\n icon {\n ...MsgIconDetail\n }\n iconAlign\n style\n type\n }\n\n fragment MsgIconDetail on MsgIcon {\n type\n url\n size\n style\n }\n\n fragment MsgSeparatorDetail on MsgSeparator {\n type\n size\n color\n direction\n }\n\n fragment MsgBoxDetail on MsgBox {\n layout\n margin\n separator\n separatorColor\n spacing\n type\n padding\n justifyContent\n alignItems\n }\n\n fragment MsgBoxRecursive on MsgBox {\n contents {\n ... on MsgText {\n ...MsgTextDeteil\n }\n ... on MsgImage {\n ...MsgImageDetail\n }\n ... on MsgButton {\n ...MsgButtonDetail\n }\n ... on MsgIcon {\n ...MsgIconDetail\n }\n ... on MsgSeparator {\n ...MsgSeparatorDetail\n }\n ... on MsgBox {\n ...MsgBoxDetail\n contents {\n ... on MsgText {\n ...MsgTextDeteil\n }\n ... on MsgImage {\n ...MsgImageDetail\n }\n ... on MsgButton {\n ...MsgButtonDetail\n }\n ... on MsgIcon {\n ...MsgIconDetail\n }\n ... on MsgSeparator {\n ...MsgSeparatorDetail\n }\n ... on MsgBox {\n ...MsgBoxDetail\n contents {\n ... on MsgText {\n ...MsgTextDeteil\n }\n ... on MsgImage {\n ...MsgImageDetail\n }\n ... on MsgButton {\n ...MsgButtonDetail\n }\n ... on MsgIcon {\n ...MsgIconDetail\n }\n ... on MsgSeparator {\n ...MsgSeparatorDetail\n }\n ... on MsgBox {\n ...MsgBoxDetail\n contents {\n ... on MsgText {\n ...MsgTextDeteil\n }\n ... on MsgImage {\n ...MsgImageDetail\n }\n ... on MsgButton {\n ...MsgButtonDetail\n }\n ... on MsgIcon {\n ...MsgIconDetail\n }\n ... on MsgSeparator {\n ...MsgSeparatorDetail\n }\n }\n }\n }\n }\n }\n }\n }\n }\n`;\n\n/**\n * 其他\n */\nexport const SPINACH_FIELD = gql`\n fragment spinachPlatform on SpinachPlatform {\n id\n key\n host\n secretKey\n remark\n createdAt\n }\n`;\n","export default __webpack_public_path__ + \"static/media/alipay.fab23a78.svg\";","export default __webpack_public_path__ + \"static/media/wxUrl.272082da.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABoCAYAAAAdHLWhAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1YWFkOWIyNS00YTBjLWUzNGEtYTVmOS03MzNhZTYzYmY2MDUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkYwRDVDNDEzQzc1MTFFQzk2NDhBRTAyQUY2N0JEOEUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkYwRDVDNDAzQzc1MTFFQzk2NDhBRTAyQUY2N0JEOEUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Nzk0ZDIyNzAtYTMwOC1hOTQ1LWI5MmYtZmNjYTg0N2M2N2ZkIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6M2RmOGIzOTUtMGRmYy0xMWVjLWE4Y2Ut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\"","export default __webpack_public_path__ + \"static/media/ecnyUrl.a2467f2f.svg\";","import { gql } from '@apollo/client';\nimport { MSG_SYSTEM, MSG_BUBBLE } from './Fragment';\n\nexport const MSG_REQUIRED = gql`\n fragment messageFields on Message {\n id\n roomID\n contentType\n timestamp\n status\n from {\n userID\n accountType\n username\n aliasName\n tags\n }\n }\n`;\n\nexport const LIST_MSG = gql`\n ${MSG_REQUIRED}\n ${MSG_SYSTEM}\n ${MSG_BUBBLE}\n query listMessage(\n $filter: MessageFilterInput!\n $pagination: PaginationInput\n ) {\n listMessage(filter: $filter, pagination: $pagination) {\n messages {\n ...messageFields\n text {\n text\n isEncrypt\n }\n file {\n text\n fileURL\n type\n }\n join {\n userID\n }\n leave {\n userID\n }\n system {\n ...MsgSystemField\n }\n bubble {\n ...MsgBubbleField\n }\n }\n meta {\n total\n }\n }\n }\n`;\n\n// 傳送訊息 (私聊的第一個步驟 帶 userID 之後帶 roomID 即可)\nexport const POST_MSG = gql`\n ${MSG_REQUIRED}\n ${MSG_SYSTEM}\n ${MSG_BUBBLE}\n mutation postMessage($in: MessageInput!) {\n postMessage(in: $in) {\n ...messageFields\n text {\n text\n isEncrypt\n }\n file {\n text\n fileURL\n type\n }\n join {\n userID\n }\n leave {\n userID\n }\n system {\n ...MsgSystemField\n }\n renew\n bubble {\n ...MsgBubbleField\n }\n }\n }\n`;\n\nexport const POST_TEMP_MSG = gql`\n ${MSG_REQUIRED}\n ${MSG_SYSTEM}\n ${MSG_BUBBLE}\n mutation postTemplateMessage($in: MsgTemplateInput!) {\n postTemplateMessage(in: $in) {\n ...messageFields\n text {\n text\n isEncrypt\n }\n file {\n text\n fileURL\n type\n }\n join {\n userID\n }\n leave {\n userID\n }\n system {\n ...MsgSystemField\n }\n renew\n bubble {\n ...MsgBubbleField\n }\n }\n }\n`;\n\nexport const RECEIVE_MSG = gql`\n ${MSG_REQUIRED}\n ${MSG_SYSTEM}\n ${MSG_BUBBLE}\n subscription receiveMessage($userAuth: UserAuth!) {\n receiveMessage(userAuth: $userAuth) {\n ...messageFields\n consulting {\n roomID\n status\n }\n text {\n text\n isEncrypt\n }\n file {\n text\n fileURL\n type\n }\n voice {\n duration\n size\n mimeType\n URL\n }\n join {\n userID\n }\n invite {\n id\n inviteeUserID\n inviterUserID\n roomID\n inviteeUserIDs\n }\n leave {\n userID\n }\n lastReads {\n userID\n messageID\n roomID\n }\n roomUpdate {\n roomID\n roomUID\n roomType\n consultingDetail {\n roomID\n merchantID\n deactivatedAt\n deactivatedUserID\n ipAddress\n isProactive\n country\n administrativeArea\n sourceDomain\n accessDomain\n question\n deviceOS\n ownerUserID\n status\n createdAt\n isWaitFirstResponse\n isTimeoutResponse\n }\n }\n typing {\n userID\n roomID\n username\n content\n }\n userOnlineInfo {\n userID\n isOnline\n }\n businessSystemNotification {\n createdAt\n message\n }\n system {\n ...MsgSystemField\n }\n bubble {\n ...MsgBubbleField\n }\n }\n }\n`;\n\n// 打字\nexport const POST_TYPING = gql`\n ${MSG_REQUIRED}\n mutation postTyping($in: MsgTypingInput!) {\n postTyping(in: $in) {\n ...messageFields\n }\n }\n`;\n\n// 更新訊息 (撤回訊息, 取消撤回訊息)\nexport const UPDATE_MSG = gql`\n ${MSG_REQUIRED}\n mutation updateMessage($messageID: String!, $in: MessageUpdateInput!) {\n updateMessage(messageID: $messageID, in: $in) {\n ...messageFields\n }\n }\n`;\n","import React from 'react';\nimport { Box } from '@WRAP_COMP';\n\nfunction FrontDrop({ children, opacity = 80, ...props }) {\n return (\n \n {children}\n \n );\n}\n\nexport default FrontDrop;\n","export default __webpack_public_path__ + \"static/media/alipay-process.4df41401.jpg\";","export default __webpack_public_path__ + \"static/media/wx-process.fcaa5e55.jpg\";"],"sourceRoot":""}