//vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = {
// 关闭eslint
lintOnSave: false,
// 代理跨域
devServer: {
proxy: {
'/api': {
target: 'http://localhost:8989',
pathRewrite: { '^/api': '' }
}
}
}
}
npm install axios
{{ scope.row.filename }}
{{ scope.row.filepath }}
{{ scope.row.uploadtime }}
{{ scope.row.status }}
Vue组件的script部分定义了一个名为fetchData的方法,使用axios发送GET请求来获取服务器上的数据。
该方法在组件创建时调用,通过将数据存储在uploadLogList数组中来更新组件的状态。
代码执行的流程如下:
首先,在组件创建时,created钩子函数被调用。
在created钩子函数中,调用了fetchData方法来获取数据。
fetchData方法使用axios发送GET请求,请求服务器上的'/dev-upload/uploadFiles/listAll'资源。
如果请求成功,服务器将返回一个状态码和数据。在这个组件中,检查状态码是否为200。
如果状态码为200,则将数据存储在uploadLogList数组中。这将自动更新组件的状态,并重新渲染组件以显示这些数据。
如果状态码不为200,则在控制台中输出错误信息。
如果请求失败,则将错误信息打印到控制台中。
组件完成渲染,此时表格应该显示从服务器获取的数据。
总的来说,该组件通过fetchData方法获取数据,使用axios发送GET请求来请求服务器上的数据。如果请求成功,则将数据存储在uploadLogList数组中,如果请求失败,则在控制台中输出错误信息。在组件创建时和每次请求数据时都会调用fetchData方法,以确保在组件渲染之前已获取到数据。
import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
// 创建一个axios实例
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // 接口的基础路径
timeout: 5000 // 请求超时时间
})
// 请求拦截器
service.interceptors.request.use(
config => {
// 在请求发送前做一些处理
if (store.getters.token) {
// 如果有token就在请求头中加上token
config.headers['token'] = getToken()
}
return config
},
error => {
// 对请求错误做些什么
console.log(error)
return Promise.reject(error)
}
)
// 响应拦截器
service.interceptors.response.use(
response => {
// 对响应数据做一些处理,这里只返回响应数据中的data部分
const res = response.data
// 如果自定义的响应码不是20000,就判断为错误
if (res.code !== 20000 && res.code !== 200) {
// 在页面上显示错误信息
Message({
message: res.message || 'Error',
type: 'error',
duration: 5 * 1000
})
if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// 重新登录
MessageBox.confirm('您已经登出,您可以取消以留在此页面,或重新登录', '确认登出', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
})
}
// 返回一个被拒绝的Promise对象,用来表示错误
return Promise.reject(new Error(res.message || 'Error'))
} else {
// 如果没有错误,就返回响应数据中的data部分
return res
}
},
error => {
// 对响应错误做些什么
console.log('err' + error)
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
export default service
// api/upload.js
// 当前这个模块:api进行统一管理
import request from '@/api/request/request-upload'
// 上传文件
//普通函数形式 export default { methods: { listAllInfo() { axios.get('/uploadlogs/listAll').then(response => { console.log(response.data); }).catch(error => { console.error(error); }); } } }
export const uploadFiles = (formData) => request({
url: '/uploadExcel',
method: 'post',
data: formData,
headers: {
'Content-Type': 'multipart/form-data'
}
});
// 获取上传文件日志接口
export const reqListAllInfo = () =>request({
url:'/uploadFiles/listAll',
method: 'get'
});
// /api/index.js
// 将模块的接口函数统一引入
import * as table from './table';
import * as upload from './upload';
import * as user from './user';
// 统一对外暴露
export default {
table,
upload,
user
}
// main.js 全局封装API
import API from '@/api';
Vue.prototype.$API= API;
Vue组件的script定义了一个名为getPageList的异步方法,使用$API.upload.reqListAllInfo方法来获取服务器上的数据。
该方法在组件挂载后调用,通过将数据存储在uploadLogList数组中来更新组件的状态。
代码执行的流程如下:
1、首先,在组件挂载后,mounted钩子函数被调用。
2、在mounted钩子函数中,调用了getPageList方法来获取数据。
3、getPageList方法使用await关键字等待$API.upload.reqListAllInfo方法返回的结果。
4、$API.upload.reqListAllInfo方法将发送一个GET请求,请求服务器上的数据。
5、 如果请求成功,服务器将返回一个状态码和数据。在这个组件中,检查状态码是否为200。
6、如果状态码为200,则将数据存储在uploadLogList数组中。这将自动更新组件的状态,并重新渲染组件以显示这些数据。
7、如果状态码不为200,则在控制台中输出错误信息。
8、如果请求失败,则将错误信息打印到控制台中。
9、组件完成渲染,此时表格应该显示从服务器获取的数据。
总的来说,该组件通过getPageList方法获取数据,使用$API.upload.reqListAllInfo方法 来请求服务器上的数据。如果请求成功,则将数据存储在uploadLogList数组中,如果 请求失败,则在控制台中输出错误信息。在组件挂载后调用getPageList方法,以确保在组件渲染之前已获取到数据。
npm install vuex
main.js
引入总仓库并注册仓库//引入总仓库并注册
import store from './store'
new Vue({
// 注册仓库:组件实例的身上会多一个属性$store属性
store,
render: h => h(App)
}).$mount('#app')
在src下store文件夹index.js 中引入Vuex和小仓库(在src下store文件夹下新建use文件夹-index.js 用来存储user的状态数据)
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
// 引入小仓库
import user from './uploadfile'
// 对外暴露Store类的一个实例
export default new Vuex.Store ({
// 实现Vuex仓库模块式开发存储数据
modules:{
uploadfile,
}
});
import { reqListAllInfo } from '@/api/upload';
const state = {
uploadLogList: [],
};
const mutations = {
SET_UPLOAD_LOG_LIST(state, uploadLogList) {
state.uploadLogList = uploadLogList;
},
};
const actions = {
async fetchUploadLogList({ commit }) {
try {
const result = await reqListAllInfo();
if (result.code === 200) {
commit("SET_UPLOAD_LOG_LIST", result.data);
} else {
throw new Error('fail');
}
} catch (error) {
console.error(error);
}
},
};
const getters = {};
export default {
namespaced: true,
state,
mutations,
actions,
getters,
};