diff --git a/.env.development b/.env.development
index 7b4c4e1..1471aa8 100644
--- a/.env.development
+++ b/.env.development
@@ -6,3 +6,5 @@ VITE_APP_ENV = 'development'
# 媒介管理系统/开发环境
VITE_APP_BASE_API = '/dev-api'
+
+VITE_APP_Analysis_API = '/ppt-analysis-api'
\ No newline at end of file
diff --git a/.env.production b/.env.production
index 4f702e7..94517e1 100644
--- a/.env.production
+++ b/.env.production
@@ -6,6 +6,8 @@ VITE_APP_ENV = 'production'
# 媒介管理系统/生产环境
VITE_APP_BASE_API = '/prod-api'
+
+VITE_APP_Analysis_API = '/ppt-analysis-api'
# 是否在打包时开启压缩,支持 gzip 和 brotli
VITE_BUILD_COMPRESS = gzip
\ No newline at end of file
diff --git a/src/api/pptAnalysis.js b/src/api/pptAnalysis.js
index 0f2e724..5a9ef79 100644
--- a/src/api/pptAnalysis.js
+++ b/src/api/pptAnalysis.js
@@ -1,9 +1,9 @@
-import request from '@/utils/request'
+import request from '@/utils/requestAnalysis'
// 上传PPT分析文件
export function uploadPPTAnalysisFile(query) {
return request({
- url: '/upload',
+ url: '/api/upload',
method: 'post',
data: query,
timeout: 300000, // 300秒 = 5分钟,根据文件大小调整
@@ -16,7 +16,7 @@ export function uploadPPTAnalysisFile(query) {
// 获取PPT分析任务分页列表
export function pptAnalysisTaskPageList(query) {
return request({
- url: '/tasks',
+ url: '/api/tasks',
method: 'get',
params: query
})
@@ -25,7 +25,7 @@ export function pptAnalysisTaskPageList(query) {
// 获取PPT分析统计
export function pptAnalysisStatistics(query) {
return request({
- url: '/statistics',
+ url: '/api/statistics',
method: 'get',
params: query
})
@@ -34,7 +34,7 @@ export function pptAnalysisStatistics(query) {
// 删除PPT分析任务
export function deletePPTAnalysisTask(taskId) {
return request({
- url: '/tasks/' + taskId,
+ url: '/api/tasks/' + taskId,
method: 'DELETE'
})
}
@@ -42,7 +42,7 @@ export function deletePPTAnalysisTask(taskId) {
// 导出PPT分析报告
export function exportPPTAnalysisReport(taskId) {
return request({
- url: '/export/' + taskId,
+ url: '/api/export/' + taskId,
method: 'get',
responseType: 'blob'
})
diff --git a/src/utils/requestAnalysis.js b/src/utils/requestAnalysis.js
new file mode 100644
index 0000000..2c48021
--- /dev/null
+++ b/src/utils/requestAnalysis.js
@@ -0,0 +1,152 @@
+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'
+
+let downloadLoadingInstance
+// 是否显示重新登录
+export let isRelogin = { show: false }
+
+axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
+// 创建axios实例
+const service = axios.create({
+ // axios中请求配置有baseURL选项,表示请求URL公共部分
+ baseURL: import.meta.env.VITE_APP_Analysis_API,
+ // 超时
+ timeout: 10000
+})
+
+// request拦截器
+service.interceptors.request.use(config => {
+ // 是否需要设置 token
+ const isToken = (config.headers || {}).isToken === false
+ // 是否需要防止数据重复提交
+ const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
+ if (getToken() && !isToken) {
+ config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+ }
+ // get请求映射params参数
+ 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 = Object.keys(JSON.stringify(requestObj)).length // 请求数据大小
+ const limitSize = 5 * 1024 * 1024 // 限制存放数据5M
+ if (requestSize >= limitSize) {
+ console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。')
+ return config
+ }
+ const sessionObj = cache.session.getJSON('sessionObj')
+ if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
+ cache.session.setJSON('sessionObj', requestObj)
+ } else {
+ const s_url = sessionObj.url // 请求地址
+ const s_data = sessionObj.data // 请求数据
+ const s_time = sessionObj.time // 请求时间
+ const interval = 1000 // 间隔时间(ms),小于此时间视为重复提交
+ 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))
+ } else {
+ cache.session.setJSON('sessionObj', requestObj)
+ }
+ }
+ }
+ return config
+}, error => {
+ console.log(error)
+ 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
+ }
+ if (code === 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('无效的会话,或者会话已过期,请重新登录。')
+ } else if (code === 500) {
+ ElMessage({ message: msg, type: 'error' })
+ return Promise.reject(new Error(msg))
+ } else if (code === 601) {
+ ElMessage({ message: msg, type: 'warning' })
+ return Promise.reject(new Error(msg))
+ } else if (code !== 200) {
+ ElNotification.error({ title: msg })
+ return Promise.reject('error')
+ } else {
+ return Promise.resolve(res.data)
+ }
+ },
+ error => {
+ console.log('err' + error)
+ let { message } = error
+ if (message == "Network Error") {
+ message = "后端接口连接异常"
+ } else if (message.includes("timeout")) {
+ message = "系统接口请求超时"
+ } else if (message.includes("Request failed with status code")) {
+ message = "系统接口" + message.substr(message.length - 3) + "异常"
+ }
+ ElMessage({ message: message, type: 'error', duration: 5 * 1000 })
+ 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) => { return 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
diff --git a/src/views/mediaLibrary/importPrice.vue b/src/views/mediaLibrary/importPrice.vue
index dcc0b4c..c34912b 100644
--- a/src/views/mediaLibrary/importPrice.vue
+++ b/src/views/mediaLibrary/importPrice.vue
@@ -39,12 +39,12 @@ const mediaType = ref(null)
const docUploadList = ref([])
// 自定义上传文件资料
-const requestDocUpload = (options) => {
+const requestDocUpload = (options) => {
proxy.$modal.loading('正在上传文件,请耐心等待...')
const { file } = options
var formData = new FormData();
formData.append('mediaType', mediaType.value);
- formData.append('file', file);
+ formData.append('file', file);
importPriceByExcel(formData).then(res => {
if (res.code == 200) {
proxy.$modal.msgSuccess("导入成功")
@@ -54,6 +54,9 @@ const requestDocUpload = (options) => {
proxy.$modal.closeLoading()
proxy.$modal.msgError(res.msg);
}
+ }).catch(error => {
+ proxy.$modal.closeLoading()
+ proxy.$modal.msgError(res.msg);
})
}
//自定义上传文件资料校验
diff --git a/src/views/mediaMap/index.vue b/src/views/mediaMap/index.vue
index 8b456c3..0f6f377 100644
--- a/src/views/mediaMap/index.vue
+++ b/src/views/mediaMap/index.vue
@@ -627,8 +627,8 @@ const renderMassMarks = () => {
mediaByMap(queryParams.value).then(res => {
if (res.code == 200) {
res.data.forEach(itemPoint => {
- if (itemPoint.businessType == 1) points.value.push({ "lnglat": [itemPoint.x, itemPoint.y], "mediaId": itemPoint.mediaId, "style": 0 })
- if (itemPoint.businessType == 2) points.value.push({ "lnglat": [itemPoint.x, itemPoint.y], "mediaId": itemPoint.mediaId, "style": 1 })
+ if (itemPoint.dataScopeDeptId == 220) points.value.push({ "lnglat": [itemPoint.x, itemPoint.y], "mediaId": itemPoint.mediaId, "style": 0 })
+ if (itemPoint.dataScopeDeptId == 219) points.value.push({ "lnglat": [itemPoint.x, itemPoint.y], "mediaId": itemPoint.mediaId, "style": 1 })
});
}
}).then(res => {
diff --git a/src/views/mediaTool/geoConvertIndex.vue b/src/views/mediaTool/geoConvertIndex.vue
index 0c5e125..49d9fd8 100644
--- a/src/views/mediaTool/geoConvertIndex.vue
+++ b/src/views/mediaTool/geoConvertIndex.vue
@@ -178,10 +178,10 @@ const addBusGeoConvertTask = () => {
}
// 开始执行
const handleStartTask = (row) => {
- // if (row.state == 1) {
- // proxy.$modal.msgSuccess("任务已经开始,请等待...")
- // return
- // }
+ if (row.state == 1) {
+ proxy.$modal.msgSuccess("任务已经开始,请等待...")
+ return
+ }
startBusGeoConvert({ id: row.id }).then(res => {
if (res.code == 200) {
getTaskRecordPageList()
@@ -192,8 +192,7 @@ const handleStartTask = (row) => {
// 结果操作
const handleResultOption = (row) => {
- if (row.progress == '0') {
-
+ if (row.state !== 2) {
return
}
exportBusGeoConvert({ id: row.id }).then(res => {
diff --git a/src/views/mediaTool/pptAnalysisIndex.vue b/src/views/mediaTool/pptAnalysisIndex.vue
index b6db618..12394c5 100644
--- a/src/views/mediaTool/pptAnalysisIndex.vue
+++ b/src/views/mediaTool/pptAnalysisIndex.vue
@@ -27,76 +27,63 @@