Elements-SY

Merge branch 'uat' into fix-issues

{
"name": "IMAC",
"version": "3.5.0",
"description": "IMAC管理系统",
"author": "IMAC",
"license": "MIT",
"scripts": {
"dev": "vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.{js,vue}": [
"eslint --fix",
"git add"
]
},
"keywords": [
"vue",
"admin",
"dashboard",
"element-ui",
"boilerplate",
"admin-template",
"management-system"
],
"repository": {
"type": "git",
"url": "https://gitee.com/y_project/RuoYi-Vue.git"
},
"dependencies": {
"@riophae/vue-treeselect": "0.4.0",
"axios": "0.21.1",
"clipboard": "2.0.8",
"core-js": "3.8.3",
"echarts": "4.9.0",
"element-ui": "2.15.3",
"file-saver": "2.0.5",
"fuse.js": "6.4.6",
"highlight.js": "9.18.5",
"js-beautify": "1.13.13",
"js-cookie": "2.2.1",
"jsencrypt": "3.0.3",
"nprogress": "0.2.0",
"quill": "1.3.7",
"screenfull": "5.0.2",
"sortablejs": "1.10.2",
"vue": "2.6.14",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.6",
"vue-router": "3.5.2",
"vuedraggable": "2.24.3",
"vuex": "3.6.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.5.13",
"@vue/cli-plugin-eslint": "4.5.13",
"@vue/cli-service": "4.5.13",
"babel-eslint": "10.1.0",
"chalk": "4.1.1",
"connect": "3.6.6",
"eslint": "7.30.0",
"eslint-plugin-vue": "7.12.1",
"lint-staged": "10.5.4",
"runjs": "4.4.2",
"sass": "1.35.1",
"sass-loader": "10.2.0",
"script-ext-html-webpack-plugin": "2.1.5",
"svg-sprite-loader": "5.2.1",
"vue-template-compiler": "2.6.14"
},
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions"
]
}
......@@ -143,9 +143,15 @@ export function delFlight(data) {
//查询航线
/**
<<<<<<< HEAD
* @param fltNo 航班号
* @param page 页数
* @param size 页长
=======
* @param fltNo 航班号
* @param page 页数
* @param size 页长
>>>>>>> test
*/
export function queryRoute(data) {
return request({
......
var en = {
"common": {
"risk": "risk",
"exit": "exit",
"index":"index"
}
}
export default en
var zh = {
"common": {
"risk": "风险",
"exit": "退出",
"index":"首页"
}
}
export default zh
......@@ -4,7 +4,7 @@
@click="visibleOpen">
</el-button>
<el-dialog title="表格显示设置" :visible.sync="open" width="40%" :close-on-click-modal="false" :show-close="false"
append-to-body center>
append-to-body center @close="close">
<div style="text-align: center">
<el-transfer style="text-align: left; display: inline-block" :data="transferData"
:right-default-checked="rightDefaultChecked" v-model="transferValue" :titles="transferTitle"
......
<template>
<div class="component-upload-image">
<el-upload
:action="uploadImgUrl"
list-type="picture-card"
:on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload"
:on-error="handleUploadError"
name="file"
:show-file-list="false"
:headers="headers"
style="display: inline-block; vertical-align: top"
>
<el-upload :action="uploadImgUrl" list-type="picture-card" :on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload" :on-error="handleUploadError" name="file" :show-file-list="false"
:headers="headers" style="display: inline-block; vertical-align: top">
<el-image v-if="!value" :src="value">
<div slot="error" class="image-slot">
<i class="el-icon-plus" />
</div>
</el-image>
<div v-else class="image">
<el-image :src="value" :style="`width:150px;height:150px;`" fit="fill"/>
<el-image :src="value" :style="`width:150px;height:150px;`" fit="fill" />
<div class="mask">
<div class="actions">
<span title="预览" @click.stop="dialogVisible = true">
......@@ -30,7 +22,7 @@
</div>
</div>
</el-upload>
<el-dialog :visible.sync="dialogVisible" title="预览" width="800" append-to-body>
<el-dialog :visible.sync="dialogVisible" title="预览" width="800" append-to-body :close-on-press-escape="false">
<img :src="value" style="display: block; max-width: 100%; margin: 0 auto;">
</el-dialog>
</div>
......@@ -85,6 +77,7 @@ export default {
<style scoped lang="scss">
.image {
position: relative;
.mask {
opacity: 0;
position: absolute;
......@@ -93,6 +86,7 @@ export default {
background-color: rgba(0, 0, 0, 0.5);
transition: all 0.3s;
}
&:hover .mask {
opacity: 1;
}
......
......@@ -37,13 +37,8 @@
/>
</el-tooltip>
</el-row>
<el-dialog :title="title" :visible.sync="open" append-to-body>
<el-transfer
:titles="['显示', '隐藏']"
v-model="value"
:data="columns"
@change="dataChange"
></el-transfer>
<el-dialog :title="title" :visible.sync="open" append-to-body :close-on-press-escape="false">
<el-transfer :titles="['显示', '隐藏']" v-model="value" :data="columns" @change="dataChange"></el-transfer>
</el-dialog>
</div>
</template>
......@@ -111,6 +106,7 @@ export default {
display: block;
margin-left: 0px;
}
::v-deep .el-transfer__button:first-child {
margin-bottom: 10px;
}
......
import router from './router'
import store from './store'
import { Message } from 'element-ui'
import { getToken, removeToken } from '@/utils/auth'
import { getToken, setToken, removeToken } from '@/utils/auth'
import settings from "@/settings"
const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
router.beforeEach((to, from, next) => {
if (getToken()) {
/* has token*/
......@@ -14,16 +16,19 @@ router.beforeEach((to, from, next) => {
if (store.getters.roles.length === 0) {
// 判断当前用户是否已拉取完user_info信息
store.dispatch('GetInfo').then(() => {
//获取用户表头
store.dispatch('GetTableHeaders').then(() => {
// 根据roles权限生成可访问的路由表
store.dispatch('GenerateRoutes').then(accessRoutes => {
// 根据roles权限生成可访问的路由表
router.addRoutes(accessRoutes) // 动态添加可访问路由表
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
})
})
}).catch(err => {
Message.error(err)
// store.dispatch('LogOut').then(() => {
// // next({ path: '/' })
// window.location.href = settings.loginURL;//wsso系统跳转
// })
})
} else {
next()
......@@ -32,11 +37,18 @@ router.beforeEach((to, from, next) => {
} else {
removeToken()
// 没有token
//wsso登录时对后端重定向带来的token进行记录
let token = location.search.split("token=")[1]
if (token != undefined && token != '' && token != null) {
setToken(token)
next({ path: '/' })
} else {
if (whiteList.indexOf(to.path) !== -1) {
// 在免登录白名单,直接进入
next()
} else {
next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
window.location.href = settings.loginURL;//wsso系统跳转
}
}
}
})
......
......@@ -39,11 +39,11 @@ export const constantRoutes = [
},
],
},
{
path: "/login",
component: (resolve) => require(["@/views/login"], resolve),
hidden: true,
},
// {
// path: "/login",
// component: (resolve) => require(["@/views/login"], resolve),
// hidden: true,
// },
{
path: "/404",
component: (resolve) => require(["@/views/error/404"], resolve),
......
......@@ -42,19 +42,19 @@ module.exports = {
/**
* logout
*/
loginURL: 'http://47.103.140.98/test/login',
logoutURL: 'http://47.103.140.98/test/login',
loginURL: 'https://test-myapps.secure.fedex.com/L2/iMAC/',
logoutURL: 'https://test-myapps.secure.fedex.com/logout',
/**
* 后端接口
*/
baseURL: `http://47.103.140.98:7001/iMAC`,
downLoadURL: `http://47.103.140.98:7001/iMAC`,
baseURL: `https://imacuat.zmd.apac.fedex.com/iMAC`,
downLoadURL: `https://imacuat.zmd.apac.fedex.com/iMAC`,//下载、导出地址
/**
* 项目存放地址
*/
routerBase: '/test',
routerBase: '/imacuat',
/**
* 版本号
......
......@@ -40,6 +40,13 @@ const permission = {
REMOVE_FILGHTALL: (state, name) => {
delete state.filghtAllData[name];
},
SET_FILGHTALL: (state, data) => {
let name = data.name;
state.filghtAllData[name] = data.data;
},
REMOVE_FILGHTALL: (state, name) => {
delete state.filghtAllData[name]
}
},
actions: {
// 生成路由
......
......@@ -3,6 +3,7 @@ import { getTableHeader } from '@/api/menu'
import { changeCurrentPort } from "@/api/system/user.js";
import { getToken, setToken, removeToken } from '@/utils/auth'
import { Message } from 'element-ui'
import settings from "@/settings"
const user = {
state: {
......
......@@ -4,19 +4,19 @@ const TokenKey = 'iMac-Token'
export function getToken() {
//return Cookies.get(TokenKey)
return localStorage.getItem(TokenKey)
// return sessionStorage.getItem(TokenKey)
// return localStorage.getItem(TokenKey)
return sessionStorage.getItem(TokenKey)
}
export function setToken(token) {
//return Cookies.set(TokenKey, token)
return localStorage.setItem(TokenKey, token)
// return sessionStorage.setItem(TokenKey, token)
// return localStorage.setItem(TokenKey, token)
return sessionStorage.setItem(TokenKey, token)
}
export function removeToken() {
//return Cookies.remove(TokenKey)
// return localStorage.removeItem(TokenKey)
sessionStorage.removeItem('portName')
return localStorage.removeItem(TokenKey)
// return sessionStorage.removeItem(TokenKey)
return sessionStorage.removeItem(TokenKey)
}
......
......@@ -9,16 +9,17 @@ axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: settings.baseURL, //接口地址
baseURL: settings.baseURL,
// 超时
timeout: 30000
timeout: 90000,
})
// request拦截器
service.interceptors.request.use(config => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
config.headers['Authorization'] = decodeURIComponent(getToken()) // 让每个请求携带自定义token 请根据实际情况自行修改
}
// get请求映射params参数
if (config.method === 'get' && config.params) {
......@@ -51,14 +52,14 @@ service.interceptors.request.use(config => {
// 响应拦截器
service.interceptors.response.use(res => {
if (res.headers['token']) {
setToken(decodeURI(res.headers['token']))
setToken(res.headers['token'])
}
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default']
if (code === 301) {
MessageBox.confirm('登录状态已过期,需重新登录', '系统提示', {
MessageBox.confirm('登录状态已过期,需重新登录!msg:' + msg, '系统提示', {
closeOnClickModal: false,
showCancelButton: false,
confirmButtonText: '重新登录',
......@@ -66,9 +67,10 @@ service.interceptors.response.use(res => {
}
).then(() => {
store.dispatch('LogOut').then(() => {
location.href = settings.routerBase + '/index';
})
// location.href = '/';
window.location.href = settings.loginURL;//wsso系统跳转
})
});
} else if (code === 403) {
//无权限页面
location.href = '/401';
......
......@@ -71,7 +71,7 @@ export default {
const username = localStorage.getItem("username");
const password = localStorage.getItem("password");
const rememberMe = localStorage.getItem("rememberMe");
console.log("rememberMe:", rememberMe)
// console.log("rememberMe:", rememberMe)
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password: password === undefined ? this.loginForm.password : password,
......
......@@ -56,7 +56,6 @@
</Tables>
</div>
</template>
<script>
import {
downLoadTemplate,
......@@ -171,7 +170,7 @@ export default {
});
} else if (res.code === 201) {
this.msgWarning(res.msg);
this.errorData = res.data.data;
this.errorData = res.data;
this.$router.push({ name: 'UpDateResult', query: { data: this.errorData, from: 'FlightToArea' } })
} else {
this.msgWarning(res.msg);
......
......@@ -67,7 +67,6 @@
<Chart :className="'chart' + index.toString()" :chartData="item" height="350px" style="margin-bottom:10px"
:loading="loading" />
</div>
</div>
</div>
</template>
......
......@@ -58,7 +58,6 @@
</Tables>
</div>
</template>
<script>
import {
downLoadTemplate,
......
......@@ -33,9 +33,9 @@
<el-input type="text" v-model="newDictionary.route" placeholder="请输入航线" maxlength="40">
</el-input>
</el-form-item>
<el-form-item label="是否为ET86航线">
<!-- <el-form-item label="是否为ET86航线">
<el-checkbox v-model="newDictionary.isEtesRoute"></el-checkbox>
</el-form-item>
</el-form-item> -->
<el-form-item>
<div style="color:#ff4949;line-height: 30px;">注意:此处不能添加虚拟航班!</div>
</el-form-item>
......@@ -205,7 +205,7 @@ export default {
let obj = {
fltNo: this.upCase(this.newDictionary.fltNo),
route: this.upCase(this.newDictionary.route),
isEtesRoute: this.newDictionary.isEtesRoute == true ? "Y" : "N"
// isEtesRoute: this.newDictionary.isEtesRoute == true ? "Y" : "N"
}
addRoute(obj).then(res => {
this.loading = false
......