diff --git a/api/fetch.ts b/api/fetch.ts index 5df6ec3..67c5467 100644 --- a/api/fetch.ts +++ b/api/fetch.ts @@ -50,9 +50,11 @@ async function httpfetch(options: OptionsProps): Promise { }, } - const createSsrRequest: (options: OptionsProps, token?: string) => Request = ( - options - ) => { + const createSsrRequest: ( + options: OptionsProps, + token?: string, + refreshToken?: string + ) => Request = (options) => { // 设置请求头 let myHeaders = new Headers() if (!options.isUpload && !options.isFormData && !options.notJson) { @@ -85,14 +87,17 @@ async function httpfetch(options: OptionsProps): Promise { return request } - const createCsrRequest: (options: OptionsProps, token?: string) => Request = ( - options, - token = "" - ) => { + const createCsrRequest: ( + options: OptionsProps, + token?: string, + refreshToken?: string + ) => Request = (options, token = "", refreshToken = "") => { let request = new Request(options.url) // 设置请求头 let myHeaders = new Headers() myHeaders.append("Authorization", `bearer ${token}`) + myHeaders.append("Token", token) + myHeaders.append("Refresh-Token", refreshToken) if (!options.isUpload && !options.isFormData && !options.notJson) { myHeaders.append("Content-Type", "application/json") } @@ -139,7 +144,7 @@ async function httpfetch(options: OptionsProps): Promise { ? createSsrRequest : createCsrRequest - const request = createNewRequest(options, access_token) + const request = createNewRequest(options, access_token, refresh_token) return new Promise((resolved, rejected) => { fetch(request) @@ -171,22 +176,18 @@ async function httpfetch(options: OptionsProps): Promise { } } else if (status === 401) { try { - const refreshResponse = await refreshKey({ - token: refresh_token, + const refreshResponse = await refreshKey() + let access_token = refreshResponse?.access || "" + let refresh_token = refreshResponse?.refresh || "" + refreshToken({ + refresh_token, + access_token, }) - if (refreshResponse.code === 200) { - let access_token = refreshResponse.message?.access || "" - let refresh_token = refreshResponse.message?.refresh || "" - refreshToken({ - refresh_token, - access_token, - }) - const retry_request = createNewRequest(options, access_token) - const retry_response = await fetch(retry_request) - return options.isDownload - ? retry_response.blob() - : retry_response.json() - } + const retry_request = createNewRequest(options, access_token) + const retry_response = await fetch(retry_request) + return options.isDownload + ? retry_response.blob() + : retry_response.json() } catch (error) { rejected(error) try { @@ -231,7 +232,17 @@ async function httpfetch(options: OptionsProps): Promise { const data = await response.json() const { message: errInfo } = data Message.error({ content: errInfo || "" }) - throw new Error(errInfo) + // throw new Error(errInfo) + rejected(errInfo) + try { + await deleteCookie() + } catch (error) { + rejected(error) + } finally { + // 清空身份信息并跳转至登录页面 + removeUserInfo() + window.location.href = "/login" + } } else if (status >= 510) { Message.error({ content: "申请资源不足!" }) throw new Error("申请资源不足!") @@ -242,43 +253,26 @@ async function httpfetch(options: OptionsProps): Promise { } }) .then(async (response) => { - const { code, message: errInfo } = response + const code = response?.code + const errInfo = response?.message || "" if (response) { if (isNumber(code)) { let status = code // 日后做相关处理 if (status === 401) { try { - const refreshResponse = await refreshKey({ - token: refresh_token, + const refreshResponse = await refreshKey() + let access_token = refreshResponse?.access || "" + let refresh_token = refreshResponse?.refresh || "" + refreshToken({ + refresh_token, + access_token, }) - if (refreshResponse.code === 200) { - let access_token = refreshResponse.message?.access || "" - let refresh_token = refreshResponse.message?.refresh || "" - refreshToken({ - refresh_token, - access_token, - }) - const retry_request = createNewRequest(options, access_token) - const retry_response = await fetch(retry_request) - return options.isDownload - ? retry_response.blob() - : retry_response.json() - } else { - if (refreshResponse.code === 406) { - try { - await deleteCookie() - } catch (error) { - rejected(error) - } finally { - // 清空身份信息并跳转至登录页面 - removeUserInfo() - window.location.href = "/login" - } - } else { - throw new Error("重新获取token失败!") - } - } + const retry_request = createNewRequest(options, access_token) + const retry_response = await fetch(retry_request) + return options.isDownload + ? retry_response.blob() + : retry_response.json() } catch (error) { rejected(error) } diff --git a/app/api/transfer/[path]/route.ts b/app/api/transfer/[path]/route.ts index a9ed8fc..16b77ed 100644 --- a/app/api/transfer/[path]/route.ts +++ b/app/api/transfer/[path]/route.ts @@ -61,21 +61,24 @@ export async function POST(req: any) { method, headers: { "content-type": "application/json", + ["Token"]: userData?.refresh_token, + ["Refresh-Token"]: userData?.refresh_token, }, - body: JSON.stringify({ - token: userData?.refresh_token, - }), + // body: JSON.stringify({ + // token: userData?.refresh_token, + // }), } } else { - const authorization = `bearer ${userData?.access_token}` + const access_token = `${userData?.access_token}` fetchOptions = { method, headers: { "content-type": "application/json", - authorization: authorization, + ["Token"]: access_token, + ["Refresh-Token"]: userData?.refresh_token, }, } - if (method === "POST" || method === "PUT") { + if (method === "POST" || method === "PUT" || method === "DELETE") { fetchOptions.body = data } else { if (isParamsValid(data)) { diff --git a/build.sh b/build.sh index cc18ebd..18f4501 100755 --- a/build.sh +++ b/build.sh @@ -71,23 +71,23 @@ pnpm run $BUILD_FLAG if [[ $? != 0 ]]; then echo -e "${RED}build error${NC}"; exit 100; fi # Docker构建和推送 -MAIN_NAME=digitalspace_labelui +MAIN_NAME=digitalspace_labelmain DOCKER_FILE=$SHELL_FOLDER/Dockerfile if [[ $OUTPUT_TYPE == export ]]; then DOCKER_FILE=$SHELL_FOLDER/docker/nginx.dockerfile - MAIN_NAME=digitalspace_labelui_static + MAIN_NAME=digitalspace_labelmain_static elif [[ $OUTPUT_TYPE == standalone ]]; then DOCKER_FILE=$SHELL_FOLDER/docker/node.dockerfile - MAIN_NAME=digitalspace_labelui_ssr + MAIN_NAME=digitalspace_labelmain_ssr fi echo -e "${GREEN}Building docker image...${NC}" -docker build -f $DOCKER_FILE -t $MAIN_NAME $SHELL_FOLDER +sudo docker build -f $DOCKER_FILE -t $MAIN_NAME $SHELL_FOLDER if [[ $? != 0 ]]; then echo -e "${RED}build docker with error${NC}"; exit 100; fi echo -e "${GREEN}Tagging and pushing docker image...${NC}" -docker tag $MAIN_NAME harbor.cowarobot.cn/gopro/$MAIN_NAME:$FLAG_PROD -docker push harbor.cowarobot.cn/gopro/$MAIN_NAME:$FLAG_PROD +sudo docker tag $MAIN_NAME harbor.cowarobot.cn/gopro/$MAIN_NAME:$FLAG_PROD +# docker push harbor.cowarobot.cn/gopro/$MAIN_NAME:$FLAG_PROD echo -e "${GREEN}Build completed successfully${NC}" diff --git a/components/layout/common.ts b/components/layout/common.ts index f4933d6..66d9bbe 100644 --- a/components/layout/common.ts +++ b/components/layout/common.ts @@ -28,8 +28,25 @@ export const subConfigList: { source: string; url: string }[] = url: "http://localhost:5535", }, ] - : process.env.NEXT_PUBLIC_ENV === "standalone" - ? [] + : process.env.NEXT_PUBLIC_ENV === "staging" + ? [ + { + source: "/image", + url: "http://172.30.21.213:5532", + }, + { + source: "/video", + url: "http://172.30.21.213:5533", + }, + { + source: "/lidar", + url: "http://172.30.21.213:5534", + }, + { + source: "/mgt", + url: "http://172.30.21.213:5535", + }, + ] : [] const currentComponentList: MenuItem[] = [ diff --git a/components/login/api/index.ts b/components/login/api/index.ts index 1661efc..fe18dca 100644 --- a/components/login/api/index.ts +++ b/components/login/api/index.ts @@ -47,11 +47,18 @@ export const fetchFeishuLogin = (params: Login.ReqFeishuLogin) => { } // 刷新token -export const refreshKey = (params: { token: string }) => { - return httpFetch>({ +// export const refreshKey = (params: { token: string }) => { +// return httpFetch>({ +// url: BASE_PATH + `/api/v1/label_server/user/refresh_token`, +// method: "POST", +// data: params, +// isRefresh: true, +// }) +// } +export const refreshKey = () => { + return httpFetch({ url: BASE_PATH + `/api/v1/label_server/user/refresh_token`, - method: "POST", - body: JSON.stringify(params), + method: "GET", isRefresh: true, }) } diff --git a/docker-compose.yml b/docker-compose.yml index 9a42583..5d2e20e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,9 @@ version: "3" services: - digitalspace_labelui_ssr: - container_name: digitalspace_labelui_ssr - image: harbor.cowarobot.cn/gopro/digitalspace_labelui_ssr:stage_latest + digitalspace_labelmain_ssr: + container_name: digitalspace_labelmain_ssr + image: harbor.cowarobot.cn/gopro/digitalspace_labelmain_ssr:stage_latest restart: unless-stopped ports: - 5531:5531 diff --git a/package.json b/package.json index 3e2602e..d97f454 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "labelui", + "name": "labelmain", "version": "0.1.0", "private": true, "scripts": {