chengqf 2 years ago
commit 410eb7d551

1
.gitignore vendored

@ -20,6 +20,5 @@ UDI_WMS_NEW/
*.sln *.sln
*.local *.local
/vue.config.js
package-lock.json package-lock.json
yarn.lock yarn.lock

@ -1,4 +1,4 @@
import request from '@/utils/request' import request from "@/utils/request";
// 登录方法 // 登录方法
export function login(username, password, code, uuid) { export function login(username, password, code, uuid) {
@ -6,66 +6,83 @@ export function login(username, password, code, uuid) {
username, username,
password, password,
code, code,
uuid uuid,
} };
return request({ return request({
url: '/login', url: "/login",
headers: { headers: {
isToken: false isToken: false,
}, },
method: 'post', method: "post",
data: data data: data,
}) });
} }
// 注册方法 // 注册方法
export function register(data) { export function register(data) {
return request({ return request({
url: '/register', url: "/register",
headers: { headers: {
isToken: false isToken: false,
}, },
method: 'post', method: "post",
data: data data: data,
}) });
} }
// 获取用户详细信息 // 获取用户详细信息
export function getInfo() { export function getInfo() {
return request({ return request({
url: '/getInfo', url: "/getInfo",
method: 'get' method: "get",
}) });
} }
// 退出方法 // 退出方法
export function logout() { export function logout() {
return request({ return request({
url: '/admin/auth/login/out', url: "/admin/auth/login/out",
method: 'post' method: "post",
}) });
} }
// 获取验证码 // 获取验证码
export function getCodeImg() { export function getCodeImg() {
return request({ return request({
url: '/captchaImage', url: "/captchaImage",
headers: { headers: {
isToken: false isToken: false,
}, },
method: 'get', method: "get",
timeout: 20000 timeout: 20000,
}) });
} }
// 短信验证码 // 短信验证码
export function getCodeSms() { export function getCodeSms() {
return request({ return request({
url: '/captchaSms', url: "/captchaSms",
headers: { headers: {
isToken: false isToken: false,
}, },
method: 'get', method: "get",
timeout: 20000 timeout: 20000,
}) });
}
// 获取注册短信手机验证码
export function getCodeImg2(data) {
return request({
url: "/admin/auth/register/getCheckcode",
method: "post",
data,
});
}
//验证验证码
export function getCodeSms2(data) {
return request({
url: "/admin/auth/register/checkCode",
method: "post",
data,
});
} }

@ -1,110 +1,132 @@
import axios from 'axios' import axios from "axios";
import {Notification, MessageBox, Message, Loading} from 'element-ui' import { Notification, MessageBox, Message, Loading } from "element-ui";
import store from '@/store' import store from "@/store";
import {getAdminId, getToken} from '@/utils/auth' import { getAdminId, getToken } from "@/utils/auth";
import errorCode from '@/utils/errorCode' import errorCode from "@/utils/errorCode";
import {tansParams, blobValidate} from "@/utils/ruoyi"; import { tansParams, blobValidate } from "@/utils/ruoyi";
import cache from '@/plugins/cache' import cache from "@/plugins/cache";
import {saveAs} from 'file-saver' import { saveAs } from "file-saver";
let downloadLoadingInstance; let downloadLoadingInstance;
// 是否显示重新登录 // 是否显示重新登录
export let isRelogin = {show: false}; export let isRelogin = { show: false };
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
// 对应国际化资源文件后缀 // 对应国际化资源文件后缀
axios.defaults.headers['Content-Language'] = 'zh_CN' axios.defaults.headers["Content-Language"] = "zh_CN";
// 创建axios实例 // 创建axios实例
const service = axios.create({ const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分 // axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API, baseURL: process.env.VUE_APP_BASE_API,
// 超时 // 超时
timeout: 10000 timeout: 10000,
}) });
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(
// 是否需要设置 token (config) => {
const isToken = (config.headers || {}).isToken === false // 是否需要设置 token
// 是否需要防止数据重复提交 const isToken = (config.headers || {}).isToken === false;
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false // 是否需要防止数据重复提交
if (getToken() && !isToken) { const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
// config.headers['ADMIN_TOKEN'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 if (getToken() && !isToken) {
// config.headers['ADMIN_TOKEN'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
config.headers = {
config.headers = { ADMIN_ID: getAdminId(),
ADMIN_ID: getAdminId(), ADMIN_TOKEN: getToken(),
ADMIN_TOKEN: getToken() };
};
}
// 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 sessionObj = cache.session.getJSON('sessionObj') // get请求映射params参数
if (sessionObj === undefined || sessionObj === null || sessionObj === '') { if (config.method === "get" && config.params) {
cache.session.setJSON('sessionObj', requestObj) let url = config.url + "?" + tansParams(config.params);
} else { url = url.slice(0, -1);
const s_url = sessionObj.url; // 请求地址 config.params = {};
const s_data = sessionObj.data; // 请求数据 config.url = url;
const s_time = sessionObj.time; // 请求时间 }
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 if (
if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { !isRepeatSubmit &&
const message = '数据正在处理,请勿重复提交'; (config.method === "post" || config.method === "put")
console.warn(`[${s_url}]: ` + message) ) {
return Promise.reject(new Error(message)) const requestObj = {
url: config.url,
data:
typeof config.data === "object"
? JSON.stringify(config.data)
: config.data,
time: new Date().getTime(),
};
const sessionObj = cache.session.getJSON("sessionObj");
if (
sessionObj === undefined ||
sessionObj === null ||
sessionObj === ""
) {
cache.session.setJSON("sessionObj", requestObj);
} else { } else {
cache.session.setJSON('sessionObj', requestObj) 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("2", error);
Promise.reject(error);
} }
return config );
}, error => {
console.log(error)
Promise.reject(error)
})
// 响应拦截器 // 响应拦截器
service.interceptors.response.use(res => { service.interceptors.response.use(
(res) => {
// 未设置状态码则默认成功状态 // 未设置状态码则默认成功状态
const code = res.data.code || 200; const code = res.data.code || 200;
// 获取错误信息 // 获取错误信息
const msg = errorCode[code] || res.data.message const msg = errorCode[code] || res.data.message;
// 二进制数据则直接返回 // 二进制数据则直接返回
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { if (
return res.data res.request.responseType === "blob" ||
res.request.responseType === "arraybuffer"
) {
return res.data;
} }
if (code === 2) { if (code === 2) {
if (!isRelogin.show) { if (!isRelogin.show) {
isRelogin.show = true; isRelogin.show = true;
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { MessageBox.confirm(
confirmButtonText: '重新登录', "登录状态已过期,您可以继续留在该页面,或者重新登录",
cancelButtonText: '取消', "系统提示",
type: 'warning' {
confirmButtonText: "重新登录",
cancelButtonText: "取消",
type: "warning",
} }
).then(() => { )
isRelogin.show = false; .then(() => {
store.dispatch('LogOut').then(() => { isRelogin.show = false;
location.href = process.env.VUE_APP_CONTEXT_PATH; store.dispatch("LogOut").then(() => {
location.href = process.env.VUE_APP_CONTEXT_PATH;
});
}) })
}).catch(() => { .catch(() => {
isRelogin.show = false; isRelogin.show = false;
}); });
} }
return Promise.reject('无效的会话,或者会话已过期,请重新登录。') return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
}else { } else {
return res.data return res.data;
} }
}, },
@ -124,9 +146,9 @@ service.interceptors.response.use(res => {
return Promise.reject('error') return Promise.reject('error')
} }
*/ */
error => { (error) => {
console.log('err' + error) console.log("err" + error);
let {message} = error; let { message } = error;
if (message == "Network Error") { if (message == "Network Error") {
message = "后端接口连接异常"; message = "后端接口连接异常";
} else if (message.includes("timeout")) { } else if (message.includes("timeout")) {
@ -136,12 +158,12 @@ service.interceptors.response.use(res => {
} }
Message({ Message({
message: message, message: message,
type: 'error', type: "error",
duration: 5 * 1000 duration: 5 * 1000,
}) });
return Promise.reject(error) return Promise.reject(error);
} }
) );
// 通用下载方法 // 通用下载方法
export function download(url, params, filename) { export function download(url, params, filename) {
@ -149,30 +171,36 @@ export function download(url, params, filename) {
text: "正在下载数据,请稍候", text: "正在下载数据,请稍候",
spinner: "el-icon-loading", spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)", background: "rgba(0, 0, 0, 0.7)",
}) });
return service.post(url, params, { return service
transformRequest: [(params) => { .post(url, params, {
return tansParams(params) transformRequest: [
}], (params) => {
headers: {'Content-Type': 'application/x-www-form-urlencoded'}, return tansParams(params);
responseType: 'blob' },
}).then(async (data) => { ],
const isLogin = await blobValidate(data); headers: { "Content-Type": "application/x-www-form-urlencoded" },
if (isLogin) { responseType: "blob",
const blob = new Blob([data]) })
saveAs(blob, filename) .then(async (data) => {
} else { const isLogin = await blobValidate(data);
const resText = await data.text(); if (isLogin) {
const rspObj = JSON.parse(resText); const blob = new Blob([data]);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] saveAs(blob, filename);
Message.error(errMsg); } else {
} const resText = await data.text();
downloadLoadingInstance.close(); const rspObj = JSON.parse(resText);
}).catch((r) => { const errMsg =
console.error(r) errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
Message.error('下载文件出现错误,请联系管理员!') Message.error(errMsg);
downloadLoadingInstance.close(); }
}) downloadLoadingInstance.close();
})
.catch((r) => {
console.error(r);
Message.error("下载文件出现错误,请联系管理员!");
downloadLoadingInstance.close();
});
} }
export default service export default service;

@ -1,132 +1,131 @@
"use strict"; "use strict";
const path = require("path"); const path = require("path");
function resolve(dir) { function resolve(dir) {
return path.join(__dirname, dir); return path.join(__dirname, dir);
} }
const CompressionPlugin = require("compression-webpack-plugin"); const CompressionPlugin = require("compression-webpack-plugin");
const name = process.env.VUE_APP_TITLE || "UDI协调平台"; //网页标题 const name = process.env.VUE_APP_TITLE || "UDI协调平台"; //网页标题
const port = process.env.port || process.env.npm_config_port || 80; // 端口 const port = process.env.port || process.env.npm_config_port || 80; // 端口
// vue.config.js 配置说明
// vue.config.js 配置说明 //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions // 这里只列一部分,具体配置参考文档
// 这里只列一部分,具体配置参考文档 module.exports = {
module.exports = { // 部署生产环境和开发环境下的URL。
// 部署生产环境和开发环境下的URL。 // 默认情况下Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 默认情况下Vue CLI 会假设你的应用是被部署在一个域名的根路径上 // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 publicPath: process.env.VUE_APP_CONTEXT_PATH,
publicPath: process.env.VUE_APP_CONTEXT_PATH, // 在npm run build 或 yarn build 时 生成文件的目录名称要和baseUrl的生产环境路径一致默认dist
// 在npm run build 或 yarn build 时 生成文件的目录名称要和baseUrl的生产环境路径一致默认dist outputDir: "UDI_WMS_NEW",
outputDir: "UDI_WMS_NEW", // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) assetsDir: "static",
assetsDir: "static", // 是否开启eslint保存检测有效值ture | false | 'error'
// 是否开启eslint保存检测有效值ture | false | 'error' lintOnSave: process.env.NODE_ENV === "development",
lintOnSave: process.env.NODE_ENV === "development", // 如果你不需要生产环境的 source map可以将其设置为 false 以加速生产环境构建。
// 如果你不需要生产环境的 source map可以将其设置为 false 以加速生产环境构建。 productionSourceMap: false,
productionSourceMap: false, // webpack-dev-server 相关配置
// webpack-dev-server 相关配置 devServer: {
devServer: { host: "0.0.0.0",
host: "0.0.0.0", port: port,
port: port, open: false,
open: false, proxy: {
proxy: { // detail: https://cli.vuejs.org/config/#devserver-proxy
// detail: https://cli.vuejs.org/config/#devserver-proxy [process.env.VUE_APP_BASE_API]: {
[process.env.VUE_APP_BASE_API]: { target: `http://api.clborch.com:8190`,
target: `http://127.0.0.1:9991`, changeOrigin: true,
changeOrigin: true, pathRewrite: {
pathRewrite: { ["^" + process.env.VUE_APP_BASE_API]: "",
["^" + process.env.VUE_APP_BASE_API]: "", },
}, },
}, },
}, disableHostCheck: true,
disableHostCheck: true, },
}, css: {
css: { loaderOptions: {
loaderOptions: { sass: {
sass: { sassOptions: { outputStyle: "expanded" },
sassOptions: { outputStyle: "expanded" }, },
}, },
}, },
}, configureWebpack: {
configureWebpack: { name: name,
name: name, resolve: {
resolve: { alias: {
alias: { "@": resolve("src"),
"@": resolve("src"), },
}, },
}, plugins: [
plugins: [ // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件 new CompressionPlugin({
new CompressionPlugin({ cache: false, // 不启用文件缓存
cache: false, // 不启用文件缓存 test: /\.(js|css|html)?$/i, // 压缩文件格式
test: /\.(js|css|html)?$/i, // 压缩文件格式 filename: "[path].gz[query]", // 压缩后的文件名
filename: "[path].gz[query]", // 压缩后的文件名 algorithm: "gzip", // 使用gzip压缩
algorithm: "gzip", // 使用gzip压缩 minRatio: 0.8, // 压缩率小于1才会压缩
minRatio: 0.8, // 压缩率小于1才会压缩 }),
}), ],
], },
}, chainWebpack(config) {
chainWebpack(config) { config.plugins.delete("preload"); // TODO: need test
config.plugins.delete("preload"); // TODO: need test config.plugins.delete("prefetch"); // TODO: need test
config.plugins.delete("prefetch"); // TODO: need test
// set svg-sprite-loader
// set svg-sprite-loader config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end();
config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end(); config.module
config.module .rule("icons")
.rule("icons") .test(/\.svg$/)
.test(/\.svg$/) .include.add(resolve("src/assets/icons"))
.include.add(resolve("src/assets/icons")) .end()
.end() .use("svg-sprite-loader")
.use("svg-sprite-loader") .loader("svg-sprite-loader")
.loader("svg-sprite-loader") .options({
.options({ symbolId: "icon-[name]",
symbolId: "icon-[name]", })
}) .end();
.end();
config.when(process.env.NODE_ENV !== "development", (config) => {
config.when(process.env.NODE_ENV !== "development", (config) => { config
config .plugin("ScriptExtHtmlWebpackPlugin")
.plugin("ScriptExtHtmlWebpackPlugin") .after("html")
.after("html") .use("script-ext-html-webpack-plugin", [
.use("script-ext-html-webpack-plugin", [ {
{ // `runtime` must same as runtimeChunk name. default is `runtime`
// `runtime` must same as runtimeChunk name. default is `runtime` inline: /runtime\..*\.js$/,
inline: /runtime\..*\.js$/, },
}, ])
]) .end();
.end(); config.optimization.splitChunks({
config.optimization.splitChunks({ chunks: "all",
chunks: "all", cacheGroups: {
cacheGroups: { libs: {
libs: { name: "chunk-libs",
name: "chunk-libs", test: /[\\/]node_modules[\\/]/,
test: /[\\/]node_modules[\\/]/, priority: 10,
priority: 10, chunks: "initial", // only package third parties that are initially dependent
chunks: "initial", // only package third parties that are initially dependent },
}, elementUI: {
elementUI: { name: "chunk-elementUI", // split elementUI into a single package
name: "chunk-elementUI", // split elementUI into a single package priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm },
}, commons: {
commons: { name: "chunk-commons",
name: "chunk-commons", test: resolve("src/components"), // can customize your rules
test: resolve("src/components"), // can customize your rules minChunks: 3, // minimum common number
minChunks: 3, // minimum common number priority: 5,
priority: 5, reuseExistingChunk: true,
reuseExistingChunk: true, },
}, },
}, });
}); config.optimization.runtimeChunk("single"),
config.optimization.runtimeChunk("single"), {
{ from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件
from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件 to: "./", //到根目录下
to: "./", //到根目录下 };
}; });
}); },
}, };
};

Loading…
Cancel
Save