Compare commits

...

2 Commits
dev ... zln

Author SHA1 Message Date
donghaolin 07ab46dcfa 合并dev 1 month ago
zhaoln 499f0e560f 封装请求 1 month ago
  1. 1
      gold-system/.env.development
  2. 1
      gold-system/.env.production
  3. 2
      gold-system/package.json
  4. 35
      gold-system/src/api/index.js
  5. 60
      gold-system/src/util/http.js
  6. 38
      gold-system/src/util/request.js
  7. 29
      gold-system/src/views/login.vue
  8. 68
      gold-system/vite.config.ts

1
gold-system/.env.development

@ -0,0 +1 @@
VITE_API_BASE='http://54.251.137.151:10704/'

1
gold-system/.env.production

@ -0,0 +1 @@
VITE_API_BASE=http://54.251.137.151:10702/

2
gold-system/package.json

@ -4,7 +4,7 @@
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite --host 0.0.0.0",
"dev": "vite --host",
"build": "vue-tsc -b && vite build",
"preview": "vite preview",
"serve": "vite - service serve --host 0.0.0.0 --port 8080"

35
gold-system/src/api/index.js

@ -1,13 +1,26 @@
import { pa } from 'element-plus/es/locales.mjs';
import http from '../util/http.js';
import request from './request'
const API={
post: function(url,data){
return http({url:url,method:'post',data:data})
},
postN: function(url,params){
return http({url:url,method:'post',params:params})
},
};
export default function requestHandler(options) {
const { method = 'get', url, data = {}, params = {}, headers = {} } = options
export default API;
return request({
method,
url,
data,
params,
headers
})
.then(({ status, data, statusText }) => {
if (status === 200) {
return data
} else {
throw new Error(statusText)
}
})
.catch(error => {
if (error?.needsLogin) {
return { needsLogin: true }
}
return Promise.reject(error)
})
}

60
gold-system/src/util/http.js

@ -1,48 +1,26 @@
import axios from 'axios';
import request from './request'
export default function requestHandler(options) {
const { method = 'get', url, data = {}, params = {}, headers = {} } = options
export default function (options) {
//配置每次发送请求都从localStorage中获取名字叫token的数据,
//添加到请求头部的Authorization属性中
const token = localStorage.getItem('token');
//Object.assign用于合并对象的数据
options.data.token = token;
// options.headers = Object.assign(
// { token: token },
// options.headers || {}
// );
//axios() 返回一个promise对象,用于异步请求
//options是一个对象,其中包含了许多用于配置请求的参数,
//例如请求的url、请求方法(GET、POST等)、请求头等
return axios(options)
return request({
method,
url,
data,
params,
headers
})
.then(({ status, data, statusText }) => {
//该函数在请求成功并返回数据时被调用
//status:HTTP状态码,例如200表示请求成功。
//data:服务器返回的数据。
// statusText:HTTP状态文本,例如"OK"表示请求成功。
// console.log(data);
if (status == 200) {
return data;
if (status === 200) {
return data
} else {
throw new e(statusText);
throw new Error(statusText)
}
})
.catch(error => {
if (error?.needsLogin) {
return { needsLogin: true }
}
return Promise.reject(error)
})
.catch(e=>{
// 检查是否是因为token过期导致的401错误
if (e.response && e.response.status === 401) {
// 获取机器码
const machineId = localStorage.getItem('machineId');
// 清除localStorage中的token
localStorage.removeItem('token');
// // 执行重新登录的逻辑,例如跳转到登录页面
router.push("/login?machineId=" + machineId);
// 可以在这里返回一个特定的值或者对象,以便调用者知道需要重新登录
return { needsLogin: true };
} else {
// 其他类型的错误,直接抛出
return Promise.reject(e);
}
});
}

38
gold-system/src/util/request.js

@ -0,0 +1,38 @@
import axios from 'axios'
const service = axios.create({
baseURL: import.meta.env.VITE_API_BASE,
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
})
// 请求拦截器
service.interceptors.request.use(config => {
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
}, error => {
return Promise.reject(error)
})
// 响应拦截器
service.interceptors.response.use(
response => {
return response
},
error => {
const { response } = error
if (response && response.status === 401) {
const machineId = localStorage.getItem('machineId')
localStorage.removeItem('token')
window.location.href = `/login?machineId=${machineId}`
return Promise.resolve({ needsLogin: true })
}
return Promise.reject(error)
}
)
export default service

29
gold-system/src/views/login.vue

@ -2,6 +2,7 @@
import { ref, onMounted, reactive, computed } from "vue";
import { ElMessage } from "element-plus";
import axios from "axios";
import request from "@/util/http";
import { useRouter } from "vue-router";
import { VscGlobe } from "vue-icons-plus/vsc";
@ -34,20 +35,20 @@ const form = ref({ jwcode: "", password: "", token: "", machineId: machineId });
//
const login = async function () {
try {
const result = await axios.post(
"http://54.251.137.151:10702/admin/login",
form.value
);
if (result.data.code == 200) {
localStorage.setItem("token", result.data.msg);
localStorage.setItem("permission", result.data.data.permission);
const result = await request({
url: "/admin/login",
method: "post",
data: form.value,
});
console.log("resultresult", result);
if (result.code == 200) {
localStorage.setItem("token", result.msg);
localStorage.setItem("permission", result.data.permission);
if (
result.data.data.permission == "5" ||
result.data.data.permission == "1" ||
result.data.data.permission == "2" ||
result.data.data.permission == "3"
result.data.permission == "5" ||
result.data.permission == "1" ||
result.data.permission == "2" ||
result.data.permission == "3"
) {
router.push("/workspace");
} else if (result.data.data.permission == "4") {
@ -58,7 +59,7 @@ const login = async function () {
} else {
form.value.password = "";
form.value.jwcode = "";
ElMessage.error(result.data.msg);
ElMessage.error(result.msg);
}
} catch (error) {
console.log("请求失败", error);

68
gold-system/vite.config.ts

@ -1,42 +1,42 @@
import { defineConfig } from 'vite'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { lazyImport, VxeResolver } from 'vite-plugin-lazy-import'
import legacy from '@vitejs/plugin-legacy';
import legacy from '@vitejs/plugin-legacy'
import path from 'path'
// https://vite.dev/config/
export default defineConfig({
esbuild: {
supported: {
bigint: true
}
},
plugins: [vue(),
legacy({
targets: ['defaults', 'not IE 11', 'chrome >=73'],
modernPolyfills: true
}),
lazyImport({
resolvers: [
VxeResolver({
libraryName: 'vxe-table'
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd())
console.log('当前环境:', mode)
console.log('当前环境变量:', env)
return {
esbuild: {
supported: {
bigint: true
}
},
plugins: [
vue(),
legacy({
targets: ['defaults', 'not IE 11', 'chrome >=73'],
modernPolyfills: true
}),
VxeResolver({
libraryName: 'vxe-pc-ui'
lazyImport({
resolvers: [
VxeResolver({
libraryName: 'vxe-table'
}),
VxeResolver({
libraryName: 'vxe-pc-ui'
})
]
})
]
})
],
server: {
proxy: {
'/hwjb': {
// target: 'http://54.251.137.151:10704',
target: 'http://192.168.8.93:10702',
// target: 'http://54.251.137.151:10702',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/hwjb/, ''),
},
],
resolve: {
alias: {
'@': path.resolve(__dirname, './src')
}
},
},
// base: process.env.NODE_ENV === "production" ? "/gold_html_dev/" : "/",
base: process.env.NODE_ENV === "production" ? "./" : "/",
base: process.env.NODE_ENV === 'production' ? './' : '/'
}
})
Loading…
Cancel
Save