💥 feat(模块): 添加了个很棒的功能

This commit is contained in:
cclu 2025-04-17 19:50:30 +08:00
parent f3966ac2c9
commit b021eff28f
13 changed files with 300 additions and 108 deletions

View File

@ -103,6 +103,8 @@ const BasicLayout: FC<{ user: UserModelState, global: ProfileModelState, dispatc
: item.name, : item.name,
}), }),
); );
console.log('consumableMenuconsumableMenuconsumableMenu', consumableMenu);
// const consumableMenu: MenuDataItem[] = [ // const consumableMenu: MenuDataItem[] = [
// { // {
// path: '/', // path: '/',
@ -213,6 +215,8 @@ const BasicLayout: FC<{ user: UserModelState, global: ProfileModelState, dispatc
console.log('tabsRoutes', tabsRoutes); console.log('tabsRoutes', tabsRoutes);
console.log('location', location); console.log('location', location);
console.log('consumableMenu', consumableMenu); console.log('consumableMenu', consumableMenu);
console.log('oneFloorListoneFloorListoneFloorListoneFloorList', oneFloorList);
return ( return (
@ -280,10 +284,9 @@ const BasicLayout: FC<{ user: UserModelState, global: ProfileModelState, dispatc
actionsRender={() => <nav />} actionsRender={() => <nav />}
onPageChange={(location) => { onPageChange={(location) => {
console.log('location', location); console.log('location', location);
if (location?.pathname && location?.pathname !== '/') { if (location?.pathname && location?.pathname !== '/') {
const nextModule: any = oneFloorList.filter(n => location?.pathname === n?.path) const nextModule: any = oneFloorList.filter(n => location?.pathname === n?.path)
let title = '' let title = ''
if (nextModule && nextModule.length > 0) { if (nextModule && nextModule.length > 0) {
title = nextModule[0].name title = nextModule[0].name

View File

@ -60,9 +60,9 @@ const AddBigType = ({ parentRow, onRef, openAddModal, currentUser, setOpenAddMod
} }
console.log('req', req); console.log('req', req);
console.log('data', data); console.log('data', data);
if (data.code === 200) { if (data.Result_Code === 100) {
modalRef.current?.resetFields() modalRef.current?.resetFields()
message.success(data.message) message.success(`${parentRow?.id ? '编辑' : '新增'}成功!`)
setOpenAddModal(false) setOpenAddModal(false)
if (parentActionRef) { if (parentActionRef) {
parentActionRef.current?.reload() parentActionRef.current?.reload()
@ -75,7 +75,7 @@ const AddBigType = ({ parentRow, onRef, openAddModal, currentUser, setOpenAddMod
afterAdd() afterAdd()
} }
} else { } else {
message.error(data.message) message.error(data.Result_Desc)
} }
}) })
}} }}

View File

@ -119,10 +119,16 @@ const examineIndex: React.FC<{ currentUser: any }> = (props) => {
// 删除分类 // 删除分类
const handleDeleteType = async (id: number) => { const handleDeleteType = async (id: number) => {
const data = await handleGetDeleteExamineType(id) let req: any = {
if (data.code === 200) { id: id
message.success(data.message) }
console.log('req', req);
const data = await handleGetDeleteExamineType(req)
if (data.Result_Code === 100) {
message.success('删除成功!')
actionRef.current?.reload() actionRef.current?.reload()
} else {
message.error(data.Result_Desc)
} }
} }

View File

@ -1,10 +1,13 @@
import request from "@/utils/request"
// import request from "@/utils/request"
import request from "@/utils/requestJava"
// 拿到类别列表接口 // 拿到类别列表接口
export async function handleGetExamineTypeList(params?: any) { export async function handleGetExamineTypeList(params?: any) {
const data = await request.get('/question-categories', {params}) const data = await request.get('/question-categories/getList', { params })
if (data.code === 200) { if (data.Result_Code === 100) {
return data.data return data.Result_Data.list
} }
return [] return []
} }
@ -12,26 +15,26 @@ export async function handleGetExamineTypeList(params?: any) {
// 拿树形的 // 拿树形的
export async function handleGetExamineTypeTreeList(params?: any) { export async function handleGetExamineTypeTreeList(params?: any) {
const data = await request.get('/question-categories/tree', params) const data = await request.get('/question-categories/tree', params)
if (data.code === 200) { if (data.Result_Code === 100) {
return data.data return data.Result_Data.list
} }
return [] return []
} }
// 新增类别列表接口 // 新增类别列表接口
export async function handleGetAddExamineType(params: any) { export async function handleGetAddExamineType(params: any) {
const data = await request.post('/question-categories', params) const data = await request.post('/question-categories/save', params)
return data return data
} }
// 删除类别接口 // 删除类别接口
export async function handleGetDeleteExamineType(params: any) { export async function handleGetDeleteExamineType(params: any) {
const data = await request.get(`/question-categories/delete/${params}`) const data = await request.get(`/question-categories/delete`, { params })
return data return data
} }
// 编辑分类接口 // 编辑分类接口
export async function handleGetEditExamineType(params: any) { export async function handleGetEditExamineType(params: any) {
const data = await request.post(`/question-categories/${params.id}`, params) const data = await request.post(`/question-categories/update`, params)
return data return data
} }

View File

@ -293,8 +293,8 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => {
// 删除模版 // 删除模版
const deleteQuestion = async (id: number) => { const deleteQuestion = async (id: number) => {
const data = await handleDeleteTemplates({ id: id }) const data = await handleDeleteTemplates({ id: id })
if (data.code === 200) { if (data.Result_Code === 100) {
message.success(data.message) message.success(data.Result_Desc)
actionRef.current?.reload() actionRef.current?.reload()
} }
} }
@ -316,6 +316,8 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => {
children: child.children || [] children: child.children || []
})) || [] })) || []
})) : []; })) : [];
console.log('formattedData', formattedData);
setBigTypeList(formattedData); setBigTypeList(formattedData);
}; };
@ -413,6 +415,7 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => {
modalRef.current?.validateFields().then(async (res) => { modalRef.current?.validateFields().then(async (res) => {
console.log('res', res); console.log('res', res);
console.log('currentRow', currentRow); console.log('currentRow', currentRow);
console.log('selectedQuestionDetail', selectedQuestionDetail);
let req = {} let req = {}
let data = {} let data = {}
if (currentRow?.id) { if (currentRow?.id) {
@ -467,7 +470,7 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => {
if (selectedQuestionDetail && selectedQuestionDetail.length > 0) { if (selectedQuestionDetail && selectedQuestionDetail.length > 0) {
selectedQuestionDetail.forEach((item) => { selectedQuestionDetail.forEach((item) => {
questions.push({ questions.push({
questionId: item.id, questionId: item.questionId,
isRequired: item.required, isRequired: item.required,
sortOrder: item.sortOrder sortOrder: item.sortOrder
}) })
@ -481,38 +484,39 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => {
serverPartName: serviceObj ? serviceObj[res.serverPartId] : "", serverPartName: serviceObj ? serviceObj[res.serverPartId] : "",
serverPartId: res.serverPartId, serverPartId: res.serverPartId,
// qrUrl: "", // qrUrl: "",
questions: questions && questions.length > 0 ? questions : "", questions: questions && questions.length > 0 ? questions : [],
operator: currentUser?.operator, operator: currentUser?.operator,
status: res.status, status: res.status,
description: res.description description: res.description
} }
data = await handleAddTemplates(req) data = await handleAddTemplates(req)
console.log('datadsadsa1', data.data); console.log('datadsadsa1', data);
const myQRCodeDataUrl = await QRCode.toDataURL(`pages/walkAroundManager/index?id=${data.data.id}`); const myQRCodeDataUrl = await QRCode.toDataURL(`pages/walkAroundManager/index?id=${data.Result_Data.id}`);
const file = base64ToFile(myQRCodeDataUrl, `wenjuan${data.data.id}.png`); const file = base64ToFile(myQRCodeDataUrl, `wenjuan${data.Result_Data.id}.png`);
console.log('file', file); console.log('file', file);
const formData = new FormData(); const formData = new FormData();
formData.append("file", file, `wenjuan${data.data.id}.png`); // 确保文件名也传递 formData.append("file", file, `wenjuan${data.Result_Data.id}.png`); // 确保文件名也传递
const fileData = await handleUploadFile(formData) const fileData = await handleUploadFile(formData)
console.log('fileData', fileData); console.log('fileData', fileData);
let imgUrl: string = `https://es.eshangtech.com/${fileData.data.path}` let imgUrl: string = `https://es.eshangtech.com/${fileData.data.path}`
await handleUpdateTemplates({ await handleUpdateTemplates({
...data.data, ...data.Result_Data,
qrUrl: imgUrl qrUrl: imgUrl
}) })
setQrCodeUrl(imgUrl) setQrCodeUrl(imgUrl)
// setQrCodeUrl(myQRCodeDataUrl) // setQrCodeUrl(myQRCodeDataUrl)
} }
console.log('datadsadsa', data); console.log('datadsadsa', data);
if (data.code === 200) { if (data.Result_Code === 100) {
modalRef.current?.resetFields() modalRef.current?.resetFields()
message.success(data.message) message.success('新增成功!')
setShowPlaceModal(false) setShowPlaceModal(false)
actionRef.current?.reload() actionRef.current?.reload()
setCurrentRow(undefined) setCurrentRow(undefined)
} else { } else {
message.error(data.message) message.error(data.Result_Desc)
} }
}) })
@ -771,42 +775,46 @@ const examineModal: React.FC<{ currentUser: any }> = (props) => {
onOk={() => { onOk={() => {
console.log('selectedCloneId', selectedCloneId); console.log('selectedCloneId', selectedCloneId);
console.log('selectedCloneDetail', selectedCloneDetail); console.log('selectedCloneDetail', selectedCloneDetail);
if (selectedCloneDetail && selectedCloneDetail.length > 0) {
let res: any = []
let detailList: any = []
let idList: any = []
let list: any = selectedCloneDetail[0].questionnaireTemplateQuestions
if (list && list.length > 0) {
list.forEach((item: any) => {
detailList.push(item)
idList.push(item.question.id.toString())
if (item.question) {
let obj = JSON.parse(JSON.stringify(item.question))
let res: any = [] let str: string = ''
let detailList: any = [] if (obj.options && obj?.options.length > 0) {
let idList: any = [] obj.options.forEach((subItem: any, index: number) => {
let list: any = selectedCloneDetail[0].questionnaireTemplateQuestions str += `${index > 0 ? '' : ''}选项${index + 1}${subItem.text}`
if (list && list.length > 0) { })
list.forEach((item: any) => { }
detailList.push(item)
idList.push(item.question.id.toString())
if (item.question) {
let obj = JSON.parse(JSON.stringify(item.question))
let str: string = '' obj.text = obj.title
if (obj.options && obj?.options.length > 0) { obj.mark = JSON.stringify(obj.options)
obj.options.forEach((subItem: any, index: number) => { obj.showText = str
str += `${index > 0 ? '' : ''}选项${index + 1}${subItem.text}` res.push(obj)
})
} }
})
}
obj.text = obj.title setSelectedQuestionDetail(detailList)
obj.mark = JSON.stringify(obj.options) console.log('idList', idList);
obj.showText = str
res.push(obj) setSelectedQuestionId(idList)
}
modalRef.current?.setFieldsValue({
questions: res
}) })
handleShowCloneModal(false)
} else {
handleShowCloneModal(false)
} }
setSelectedQuestionDetail(detailList)
console.log('idList', idList);
setSelectedQuestionId(idList)
modalRef.current?.setFieldsValue({
questions: res
})
handleShowCloneModal(false)
}} }}
onCancel={() => { onCancel={() => {
handleShowCloneModal(false) handleShowCloneModal(false)

View File

@ -1,54 +1,55 @@
import requestOld from "@/utils/requestOld" import requestOld from "@/utils/requestOld"
import request from "@/utils/request" // import request from "@/utils/request"
import requestNode from "@/utils/request"
import request from "@/utils/requestJava"
// 拿到模版id列表 去绑定服务区的多个站点信息 的列表接口 // 拿到模版id列表 去绑定服务区的多个站点信息 的列表接口
export async function handleGetTemplatesList(params?: any) { export async function handleGetTemplatesList(params?: any) {
const data = await request.get('/questionnaire-templates', { params }) const data = await request.get('/questionnaire-templates', { params })
if (data.code === 200) { if (data.Result_Code === 200) {
return data.data return data.Result_Data.list
} }
return [] return []
} }
// 新建模版 // 新建模版
export async function handleAddTemplates(params?: any) { export async function handleAddTemplates(params?: any) {
const data = await request.post('/questionnaire-templates', params) const data = await request.post('/questionnaire-templates/save', params)
return data return data
} }
// 更新模版 // 更新模版
export async function handleUpdateTemplates(params?: any) { export async function handleUpdateTemplates(params?: any) {
const data = await request.post(`/questionnaire-templates/${params.id}`, params) const data = await request.post(`/questionnaire-templates/update`, params)
return data return data
} }
// 删除模版 // 删除模版
export async function handleDeleteTemplates(params?: any) { export async function handleDeleteTemplates(params?: any) {
const data = await request.get(`/questionnaire-templates/delete/${params.id}`) const data = await request.get(`/questionnaire-templates/delete`,{params})
return data return data
} }
export async function handleGetQuestionList(params?: any) { export async function handleGetQuestionList(params?: any) {
const data = await request.get(`/questions?categoryId=${params.categoryId}`,) const data = await request.get('/questions/getList', params)
if (data.code === 200) { if (data.Result_Code === 100) {
return data.data return data.Result_Data.list
} }
return [] return []
} }
// 上传图片的oss接口 // 上传图片的oss接口
export async function handleUploadFile(params?: any) { export async function handleUploadFile(params?: any) {
const data = await request.post(`/oss/upload`, params) const data = await requestNode.post(`/oss/upload`, params)
return data return data
} }
// 模版树的查询 // 模版树的查询
export async function handleSearchModalTree(params?: any) { export async function handleSearchModalTree(params?: any) {
const data = await request.post(`/questionnaire-templates/search/tree`, params) const data = await request.post(`/questionnaire-templates/search/tree`, params)
if (data.code === 200) { if (data.Result_Code === 100) {
return data.data return data.Result_Data.list
} }
return [] return []
} }

View File

@ -51,7 +51,8 @@ const addQuestion = ({ parentRow, onRef, currentUser, showQuestionModal, setShow
options: res.options, options: res.options,
status: res.status, status: res.status,
operator: currentUser?.operator, operator: currentUser?.operator,
description: `${res.categoryId && categoryIdObj ? categoryIdObj[res.categoryId] : ''}` description: `${res.categoryId && categoryIdObj ? categoryIdObj[res.categoryId] : ''}`,
category: undefined
} }
console.log('req', req); console.log('req', req);
@ -73,11 +74,11 @@ const addQuestion = ({ parentRow, onRef, currentUser, showQuestionModal, setShow
data = await handleAddQuestion(req) data = await handleAddQuestion(req)
} }
console.log('datadsadsa', data); console.log('datadsadsa', data);
if (data.code === 200) { if (data.Result_Code === 100) {
if (modalRef) { if (modalRef) {
modalRef.current?.resetFields() modalRef.current?.resetFields()
} }
message.success(data.message) message.success(data.Result_Desc)
setShowQuestionModal(false) setShowQuestionModal(false)
if (parentActionRef) { if (parentActionRef) {
parentActionRef.current?.reload() parentActionRef.current?.reload()
@ -89,7 +90,7 @@ const addQuestion = ({ parentRow, onRef, currentUser, showQuestionModal, setShow
afterAdd() afterAdd()
} }
} else { } else {
message.error(data.message) message.error(data.Result_Desc)
} }
}) })
@ -136,10 +137,12 @@ const addQuestion = ({ parentRow, onRef, currentUser, showQuestionModal, setShow
let obj: any = {} let obj: any = {}
const labelList = await handleGetExamineTypeList() const labelList = await handleGetExamineTypeList()
if (labelList && labelList.length > 0) { if (labelList && labelList.length > 0) {
labelList.forEach((item) => { labelList.forEach((item: any) => {
obj[item.id] = item.name obj[item.id] = item.name
}) })
} }
console.log('objobjobjobj', obj);
setCategoryIdObj(obj) setCategoryIdObj(obj)
return data return data
}} }}

View File

@ -168,9 +168,11 @@ const examineQuestion: React.FC<{ currentUser: any }> = (props) => {
// 删除分类 // 删除分类
const deleteQuestion = async (id: number) => { const deleteQuestion = async (id: number) => {
const data = await handleDeleteQuestion({ id: id }) const data = await handleDeleteQuestion({ id: id })
if (data.code === 200) { if (data.Result_Code === 100) {
message.success(data.message) message.success('删除成功!')
actionRef.current?.reload() actionRef.current?.reload()
} else {
message.error(data.Result_Desc)
} }
} }
@ -193,6 +195,9 @@ const examineQuestion: React.FC<{ currentUser: any }> = (props) => {
// 检查当前节点是否匹配list中的categoryId // 检查当前节点是否匹配list中的categoryId
const matchedItems = itemsToInsert.filter(item => item.categoryId === node.id); const matchedItems = itemsToInsert.filter(item => item.categoryId === node.id);
console.log('node', node);
console.log('matchedItems', matchedItems);
if (matchedItems.length > 0) { if (matchedItems.length > 0) {
// 如果匹配到初始化children数组如果不存在 // 如果匹配到初始化children数组如果不存在

View File

@ -1,29 +1,30 @@
import request from "@/utils/request" // import request from "@/utils/request"
import request from "@/utils/requestJava"
// 拿到问题列表接口 // 拿到问题列表接口
export async function handleGetQuestionList(params?: any) { export async function handleGetQuestionList(params?: any) {
const data = await request.post('/questions/search/many', params) const data = await request.post('/questions/search/many', params)
if (data.code === 200) { if (data.Result_Code === 100) {
return data.data return data.Result_Data.list
} }
return [] return []
} }
// 新增问题接口 // 新增问题接口
export async function handleAddQuestion(params?: any) { export async function handleAddQuestion(params?: any) {
const data = await request.post('/questions', params) const data = await request.post('/questions/save', params)
return data return data
} }
// 编辑问题接口 // 编辑问题接口
export async function handleEditQuestion(params?: any) { export async function handleEditQuestion(params?: any) {
const data = await request.post(`/questions/${params.id}`, params) const data = await request.post(`/questions/update`, params)
return data return data
} }
// 删除问题 // 删除问题
export async function handleDeleteQuestion(params?: any) { export async function handleDeleteQuestion(params?: any) {
const data = await request.get(`/questions/delete/${params.id}`) const data = await request.get(`/questions/delete`, { params })
return data return data
} }

View File

@ -269,8 +269,8 @@ const examineRecord: React.FC<{ currentUser: any }> = (props) => {
// 删除记录 // 删除记录
const deleteRecord = async (id: any) => { const deleteRecord = async (id: any) => {
const data = await handleDeleteRecord({ id: id }) const data = await handleDeleteRecord({ id: id })
if (data.code === 200) { if (data.Result_Code === 100) {
message.success(data.message) message.success(data.Result_Desc)
actionRef.current?.reload() actionRef.current?.reload()
} }
} }
@ -311,8 +311,8 @@ const examineRecord: React.FC<{ currentUser: any }> = (props) => {
const req: any = { const req: any = {
serverPartIds: selectedId && selectedId.length > 0 ? selectedId : [], serverPartIds: selectedId && selectedId.length > 0 ? selectedId : [],
startTime: params?.staticDate ? `${params?.staticDate}T00:00:00` : "", startTime: params?.staticDate ? `${params?.staticDate}` : "",
endTime: params?.staticDate ? `${params?.staticDate}T23:59:59` : "", endTime: params?.staticDate ? `${params?.staticDate}` : "",
// serverPartId: params?.serverPartId ? params?.serverPartId : undefined, // serverPartId: params?.serverPartId ? params?.serverPartId : undefined,
extend: params?.inspectionType ? [{ extend: params?.inspectionType ? [{
key: "situation", key: "situation",
@ -406,14 +406,14 @@ const examineRecord: React.FC<{ currentUser: any }> = (props) => {
}; };
const data = await handleUpdateExtend(recordDetailRef.current?.formRes.id, { extend: JSON.stringify(req) }) const data = await handleUpdateExtend(recordDetailRef.current?.formRes.id, { extend: JSON.stringify(req) })
if (data.code === 200) { if (data.Result_Code === 100) {
message.success('提交成功') message.success('提交成功')
setShowDetail(false) setShowDetail(false)
setShowAbnormal(false) setShowAbnormal(false)
actionRef.current?.reload() actionRef.current?.reload()
setCurrentRow(undefined) setCurrentRow(undefined)
} else { } else {
message.error(data.message) message.error(data.Result_Desc)
} }
}) })
} }
@ -439,14 +439,14 @@ const examineRecord: React.FC<{ currentUser: any }> = (props) => {
}; };
const data = await handleUpdateExtend(recordDetailRef.current?.formRes.id, { extend: JSON.stringify(req) }) const data = await handleUpdateExtend(recordDetailRef.current?.formRes.id, { extend: JSON.stringify(req) })
if (data.code === 200) { if (data.Result_Code === 100) {
message.success('提交成功') message.success('提交成功')
setShowDetail(false) setShowDetail(false)
setShowAbnormal(false) setShowAbnormal(false)
actionRef.current?.reload() actionRef.current?.reload()
setCurrentRow(undefined) setCurrentRow(undefined)
} else { } else {
message.error(data.message) message.error(data.Result_Desc)
} }
}) })
} }

View File

@ -1,11 +1,12 @@
import request from "@/utils/request" // import request from "@/utils/request"
import request from "@/utils/requestJava"
import requestMap from '@/utils/requestMap' import requestMap from '@/utils/requestMap'
// 拿到记录 // 拿到记录
export async function handleGetRecordList(params?: any) { export async function handleGetRecordList(params?: any) {
const data = await request.post('/questionnaire-responses/search/many', params) const data = await request.post('/questionnaire-responses/search/many', params)
if (data.code === 200) { if (data.Result_Code === 100) {
return data.data return data.Result_Data.list
} }
return [] return []
} }
@ -13,8 +14,8 @@ export async function handleGetRecordList(params?: any) {
// 拿到记录的树型结构 // 拿到记录的树型结构
export async function handleGetRecordTreeList(params?: any) { export async function handleGetRecordTreeList(params?: any) {
const data = await request.post('/questionnaire-responses/tree', params) const data = await request.post('/questionnaire-responses/tree', params)
if (data.code === 200) { if (data.Result_Code === 100) {
return data.data return data.Result_Data.list
} }
return [] return []
} }

View File

@ -215,6 +215,18 @@ const recordSummary: React.FC<{ currentUser: any }> = (props) => {
// "0": "正常" // "0": "正常"
// } // }
// }, // },
{
title: <div style={{ textAlign: 'center' }}></div>,
dataIndex: "createdAt",
hideInSearch: true,
width: 150,
ellipsis: true,
fixed: 'left',
align: 'center',
render: (_, record) => {
return record?.createdAt ? moment(record?.createdAt).format('YYYY-MM-DD HH:mm:ss') : '-'
}
},
{ {
title: <div style={{ textAlign: 'center' }}></div>, title: <div style={{ textAlign: 'center' }}></div>,
dataIndex: "serverPartName", dataIndex: "serverPartName",
@ -279,17 +291,7 @@ const recordSummary: React.FC<{ currentUser: any }> = (props) => {
width: 100, width: 100,
align: 'center', align: 'center',
}, },
{
title: <div style={{ textAlign: 'center' }}></div>,
dataIndex: "createdAt",
hideInSearch: true,
width: 150,
ellipsis: true,
align: 'center',
render: (_, record) => {
return record?.createdAt ? moment(record?.createdAt).format('YYYY-MM-DD HH:mm:ss') : '-'
}
},
{ {
title: <div style={{ textAlign: 'center' }}></div>, title: <div style={{ textAlign: 'center' }}></div>,
dataIndex: "userName", dataIndex: "userName",

159
src/utils/requestJava.ts Normal file
View File

@ -0,0 +1,159 @@
import axios from 'axios';
import { getDvaApp } from 'umi';
import { notification } from 'antd';
import type { AxiosRequestHeaders } from 'axios/index';
import CryptoJS from "crypto-js";
const { UMI_APP_BASEURL } = process.env;
// const instance = axios.create({ baseURL: UMI_APP_BASEURL });
// const instance = axios.create({ baseURL: 'https://api.eshangtech.com/EShangApiMain' });
// const instance = axios.create({ baseURL: 'http://home.robot-z.cn:7001/' });
// 修改baseURL为完整的API地址确保在生产环境中正确访问
// const instance = axios.create({ baseURL: 'https://es.robot-z.cn' });
const instance = axios.create({ baseURL: 'http://10.104.1.161:8070/platform' });
instance.interceptors.request.use(
(config) => {
// 对data数据进行加密
// if (config.data) {
// config.data = preprocessData(JSON.stringify(config.data)); // 调用预处理函数
//
const isUpload = config.url?.includes("/oss/upload");
let token = localStorage.getItem('Authorization') || ''
config.headers = {
...config.headers,
Authorization: token ? `Bearer ${token}` : "",
"Content-Type": isUpload ? "multipart/form-data" : "application/json;charset=utf-8",
} as AxiosRequestHeaders;
return config;
},
(error) => Promise.reject(error),
);
instance.interceptors.response.use(
//状态码为2xx的时候执行
(response) => {
const { data } = response;
if (data.Result_Code !== 100) {
notification.error({
message: data.message,
});
}
const timestamp = getFormattedDate()
return data
},
//状态码不是2xx的时候执行
(error) => {
const { response } = error;
if (response && response.status === 401) {
// // 清除本地存储的token
// localStorage.removeItem('Authorization');
// // 重定向到登录页
// window.location.href = '/user/login';
// notification.error({
// message: response?.data?.message || '请求失败',
// description: error.message
// });
} else {
notification.error({
message: response?.data?.message || '请求失败',
description: error.message
});
}
return Promise.reject({
Result_Code: response?.status || 500,
Result_Desc: response?.data?.message || '请求失败'
});
},
);
// 加密
const encryptAESECB = (data: string, key: string) => {
// const cipher = CryptoJS.createCipheriv('aes-128-ecb', key, null); // ECB 模式不需要 IV
const newKey = CryptoJS.enc.Utf8.parse(key); // 密钥必须是 16 字节
const cipher = CryptoJS.AES.encrypt(data, newKey, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
let encrypted = cipher.ciphertext.toString(CryptoJS.enc.Hex);
// let encrypted = cipher.update(data, 'utf8', 'hex');
// encrypted += cipher.final('hex');
return encrypted;
}
// 解密
const decryptAESECB = (data: string, key: string) => {
// const decipher = CryptoJS.createDecipheriv('aes-128-ecb', key, null);
// let decrypted = decipher.update(data, 'hex', 'utf8');
// decrypted += decipher.final('utf8');
const newKey = CryptoJS.enc.Utf8.parse(key);
const encryptedData = CryptoJS.enc.Hex.parse(data);
// 解密操作
const decrypted = CryptoJS.AES.decrypt({ ciphertext: encryptedData }, newKey, {
mode: CryptoJS.mode.ECB, // ECB 模式
padding: CryptoJS.pad.Pkcs7 // PKCS7 填充方式
});
// 将解密后的结果转为 UTF-8 字符串
const decryptedText = decrypted.toString(CryptoJS.enc.Utf8);
return decryptedText;
}
// md5 签名
const md5 = (key: string, data: string, timestamp: string) => {
const text = "s" + key + data + timestamp;
return CryptoJS.MD5(text).toString(CryptoJS.enc.Hex);
}
// 生成签名戳
const getFormattedDate = () => {
const date = new Date();
const year = date.getFullYear(); // 获取年份 (yyyy)
const month = String(date.getMonth() + 1).padStart(2, '0'); // 获取月份 (MM)
const day = String(date.getDate()).padStart(2, '0'); // 获取日期 (dd)
const hours = String(date.getHours()).padStart(2, '0'); // 获取小时 (HH)
return `es0${year}${month}${day}${hours}0es`; // 拼接成 yyyyMMddHH 格式
}
// 加密方法
const preprocessData = (data: string) => {
console.log('data', data);
// YYYYMMDD
let timestamp = getFormattedDate()
console.log('timestamp', timestamp);
// 秒为单位的时间戳
let timeSecond = parseInt((new Date().getTime() / 1000).toString())
console.log('timeSecond', timeSecond);
// 数据的加密
let encryptionData = encryptAESECB(data, timestamp)
console.log('encryptionData', encryptionData);
// md5签名方法
let md5Data = md5(timestamp, encryptionData, timestamp)
console.log('md5Data', md5Data);
let res = {
data: encryptionData,
timestamp: timeSecond,
sign: md5Data
}
console.log('res', res);
return res
}
export default instance;