// import axios from 'axios'
// import { ElNotification, ElMessageBox, ElMessage, ElLoading } from 'element-plus'
// import { getToken } from '@/utils/auth'
// import errorCode from '@/utils/errorCode'
// import { tansParams, blobValidate } from '@/utils/ruoyi'
// import cache from '@/plugins/cache'
// import { saveAs } from 'file-saver'
// import useUserStore from '@/store/modules/user'

// const TIMEOUT = 10000
// const REPEAT_SUBMIT_DEFAULT_INTERVAL = 1000
// const CACHE_SIZE_LIMIT = 5 * 1024 * 1024
// const ERROR_MESSAGE_DURATION = 5000

// let downloadLoadingInstance: any
// export let isRelogin = { show: false }

// axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'

// const service = axios.create({
//   baseURL: import.meta.env.VITE_APP_BASE_API,
//   timeout: TIMEOUT
// })

// service.interceptors.request.use(
//   config => {
//     const isToken = (config.headers || {}).isToken === false
//     const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
//     const interval = (config.headers || {}).interval || REPEAT_SUBMIT_DEFAULT_INTERVAL

//     if (getToken() && !isToken) {
//       config.headers['Authorization'] = 'Bearer ' + getToken()
//     }

//     if (config.method === 'get' && config.params) {
//       let url = config.url + '?' + tansParams(config.params)
//       url = url.slice(0, -1)
//       config.params = {}
//       config.url = url
//     }

//     if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
//       const requestObj = {
//         url: config.url,
//         data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
//         time: new Date().getTime()
//       }
//       const requestSize = JSON.stringify(requestObj).length

//       if (requestSize >= CACHE_SIZE_LIMIT) {
//         console.warn(`[${config.url}]: 请求数据大小超出允许的5M限制，无法进行防重复提交验证。`)
//         return config
//       }

//       const sessionObj = cache.session.getJSON('sessionObj')
//       if (!sessionObj) {
//         cache.session.setJSON('sessionObj', requestObj)
//       } else {
//         const { url: s_url, data: s_data, time: s_time } = sessionObj
//         if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
//           const message = '数据正在处理，请勿重复提交'
//           console.warn(`[${s_url}]: ${message}`)
//           return Promise.reject(new Error(message))
//         }
//         cache.session.setJSON('sessionObj', requestObj)
//       }
//     }
//     return config
//   },
//   error => {
//     console.log(error)
//     return Promise.reject(error)
//   }
// )

// service.interceptors.response.use(
//   res => {
//     const code = res.data.code || 200
//     const msg = errorCode[code] || res.data.msg || errorCode['default']

//     if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
//       return res.data
//     }

//     const codeHandlers = {
//       401: () => {
//         if (!isRelogin.show) {
//           isRelogin.show = true
//           ElMessageBox.confirm('登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', {
//             confirmButtonText: '重新登录',
//             cancelButtonText: '取消',
//             type: 'warning'
//           })
//             .then(() => {
//               isRelogin.show = false
//               useUserStore()
//                 .logOut()
//                 .then(() => {
//                   location.href = '/index'
//                 })
//             })
//             .catch(() => {
//               isRelogin.show = false
//             })
//         }
//         return Promise.reject('无效的会话，或者会话已过期，请重新登录。')
//       },
//       500: () => {
//         ElMessage({ message: msg, type: 'error' })
//         return Promise.reject(new Error(msg))
//       },
//       601: () => {
//         ElMessage({ message: msg, type: 'warning' })
//         return Promise.reject(new Error(msg))
//       }
//     }

//     if (codeHandlers[code]) {
//       return codeHandlers[code]()
//     }

//     if (code !== 200) {
//       ElNotification.error({ title: msg })
//       return Promise.reject('error')
//     }

//     return Promise.resolve(res.data)
//   },
//   error => {
//     console.log('err' + error)
//     let { message } = error

//     const errorMessages = {
//       'Network Error': '后端接口连接异常',
//       timeout: '系统接口请求超时',
//       'Request failed with status code': `系统接口${message.slice(-3)}异常`
//     }

//     for (const [key, value] of Object.entries(errorMessages)) {
//       if (message.includes(key)) {
//         message = value
//         break
//       }
//     }

//     ElMessage({ message, type: 'error', duration: ERROR_MESSAGE_DURATION })
//     return Promise.reject(error)
//   }
// )

// export function download(url, params, filename, config) {
//   downloadLoadingInstance = ElLoading.service({
//     text: '正在下载数据，请稍候',
//     background: 'rgba(0, 0, 0, 0.7)'
//   })

//   return service
//     .post(url, params, {
//       transformRequest: [params => tansParams(params)],
//       headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
//       responseType: 'blob',
//       ...config
//     })
//     .then(async data => {
//       const isBlob = blobValidate(data)
//       if (isBlob) {
//         const blob = new Blob([data])
//         saveAs(blob, filename)
//       } else {
//         const resText = await data.text()
//         const rspObj = JSON.parse(resText)
//         const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
//         ElMessage.error(errMsg)
//       }
//       downloadLoadingInstance.close()
//     })
//     .catch(r => {
//       console.error(r)
//       ElMessage.error('下载文件出现错误，请联系管理员！')
//       downloadLoadingInstance.close()
//     })
// }

// export default service
