From b88c5b1faf89956cdd63211db3ec39a640ef022c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=AB=A5=E5=B4=87?= Date: Thu, 3 Jun 2021 10:00:24 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E7=9A=84=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Component/HeadSearch.jsx | 40 ++++++++++++++++++ src/forge/Component/SiderBar.js | 2 +- src/forge/Head/Header.js | 66 +++++++++++++++--------------- 3 files changed, 75 insertions(+), 33 deletions(-) create mode 100644 src/forge/Component/HeadSearch.jsx diff --git a/src/forge/Component/HeadSearch.jsx b/src/forge/Component/HeadSearch.jsx new file mode 100644 index 000000000..6a61e6445 --- /dev/null +++ b/src/forge/Component/HeadSearch.jsx @@ -0,0 +1,40 @@ +import React, { useState } from "react"; +import { Input ,notification} from "antd"; + +const { Search } = Input; +export default ({history}) => { + const [openSearch, setOpenSearch] = useState(false); + + function onGlobalSearch(value) { + history.push('/search?value=' + value); + // window.location.href = `search?value=` + value; + // history.push({ + // pathname:'/search', + // state:value + // }) + } + return ( + + { + openSearch ? +
{ + setTimeout(() => { + setOpenSearch(false) + }, 500) + }} + > + +
+ : + { + setOpenSearch(true) + }} /> + } +
+ ) +}; diff --git a/src/forge/Component/SiderBar.js b/src/forge/Component/SiderBar.js index 8267959ba..3d6b8acf8 100644 --- a/src/forge/Component/SiderBar.js +++ b/src/forge/Component/SiderBar.js @@ -43,7 +43,7 @@ function SiderBar() { { list && list.map((i,k)=>{ return( -
  • {i.question}
  • +
  • {i.question}
  • ) }) } diff --git a/src/forge/Head/Header.js b/src/forge/Head/Header.js index 4d55f824c..f3b69c4ea 100644 --- a/src/forge/Head/Header.js +++ b/src/forge/Head/Header.js @@ -5,7 +5,8 @@ import axios from 'axios'; import { Modal, Input, message, notification , Dropdown , Menu } from 'antd'; import LoginDialog from '../../modules/login/LoginDialog'; -import GotoQQgroup from '../../modal/GotoQQgroup' +import GotoQQgroup from '../../modal/GotoQQgroup'; +import HeadSearch from '../Component/HeadSearch'; import '../../modules/tpm/TPMIndex.css'; import logo from '../../modules/tpm/images/logo.png'; @@ -81,35 +82,35 @@ class NewHeader extends Component { } catch (e) {} } - SearchInput = (open,item)=>{ - if(open){ - return( -
    { - setTimeout(() => { - this.setState({ - openSearch:false - }) - }, 300) - }} - > - this.onGlobalSearch(value,item)} - autoFocus={true} - /> -
    - ) - }else{ - return { - this.setState({openSearch:true}) - }} /> - } - } + // SearchInput = (open,item)=>{ + // if(open){ + // return( + //
    { + // setTimeout(() => { + // this.setState({ + // openSearch:false + // }) + // }, 300) + // }} + // > + // this.onGlobalSearch(value,item)} + // autoFocus={true} + // /> + //
    + // ) + // }else{ + // return { + // this.setState({openSearch:true}) + // }} /> + // } + // } - onGlobalSearch=(value,item)=>{ - window.location.href=`${item}?value=` + value; - } + // onGlobalSearch=(value,item)=>{ + // window.location.href=`${item}?value=` + value; + // } openNotification = (messge) => { notification.open({ @@ -329,7 +330,7 @@ class NewHeader extends Component { { list.map((item,key)=>{ return( - (item.name !=="加入课堂" && item.name !=="加入开发项目") && {item.name} + (item.name !=="加入课堂" && item.name !=="加入开发项目") && {item.name} ) }) } @@ -434,7 +435,7 @@ class NewHeader extends Component { }) } - let search_url = settings && settings.common && settings.common.search; + // let search_url = settings && settings.common && settings.common.search; let notice_url = settings && settings.common && settings.common.notice; return (
    @@ -503,7 +504,8 @@ class NewHeader extends Component { }
    - {search_url ? this.SearchInput(openSearch,search_url):""} + {/* {search_url ? this.SearchInput(openSearch,search_url):""} */} + { current_user && (current_user.main_site || current_user.login) && (settings && settings.add && settings.add.length>0)? From dd9c11dbd9a96248ce275daea98f24dd3b23b614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=AB=A5=E5=B4=87?= Date: Thu, 3 Jun 2021 10:37:03 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E7=9A=84=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 8 ++ src/modules/search/ItemList.jsx | 31 +++++ src/modules/search/index.jsx | 204 ++++++++++++++++++++++++++++++++ src/modules/search/index.scss | 82 +++++++++++++ 4 files changed, 325 insertions(+) create mode 100644 src/modules/search/ItemList.jsx create mode 100644 src/modules/search/index.jsx create mode 100644 src/modules/search/index.scss diff --git a/src/App.js b/src/App.js index 556d5c4d3..5105d3ec7 100644 --- a/src/App.js +++ b/src/App.js @@ -73,6 +73,10 @@ const EducoderLogin = Loadable({ loader: () => import('./modules/login/EducoderLogin'), loading: Loading, }) +const Search = Loadable({ + loader: () => import('./modules/search/'), + loading: Loading, +}) class App extends Component { constructor(props) { @@ -247,6 +251,10 @@ class App extends Component { {/*404*/} + + {/* 查询 */} + + {/* 个人主页 */} { + const { list } = props; + + function itemClick(item) { + item.url && window.open(item.url); + } + + return ( + + list.map((item, i) => { + return ( +
    +
    +

    { itemClick(item) }}>

    + + {item.type == 1 &&

    + {item.watchersCount} + {item.praisesCount} + {item.forkedCount} +

    } + +
    +

    +
    {item.updateTime}
    +
    + ) + }) + ) +} \ No newline at end of file diff --git a/src/modules/search/index.jsx b/src/modules/search/index.jsx new file mode 100644 index 000000000..a93d6f026 --- /dev/null +++ b/src/modules/search/index.jsx @@ -0,0 +1,204 @@ +import React, { useEffect, useState } from 'react'; +import { Input, Row, Col, Tabs, Pagination } from 'antd'; +import axios from 'axios'; +import { TPMIndexHOC } from '../tpm/TPMIndexHOC'; +import { SnackbarHOC } from 'educoder'; +import ItemList from './ItemList'; +import Nodata from '../../forge/Nodata'; +import './index.scss'; + +const { Search } = Input; +const { TabPane } = Tabs; + +// const https = 'http://192.168.0.77:8081'; //曾伟内网后台 +// const https = 'http://192.168.31.104:8081'; //曾伟外网后台 +const https='http://106.75.31.211:58081'; + +const GlobalSearch = ({ location, showNotification }) => { + + const size = 10; + let defaultValue = decodeURI(location.search.split("=")[1] || ""); + + const [term, setTerm] = useState(defaultValue); + const [type, setType] = useState(1); + const [page, setPage] = useState(1); + const [total, setTotal] = useState(0); + const [dataList, setDataList] = useState([]); + + const [forcesearch, setForcesearch] = useState(false); + + const [totalType1, setTotalType1] = useState(0); + const [totalType2, setTotalType2] = useState(0); + const [totalType3, setTotalType3] = useState(0); + const [totalType4, setTotalType4] = useState(0); + + + useEffect(() => { + setTerm(defaultValue); + }, defaultValue) + + useEffect(() => { + searchDataList(); + }, [type, page, term, forcesearch]); + + + function searchFun(val) { + setTerm(val); + setPage(1); + setForcesearch(!forcesearch); + } + + function searchDataList() { + const url = https + '/search'; + axios.defaults.withCredentials = true; + axios.get(url, { + params: { + page, + size, + term, + type, + } + }).then(res => { + if (res && res.status === 200 && res.data && res.data.code === '1') { + const data = res.data.data; + setDataList(data.rows); + setTotal(data.total); + for (const item of data.searchItemTypes) { + if (item.type == 1) { + setTotalType1(item.count); + } else if (item.type == 2) { + setTotalType2(item.count); + } else if (item.type == 3) { + setTotalType3(item.count); + } else if (item.type == 4) { + setTotalType4(item.count); + } + } + } else if (res && res.data) { + showNotification(res.data.data.message); + setDataList([]); + setTotal(0); + } else { + showNotification('查询失败!'); + setDataList([]); + setTotal(0); + } + }).catch(err => { + showNotification('查询失败!返回错误'); + setDataList([]); + setTotal(0); + }) + } + + + function changeTab(type) { + setType(type); + setPage(1); + } + + + + return ( +
    +
    + + + + + + +
    + + + + +
    +

    {`找到${totalType1}条结果`}

    + +
    + { + dataList.length ? + size} + onChange={(page) => { setPage(page) }} + current={page} + total={total} + showTotal={total => `共 ${total} 条`} + /> + : + } +
    + + +
    +

    {`找到${totalType2}条结果`}

    + +
    + { + dataList.length ? + size} + onChange={(page) => { setPage(page) }} + current={page} + total={total} + showTotal={total => `共 ${total} 条`} + /> : + } +
    + + +
    +

    {`找到${totalType3}条结果`}

    + +
    + { + dataList.length ? + size} + onChange={(page) => { setPage(page) }} + current={page} + total={total} + showTotal={total => `共 ${total} 条`} + /> : + } +
    + + +
    +

    {`找到${totalType4}条结果`}

    + +
    + { + dataList.length ? + size} + onChange={(page) => { setPage(page) }} + current={page} + total={total} + showTotal={total => `共 ${total} 条`} + /> : + } +
    +
    + +
    + ); + // } +} + +export default SnackbarHOC()(TPMIndexHOC(GlobalSearch)); diff --git a/src/modules/search/index.scss b/src/modules/search/index.scss new file mode 100644 index 000000000..3617ed6f7 --- /dev/null +++ b/src/modules/search/index.scss @@ -0,0 +1,82 @@ +.suit-main { + .search-head { + background: #eef2f5; + } + + .search-box { + width: 1200px; + height: 110px; + margin: 0 auto; + } + + .global-search { + margin-top: 40px; + } + + .ant-tabs-top { + background: #eef2f5; + } + .ant-tabs-tabpane { + background: #fff; + } + .ant-tabs-bar { + width: 1200px; + margin: 0 auto; + } + .ant-tabs-tab-active { + color: #000; + font-weight: 600; + } + .ant-tabs-nav .ant-tabs-tab:hover { + color: #000; + font-weight: 600; + } + + /* 列表 */ + .search-content { + width: 1200px; + margin: 1.5vw auto; + p{ + margin-bottom: .75em !important; + } + } + .search-item { + padding: .75em 0; + border-top:1px solid #e1e4e8; + .search-item-tit{ + display: flex; + justify-content: space-between; + } + .search-item-title{ + cursor: pointer; + &:hover{ + color: #1890ff; + } + span{ + color: #1890ff; + } + } + .search-item-content{ + span{ + color: #1890ff; + } + } + .search-icon{ + margin-right: 2em; + color: #aaa; + } + } + + .ant-pagination{ + text-align: center; + margin-bottom: 3vw; + } + + .none_panels{ + display: flex; + justify-content: center; + align-items: center; + flex-flow: column nowrap; + height: 40vh; + } +} From ff2586f5b93cdcd925cb836ccca3e77690b4c030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=AB=A5=E5=B4=87?= Date: Tue, 8 Jun 2021 16:05:32 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E4=BC=97=E5=8C=85/?= =?UTF-8?q?=E5=B8=96=E5=AD=90=E7=AD=89tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/search/index.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/search/index.jsx b/src/modules/search/index.jsx index a93d6f026..753a7107c 100644 --- a/src/modules/search/index.jsx +++ b/src/modules/search/index.jsx @@ -138,7 +138,7 @@ const GlobalSearch = ({ location, showNotification }) => { } - + {/*

    {`找到${totalType2}条结果`}

    { showTotal={total => `共 ${total} 条`} /> : } - + */}
    From f93df6069cb8a2b50f5bff9a8435404018b5a2e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=AB=A5=E5=B4=87?= Date: Tue, 8 Jun 2021 16:08:58 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=90=9C=E7=B4=A2placepl?= =?UTF-8?q?aceholder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Component/HeadSearch.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/forge/Component/HeadSearch.jsx b/src/forge/Component/HeadSearch.jsx index 6a61e6445..088817238 100644 --- a/src/forge/Component/HeadSearch.jsx +++ b/src/forge/Component/HeadSearch.jsx @@ -24,7 +24,7 @@ export default ({history}) => { }, 500) }} > - Date: Wed, 9 Jun 2021 19:47:14 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD=E5=8F=8A=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/favicon.ico | Bin 9049 -> 10415 bytes src/modules/search/index.jsx | 48 ++++++++++++++++++++++++++++++----- 2 files changed, 41 insertions(+), 7 deletions(-) mode change 100755 => 100644 public/favicon.ico diff --git a/public/favicon.ico b/public/favicon.ico old mode 100755 new mode 100644 index 05b9d163e5267afb1d933b189a1d6210fc2fe634..75a4c3dfd46656c981907ac9d82ddce23c622d7f GIT binary patch literal 10415 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 diff --git a/src/modules/search/index.jsx b/src/modules/search/index.jsx index 753a7107c..ee3b40b5f 100644 --- a/src/modules/search/index.jsx +++ b/src/modules/search/index.jsx @@ -12,14 +12,17 @@ const { TabPane } = Tabs; // const https = 'http://192.168.0.77:8081'; //曾伟内网后台 // const https = 'http://192.168.31.104:8081'; //曾伟外网后台 -const https='http://106.75.31.211:58081'; +// const https='http://106.75.31.211:58081'; +const https = 'https://test-statistics.trustie.net'; -const GlobalSearch = ({ location, showNotification }) => { +const GlobalSearch = ({ location, showNotification, history }) => { const size = 10; let defaultValue = decodeURI(location.search.split("=")[1] || ""); const [term, setTerm] = useState(defaultValue); + const [searchValue, setSearchValue] = useState(defaultValue); + const [type, setType] = useState(1); const [page, setPage] = useState(1); const [total, setTotal] = useState(0); @@ -31,6 +34,7 @@ const GlobalSearch = ({ location, showNotification }) => { const [totalType2, setTotalType2] = useState(0); const [totalType3, setTotalType3] = useState(0); const [totalType4, setTotalType4] = useState(0); + const [totalType5, setTotalType5] = useState(0); useEffect(() => { @@ -50,6 +54,10 @@ const GlobalSearch = ({ location, showNotification }) => { function searchDataList() { const url = https + '/search'; + if (!term) { + showNotification('请输入关键字'); + return; + } axios.defaults.withCredentials = true; axios.get(url, { params: { @@ -72,6 +80,8 @@ const GlobalSearch = ({ location, showNotification }) => { setTotalType3(item.count); } else if (item.type == 4) { setTotalType4(item.count); + } else if (item.type == 5) { + setTotalType5(item.count); } } } else if (res && res.data) { @@ -96,7 +106,11 @@ const GlobalSearch = ({ location, showNotification }) => { setPage(1); } - + useEffect(() => { + history.listen(historyLocation => { + setSearchValue(historyLocation.search.split("=")[1] || ""); + }) + }, [history]); return (
    @@ -110,7 +124,8 @@ const GlobalSearch = ({ location, showNotification }) => { size="large" onSearch={searchFun} className="global-search" - defaultValue={term} + value={searchValue} + onChange={(e) => { setSearchValue(e.target.value) }} /> @@ -134,11 +149,11 @@ const GlobalSearch = ({ location, showNotification }) => { total={total} showTotal={total => `共 ${total} 条`} /> - : + : } - {/* +

    {`找到${totalType2}条结果`}

    { } - + {/*

    {`找到${totalType3}条结果`}

    { /> : } */} + + +
    +

    {`找到${totalType5}条结果`}

    + +
    + { + dataList.length ? + size} + onChange={(page) => { setPage(page) }} + current={page} + total={total} + showTotal={total => `共 ${total} 条`} + /> : + } +
    From b38cdd4bb3e97009cb693dfe50885db2124336fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=AB=A5=E5=B4=87?= Date: Thu, 10 Jun 2021 17:05:49 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9search=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=EF=BC=8C=E5=90=8C=E9=A1=B5=E6=90=9C=E7=B4=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/forge/Component/HeadSearch.jsx | 2 +- src/modules/search/index.jsx | 25 ++++++++++++++++++------- src/modules/search/index.scss | 9 ++++++++- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/forge/Component/HeadSearch.jsx b/src/forge/Component/HeadSearch.jsx index 088817238..15ba6d448 100644 --- a/src/forge/Component/HeadSearch.jsx +++ b/src/forge/Component/HeadSearch.jsx @@ -24,7 +24,7 @@ export default ({history}) => { }, 500) }} > - { const [totalType4, setTotalType4] = useState(0); const [totalType5, setTotalType5] = useState(0); + const [ref, setRef] = useState(undefined); + const [focus, setFocus] = useState(0); - useEffect(() => { - setTerm(defaultValue); - }, defaultValue) useEffect(() => { searchDataList(); }, [type, page, term, forcesearch]); + useEffect(() => { + if (ref) { + ref && ref.input.input.focus(); + } + }, [focus]) + function searchFun(val) { setTerm(val); @@ -55,7 +60,8 @@ const GlobalSearch = ({ location, showNotification, history }) => { function searchDataList() { const url = https + '/search'; if (!term) { - showNotification('请输入关键字'); + // showNotification('请输入关键字'); + setFocus(focus + 1); return; } axios.defaults.withCredentials = true; @@ -109,9 +115,12 @@ const GlobalSearch = ({ location, showNotification, history }) => { useEffect(() => { history.listen(historyLocation => { setSearchValue(historyLocation.search.split("=")[1] || ""); + setTerm(historyLocation.search.split("=")[1] || ""); }) }, [history]); + + return (
    @@ -119,14 +128,16 @@ const GlobalSearch = ({ location, showNotification, history }) => { { setSearchValue(e.target.value) }} + ref={(el) => setRef(el)} /> + {!searchValue && 请输入搜索关键字}
    @@ -232,7 +243,7 @@ const GlobalSearch = ({ location, showNotification, history }) => {
    ); - // } } + export default SnackbarHOC()(TPMIndexHOC(GlobalSearch)); diff --git a/src/modules/search/index.scss b/src/modules/search/index.scss index 3617ed6f7..e3af7834e 100644 --- a/src/modules/search/index.scss +++ b/src/modules/search/index.scss @@ -7,12 +7,19 @@ width: 1200px; height: 110px; margin: 0 auto; + .ant-form-explain{ + color: #f5222d; + } } .global-search { margin-top: 40px; } - + .required-search{ + .ant-input{ + border-color: #f5222d !important; + } + } .ant-tabs-top { background: #eef2f5; } From 405053696c0691c8b9bd497dc8b6cc60bfc1632f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=AB=A5=E5=B4=87?= <792998983@qq.com> Date: Fri, 11 Jun 2021 15:28:40 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A4=B4=E9=83=A8?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E6=A1=86=E9=AB=98=E5=BA=A6=E5=92=8C=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E6=9C=8D=E5=8A=A1=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/AppConfig.js | 3 ++- src/forge/Component/HeadSearch.jsx | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/AppConfig.js b/src/AppConfig.js index 034612ece..434d2ed73 100644 --- a/src/AppConfig.js +++ b/src/AppConfig.js @@ -32,7 +32,8 @@ export function initAxiosInterceptors(props) { // 判断网络是否连接 initOnlineOfflineListener(); - var proxy = "https://testforgeplus.trustie.net"; + // var proxy = "https://testforgeplus.trustie.net"; + var proxy="https://forgeplus.trustie.net/"; //响应前的设置 axios.interceptors.request.use( config => { diff --git a/src/forge/Component/HeadSearch.jsx b/src/forge/Component/HeadSearch.jsx index 15ba6d448..fb7c9f25a 100644 --- a/src/forge/Component/HeadSearch.jsx +++ b/src/forge/Component/HeadSearch.jsx @@ -28,6 +28,7 @@ export default ({history}) => { className={`search-input mr20`} onSearch={onGlobalSearch} autoFocus={true} + style={{width:'260px'}} />
    : From 71d1eb57cca6d9b2854f2bb56c18b4ee1dc94a00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E7=AB=A5=E5=B4=87?= <792998983@qq.com> Date: Fri, 11 Jun 2021 17:51:54 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/AppConfig.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/AppConfig.js b/src/AppConfig.js index 434d2ed73..034612ece 100644 --- a/src/AppConfig.js +++ b/src/AppConfig.js @@ -32,8 +32,7 @@ export function initAxiosInterceptors(props) { // 判断网络是否连接 initOnlineOfflineListener(); - // var proxy = "https://testforgeplus.trustie.net"; - var proxy="https://forgeplus.trustie.net/"; + var proxy = "https://testforgeplus.trustie.net"; //响应前的设置 axios.interceptors.request.use( config => {