App.js 2.58 KB
import React, { useEffect, useState } from 'react'
import RouterView from './router'
import ErrorBoundaries from 'xbd-error-boundaries'
import zhCN from 'antd/lib/locale/zh_CN'
import moment from 'moment'
import store from './store'
import http from './libs/fetch'
import { APP } from './config'
import { Provider } from 'react-redux'
import { ConfigProvider, Modal, notification } from 'antd'
import { getbaseConfig } from '@/api/config'
import 'moment/locale/zh-cn'
moment.locale('zh')



function App() {
    const [appCode, setAppCode] = useState('')

    useEffect(() => {
        // 成功回调
        const onSucess = (res) => {
            store.dispatch.baseConfig.setState(res)
            http.setHeader('operationChannel', res.operationChannel)
            setAppCode(res.app_code)

            window.localStorage.setItem('baseConfig', JSON.stringify(res))
            document.title = res.platformName
            let link = document.createElement('link')
            link.type = 'image/x-icon'
            link.rel = 'shortcut icon'
            link.href = res.logoIcon
            document.getElementsByTagName('head')[0].appendChild(link)
        }
        // 失败回调
        const onError = (res) => {
            if (res === undefined)  {
                Modal.error({
                    title: '启动错误',
                    content: '获取关键数据失败,请联系客服'
                })
            }
            else {
                console.error(res)
                const CacheConfig = window.localStorage.getItem('baseConfig')
                if (!CacheConfig)
                    onError()
                else {
                    notification.open({
                        message: '获取最新系统配置失败',
                        description: '网络情况较差!加载最新系统核心配置失败,可能部分系统功能不能正确启用。请刷新页面或联系客服',
                        duration: 0
                    })
                    onSucess(JSON.parse(CacheConfig))
                }
            }
        }

        getbaseConfig()
            .then(res => !res.id === undefined ? onError() : onSucess(res))
            .catch(onError)
    }, [])

    return (
        <ErrorBoundaries app_code={appCode} enable={process.env.NODE_ENV !== 'development'} url={`${APP.GET_PALTFORM_CONFIG_URL}api/log`} >
            <Provider store={store}>
                <ConfigProvider locale={zhCN}>
                    <RouterView></RouterView>
                </ConfigProvider>
            </Provider>
        </ErrorBoundaries>
    )
}

export default App