{"version":3,"sources":["routes/history.js","store/modules/user/reducer.js","store/modules/home/states.js","store/modules/home/reducer.js","store/modules/home/constants.js","store/modules/user/constants.js","routes/index.js","App.js","style/reset.js","style/global.js","index.js","store/index.js","utils/secret.js","store/modules/user/states.js","store/modules/user/actions.js","store/modules/user/util.js","utils/http.js","utils/api.js","style/theme.js","utils/date.js"],"names":["history","createBrowserHistory","basename","fnHistoryPush","push","path","params","from","hash","location","pathname","search","state","initialState","action","type","constants","loading","data","isLogin","iUserId","sUserAccount","sUserName","sPhotoPath","iSupplierId","sJobTitle","sCompanyName","isAdmin","isAllCandidate","isReport","sLastLoginDateTime","contentLoading","contentPaddingBottom","getContentLoading","home","getContentPaddingBottom","LOGIN_REQUEST","LOGIN_SUCCESS","LOGIN_FAIL","LOGIN_LOGOUT","CHANGE_USER_INFO","LoginComponent","lazy","HomeComponent","TestComponent","DesktopComponent","CandidateDetailComponent","CandidateDetail","props","fallback","CandidateListComponent","CaseDetailComponent","CaseListComponent","ReportComponent","Report","ReportKpiComponent","ReportSuccessComponent","SettingComponent","AccountManageComponent","AccountManage","PasswordManageComponent","PersonalInfoComponent","MessageComponent","MessageCaseComponent","MessageRecommendComponent","MessageSystemComponent","exact","render","to","key","component","routes","store","getState","user","App","renderRoutes","ResetStyle","createGlobalStyle","GlobalStyle","theme","colorRed","moment","locale","ReactDOM","zhCN","document","getElementById","console","_log","arrLog","forEach","item","JSON","parse","stringify","log","rootReducer","combineReducers","enhancer","window","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","applyMiddleware","thunk","createStore","CryptoJS","enc","Utf8","iv","fnEncrypt","word","srcs","AES","encrypt","mode","CBC","padding","pad","Pkcs7","ciphertext","toString","toUpperCase","fnDecrypt","encryptedHexStr","Hex","Base64","decrypt","oUserInfo","getUserInfo","localStorage","getItem","login","dispatch","fetchLogin","noToken","then","res","sUserId","sName","sPhoto","sPosition","sSupplierName","getDateTime","dtLastLogin","encrypted","setItem","token","logout","removeItem","updateCurrentUserInfo","sLocalStorage","decryptedStr","error","serverUrl","globalConfig","baseURL","instance","axios","create","checkStatus","response","status","noAlert","message","statusText","Promise","reject","msg","code","checkCode","post","url","others","method","timeout","unlimitedTime","emulateJSON","headers","err","get","interceptors","request","use","config","Authorization","includes","fetchUploadFile","fetchUploadFileToPath","fetchFilePreview","fetchAnalysis","fetchUserList","fetchAddUser","fetchUpdateUser","fetchUpdateUserState","fetchGetUserSelfInfo","fetchUpdateUserSelfInfo","fetchUpdateUserSelfPassword","fetchGetCaseListCount","fetchGetCaseList","fetchGetCaseLog","fetchGetCaseInfo","fetchGetSystemTags","fetchGetCandidateListCount","fetchGetCandidateList","fetchGetPersonInfo","fetchGetPersonInfoNoToken","fetchUpdatePerson","fetchGetPersonProgressCount","fetchGetPersonRecommendLog","fetchGetHomeCaseCount","fetchGetHomeCandidateCount","fetchGetCompanyInfo","fetchGetCaseCandidateCount","fetchCheckRepeat","fetchRecommendPerson","fetchQueryKpiReport","fetchQueryOrderReport","fetchGetCaseMessageCount","fetchQueryCaseMessage","fetchGetCandidateMessageCount","fetchQueryCandidateMessage","globalThemeColor","globalThemeHoverColor","globalBackgroundColor","globalBorderColor","headerHeight","contentWidth","colorDefault","colorProcessing","colorSuccess","colorWarning","colorError","colorDanger","colorGrey","colorPink","colorYellow","colorOrange","colorCyan","colorGreen","colorBlue","colorGeekblue","colorVolcano","colorGold","colorLime","getDate","param","oDate","Date","year","getFullYear","month","getMonth","date","parseInt","showSecond","hour","getHours","minit","getMinutes","second","getSeconds","sDateTime","fnMomentHandle","str","format","arr","split","iYear","iMonth","iDate","sDate","getMomentDate"],"mappings":"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","file":"static/js/main.ae253b6f.chunk.js","sourcesContent":["import { createBrowserHistory } from 'history';\n\nconst history = createBrowserHistory({\n basename: ''\n});\n\n// 改写history.push方法,在state中加入from参数\nconst fnHistoryPush = history.push;\nhistory.push = (path, ...params) => {\n if (typeof path === 'string') {\n fnHistoryPush(path, {\n ...params,\n from: {\n hash: history.location.hash,\n pathname: history.location.pathname,\n search: history.location.search\n }\n });\n } else {\n fnHistoryPush(\n {\n ...path,\n state: {\n ...path.state,\n from: {\n hash: history.location.hash,\n pathname: history.location.pathname,\n search: history.location.search\n }\n }\n },\n ...params\n );\n }\n};\n\nexport default history;\n","import * as constants from './constants';\nimport { initialState } from './states';\n\n/**\n * reducer\n */\nexport default (state = initialState, action) => {\n switch (action.type) {\n case constants.LOGIN_REQUEST:\n return {\n ...state,\n loading: true\n };\n case constants.LOGIN_FAIL:\n return {\n ...state,\n loading: false\n };\n case constants.LOGIN_SUCCESS:\n return {\n ...state,\n ...action.data,\n loading: false,\n isLogin: true\n };\n case constants.LOGIN_LOGOUT:\n return {\n ...state,\n isLogin: false,\n iUserId: 0,\n sUserAccount: '',\n sUserName: '',\n sPhotoPath: '',\n iSupplierId: 0,\n sJobTitle: '',\n sCompanyName: '',\n isAdmin: 0,\n isAllCandidate: 0,\n isReport: 0,\n sLastLoginDateTime: ''\n };\n case constants.CHANGE_USER_INFO:\n return {\n ...state,\n ...action.data\n };\n default:\n break;\n }\n return state;\n};\n","/**\n * 初始状态\n */\nexport const initialState = {\n contentLoading: false,\n contentPaddingBottom: 0\n};\n\n/**\n * get state\n * 用于在组件的mapStateToProps中获取state,所有关于state的处理都放到store中,不在组件中处理\n */\nexport const getContentLoading = state => {\n return state.home.contentLoading;\n};\n\nexport const getContentPaddingBottom = state => {\n return state.home.contentPaddingBottom;\n};\n","import * as constants from './constants';\nimport { initialState } from './states';\n\n/**\n * reducer\n */\nexport default (state = initialState, action) => {\n switch (action.type) {\n case constants.CHANGE_CONTENT_LOADING:\n return {\n ...state,\n contentLoading: action.data\n };\n case constants.CHANGE_CONTENT_PADDINGBOTTOM:\n return {\n ...state,\n contentPaddingBottom: action.data\n };\n default:\n break;\n }\n return state;\n};\n","export const CHANGE_CONTENT_LOADING = 'HOME/CHANGE_CONTENT_LOADING';\nexport const CHANGE_CONTENT_PADDINGBOTTOM = 'HOME/CHANGE_CONTENT_PADDINGBOTTOM';\n","export const LOGIN_REQUEST = 'USER/LOGIN_REQUEST';\nexport const LOGIN_SUCCESS = 'USER/LOGIN_SUCCESS';\nexport const LOGIN_FAIL = 'USER/LOGIN_FAIL';\nexport const LOGIN_LOGOUT = 'USER/LOGIN_LOGOUT';\nexport const CHANGE_USER_INFO = 'USER/CHANGE_USER_INFO';\n","import React, { lazy, Suspense } from 'react';\nimport { Redirect } from 'react-router-dom';\nimport store from '../store';\n\n// 登录\nconst LoginComponent = lazy(() => import('../container/Login'));\n\n/**\n * 登录\n */\nconst Login = (props) => {\n return (\n \n \n \n );\n};\n\n// 主页\nconst HomeComponent = lazy(() => import('../container/Home'));\n\n/**\n * 主页\n */\nconst Home = (props) => {\n return (\n \n \n \n );\n};\n\n// 测试\nconst TestComponent = lazy(() => import('../container/Test'));\n\n/**\n * 测试\n */\nconst Test = (props) => {\n return (\n \n \n \n );\n};\n\n// 桌面\nconst DesktopComponent = lazy(() => import('../container/Desktop'));\n\n/**\n * 桌面\n */\nconst Desktop = (props) => {\n return (\n \n \n \n );\n};\n\n// 候选人详情\nconst CandidateDetailComponent = lazy(() => import('../container/CandidateDetail'));\n\n/**\n * 候选人详情\n */\nconst CandidateDetail = (props) => {\n return (\n \n \n \n );\n};\n\n// 候选人列表\nconst CandidateListComponent = lazy(() => import('../container/CandidateList'));\n\n/**\n * 候选人列表\n */\nconst CandidateList = (props) => {\n return (\n \n \n \n );\n};\n\n// 职位详情\nconst CaseDetailComponent = lazy(() => import('../container/CaseDetail'));\n\n/**\n * 职位详情\n */\nconst CaseDetail = (props) => {\n return (\n \n \n \n );\n};\n\n// 职位列表\nconst CaseListComponent = lazy(() => import('../container/CaseList'));\n\n/**\n * 职位列表\n */\nconst CaseList = (props) => {\n return (\n \n \n \n );\n};\n\n// 报表\nconst ReportComponent = lazy(() => import('../container/Report'));\n\n/**\n * 报表\n */\nconst Report = (props) => {\n return (\n \n \n \n );\n};\n\n// kpi报表\nconst ReportKpiComponent = lazy(() => import('../container/ReportKpi'));\n\n/**\n * kpi报表\n */\nconst ReportKpi = (props) => {\n return (\n \n \n \n );\n};\n\n// 成单报表\nconst ReportSuccessComponent = lazy(() => import('../container/ReportSuccess'));\n\n/**\n * 成单报表\n */\nconst ReportSuccess = (props) => {\n return (\n \n \n \n );\n};\n\n// 设置\nconst SettingComponent = lazy(() => import('../container/Setting'));\n\n/**\n * 设置\n */\nconst Setting = (props) => {\n return (\n \n \n \n );\n};\n\n// 账号管理\nconst AccountManageComponent = lazy(() => import('../container/AccountManage'));\n\n/**\n * 账号管理\n */\nconst AccountManage = (props) => {\n return (\n \n \n \n );\n};\n\n// 密码管理\nconst PasswordManageComponent = lazy(() => import('../container/PasswordManage'));\n\n/**\n * 密码管理\n */\nconst PasswordManage = (props) => {\n return (\n \n \n \n );\n};\n\n// 个人信息\nconst PersonalInfoComponent = lazy(() => import('../container/PersonalInfo'));\n\n/**\n * 个人信息\n */\nconst PersonalInfo = (props) => {\n return (\n \n \n \n );\n};\n\n// 消息\nconst MessageComponent = lazy(() => import('../container/Message'));\n\n/**\n * 消息\n */\nconst Message = (props) => {\n return (\n \n \n \n );\n};\n\n// 职位消息\nconst MessageCaseComponent = lazy(() => import('../container/MessageCase'));\n\n/**\n * 职位消息\n */\nconst MessageCase = (props) => {\n return (\n \n \n \n );\n};\n\n// 推荐消息\nconst MessageRecommendComponent = lazy(() => import('../container/MessageRecommend'));\n\n/**\n * 推荐消息\n */\nconst MessageRecommend = (props) => {\n return (\n \n \n \n );\n};\n\n// 系统消息\nconst MessageSystemComponent = lazy(() => import('../container/MessageSystem'));\n\n/**\n * 系统消息\n */\nconst MessageSystem = (props) => {\n return (\n \n \n \n );\n};\n\nexport default [\n {\n path: '/',\n exact: true,\n render: () => {\n return ;\n }\n },\n {\n key: '登录',\n path: '/login',\n component: Login\n },\n {\n key: '候选人',\n path: '/candidate/:id',\n component: CandidateDetail,\n exact: true\n },\n {\n key: '主页',\n path: '/home',\n component: Home,\n routes: [\n {\n path: '/home',\n exact: true,\n render: () => {\n return ;\n }\n },\n {\n // 桌面\n path: '/home/desktop',\n component: Desktop\n },\n {\n // 候选人详情\n path: '/home/candidate-detail/:id',\n component: CandidateDetail,\n exact: true\n },\n {\n // 候选人列表\n path: '/home/candidate',\n component: CandidateList\n },\n {\n // 职位详情\n path: '/home/case-detail/:id',\n component: CaseDetail,\n exact: true\n },\n {\n // 职位列表\n path: '/home/case',\n component: CaseList\n },\n {\n // 报表\n path: '/home/report',\n render: (props) => {\n const state = store.getState();\n if (state && state.user && state.user.isReport) {\n return ;\n }\n return ;\n },\n routes: [\n {\n path: '/home/report',\n exact: true,\n render: () => {\n return ;\n }\n },\n {\n // kpi报表\n path: '/home/report/kpi',\n component: ReportKpi\n },\n {\n // 成单报表\n path: '/home/report/success',\n component: ReportSuccess\n }\n ]\n },\n {\n // 设置\n path: '/home/setting',\n component: Setting,\n routes: [\n {\n path: '/home/setting',\n exact: true,\n render: () => {\n return ;\n }\n },\n {\n // 个人信息\n path: '/home/setting/personal-info',\n component: PersonalInfo\n },\n {\n // 密码管理\n path: '/home/setting/password-manage',\n component: PasswordManage\n },\n {\n // 账号管理\n path: '/home/setting/account-manage',\n component: AccountManage,\n render: (props) => {\n const state = store.getState();\n if (state && state.user && state.user.isAdmin) {\n return ;\n }\n return ;\n }\n }\n ]\n },\n {\n // 消息\n path: '/home/message',\n component: Message,\n routes: [\n {\n path: '/home/message',\n exact: true,\n render: () => {\n return ;\n }\n },\n {\n // 职位消息\n path: '/home/message/case',\n component: MessageCase\n },\n {\n // 推荐消息\n path: '/home/message/recommend',\n component: MessageRecommend\n },\n {\n // 系统消息\n path: '/home/message/system',\n component: MessageSystem\n }\n ]\n },\n {\n // 测试\n path: '/home/test',\n component: Test\n }\n ]\n }\n];\n","import React from 'react';\nimport { Router } from 'react-router';\nimport { renderRoutes } from 'react-router-config';\nimport routes from './routes';\nimport './App.less';\nimport history from './routes/history';\n\nfunction App(props) {\n return {renderRoutes(routes)};\n}\n\nexport default App;\n","import { createGlobalStyle } from 'styled-components';\n\nexport const ResetStyle = createGlobalStyle`\n html, body, div, span, applet, object, iframe,\n h1, h2, h3, h4, h5, h6, p, blockquote, pre,\n a, abbr, acronym, address, big, cite, code,\n del, dfn, em, img, ins, kbd, q, s, samp,\n small, strike, strong, sub, sup, tt, var,\n b, u, i, center,\n dl, dt, dd, ol, ul, li,\n fieldset, form, label, legend,\n table, caption, tbody, tfoot, thead, tr, th, td,\n article, aside, canvas, details, embed, \n figure, figcaption, footer, header, hgroup, \n menu, nav, output, ruby, section, summary,\n time, mark, audio, video {\n margin: 0;\n padding: 0;\n border: 0;\n /* vertical-align: baseline; */\n }\n\n article, aside, details, figcaption, figure, \n footer, header, hgroup, menu, nav, section {\n display: block\n }\n\n * {\n box-sizing: border-box;\n }\n\n body {\n font-size: 13px;\n color: #353535;\n font-weight: 400;\n font-family: \"Microsoft Yahei\",\"Helvetica Neue\",Helvetica,Arial,sans-serif;\n }\n\n ol, ul {\n list-style: none\n }\n\n blockquote, q {\n quotes: none\n }\n\n q:before,\n q:after,\n blockquote:before,\n blockquote:after {\n content: ””;\n }\n\n table {\n border-spacing: 0;\n border-collapse: collapse;\n }\n\n a{\n color: #1890ff;\n text-decoration: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n -webkit-transition: color .3s;\n transition: color .3s;\n }\n\n ::-webkit-scrollbar {\n width: 8px;\n height: 10px;\n }\n \n ::-webkit-scrollbar-thumb{\n border-radius: 13px;\n background-color: #c2c2c2;\n background-clip: padding-box;\n min-height: 28px;\n }\n\n ::-webkit-scrollbar-track-piece{\n background-color: #eef0f2;\n }\n`;\n","import { createGlobalStyle } from 'styled-components';\nimport theme from './theme';\n\nexport const GlobalStyle = createGlobalStyle`\n .clear:after {\n content: \"\";\n display: block;\n clear: both;\n }\n\n .pointer{\n cursor: pointer;\n user-select: none;\n }\n\n .pointer-select{\n cursor: pointer;\n }\n\n .un-select{\n user-select: none;\n }\n\n .align-center{\n display: inline-flex;\n align-items: center;\n }\n\n .f-s-12{\n font-size: 12px;\n }\n\n .f_s_12{\n font-size: 12px !important;\n }\n\n .f-s-16{\n font-size: 16px;\n }\n\n .f_s_16{\n font-size: 16px !important;\n }\n\n .m-l-10{\n margin-left: 10px;\n }\n\n .m-l-12{\n margin-left: 12px;\n }\n\n .m-l-20{\n margin-left: 20px;\n }\n\n .m-r-5{\n margin-right: 5px;\n }\n\n .m-r-10{\n margin-right: 10px;\n }\n\n .m_r_10{\n margin-right: 10px !important;\n }\n\n .m-r-12{\n margin-right: 12px;\n }\n\n .m-r-15{\n margin-right: 15px;\n }\n\n .m-r-20{\n margin-right: 20px;\n }\n\n .m-r-30 {\n margin-right: 30px;\n }\n\n .m_b_0{\n margin-bottom: 0px !important;\n }\n\n .m-b-5{\n margin-bottom: 5px;\n }\n \n .m-b-8{\n margin-bottom: 8px;\n }\n\n .m-b-10{\n margin-bottom: 10px;\n }\n\n .m_b_10{\n margin-bottom: 10px !important;\n }\n\n .m-b-15{\n margin-bottom: 15px;\n }\n\n .m-b-16{\n margin-bottom: 16px;\n }\n\n .m-b-20{\n margin-bottom: 20px;\n }\n\n .p-t-10{\n padding-top: 10px;\n }\n\n .p-l-10{\n padding-left: 10px;\n }\n\n .p-b-10{\n padding-bottom: 10px;\n }\n\n .text-left{\n text-align: left;\n }\n\n .text-right{\n text-align: right;\n }\n\n .text-center{\n text-align: center;\n }\n\n .float-left{\n float: left;\n }\n\n .float-right{\n float: right;\n }\n\n .color-8{\n color: #888;\n }\n\n .color-9{\n color: #999;\n }\n\n .color-red{\n color: ${theme.colorRed};\n }\n\n .width-70{\n width: 70px;\n }\n\n .width_70{\n width: 70px !important;\n }\n\n .width-80{\n width: 80px;\n }\n\n .width_80{\n width: 80px !important;\n }\n\n .width-100{\n width: 100px;\n }\n\n .width_100{\n width: 100px !important;\n }\n\n .width-full{\n width: 100%;\n }\n\n .width_full{\n width: 100% !important;\n }\n`;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport App from './App';\nimport store from './store';\n\n// 重置样式\nimport { ResetStyle } from './style/reset';\n// 全局样式\nimport { GlobalStyle } from './style/global';\n\n// 国际化配置\nimport { ConfigProvider } from 'antd';\nimport zhCN from 'antd/es/locale/zh_CN';\n\nimport moment from 'moment';\nimport 'moment/locale/zh-cn';\n\nmoment.locale('zh-cn');\n\nReactDOM.render(\n \n \n \n \n \n \n ,\n document.getElementById('root')\n);\n\nconsole._log = (...params) => {\n let arrLog = [];\n params.forEach(item => {\n arrLog.push(JSON.parse(JSON.stringify(item)));\n });\n console.log(...arrLog);\n};\n","import { createStore, applyMiddleware, compose, combineReducers } from 'redux';\nimport thunk from 'redux-thunk';\n\nimport { reducer as user } from './modules/user';\nimport { reducer as home } from './modules/home';\n\n// 合并成根reducer\nconst rootReducer = combineReducers({\n user: user,\n home: home\n});\n\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({})\n : compose;\n\nconst enhancer = composeEnhancers(applyMiddleware(...[thunk]));\nconst store = createStore(rootReducer, enhancer);\n\nexport default store;\n","// 引用AES源码js\nimport CryptoJS from 'crypto-js';\n\n// 秘钥必须为:8/16/32位\n// 十六位十六进制数作为密钥\nconst key = CryptoJS.enc.Utf8.parse('1234123412ABCDEF');\n// 十六位十六进制数作为密钥偏移量\nconst iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412');\n\n// 加密方法\nexport function fnEncrypt(word) {\n let srcs = CryptoJS.enc.Utf8.parse(word);\n let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });\n return encrypted.ciphertext.toString().toUpperCase();\n}\n\n// 解密方法\nexport function fnDecrypt(word) {\n let encryptedHexStr = CryptoJS.enc.Hex.parse(word);\n let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);\n let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });\n let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);\n return decryptedStr.toString();\n}\n","import { getUserInfo } from './util';\n\nconst oUserInfo = getUserInfo();\n\n/**\n * 初始状态\n */\nexport const initialState = {\n loading: false,\n isLogin: !!localStorage.getItem('token') || false,\n iUserId: oUserInfo.iUserId || 0,\n sUserAccount: oUserInfo.sUserAccount || null,\n sUserName: oUserInfo.sUserName || '',\n sPhotoPath: oUserInfo.sPhotoPath || '',\n iSupplierId: oUserInfo.iSupplierId || 0,\n sJobTitle: oUserInfo.sJobTitle || '',\n sCompanyName: oUserInfo.sCompanyName || '',\n isAdmin: oUserInfo.isAdmin || 0,\n isAllCandidate: oUserInfo.isAllCandidate || 0,\n isReport: oUserInfo.isReport || 0,\n sLastLoginDateTime: oUserInfo.sLastLoginDateTime || ''\n};\n","import * as constants from './constants';\nimport { fetchLogin } from '../../../utils/api';\nimport { fnEncrypt } from '../../../utils/secret';\nimport { getDateTime } from '../../../utils/date';\nimport { getUserInfo } from './util';\n\n/**\n * 登录\n */\nexport const login = (params) => {\n return (dispatch, getState) => {\n dispatch({\n type: constants.LOGIN_REQUEST\n });\n fetchLogin({ ...params, noToken: true }).then(\n (res) => {\n // console.log(res);\n // 供应商 ID\n const iSupplierId = res.data.user.iSupplierId || 0;\n // 用户 ID\n const iUserId = res.data.user.iUserId || 0;\n // 用户账号\n const sUserAccount = res.data.user.sUserId || 0;\n // 用户姓名\n const sUserName = res.data.user.sName || '';\n // 用户头像\n const sPhotoPath = res.data.user.sPhoto || '';\n // 用户职位\n const sJobTitle = res.data.user.sPosition || '';\n // 用户公司\n const sCompanyName = res.data.sSupplierName || '';\n // 是否管理员\n const isAdmin = res.data.user.isAdmin || 0;\n // 是否可以查看所有候选人\n const isAllCandidate = res.data.user.isAllCandidate || 0;\n // 是否可以查看报表\n const isReport = res.data.user.isReport || 0;\n // 上次登录时间\n const sLastLoginDateTime = getDateTime(res.data.dtLastLogin) || '';\n\n const oUserInfo = {\n iSupplierId,\n iUserId,\n sUserAccount,\n sUserName,\n sPhotoPath,\n sJobTitle,\n sCompanyName,\n isAdmin,\n isAllCandidate,\n isReport,\n sLastLoginDateTime\n };\n\n const encrypted = fnEncrypt(JSON.stringify(oUserInfo));\n localStorage.setItem('userinfo', encrypted);\n localStorage.setItem('token', res.data.token);\n\n dispatch({\n type: constants.LOGIN_SUCCESS,\n data: oUserInfo\n });\n },\n () => {\n dispatch({\n type: constants.LOGIN_FAIL\n });\n }\n );\n };\n};\n\n/**\n * 退出\n */\nexport const logout = () => {\n return (dispatch, getState) => {\n localStorage.removeItem('token');\n localStorage.removeItem('userinfo');\n\n localStorage.removeItem('locationtags');\n localStorage.removeItem('industrytags');\n localStorage.removeItem('functiontags');\n localStorage.removeItem('jobleveltags');\n localStorage.removeItem('marrytags');\n localStorage.removeItem('degreetags');\n localStorage.removeItem('leavetimetags');\n localStorage.removeItem('userlist');\n\n dispatch({\n type: constants.LOGIN_LOGOUT\n });\n };\n};\n\n/**\n * 修改当前用户信息\n */\nexport const updateCurrentUserInfo = (params) => {\n return (dispatch, getState) => {\n let oUserInfo = getUserInfo();\n oUserInfo = {\n ...oUserInfo,\n ...params\n };\n\n const encrypted = fnEncrypt(JSON.stringify(oUserInfo));\n localStorage.setItem('userinfo', encrypted);\n\n dispatch({\n type: constants.CHANGE_USER_INFO,\n data: oUserInfo\n });\n };\n};\n","import { fnDecrypt } from '../../../utils/secret';\n\n/**\n * 获取 localStorage 中用户信息\n */\nexport function getUserInfo() {\n let oUserInfo = {};\n const sLocalStorage = localStorage.getItem('userinfo');\n if (sLocalStorage) {\n try {\n const decryptedStr = fnDecrypt(sLocalStorage);\n oUserInfo = JSON.parse(decryptedStr);\n } catch (error) {\n oUserInfo = {};\n // 如果解密失败则清除缓存\n localStorage.removeItem('token');\n localStorage.removeItem('userinfo');\n }\n }\n return oUserInfo;\n}\n","import axios from 'axios';\nimport { message } from 'antd';\nimport store from '../store';\nimport { logout } from '../store/modules/user/actions';\n\n// 服务器地址\n// eslint-disable-next-line\nexport const serverUrl = globalConfig.serverUrl;\n\nlet baseURL = '';\nif (process.env.NODE_ENV === 'development') {\n baseURL = '/';\n} else {\n baseURL = `${serverUrl}/`;\n}\n\n// 创建实例\nconst instance = axios.create();\n\n// http request 拦截器,通过这个,我们就可以把Cookie传到后台\ninstance.interceptors.request.use(\n (config) => {\n if (config.params && config.params.noToken) {\n delete config.params.noToken;\n } else if (config.data && config.data.noToken) {\n delete config.data.noToken;\n } else {\n // config.headers.Authorization = 'bearer ' + localStorage.getItem('token');\n config.headers.Authorization = localStorage.getItem('token');\n }\n\n return config;\n },\n (err) => {\n return Promise.reject(err);\n }\n);\n\n/**\n * 服务端返回状态码\n * 200 成功\n * 1001 未知错误\n * 5001 用户名或密码错误\n * 5002 - 5006 Token验证失败\n */\n\n/**\n * http response 拦截器 用户处理用户身份验证失败的情况\n */\ninstance.interceptors.response.use(\n (response) => {\n if ([5002, 5003, 5004, 5005, 5006].includes(response.data.code)) {\n let isLogin = false;\n const state = store.getState();\n if (state && state.user) {\n isLogin = state.user.isLogin;\n }\n\n // 防止登录失效后,因失效请求有多次,弹出多次未登录提示\n if (isLogin) {\n store.dispatch(logout());\n }\n\n return Promise.reject({\n noAlert: !isLogin,\n msg: '登录失效!请重新登录!'\n });\n }\n return response;\n },\n (error) => {\n return Promise.reject(error.response.data);\n }\n);\n\n/**\n * 用于处理 http 状态码,判断请求是否正常\n */\nfunction checkStatus(response) {\n // 如果http状态码正常,则直接返回数据\n if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {\n return checkCode(response.data);\n }\n\n // 异常状态下,把错误信息返回去\n if (!response.noAlert) {\n message.error(response.statusText || '网络异常!');\n }\n return Promise.reject({\n status: -404,\n msg: '网络异常!'\n });\n}\n\n/**\n * 用于处理服务端返回状态码\n */\nfunction checkCode(res) {\n // code 为 200 则表示请求正常\n if (res && res.code === 200) {\n return res;\n }\n\n // 1001 为服务端抛出的未知错误\n // 如果不是未知错误,则把服务端返回的错误信息弹出\n if (res && res.code !== 1001) {\n message.error(res.message);\n return Promise.reject(res);\n }\n\n // 如果是未知错误,则统一弹出“请求失败!”\n message.error('请求失败!');\n return Promise.reject();\n}\n\n/**\n * POST 请求\n * @param {String} url 请求地址\n * @param {*} data 请求体\n * @param {Object} others 其他参数\n */\nexport function post(url, data, others = {}) {\n return instance({\n method: 'post',\n baseURL: baseURL,\n url,\n data: data,\n timeout: others.unlimitedTime ? 0 : 10000,\n emulateJSON: true,\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': 'application/json; charset=UTF-8'\n },\n ...others\n }).then(\n (res) => {\n return checkStatus(res);\n },\n (err) => {\n return checkStatus(err);\n }\n );\n}\n\n/**\n * GET 请求\n * @param {String} url 请求地址\n * @param {Object} params 请求参数\n */\nexport function get(url, params) {\n return instance({\n method: 'get',\n baseURL: baseURL,\n url,\n params, // get 请求时带的参数\n timeout: 10000,\n headers: {\n 'X-Requested-With': 'XMLHttpRequest'\n }\n }).then(\n (res) => {\n return checkStatus(res);\n },\n (err) => {\n return checkStatus(err);\n }\n );\n}\n","import { post, get, serverUrl } from './http.js';\n\n/**\n * 服务器地址\n */\nexport { serverUrl };\n\n/**\n * 登录\n */\nexport const fetchLogin = (data) => post('/api/msp/user/login', data);\n\n/**\n * 上传附件 返回File对象\n */\nexport const fetchUploadFile = (data, others) =>\n post('/api/msp/file/uploadfile', data, { ...others, unlimitedTime: true });\n\n/**\n * 上传附件 返回OSS路径\n */\nexport const fetchUploadFileToPath = (data, others) =>\n post('/api/msp/file/upload', data, { ...others, unlimitedTime: true });\n\n/**\n * 上传视频\n */\nexport const fetchUploadVideo = (data, others) =>\n post('/api/File/UploadVideo', data, { ...others, unlimitedTime: true });\n\n/**\n * 根据OSS路径获取Url\n */\nexport const fetchGetImgPath = (data) => get('/api/File/GetOssUrlByOssPath', data);\n\n/**\n * 返回附件预览相对路径\n */\nexport const fetchFilePreview = (data) => get('/api/msp/file/preview', data);\n\n/**\n * 文件解析\n */\nexport const fetchAnalysis = (data) => get('/api/msp/file/analysis', data);\n\n/**\n * 获取用户列表\n */\nexport const fetchUserList = (data) => post('/api/msp/user/queryuser', data);\n\n/**\n * 获取用户列表 不需要Token\n */\nexport const fetchUserListNoToken = (data) => post('/api/msp/user/queryuserlist', data);\n\n/**\n * 新增用户\n */\nexport const fetchAddUser = (data) => post('/api/msp/user/adduser', data);\n\n/**\n * 编辑用户\n */\nexport const fetchUpdateUser = (data) => post('/api/msp/user/updateuser', data);\n\n/**\n * 修改用户状态\n */\nexport const fetchUpdateUserState = (data) => post('/api/msp/user/updateuserstatus', data);\n\n/**\n * 删除用户\n */\nexport const fetchDelUser = (data) => post(`/api/User/Delete/${data}`);\n\n/**\n * 获取单个用户\n */\nexport const fetchGetUser = (data) => post(`/api/msp/user/getuser`, data);\n\n/**\n * 获取用户自己的信息\n */\nexport const fetchGetUserSelfInfo = (data) => post(`/api/msp/user/getmyinfo`, data);\n\n/**\n * 修改用户自己的信息\n */\nexport const fetchUpdateUserSelfInfo = (data) => post(`/api/msp/user/updatemyinfo`, data);\n\n/**\n * 修改用户自己的密码\n */\nexport const fetchUpdateUserSelfPassword = (data) => post(`/api/msp/user/updatepassword`, data);\n\n/**\n * 获取职位列表数字\n */\nexport const fetchGetCaseListCount = (data) => post(`/api/msp/project/getlistcount`, data);\n\n/**\n * 获取职位列表\n */\nexport const fetchGetCaseList = (data) => post(`/api/msp/project/query`, data);\n\n/**\n * 获取职位日志\n */\nexport const fetchGetCaseLog = (data) => post(`/api/fesco/case/getcaseprocess`, data);\n\n/**\n * 获取职位详情\n */\nexport const fetchGetCaseInfo = (data) => post(`/api/msp/project/getcase`, data);\n\n/**\n * 获取系统标签\n */\nexport const fetchGetSystemTags = (data) => post(`/api/common/common/gettag`, data);\n\n/**\n * 获取候选人列表数字\n */\nexport const fetchGetCandidateListCount = (data) => post(`/api/msp/person/getpersonlistcount`, data);\n\n/**\n * 获取候选人列表\n */\nexport const fetchGetCandidateList = (data) => post(`/api/msp/person/queryperson`, data);\n\n/**\n * 获取人才详情\n */\nexport const fetchGetPersonInfo = (data) => get(`/api/msp/person/get/${data}`);\n\n/**\n * 获取候选人详情(Fesco)\n */\nexport const fetchGetPersonInfoNoToken = (data) => get(`/api/msp/person/getdetail/${data}`);\n\n/**\n * 修改候选人\n */\nexport const fetchUpdatePerson = (data) => post(`/api/msp/person/update`, data);\n\n/**\n * 获取候选人流程数量\n */\nexport const fetchGetPersonProgressCount = (data) => post(`/api/msp/person/getpersonprogresscount`, data);\n\n/**\n * 获取候选人推荐日志\n */\nexport const fetchGetPersonRecommendLog = (data) => post(`/api/msp/person/getpersonrecommendlog`, data);\n\n/**\n * 获取首页职位数量\n */\nexport const fetchGetHomeCaseCount = (data) => post(`/api/msp/project/gethomecount`, data);\n\n/**\n * 获取首页职位候选人数量\n */\nexport const fetchGetHomeCandidateCount = (data) => post(`/api/msp/project/gethomecandidatecount`, data);\n\n/**\n * 获取公司信息\n */\nexport const fetchGetCompanyInfo = (data) => post(`/api/msp/project/getcompany`, data);\n\n/**\n * 根据职位获取职位候选人数量\n */\nexport const fetchGetCaseCandidateCount = (data) => post(`/api/msp/project/getcasecandidatecount`, data);\n\n/**\n * 推荐候选人查重\n */\nexport const fetchCheckRepeat = (data) => get('/api/msp/person/recommendrepeatquery', data);\n\n/**\n * 推荐候选人\n */\nexport const fetchRecommendPerson = (data) => post(`/api/msp/person/recommendperson`, data);\n\n/**\n * KPI报表\n */\nexport const fetchQueryKpiReport = (data) => post(`/api/msp/report/querykpireport`, data);\n\n/**\n * 成单报表\n */\nexport const fetchQueryOrderReport = (data) => post(`/api/msp/report/queryorderreport`, data);\n\n/**\n * 获取职位消息的未读数量\n */\nexport const fetchGetCaseMessageCount = (data) => post(`/api/msp/message/getcasemessagecount`, data);\n\n/**\n * 获取职位消息列表\n */\nexport const fetchQueryCaseMessage = (data) => post(`/api/msp/message/querycasemessage`, data);\n\n/**\n * 获取推荐消息的未读数量\n */\nexport const fetchGetCandidateMessageCount = (data) => post(`/api/msp/message/getcandidatemessagecount`, data);\n\n/**\n * 获取推荐消息列表\n */\nexport const fetchQueryCandidateMessage = (data) => post(`/api/msp/message/querycandidatemessage`, data);\n","export default {\n // 全局主题颜色\n globalThemeColor: '#2184da',\n // 全局主题 hover 颜色\n globalThemeHoverColor: '#e6f7ff',\n // 全局背景颜色\n // globalBackgroundColor: '#ffffff',\n // globalBackgroundColor: '#f2f2f2',\n globalBackgroundColor: '#f7f8fa',\n // box-shadow: 0 2px 3px 0 rgba(0,0,0,.2);\n // 全局默认边框颜色\n globalBorderColor: '#dedede',\n // 头部高度\n headerHeight: '50px',\n // 内容宽度\n contentWidth: '1360px',\n\n // Default\n colorDefault: '#ffffff',\n // Processing\n colorProcessing: '#1890ff',\n // Success\n colorSuccess: '#52c41a',\n // Warning\n colorWarning: '#faad14',\n // Error\n colorError: '#f5222d',\n // Danger\n colorDanger: '#ff4d4f',\n\n // grey\n colorGrey: '#d9d9d9',\n // pink\n colorPink: '#eb2f96',\n // red\n colorRed: '#f5222d',\n // yellow\n colorYellow: '#fadb14',\n // orange\n colorOrange: '#fa8c16',\n // cyan\n colorCyan: '#13c2c2',\n // green\n colorGreen: '#52c41a',\n // blue\n colorBlue: '#1890ff',\n // geekblue\n colorGeekblue: '#2f54eb',\n // volcano\n colorVolcano: '#fa541c',\n // gold\n colorGold: '#faad14',\n // lime\n colorLime: '#a0d911'\n};\n","import moment from 'moment';\n\nexport function getNowDate() {\n let oDate = new Date();\n let year = oDate.getFullYear();\n let month = oDate.getMonth() + 1;\n let date = oDate.getDate();\n\n if (month < 10) {\n month = '0' + parseInt(month) || 0;\n }\n\n if (date < 10) {\n date = '0' + parseInt(date) || 0;\n }\n\n return year + '/' + month + '/' + date;\n}\n\nexport function getDate(param) {\n if (!param) {\n return '';\n }\n\n let oDate = new Date(param);\n let year = oDate.getFullYear();\n let month = oDate.getMonth() + 1;\n let date = oDate.getDate();\n\n let sDateTime = '';\n\n if (month < 10) {\n month = '0' + parseInt(month) || 0;\n }\n\n if (date < 10) {\n date = '0' + parseInt(date) || 0;\n }\n\n sDateTime = year + '/' + month + '/' + date;\n\n return sDateTime;\n}\n\nexport function getDateTime(param, showSecond) {\n if (!param) {\n return '';\n }\n\n let oDate = new Date(param);\n let year = oDate.getFullYear();\n let month = oDate.getMonth() + 1;\n let date = oDate.getDate();\n let hour = oDate.getHours();\n let minit = oDate.getMinutes();\n let second = oDate.getSeconds();\n\n let sDateTime = '';\n\n if (month < 10) {\n month = '0' + parseInt(month) || 0;\n }\n\n if (date < 10) {\n date = '0' + parseInt(date) || 0;\n }\n\n if (hour < 10) {\n hour = '0' + parseInt(hour) || 0;\n }\n\n if (minit < 10) {\n minit = '0' + parseInt(minit) || 0;\n }\n\n if (second < 10) {\n second = '0' + parseInt(second) || 0;\n }\n\n sDateTime = year + '/' + month + '/' + date;\n\n sDateTime += ' ' + hour + ':' + minit;\n\n if (showSecond) {\n sDateTime += ':' + second;\n }\n\n return sDateTime;\n}\n\n/**\n * 校验是否是有效的日期\n * @param {Number} year 年\n * @param {Number} month 月\n * @param {Number} date 日\n */\nexport function checkDate(year, month, date) {\n // 这种检验日期的方式,date必须是两位,month可以是一位\n if (parseInt(date) < 10) {\n date = '0' + date;\n }\n let sCheckDate = year + '/' + month + '/' + date;\n return parseInt(new Date(sCheckDate).getDate()) === parseInt(sCheckDate.substring(sCheckDate.length - 2));\n}\n\n/**\n * moment 处理\n */\nexport function fnMomentHandle(str, format = 'YYYY/MM/DD') {\n if (!str) {\n return '';\n }\n\n const arr = str.split(/\\D/);\n const iYear = parseInt(arr[0]) || 0;\n const iMonth = parseInt(arr[1]) || 0;\n const iDate = parseInt(arr[2]) || 0;\n\n if (iYear > 2100 || iYear < 1900) {\n return '';\n }\n\n let sDate = '';\n if (iYear) {\n sDate += iYear;\n }\n if (iMonth) {\n sDate += '/' + iMonth;\n }\n if (iMonth && iDate) {\n sDate += '/' + iDate;\n }\n return moment(sDate, format);\n}\n\n/**\n * 获取 moment 日期\n */\nexport function getMomentDate(param, format = 'YYYY/MM/DD') {\n if (!param) {\n return '';\n }\n return param.format(format);\n}\n"],"sourceRoot":""}