jinhui.wang

test版本更新

<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1640931184925" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5236" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M599.06048 831.309824l12.106752-193.404928 372.860928 184.430592L984.02816 710.206464 617.906176 367.33952 617.906176 151.638016c0-56.974336-46.188544-143.064064-103.158784-143.064064-56.974336 0-103.158784 86.089728-103.158784 143.064064L411.588608 367.33952 45.461504 710.206464l0 112.129024 366.660608-184.430592 14.999552 209.27488c0 5.05344 0.594944 9.892864 1.124352 14.749696l-66.591744 60.348416 0 66.587648 153.986048-50.879488 2.43712-0.80896 147.439616 51.688448 0-66.587648-68.758528-62.253056L599.06048 831.309824z" p-id="5237"></path></svg>
\ No newline at end of file
......@@ -13,7 +13,7 @@
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper">
<img :src="avatar" class="user-avatar">
<i class="el-icon-caret-bottom" />
<!-- <i class="el-icon-caret-bottom" /> -->
</div>
<el-dropdown-menu slot="dropdown">
<router-link to="/user/profile">
......
......@@ -19,7 +19,7 @@
:base-path="route.path"
/>
</el-menu>
</el-scrollbar>
<!-- </el-scrollbar> -->
</div>
</template>
......
......@@ -87,7 +87,8 @@ export default {
bottom: 0px;
}
.el-scrollbar__wrap {
height: 49px;
// height: 49px;
margin-top:8px;
}
}
}
......
......@@ -225,7 +225,7 @@ export default {
<style lang="scss" scoped>
.tags-view-container {
height: 34px;
height: 50px;
width: 100%;
background: #fff;
border-bottom: 1px solid #d8dce5;
......@@ -268,6 +268,7 @@ export default {
}
}
.contextmenu {
// height: 0;
margin: 0;
background: #fff;
z-index: 3000;
......
......@@ -74,7 +74,7 @@ export const constantRoutes = [
children: [
{
path: 'profile',
component: (resolve) => require(['@/views/system/user/profile/index'], resolve),
component: (resolve) => require(['@/views/systemConfig/userConfig/profile/index'], resolve),
name: 'Profile',
meta: { title: '个人中心', icon: 'user' }
}
......@@ -105,5 +105,6 @@ export const constantRoutes = [
export default new Router({
mode: 'history', // 去掉url中的#
scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes
routes: constantRoutes,
base: '/iMac'
})
\ No newline at end of file
......
......@@ -4,15 +4,18 @@ const TokenKey = 'Admin-Token'
export function getToken() {
//return Cookies.get(TokenKey)
return localStorage.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 localStorage.setItem(TokenKey, token)
return sessionStorage.setItem(TokenKey, token)
}
export function removeToken() {
//return Cookies.remove(TokenKey)
return localStorage.removeItem(TokenKey)
// return localStorage.removeItem(TokenKey)
return sessionStorage.removeItem(TokenKey)
}
......
import axios from 'axios'
import { Notification, MessageBox, Message } from 'element-ui'
import { Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
......@@ -10,17 +10,19 @@ const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
//baseURL: process.env.VUE_APP_BASE_API,
//baseURL: 'http://192.168.1.45:8080',
baseURL: 'http://192.168.1.134:18080',
// baseURL: `http://47.103.140.98:9002`,s
// baseURL: 'https://imacuat.zmd.apac.fedex.com:9002/IMAC2',
baseURL: 'http://192.168.1.134:18080',
// 超时
timeout: 10000
timeout: 30000
})
// request拦截器
service.interceptors.request.use(config => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
// get请求映射params参数
if (config.method === 'get' && config.params) {
......@@ -46,50 +48,51 @@ service.interceptors.request.use(config => {
}
return config
}, error => {
console.log(error)
Promise.reject(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 (code === 401) {
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
store.dispatch('LogOut').then(() => {
location.href = '/index';
})
})
} else if (code === 403) {
//无权限页面
location.href = '/401';
}else if (code === 500) {
Message({
message: msg,
type: 'error'
})
return Promise.reject(new Error(msg))
} else if (code !== 200 &&code!=400) {
Notification.error({
title: msg
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default']
if (code === 301) {
this.$alert('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
confirmButtonText: '重新登录',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
store.dispatch('FedLogOut').then(() => {
location.href = '/index';
})
return Promise.reject('error')
} else {
return res.data
}
},
});
} else if (code === 403) {
//无权限页面
location.href = '/401';
}
else if (code === 500) {
Message({
message: msg,
type: 'error'
})
return Promise.reject(new Error(msg))
} else if (code !== 200 && code !== 201) {
Message({
message: msg,
type: 'error'
})
return Promise.reject('error')
} else {
return res.data
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "后端接口连接异常";
message = "网络连接异常";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
......
......@@ -5,8 +5,9 @@ const mimeMap = {
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
zip: 'application/zip'
}
const baseUrl = process.env.VUE_APP_BASE_API
// const baseURL = 'https://imacuat.zmd.apac.fedex.com:9002/IMAC2'
// const baseUrl = 'http://47.103.140.98:9002'
const baseUrl = 'http://192.168.1.134:18080'
export function downLoadZip(str, filename) {
var url = baseUrl + str
axios({
......@@ -18,6 +19,20 @@ export function downLoadZip(str, filename) {
resolveBlob(res, mimeMap.zip)
})
}
export function cargoXlsx(str,data) {
var url = baseUrl + str
axios({
method: 'post',
url: url,
data:data,
responseType: 'blob',
headers: { 'Authorization': getToken() }
}).then(res => {
if(res.status === 200){
cargoTableXlsx(res)
}
})
}
/**
* 解析blob响应内容并下载
* @param {*} res blob响应内容
......@@ -25,7 +40,7 @@ export function downLoadZip(str, filename) {
*/
export function resolveBlob(res, mimeType) {
const aLink = document.createElement('a')
var blob = new Blob([res.data], { type: mimeType })
var blob = new Blob([res], { type: mimeType })
// //从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名;
var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
var contentDisposition = decodeURI(res.headers['content-disposition'])
......@@ -38,3 +53,14 @@ export function resolveBlob(res, mimeType) {
aLink.click()
document.body.removeChild(aLink);
}
//货物查询表导出
export function cargoTableXlsx(res){
const aLink = document.createElement('a')
const fileName = "货物查询表.xlsx"
aLink.href = URL.createObjectURL(res.data)
aLink.setAttribute('download', fileName) // 设置下载文件名称
document.body.appendChild(aLink)
aLink.click()
document.body.removeChild(aLink);
}
......
This diff is collapsed. Click to expand it.
<template>
<div style="margin: 20px">
<el-form :inline="true" :model="form" class="demo-form-inline" size="small">
<el-form-item label="航班种类">
<el-select v-model="form.type" placeholder="航班种类">
<el-option
v-for="item in flightType"
:key="item.id"
:label="item.englishName"
:value="item.code"
>{{ item.englishName }}</el-option
>
</el-select>
</el-form-item>
<el-form-item>
<el-upload
action="/flightInfoImport/importFlight"
name="file"
:http-request="uploadExcel"
:on-remove="handleRemove"
:limit="1"
:on-exceed="handleExceed"
:file-list="fileList"
accept=".xlsx"
class="upload-demo"
>
<el-button type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="downloadTempleate"
>下载模板</el-button
>
</el-form-item>
</el-form>
<div style="font-size: 12px; font-weight: 700">
提示:<span style="color: #0000ff">以下为所提交的数据或出错信息</span>
</div>
<el-table
ref="filterTable"
:data="tableData"
style="width: 100%; margin-top: 20px"
size="small"
border
>
<el-table-column label="行号" prop="line" fixed width="50" align="center">
</el-table-column>
<el-table-column label="错误信息" prop="errorMessage" fixed width="200">
<template slot-scope="scope">
<div v-for="(m, key) in scope.row.errorMessage" :key="key">
{{ m }}
</div>
</template>
</el-table-column>
<el-table-column v-if="tableData.length == 0"></el-table-column>
<el-table-column
v-for="(value, key) in this.tableData[0]"
:key="key"
v-if="key != 'errorMessage' && key != 'line'"
:label="key"
:prop="key"
width="120"
></el-table-column>
</el-table>
</div>
</template>
</div>
</template>
<script>
import {
filghtKindData,
downLoadTemplate,
importFlight,
} from "@/api/flightInfoImport";
export default {
data() {
return {
flightType: [],
form: {
type: "",
region: "",
},
fileList: [],
tableData: [],
};
},
methods: {
downloadTempleate() {
let downloadType = "";
let fileName = "";
switch (this.form.type) {
case "flightKind20":
downloadType = "whiteTail";
fileName = "航班信息导入模板WhiteTail.xlsx";
break;
case "flightKind30":
downloadType = "purpleTail";
fileName = "航班信息导入模板PurpleTail.xlsx";
break;
default:
this.$confirm("此类航班暂无模板,请选择其他类型航班", "提示", {
confirmButtonText: "确定",
showCancelButton: false,
type: "warning",
});
}
if (downloadType != "") {
downLoadTemplate(downloadType).then((res) => {
if (res) {
const blob = new Blob([res]);
const link = document.createElement("a"); //创建a标签
link.download = fileName; //a标签添加属性
link.style.display = "none";
link.href = URL.createObjectURL(blob);
document.body.appendChild(link);
link.click(); //执行下载
URL.revokeObjectURL(link.href); //释放url
document.body.removeChild(link); //释放标签
} else {
this.$message.error("下载失败");
}
});
}
},
uploadExcel(option) {
//上传excel
const file = option.file;
console.log(option);
importFlight(file, this.form.type).then((res) => {
if (res.code != 200) {
if (res.code == 603) {
this.$alert(res.msg , "提示", {
confirmButtonText: "确定",
type: "warning",
});
}else {
this.$message.error(res.msg);
this.tableData = res.data;
}
} else {
this.$message.success("导入成功");
this.tableData = res.data;
}
});
},
handleRemove(file, fileList) {
//清掉上传的文件
this.tableData = [];
this.fileList = [];
},
handleExceed(files) {
//重复上传文件
let file = {};
file.file = files[0];
file.name = files[0].name;
this.fileList = [];
this.fileList.push(file);
this.uploadExcel(file);
},
},
created() {
filghtKindData().then((response) => {
if (response.code != 200) {
this.$message({
message: response.msg,
type: "error",
});
}
this.flightType = response.data;
this.form.type = response.data[0].code;
});
},
};
</script>
<style rel="stylesheet/scss" lang="scss">
.upload-demo {
float: right;
}
.el-upload-list {
display: inline-block;
margin-left: 10px;
vertical-align: top;
}
</style>
\ No newline at end of file
This diff is collapsed. Click to expand it.
<template>
<div>
<el-button type="primary" size="mini" @click="submit">保存</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
v-hasPermi="['system:user:list']"
>删除1</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
v-hasPermi="['system:user:remove']"
>删除2</el-button>
</div>
<div></div>
</template>
<script>
import { delUser } from "@/api/system/user";
......@@ -22,8 +7,8 @@ import { delUser } from "@/api/system/user";
export default {
props: {
user: {
type: Object
}
type: Object,
},
},
data() {
return {
......@@ -33,11 +18,11 @@ export default {
methods: {
submit() {
this.msgSuccess("修改成功");
delUser('112').then(response => {
delUser("112").then((response) => {
this.msgSuccess("修改成功");
});
}
}
},
},
};
</script>
......
......@@ -19,8 +19,8 @@
</el-input>
</el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
<el-form-item style="width:100%;">
<!-- <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox> -->
<el-form-item style="width:100%;marginTop:44px">
<el-button
:loading="loading"
size="medium"
......
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true">
<el-form-item label="原航班" prop="sourceFlightNo">
<el-input v-model="queryParams.sourceFlightNo" placeholder="请输入原航班" clearable size="small" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择" clearable size="small">
<el-option v-for="dict in statusList" :key="dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询原航班配置</el-button>
</el-form-item>
<br />
<el-form-item label="日期" prop="flightDate">
<el-date-picker v-model="queryParams.flightDate" type="date" placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="findSourceFlightAndFlightDate">查询实际目的航班</el-button>&#12288;
<span style="color: red;">注:原航班+日期查询该日期的航班实际情况</span>
</el-form-item>
<br />
<el-form-item>
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" size="mini">添加规则</el-button>
</el-col>
&#12288; <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="sourceFlightRulesList" >
<el-table-column label="原航班" align="center" prop="sourceFlightNo"/>
<el-table-column label="目的航班排序" align="center" prop="flightRank" width="280"/>
<!-- <el-table-column label="优先级" align="center" prop="priority" /> -->
<el-table-column label="周期" align="center" prop="dayOfWeek" width="180"/>
<el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
<el-table-column label="开始时间" align="center" prop="startDate" width="100"/>
<el-table-column label="结束时间" align="center" prop="endDate" width="100"/>
<el-table-column label="最后修改人" align="center" prop="updateUserName" width="100"/>
<el-table-column label="最后修改时间" align="center" prop="updateTime" width="100"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"width="280" fixed="right">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" >修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" >删除</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" >启用</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" >停用</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" layout=" prev, pager, next, jumper, sizes,total"
:page.sync="queryParams.pageNum" :limit.sync="queryParams.limit" @pagination="findSourceFlightRules" />
<!-- 查看目的航班对话框 -->
<el-dialog title="实际目的航班" :visible.sync="openFlightDate" width="70%">
<el-table v-loading="loadingFlightDate" :data="sourceFlightAndFlightDate">
<el-table-column label="原航班" align="center" prop="sourceFlightNo"/>
<el-table-column label="实际目的航班" align="center" prop="actualFlight" width="280"/>
<el-table-column label="航班日期" align="center" prop="flightDate" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"width="200">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" >查看配置维度</el-button>
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelFlightDate">返 回</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
findSourceFlightRulesApi,findSourceFlightAndFlightDateApi
} from "@/api/sourceFlightRules";
export default {
name: "SourceFlightRules",
data() {
return {
// 遮罩层
loading: false,
// 遮罩层
loadingFlightDate: false,
// 总条数
total: 0,
// 原航班规则数据
sourceFlightRulesList: [],
//目的航班数据
sourceFlightAndFlightDate:[],
statusList: [{'id':1,'name':'有效'}, {'id':2,'name':'配置中'},{'id':3,'name':'停用'}],
// 新增修改查看规则弹出层
open: false,
// 是否显示查看目的航班弹出层
openFlightDate: false,
// 查询参数
queryParams: {
start: 0, //当前条数【代表第几条数据 +1开始】
pageNum: 1,
limit: 20, //一页显示多少条数据
sourceFlightNo: undefined, //原航班号
status: undefined, //状态
flightDate: undefined //日期
},
// 表单参数
form: {},
// 表单校验
rules: {}
};
},
created() {
this.findSourceFlightRules();
},
methods: {
/** 查询原航班顺位规则*/
findSourceFlightRules() {
//this.loading = true;
if (this.queryParams.pageNum > 1) {
this.queryParams.start = (this.queryParams.pageNum - 1) * this.queryParams.limit
}else{
this.queryParams.start=0;
}
findSourceFlightRulesApi(this.queryParams).then(response => {
this.sourceFlightRulesList = response.data.list;
this.total = response.data.totalCount;
this.loading = false;
});
},
/** 查询目的航班*/
findSourceFlightAndFlightDate(){
//校验原航班号非空
if(this.queryParams.sourceFlightNo===null||this.queryParams.sourceFlightNo===undefined||this.queryParams.sourceFlightNo.trim()===''){
this.$message.warning("原航班号为空");
return
}
//校验原日期非空
if(this.queryParams.flightDate===null||this.queryParams.flightDate===undefined){
this.$message.warning("日期为空");
return
}
this.openFlightDate = true;
this.loadingFlightDate=true;
this.sourceFlightAndFlightDate=[];
findSourceFlightAndFlightDateApi(this.queryParams).then(response => {
this.sourceFlightAndFlightDate = response.data;
this.loadingFlightDate=false;
});
},
// 目的航班弹出框返回
cancelFlightDate() {
this.openFlightDate = false;
},
// 状态字典翻译
statusFormat(row) {
if(row.status==='1'){
return '有效'
}else if(row.status==='2'){
return '配置中'
}else if(row.status==='3'){
return '停用'
}
return row.status;
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.queryParams.start=0;
this.findSourceFlightRules();
}
}
};
</script>
<style>
</style>
<template>
<div style="margin:40px" class="app-container">
<el-form :inline="true" :model="queryParams" class="demo-form-inline" size="small">
<el-form-item label="航班号">
<el-input v-model="queryParams.purposeOfFlightNo" placeholder="航班号"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="getList" size="mini">查询</el-button>
</el-form-item>
</el-form>
<el-button style="margin-bottom:20px" type="primary" icon="el-icon-plus" size="mini">添加</el-button>
<el-table
:data="flyList"
style="width: 800px"
v-loading="loading" size="small"
>
<el-table-column prop="purposeOfFlightNo" label="航班号" align="center"></el-table-column>
<el-table-column label="操作" prop="id" align="center">
<template slot-scope="scope" >
<el-button type="text" size="mini" icon="el-icon-view" @click="handleClick(scope.row.id, 'detail')">查看</el-button>
<el-button type="text" size="mini" icon="el-icon-edit" @click="handleClick(scope.row.id, 'update')">修改</el-button>
<el-button type="text" size="mini" icon="el-icon-delete">删除</el-button>
<el-button type="text" size="mini" icon="el-icon-video-play">启用</el-button>
<el-button type="text" size="mini" icon="el-icon-video-pause">停用</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="getList"
@current-change="getList"
:current-page.sync="curPage"
:page-sizes="[10, 20, 30, 40]"
:page-size.sync="limit"
layout="prev, pager, next, jumper, sizes, total"
:total="total"
background
:hide-on-single-page="true"
style="margin-top:40px; text-align:right">
</el-pagination>
</div>
</template>
<script>
import {
findFlightNo
} from "@/api/destinationFlight";
export default {
data() {
return {
queryParams: {
purposeOfFlightNo: '',
start:0,
limit:10
},
flyList:[],
curPage:1,
limit:10,
total:0,
loading:false,
}
},
methods: {
getList(){
this.queryParams.limit = this.limit;
if (this.curPage > 1) {
this.queryParams.start = (this.curPage - 1) * this.queryParams.limit
}else {
this.queryParams.start = 0;
}
this.loading = true;
findFlightNo(this.queryParams).then(response => {
this.flyList = response.data.list;
this.total = response.data.totalCount;
this.loading = false;
});
},
//跳转到查看,修改页面
handleClick(flightiId, handle){
this.$router.push({ name: 'info', params: { handle: handle, id:flightiId }});
},
//删除,启用,停用
changeStatus(id, handle){
}
},
created() {
this.getList();
}
}
</script>
<template>
<div>index</div>
</template>
<template>
<div style="margin: 20px">
<el-form :inline="true" :model="form" class="demo-form-inline" size="small">
<el-form-item label="航班种类">
<el-select v-model="form.type" placeholder="航班种类">
<el-option
v-for="item in flightType"
:key="item.id"
:label="item.englishName"
:value="item.code"
>{{item.englishName}}</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-upload
action="/flightInfoImport/importFlight"
name="file"
:http-request="uploadExcel"
:on-remove="handleRemove"
:limit="1"
:on-exceed="handleExceed"
:file-list="fileList"
accept=".xlsx"
class="upload-demo"
>
<el-button type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="downloadTempleate"
>下载模板</el-button
>
</el-form-item>
</el-form>
<div style="font-size: 12px;font-weight: 700;">提示:<span style="color:#0000FF">以下为所提交的数据或出错信息</span></div>
<el-table
ref="filterTable"
:data="tableData"
style="width: 100%; margin-top: 20px"
size="small"
border
>
<el-table-column label="行号" prop="line" fixed width="50" align="center">
</el-table-column>
<el-table-column label="错误信息" prop="errorMessage" fixed width="200">
<template slot-scope="scope">
<div v-for="(m,key) in scope.row.errorMessage" :key="key">{{ m }}</div>
</template>
</el-table-column>
<el-table-column v-if="tableData.length == 0" ></el-table-column>
<el-table-column v-for="(value,key) in this.tableData[0]" :key="key" v-if="key != 'errorMessage' && key != 'line'" :label="key" :prop="key" width="120"></el-table-column>
</el-table>
</div>
</template>
</div>
<div></div>
</template>
<script>
import {
filghtKindData,
downLoadTemplate,
importFlight,
} from "@/api/flightInfoImport";
export default {
data() {
return {
flightType: [],
form: {
type: "",
region: "",
},
fileList: [],
tableData: [],
};
},
methods: {
downloadTempleate() {
let downloadType = "";
let fileName = "";
switch (this.form.type) {
case "flightKind20":
downloadType = "whiteTail";
fileName = "航班信息导入模板WhiteTail.xlsx";
break;
case "flightKind30":
downloadType = "purpleTail";
fileName = "航班信息导入模板PurpleTail.xlsx";
break;
default:
this.$confirm("此类航班暂无模板,请选择其他类型航班", "提示", {
confirmButtonText: "确定",
showCancelButton: false,
type: "warning",
});
}
if (downloadType != "") {
downLoadTemplate(downloadType).then((res) => {
if (res) {
const blob = new Blob([res]);
const link = document.createElement("a"); //创建a标签
link.download = fileName; //a标签添加属性
link.style.display = "none";
link.href = URL.createObjectURL(blob);
document.body.appendChild(link);
link.click(); //执行下载
URL.revokeObjectURL(link.href); //释放url
document.body.removeChild(link); //释放标签
} else {
this.$message.error("下载失败");
}
});
}
},
uploadExcel(option) {
//上传excel
const file = option.file;
console.log(option);
importFlight(file, this.form.type).then((res) => {
if (res.code != 200) {
this.$message.error(res.msg);
this.tableData = res.data;
} else {
this.$message.success('导入成功');
this.tableData = res.data;
}
});
},
handleRemove(file, fileList) {
//清掉上传的文件
this.tableData = [];
this.fileList = [];
},
handleExceed(files) {
//重复上传文件
let file = {};
file.file = files[0];
file.name = files[0].name;
this.fileList = [];
this.fileList.push(file);
this.uploadExcel(file);
},
},
created() {
filghtKindData().then((response) => {
if (response.code != 200) {
this.$message({
message: response.msg,
type: "error",
});
}
this.flightType = response.data;
this.form.type = response.data[0].code;
});
},
};
}
</script>
<style rel="stylesheet/scss" lang="scss">
.upload-demo {
float: right;
}
.el-upload-list {
display: inline-block;
margin-left: 10px;
vertical-align: top;
}
<style>
</style>
\ No newline at end of file
......
This diff is collapsed. Click to expand it.
<template>
<div></div>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
//version:0.5.1
'use strict'
const path = require('path')
const defaultSettings = require('./src/settings.js')
......@@ -8,7 +9,7 @@ function resolve(dir) {
const name = defaultSettings.title || 'IMAC后台管理系统' // 标题
const port = process.env.port || process.env.npm_config_port || 80 // 端口
const port = process.env.port || process.env.npm_config_port || 8080 // 端口
// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
......@@ -17,7 +18,7 @@ module.exports = {
// 部署生产环境和开发环境下的URL。
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.FedEx.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.FedEx.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
publicPath: process.env.NODE_ENV === "production" ? "/iMac/" : "/",
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
outputDir: 'dist',
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
......@@ -34,8 +35,9 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
//target: `http://localhost:8080`,
// target: `https://imacuat.zmd.apac.fedex.com:9002/IMAC2`,
// target: `http://192.168.1.45:8080`,
// target: `http://47.103.140.98:9002`,
target: `http://192.168.1.134:18080`,
changeOrigin: true,
pathRewrite: {
......@@ -81,7 +83,7 @@ module.exports = {
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.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$/
}])
.end()
......@@ -111,8 +113,8 @@ module.exports = {
})
config.optimization.runtimeChunk('single'),
{
from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
to: './', //到根目录下
from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
to: './', //到根目录下
}
}
)
......