jinhui.wang

test版本更新

1 +<?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 ...\ No newline at end of file
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click"> 13 <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
14 <div class="avatar-wrapper"> 14 <div class="avatar-wrapper">
15 <img :src="avatar" class="user-avatar"> 15 <img :src="avatar" class="user-avatar">
16 - <i class="el-icon-caret-bottom" /> 16 + <!-- <i class="el-icon-caret-bottom" /> -->
17 </div> 17 </div>
18 <el-dropdown-menu slot="dropdown"> 18 <el-dropdown-menu slot="dropdown">
19 <router-link to="/user/profile"> 19 <router-link to="/user/profile">
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
19 :base-path="route.path" 19 :base-path="route.path"
20 /> 20 />
21 </el-menu> 21 </el-menu>
22 - </el-scrollbar> 22 + <!-- </el-scrollbar> -->
23 </div> 23 </div>
24 </template> 24 </template>
25 25
......
...@@ -87,7 +87,8 @@ export default { ...@@ -87,7 +87,8 @@ export default {
87 bottom: 0px; 87 bottom: 0px;
88 } 88 }
89 .el-scrollbar__wrap { 89 .el-scrollbar__wrap {
90 - height: 49px; 90 + // height: 49px;
91 + margin-top:8px;
91 } 92 }
92 } 93 }
93 } 94 }
......
...@@ -225,7 +225,7 @@ export default { ...@@ -225,7 +225,7 @@ export default {
225 225
226 <style lang="scss" scoped> 226 <style lang="scss" scoped>
227 .tags-view-container { 227 .tags-view-container {
228 - height: 34px; 228 + height: 50px;
229 width: 100%; 229 width: 100%;
230 background: #fff; 230 background: #fff;
231 border-bottom: 1px solid #d8dce5; 231 border-bottom: 1px solid #d8dce5;
...@@ -268,6 +268,7 @@ export default { ...@@ -268,6 +268,7 @@ export default {
268 } 268 }
269 } 269 }
270 .contextmenu { 270 .contextmenu {
271 + // height: 0;
271 margin: 0; 272 margin: 0;
272 background: #fff; 273 background: #fff;
273 z-index: 3000; 274 z-index: 3000;
......
...@@ -74,7 +74,7 @@ export const constantRoutes = [ ...@@ -74,7 +74,7 @@ export const constantRoutes = [
74 children: [ 74 children: [
75 { 75 {
76 path: 'profile', 76 path: 'profile',
77 - component: (resolve) => require(['@/views/system/user/profile/index'], resolve), 77 + component: (resolve) => require(['@/views/systemConfig/userConfig/profile/index'], resolve),
78 name: 'Profile', 78 name: 'Profile',
79 meta: { title: '个人中心', icon: 'user' } 79 meta: { title: '个人中心', icon: 'user' }
80 } 80 }
...@@ -105,5 +105,6 @@ export const constantRoutes = [ ...@@ -105,5 +105,6 @@ export const constantRoutes = [
105 export default new Router({ 105 export default new Router({
106 mode: 'history', // 去掉url中的# 106 mode: 'history', // 去掉url中的#
107 scrollBehavior: () => ({ y: 0 }), 107 scrollBehavior: () => ({ y: 0 }),
108 - routes: constantRoutes 108 + routes: constantRoutes,
109 + base: '/iMac'
109 }) 110 })
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -4,15 +4,18 @@ const TokenKey = 'Admin-Token' ...@@ -4,15 +4,18 @@ const TokenKey = 'Admin-Token'
4 4
5 export function getToken() { 5 export function getToken() {
6 //return Cookies.get(TokenKey) 6 //return Cookies.get(TokenKey)
7 - return localStorage.getItem(TokenKey) 7 + // return localStorage.getItem(TokenKey)
8 + return sessionStorage.getItem(TokenKey)
8 } 9 }
9 10
10 export function setToken(token) { 11 export function setToken(token) {
11 //return Cookies.set(TokenKey, token) 12 //return Cookies.set(TokenKey, token)
12 - return localStorage.setItem(TokenKey, token) 13 + // return localStorage.setItem(TokenKey, token)
14 + return sessionStorage.setItem(TokenKey, token)
13 } 15 }
14 16
15 export function removeToken() { 17 export function removeToken() {
16 //return Cookies.remove(TokenKey) 18 //return Cookies.remove(TokenKey)
17 - return localStorage.removeItem(TokenKey) 19 + // return localStorage.removeItem(TokenKey)
20 + return sessionStorage.removeItem(TokenKey)
18 } 21 }
......
1 import axios from 'axios' 1 import axios from 'axios'
2 -import { Notification, MessageBox, Message } from 'element-ui' 2 +import { Message } from 'element-ui'
3 import store from '@/store' 3 import store from '@/store'
4 import { getToken } from '@/utils/auth' 4 import { getToken } from '@/utils/auth'
5 import errorCode from '@/utils/errorCode' 5 import errorCode from '@/utils/errorCode'
...@@ -10,17 +10,19 @@ const service = axios.create({ ...@@ -10,17 +10,19 @@ const service = axios.create({
10 // axios中请求配置有baseURL选项,表示请求URL公共部分 10 // axios中请求配置有baseURL选项,表示请求URL公共部分
11 //baseURL: process.env.VUE_APP_BASE_API, 11 //baseURL: process.env.VUE_APP_BASE_API,
12 //baseURL: 'http://192.168.1.45:8080', 12 //baseURL: 'http://192.168.1.45:8080',
13 - baseURL: 'http://192.168.1.134:18080', 13 + // baseURL: `http://47.103.140.98:9002`,s
14 + // baseURL: 'https://imacuat.zmd.apac.fedex.com:9002/IMAC2',
15 + baseURL: 'http://192.168.1.134:18080',
14 16
15 // 超时 17 // 超时
16 - timeout: 10000 18 + timeout: 30000
17 }) 19 })
18 // request拦截器 20 // request拦截器
19 service.interceptors.request.use(config => { 21 service.interceptors.request.use(config => {
20 // 是否需要设置 token 22 // 是否需要设置 token
21 const isToken = (config.headers || {}).isToken === false 23 const isToken = (config.headers || {}).isToken === false
22 if (getToken() && !isToken) { 24 if (getToken() && !isToken) {
23 - config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 25 + config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
24 } 26 }
25 // get请求映射params参数 27 // get请求映射params参数
26 if (config.method === 'get' && config.params) { 28 if (config.method === 'get' && config.params) {
...@@ -46,50 +48,51 @@ service.interceptors.request.use(config => { ...@@ -46,50 +48,51 @@ service.interceptors.request.use(config => {
46 } 48 }
47 return config 49 return config
48 }, error => { 50 }, error => {
49 - console.log(error) 51 + console.log(error)
50 - Promise.reject(error) 52 + Promise.reject(error)
51 }) 53 })
52 54
53 // 响应拦截器 55 // 响应拦截器
54 service.interceptors.response.use(res => { 56 service.interceptors.response.use(res => {
55 - // 未设置状态码则默认成功状态 57 + // 未设置状态码则默认成功状态
56 - const code = res.data.code || 200; 58 + const code = res.data.code || 200;
57 - // 获取错误信息 59 + // 获取错误信息
58 - const msg = errorCode[code] || res.data.msg || errorCode['default'] 60 + const msg = errorCode[code] || res.data.msg || errorCode['default']
59 - if (code === 401) { 61 + if (code === 301) {
60 - MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { 62 + this.$alert('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
61 - confirmButtonText: '重新登录', 63 + confirmButtonText: '重新登录',
62 - cancelButtonText: '取消', 64 + cancelButtonText: '取消',
63 - type: 'warning' 65 + type: 'warning',
64 - } 66 + }).then(() => {
65 - ).then(() => { 67 + store.dispatch('FedLogOut').then(() => {
66 - store.dispatch('LogOut').then(() => { 68 + location.href = '/index';
67 - location.href = '/index';
68 - })
69 - })
70 - } else if (code === 403) {
71 - //无权限页面
72 - location.href = '/401';
73 - }else if (code === 500) {
74 - Message({
75 - message: msg,
76 - type: 'error'
77 - })
78 - return Promise.reject(new Error(msg))
79 - } else if (code !== 200 &&code!=400) {
80 - Notification.error({
81 - title: msg
82 }) 69 })
83 - return Promise.reject('error') 70 + });
84 - } else { 71 + } else if (code === 403) {
85 - return res.data 72 + //无权限页面
86 - } 73 + location.href = '/401';
87 - }, 74 + }
75 + else if (code === 500) {
76 + Message({
77 + message: msg,
78 + type: 'error'
79 + })
80 + return Promise.reject(new Error(msg))
81 + } else if (code !== 200 && code !== 201) {
82 + Message({
83 + message: msg,
84 + type: 'error'
85 + })
86 + return Promise.reject('error')
87 + } else {
88 + return res.data
89 + }
90 +},
88 error => { 91 error => {
89 console.log('err' + error) 92 console.log('err' + error)
90 let { message } = error; 93 let { message } = error;
91 if (message == "Network Error") { 94 if (message == "Network Error") {
92 - message = "后端接口连接异常"; 95 + message = "网络连接异常";
93 } 96 }
94 else if (message.includes("timeout")) { 97 else if (message.includes("timeout")) {
95 message = "系统接口请求超时"; 98 message = "系统接口请求超时";
......
...@@ -5,8 +5,9 @@ const mimeMap = { ...@@ -5,8 +5,9 @@ const mimeMap = {
5 xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 5 xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
6 zip: 'application/zip' 6 zip: 'application/zip'
7 } 7 }
8 - 8 +// const baseURL = 'https://imacuat.zmd.apac.fedex.com:9002/IMAC2'
9 -const baseUrl = process.env.VUE_APP_BASE_API 9 +// const baseUrl = 'http://47.103.140.98:9002'
10 +const baseUrl = 'http://192.168.1.134:18080'
10 export function downLoadZip(str, filename) { 11 export function downLoadZip(str, filename) {
11 var url = baseUrl + str 12 var url = baseUrl + str
12 axios({ 13 axios({
...@@ -18,6 +19,20 @@ export function downLoadZip(str, filename) { ...@@ -18,6 +19,20 @@ export function downLoadZip(str, filename) {
18 resolveBlob(res, mimeMap.zip) 19 resolveBlob(res, mimeMap.zip)
19 }) 20 })
20 } 21 }
22 +export function cargoXlsx(str,data) {
23 + var url = baseUrl + str
24 + axios({
25 + method: 'post',
26 + url: url,
27 + data:data,
28 + responseType: 'blob',
29 + headers: { 'Authorization': getToken() }
30 + }).then(res => {
31 + if(res.status === 200){
32 + cargoTableXlsx(res)
33 + }
34 + })
35 +}
21 /** 36 /**
22 * 解析blob响应内容并下载 37 * 解析blob响应内容并下载
23 * @param {*} res blob响应内容 38 * @param {*} res blob响应内容
...@@ -25,7 +40,7 @@ export function downLoadZip(str, filename) { ...@@ -25,7 +40,7 @@ export function downLoadZip(str, filename) {
25 */ 40 */
26 export function resolveBlob(res, mimeType) { 41 export function resolveBlob(res, mimeType) {
27 const aLink = document.createElement('a') 42 const aLink = document.createElement('a')
28 - var blob = new Blob([res.data], { type: mimeType }) 43 + var blob = new Blob([res], { type: mimeType })
29 // //从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名; 44 // //从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名;
30 var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*') 45 var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
31 var contentDisposition = decodeURI(res.headers['content-disposition']) 46 var contentDisposition = decodeURI(res.headers['content-disposition'])
...@@ -38,3 +53,14 @@ export function resolveBlob(res, mimeType) { ...@@ -38,3 +53,14 @@ export function resolveBlob(res, mimeType) {
38 aLink.click() 53 aLink.click()
39 document.body.removeChild(aLink); 54 document.body.removeChild(aLink);
40 } 55 }
56 +
57 +//货物查询表导出
58 +export function cargoTableXlsx(res){
59 + const aLink = document.createElement('a')
60 + const fileName = "货物查询表.xlsx"
61 + aLink.href = URL.createObjectURL(res.data)
62 + aLink.setAttribute('download', fileName) // 设置下载文件名称
63 + document.body.appendChild(aLink)
64 + aLink.click()
65 + document.body.removeChild(aLink);
66 +}
......
This diff is collapsed. Click to expand it.
1 +<template>
2 + <div style="margin: 20px">
3 + <el-form :inline="true" :model="form" class="demo-form-inline" size="small">
4 + <el-form-item label="航班种类">
5 + <el-select v-model="form.type" placeholder="航班种类">
6 + <el-option
7 + v-for="item in flightType"
8 + :key="item.id"
9 + :label="item.englishName"
10 + :value="item.code"
11 + >{{ item.englishName }}</el-option
12 + >
13 + </el-select>
14 + </el-form-item>
15 + <el-form-item>
16 + <el-upload
17 + action="/flightInfoImport/importFlight"
18 + name="file"
19 + :http-request="uploadExcel"
20 + :on-remove="handleRemove"
21 + :limit="1"
22 + :on-exceed="handleExceed"
23 + :file-list="fileList"
24 + accept=".xlsx"
25 + class="upload-demo"
26 + >
27 + <el-button type="primary">点击上传</el-button>
28 + </el-upload>
29 + </el-form-item>
30 + <el-form-item>
31 + <el-button type="primary" @click="downloadTempleate"
32 + >下载模板</el-button
33 + >
34 + </el-form-item>
35 + </el-form>
36 + <div style="font-size: 12px; font-weight: 700">
37 + 提示:<span style="color: #0000ff">以下为所提交的数据或出错信息</span>
38 + </div>
39 + <el-table
40 + ref="filterTable"
41 + :data="tableData"
42 + style="width: 100%; margin-top: 20px"
43 + size="small"
44 + border
45 + >
46 + <el-table-column label="行号" prop="line" fixed width="50" align="center">
47 + </el-table-column>
48 + <el-table-column label="错误信息" prop="errorMessage" fixed width="200">
49 + <template slot-scope="scope">
50 + <div v-for="(m, key) in scope.row.errorMessage" :key="key">
51 + {{ m }}
52 + </div>
53 + </template>
54 + </el-table-column>
55 + <el-table-column v-if="tableData.length == 0"></el-table-column>
56 + <el-table-column
57 + v-for="(value, key) in this.tableData[0]"
58 + :key="key"
59 + v-if="key != 'errorMessage' && key != 'line'"
60 + :label="key"
61 + :prop="key"
62 + width="120"
63 + ></el-table-column>
64 + </el-table>
65 + </div>
66 +</template>
67 + </div>
68 +</template>
69 +<script>
70 +import {
71 + filghtKindData,
72 + downLoadTemplate,
73 + importFlight,
74 +} from "@/api/flightInfoImport";
75 +export default {
76 + data() {
77 + return {
78 + flightType: [],
79 + form: {
80 + type: "",
81 + region: "",
82 + },
83 + fileList: [],
84 + tableData: [],
85 + };
86 + },
87 + methods: {
88 + downloadTempleate() {
89 + let downloadType = "";
90 + let fileName = "";
91 + switch (this.form.type) {
92 + case "flightKind20":
93 + downloadType = "whiteTail";
94 + fileName = "航班信息导入模板WhiteTail.xlsx";
95 + break;
96 + case "flightKind30":
97 + downloadType = "purpleTail";
98 + fileName = "航班信息导入模板PurpleTail.xlsx";
99 + break;
100 + default:
101 + this.$confirm("此类航班暂无模板,请选择其他类型航班", "提示", {
102 + confirmButtonText: "确定",
103 + showCancelButton: false,
104 + type: "warning",
105 + });
106 + }
107 + if (downloadType != "") {
108 + downLoadTemplate(downloadType).then((res) => {
109 + if (res) {
110 + const blob = new Blob([res]);
111 + const link = document.createElement("a"); //创建a标签
112 + link.download = fileName; //a标签添加属性
113 + link.style.display = "none";
114 + link.href = URL.createObjectURL(blob);
115 + document.body.appendChild(link);
116 + link.click(); //执行下载
117 + URL.revokeObjectURL(link.href); //释放url
118 + document.body.removeChild(link); //释放标签
119 + } else {
120 + this.$message.error("下载失败");
121 + }
122 + });
123 + }
124 + },
125 + uploadExcel(option) {
126 + //上传excel
127 + const file = option.file;
128 + console.log(option);
129 + importFlight(file, this.form.type).then((res) => {
130 + if (res.code != 200) {
131 + if (res.code == 603) {
132 + this.$alert(res.msg , "提示", {
133 + confirmButtonText: "确定",
134 + type: "warning",
135 + });
136 + }else {
137 + this.$message.error(res.msg);
138 + this.tableData = res.data;
139 + }
140 + } else {
141 + this.$message.success("导入成功");
142 + this.tableData = res.data;
143 + }
144 + });
145 + },
146 + handleRemove(file, fileList) {
147 + //清掉上传的文件
148 + this.tableData = [];
149 + this.fileList = [];
150 + },
151 + handleExceed(files) {
152 + //重复上传文件
153 + let file = {};
154 + file.file = files[0];
155 + file.name = files[0].name;
156 + this.fileList = [];
157 + this.fileList.push(file);
158 + this.uploadExcel(file);
159 + },
160 + },
161 + created() {
162 + filghtKindData().then((response) => {
163 + if (response.code != 200) {
164 + this.$message({
165 + message: response.msg,
166 + type: "error",
167 + });
168 + }
169 + this.flightType = response.data;
170 + this.form.type = response.data[0].code;
171 + });
172 + },
173 +};
174 +</script>
175 +<style rel="stylesheet/scss" lang="scss">
176 +.upload-demo {
177 + float: right;
178 +}
179 +.el-upload-list {
180 + display: inline-block;
181 + margin-left: 10px;
182 + vertical-align: top;
183 +}
184 +</style>
...\ No newline at end of file ...\ No newline at end of file
This diff is collapsed. Click to expand it.
1 <template> 1 <template>
2 - <div> 2 + <div></div>
3 - <el-button type="primary" size="mini" @click="submit">保存</el-button>
4 - <el-button
5 - size="mini"
6 - type="text"
7 - icon="el-icon-delete"
8 - v-hasPermi="['system:user:list']"
9 - >删除1</el-button>
10 -
11 - <el-button
12 - size="mini"
13 - type="text"
14 - icon="el-icon-delete"
15 - v-hasPermi="['system:user:remove']"
16 - >删除2</el-button>
17 - </div>
18 </template> 3 </template>
19 <script> 4 <script>
20 import { delUser } from "@/api/system/user"; 5 import { delUser } from "@/api/system/user";
...@@ -22,8 +7,8 @@ import { delUser } from "@/api/system/user"; ...@@ -22,8 +7,8 @@ import { delUser } from "@/api/system/user";
22 export default { 7 export default {
23 props: { 8 props: {
24 user: { 9 user: {
25 - type: Object 10 + type: Object,
26 - } 11 + },
27 }, 12 },
28 data() { 13 data() {
29 return { 14 return {
...@@ -33,11 +18,11 @@ export default { ...@@ -33,11 +18,11 @@ export default {
33 methods: { 18 methods: {
34 submit() { 19 submit() {
35 this.msgSuccess("修改成功"); 20 this.msgSuccess("修改成功");
36 - delUser('112').then(response => { 21 + delUser("112").then((response) => {
37 this.msgSuccess("修改成功"); 22 this.msgSuccess("修改成功");
38 }); 23 });
39 - } 24 + },
40 - } 25 + },
41 }; 26 };
42 </script> 27 </script>
43 28
......
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
19 </el-input> 19 </el-input>
20 </el-form-item> 20 </el-form-item>
21 21
22 - <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox> 22 + <!-- <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox> -->
23 - <el-form-item style="width:100%;"> 23 + <el-form-item style="width:100%;marginTop:44px">
24 <el-button 24 <el-button
25 :loading="loading" 25 :loading="loading"
26 size="medium" 26 size="medium"
......
1 -<template>
2 - <div class="app-container">
3 - <el-form :model="queryParams" ref="queryForm" :inline="true">
4 - <el-form-item label="原航班" prop="sourceFlightNo">
5 - <el-input v-model="queryParams.sourceFlightNo" placeholder="请输入原航班" clearable size="small" />
6 - </el-form-item>
7 - <el-form-item label="状态" prop="status">
8 - <el-select v-model="queryParams.status" placeholder="请选择" clearable size="small">
9 - <el-option v-for="dict in statusList" :key="dict.id" :label="dict.name" :value="dict.id" />
10 - </el-select>
11 -
12 - </el-form-item>
13 -
14 - <el-form-item>
15 - <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询原航班配置</el-button>
16 - </el-form-item>
17 - <br />
18 - <el-form-item label="日期" prop="flightDate">
19 -
20 - <el-date-picker v-model="queryParams.flightDate" type="date" placeholder="选择日期">
21 - </el-date-picker>
22 - </el-form-item>
23 -
24 - <el-form-item>
25 - <el-button type="primary" icon="el-icon-search" size="mini" @click="findSourceFlightAndFlightDate">查询实际目的航班</el-button>&#12288;
26 - <span style="color: red;">注:原航班+日期查询该日期的航班实际情况</span>
27 - </el-form-item>
28 - <br />
29 - <el-form-item>
30 - <el-col :span="1.5">
31 - <el-button type="primary" icon="el-icon-plus" size="mini">添加规则</el-button>
32 - </el-col>
33 - &#12288; <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
34 - </el-form-item>
35 - </el-form>
36 -
37 -
38 - <el-table v-loading="loading" :data="sourceFlightRulesList" >
39 -
40 - <el-table-column label="原航班" align="center" prop="sourceFlightNo"/>
41 - <el-table-column label="目的航班排序" align="center" prop="flightRank" width="280"/>
42 - <!-- <el-table-column label="优先级" align="center" prop="priority" /> -->
43 - <el-table-column label="周期" align="center" prop="dayOfWeek" width="180"/>
44 - <el-table-column label="状态" align="center" prop="status" :formatter="statusFormat" />
45 - <el-table-column label="开始时间" align="center" prop="startDate" width="100"/>
46 - <el-table-column label="结束时间" align="center" prop="endDate" width="100"/>
47 - <el-table-column label="最后修改人" align="center" prop="updateUserName" width="100"/>
48 - <el-table-column label="最后修改时间" align="center" prop="updateTime" width="100"/>
49 - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"width="280" fixed="right">
50 - <template slot-scope="scope">
51 - <el-button size="mini" type="text" icon="el-icon-edit" >修改</el-button>
52 - <el-button size="mini" type="text" icon="el-icon-delete" >删除</el-button>
53 - <el-button size="mini" type="text" icon="el-icon-delete" >启用</el-button>
54 - <el-button size="mini" type="text" icon="el-icon-delete" >停用</el-button>
55 - </template>
56 - </el-table-column>
57 - </el-table>
58 -
59 - <pagination v-show="total>0" :total="total" layout=" prev, pager, next, jumper, sizes,total"
60 - :page.sync="queryParams.pageNum" :limit.sync="queryParams.limit" @pagination="findSourceFlightRules" />
61 -
62 -
63 - <!-- 查看目的航班对话框 -->
64 - <el-dialog title="实际目的航班" :visible.sync="openFlightDate" width="70%">
65 - <el-table v-loading="loadingFlightDate" :data="sourceFlightAndFlightDate">
66 -
67 - <el-table-column label="原航班" align="center" prop="sourceFlightNo"/>
68 - <el-table-column label="实际目的航班" align="center" prop="actualFlight" width="280"/>
69 - <el-table-column label="航班日期" align="center" prop="flightDate" />
70 - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"width="200">
71 - <template slot-scope="scope">
72 - <el-button size="mini" type="text" icon="el-icon-edit" >查看配置维度</el-button>
73 - </template>
74 - </el-table-column>
75 - </el-table>
76 - <div slot="footer" class="dialog-footer">
77 - <el-button @click="cancelFlightDate">返 回</el-button>
78 - </div>
79 - </el-dialog>
80 - </div>
81 -</template>
82 -<script>
83 - import {
84 - findSourceFlightRulesApi,findSourceFlightAndFlightDateApi
85 - } from "@/api/sourceFlightRules";
86 - export default {
87 - name: "SourceFlightRules",
88 - data() {
89 - return {
90 - // 遮罩层
91 - loading: false,
92 - // 遮罩层
93 - loadingFlightDate: false,
94 - // 总条数
95 - total: 0,
96 - // 原航班规则数据
97 - sourceFlightRulesList: [],
98 - //目的航班数据
99 - sourceFlightAndFlightDate:[],
100 - statusList: [{'id':1,'name':'有效'}, {'id':2,'name':'配置中'},{'id':3,'name':'停用'}],
101 - // 新增修改查看规则弹出层
102 - open: false,
103 - // 是否显示查看目的航班弹出层
104 - openFlightDate: false,
105 - // 查询参数
106 - queryParams: {
107 - start: 0, //当前条数【代表第几条数据 +1开始】
108 - pageNum: 1,
109 - limit: 20, //一页显示多少条数据
110 - sourceFlightNo: undefined, //原航班号
111 - status: undefined, //状态
112 - flightDate: undefined //日期
113 - },
114 - // 表单参数
115 - form: {},
116 - // 表单校验
117 - rules: {}
118 - };
119 - },
120 - created() {
121 - this.findSourceFlightRules();
122 - },
123 - methods: {
124 - /** 查询原航班顺位规则*/
125 - findSourceFlightRules() {
126 - //this.loading = true;
127 - if (this.queryParams.pageNum > 1) {
128 - this.queryParams.start = (this.queryParams.pageNum - 1) * this.queryParams.limit
129 - }else{
130 - this.queryParams.start=0;
131 - }
132 - findSourceFlightRulesApi(this.queryParams).then(response => {
133 - this.sourceFlightRulesList = response.data.list;
134 - this.total = response.data.totalCount;
135 - this.loading = false;
136 - });
137 -
138 - },
139 - /** 查询目的航班*/
140 - findSourceFlightAndFlightDate(){
141 - //校验原航班号非空
142 - if(this.queryParams.sourceFlightNo===null||this.queryParams.sourceFlightNo===undefined||this.queryParams.sourceFlightNo.trim()===''){
143 - this.$message.warning("原航班号为空");
144 - return
145 - }
146 - //校验原日期非空
147 - if(this.queryParams.flightDate===null||this.queryParams.flightDate===undefined){
148 - this.$message.warning("日期为空");
149 - return
150 - }
151 - this.openFlightDate = true;
152 - this.loadingFlightDate=true;
153 - this.sourceFlightAndFlightDate=[];
154 - findSourceFlightAndFlightDateApi(this.queryParams).then(response => {
155 - this.sourceFlightAndFlightDate = response.data;
156 - this.loadingFlightDate=false;
157 - });
158 -
159 -
160 - },
161 - // 目的航班弹出框返回
162 - cancelFlightDate() {
163 - this.openFlightDate = false;
164 - },
165 - // 状态字典翻译
166 - statusFormat(row) {
167 - if(row.status==='1'){
168 - return '有效'
169 - }else if(row.status==='2'){
170 - return '配置中'
171 - }else if(row.status==='3'){
172 - return '停用'
173 - }
174 - return row.status;
175 - },
176 - /** 重置按钮操作 */
177 - resetQuery() {
178 - this.resetForm("queryForm");
179 - this.handleQuery();
180 - },
181 - /** 搜索按钮操作 */
182 - handleQuery() {
183 - this.queryParams.pageNum = 1;
184 - this.queryParams.start=0;
185 - this.findSourceFlightRules();
186 - }
187 -
188 - }
189 - };
190 -</script>
191 -<style>
192 -
193 -
194 -</style>
1 -<template>
2 -<div style="margin:40px" class="app-container">
3 - <el-form :inline="true" :model="queryParams" class="demo-form-inline" size="small">
4 - <el-form-item label="航班号">
5 - <el-input v-model="queryParams.purposeOfFlightNo" placeholder="航班号"></el-input>
6 - </el-form-item>
7 - <el-form-item>
8 - <el-button type="primary" icon="el-icon-search" @click="getList" size="mini">查询</el-button>
9 - </el-form-item>
10 - </el-form>
11 - <el-button style="margin-bottom:20px" type="primary" icon="el-icon-plus" size="mini">添加</el-button>
12 - <el-table
13 - :data="flyList"
14 - style="width: 800px"
15 - v-loading="loading" size="small"
16 - >
17 - <el-table-column prop="purposeOfFlightNo" label="航班号" align="center"></el-table-column>
18 - <el-table-column label="操作" prop="id" align="center">
19 - <template slot-scope="scope" >
20 - <el-button type="text" size="mini" icon="el-icon-view" @click="handleClick(scope.row.id, 'detail')">查看</el-button>
21 - <el-button type="text" size="mini" icon="el-icon-edit" @click="handleClick(scope.row.id, 'update')">修改</el-button>
22 - <el-button type="text" size="mini" icon="el-icon-delete">删除</el-button>
23 - <el-button type="text" size="mini" icon="el-icon-video-play">启用</el-button>
24 - <el-button type="text" size="mini" icon="el-icon-video-pause">停用</el-button>
25 - </template>
26 - </el-table-column>
27 - </el-table>
28 - <el-pagination
29 - @size-change="getList"
30 - @current-change="getList"
31 - :current-page.sync="curPage"
32 - :page-sizes="[10, 20, 30, 40]"
33 - :page-size.sync="limit"
34 - layout="prev, pager, next, jumper, sizes, total"
35 - :total="total"
36 - background
37 - :hide-on-single-page="true"
38 - style="margin-top:40px; text-align:right">
39 - </el-pagination>
40 -</div>
41 -</template>
42 -
43 -<script>
44 - import {
45 - findFlightNo
46 - } from "@/api/destinationFlight";
47 -
48 - export default {
49 - data() {
50 - return {
51 - queryParams: {
52 - purposeOfFlightNo: '',
53 - start:0,
54 - limit:10
55 - },
56 - flyList:[],
57 - curPage:1,
58 - limit:10,
59 - total:0,
60 - loading:false,
61 - }
62 - },
63 - methods: {
64 - getList(){
65 - this.queryParams.limit = this.limit;
66 - if (this.curPage > 1) {
67 - this.queryParams.start = (this.curPage - 1) * this.queryParams.limit
68 - }else {
69 - this.queryParams.start = 0;
70 - }
71 - this.loading = true;
72 - findFlightNo(this.queryParams).then(response => {
73 - this.flyList = response.data.list;
74 - this.total = response.data.totalCount;
75 - this.loading = false;
76 - });
77 - },
78 - //跳转到查看,修改页面
79 - handleClick(flightiId, handle){
80 - this.$router.push({ name: 'info', params: { handle: handle, id:flightiId }});
81 - },
82 - //删除,启用,停用
83 - changeStatus(id, handle){
84 -
85 - }
86 - },
87 - created() {
88 - this.getList();
89 - }
90 - }
91 -</script>
92 -
93 -
1 -<template>
2 - <div>index</div>
3 -</template>
4 -
5 -
1 <template> 1 <template>
2 - <div style="margin: 20px"> 2 + <div></div>
3 - <el-form :inline="true" :model="form" class="demo-form-inline" size="small">
4 - <el-form-item label="航班种类">
5 - <el-select v-model="form.type" placeholder="航班种类">
6 - <el-option
7 - v-for="item in flightType"
8 - :key="item.id"
9 - :label="item.englishName"
10 - :value="item.code"
11 - >{{item.englishName}}</el-option>
12 - </el-select>
13 - </el-form-item>
14 - <el-form-item>
15 - <el-upload
16 - action="/flightInfoImport/importFlight"
17 - name="file"
18 - :http-request="uploadExcel"
19 - :on-remove="handleRemove"
20 - :limit="1"
21 - :on-exceed="handleExceed"
22 - :file-list="fileList"
23 - accept=".xlsx"
24 - class="upload-demo"
25 - >
26 - <el-button type="primary">点击上传</el-button>
27 - </el-upload>
28 - </el-form-item>
29 - <el-form-item>
30 - <el-button type="primary" @click="downloadTempleate"
31 - >下载模板</el-button
32 - >
33 - </el-form-item>
34 - </el-form>
35 - <div style="font-size: 12px;font-weight: 700;">提示:<span style="color:#0000FF">以下为所提交的数据或出错信息</span></div>
36 -
37 - <el-table
38 - ref="filterTable"
39 - :data="tableData"
40 - style="width: 100%; margin-top: 20px"
41 - size="small"
42 - border
43 - >
44 - <el-table-column label="行号" prop="line" fixed width="50" align="center">
45 - </el-table-column>
46 -
47 - <el-table-column label="错误信息" prop="errorMessage" fixed width="200">
48 - <template slot-scope="scope">
49 - <div v-for="(m,key) in scope.row.errorMessage" :key="key">{{ m }}</div>
50 - </template>
51 - </el-table-column>
52 -
53 - <el-table-column v-if="tableData.length == 0" ></el-table-column>
54 -
55 - <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>
56 - </el-table>
57 - </div>
58 -</template>
59 - </div>
60 </template> 3 </template>
61 4
62 <script> 5 <script>
63 -import {
64 - filghtKindData,
65 - downLoadTemplate,
66 - importFlight,
67 -} from "@/api/flightInfoImport";
68 -
69 export default { 6 export default {
70 - data() {
71 - return {
72 - flightType: [],
73 - form: {
74 - type: "",
75 - region: "",
76 - },
77 - fileList: [],
78 - tableData: [],
79 - };
80 - },
81 - methods: {
82 - downloadTempleate() {
83 - let downloadType = "";
84 - let fileName = "";
85 - switch (this.form.type) {
86 - case "flightKind20":
87 - downloadType = "whiteTail";
88 - fileName = "航班信息导入模板WhiteTail.xlsx";
89 - break;
90 - case "flightKind30":
91 - downloadType = "purpleTail";
92 - fileName = "航班信息导入模板PurpleTail.xlsx";
93 - break;
94 - default:
95 - this.$confirm("此类航班暂无模板,请选择其他类型航班", "提示", {
96 - confirmButtonText: "确定",
97 - showCancelButton: false,
98 - type: "warning",
99 - });
100 - }
101 - if (downloadType != "") {
102 - downLoadTemplate(downloadType).then((res) => {
103 - if (res) {
104 - const blob = new Blob([res]);
105 - const link = document.createElement("a"); //创建a标签
106 - link.download = fileName; //a标签添加属性
107 - link.style.display = "none";
108 - link.href = URL.createObjectURL(blob);
109 - document.body.appendChild(link);
110 - link.click(); //执行下载
111 - URL.revokeObjectURL(link.href); //释放url
112 - document.body.removeChild(link); //释放标签
113 - } else {
114 - this.$message.error("下载失败");
115 - }
116 - });
117 - }
118 - },
119 - uploadExcel(option) {
120 - //上传excel
121 - const file = option.file;
122 - console.log(option);
123 - importFlight(file, this.form.type).then((res) => {
124 - if (res.code != 200) {
125 - this.$message.error(res.msg);
126 - this.tableData = res.data;
127 - } else {
128 - this.$message.success('导入成功');
129 - this.tableData = res.data;
130 - }
131 - });
132 - },
133 - handleRemove(file, fileList) {
134 - //清掉上传的文件
135 - this.tableData = [];
136 - this.fileList = [];
137 - },
138 - handleExceed(files) {
139 - //重复上传文件
140 - let file = {};
141 - file.file = files[0];
142 - file.name = files[0].name;
143 - this.fileList = [];
144 - this.fileList.push(file);
145 7
146 - this.uploadExcel(file); 8 +}
147 - },
148 - },
149 - created() {
150 - filghtKindData().then((response) => {
151 - if (response.code != 200) {
152 - this.$message({
153 - message: response.msg,
154 - type: "error",
155 - });
156 - }
157 - this.flightType = response.data;
158 - this.form.type = response.data[0].code;
159 - });
160 - },
161 -};
162 </script> 9 </script>
163 10
164 -<style rel="stylesheet/scss" lang="scss"> 11 +<style>
165 -.upload-demo { 12 +
166 - float: right;
167 -}
168 -.el-upload-list {
169 - display: inline-block;
170 - margin-left: 10px;
171 - vertical-align: top;
172 -}
173 </style> 13 </style>
...\ No newline at end of file ...\ No newline at end of file
......
This diff is collapsed. Click to expand it.
1 +<template>
2 + <div></div>
3 +</template>
4 +
5 +<script>
6 +export default {
7 +
8 +}
9 +</script>
10 +
11 +<style>
12 +
13 +</style>
...\ No newline at end of file ...\ No newline at end of file
1 +//version:0.5.1
1 'use strict' 2 'use strict'
2 const path = require('path') 3 const path = require('path')
3 const defaultSettings = require('./src/settings.js') 4 const defaultSettings = require('./src/settings.js')
...@@ -8,7 +9,7 @@ function resolve(dir) { ...@@ -8,7 +9,7 @@ function resolve(dir) {
8 9
9 const name = defaultSettings.title || 'IMAC后台管理系统' // 标题 10 const name = defaultSettings.title || 'IMAC后台管理系统' // 标题
10 11
11 -const port = process.env.port || process.env.npm_config_port || 80 // 端口 12 +const port = process.env.port || process.env.npm_config_port || 8080 // 端口
12 13
13 // vue.config.js 配置说明 14 // vue.config.js 配置说明
14 //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions 15 //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
...@@ -17,7 +18,7 @@ module.exports = { ...@@ -17,7 +18,7 @@ module.exports = {
17 // 部署生产环境和开发环境下的URL。 18 // 部署生产环境和开发环境下的URL。
18 // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 19 // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
19 // 例如 https://www.FedEx.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.FedEx.vip/admin/,则设置 baseUrl 为 /admin/。 20 // 例如 https://www.FedEx.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.FedEx.vip/admin/,则设置 baseUrl 为 /admin/。
20 - publicPath: process.env.NODE_ENV === "production" ? "/" : "/", 21 + publicPath: process.env.NODE_ENV === "production" ? "/iMac/" : "/",
21 // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) 22 // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
22 outputDir: 'dist', 23 outputDir: 'dist',
23 // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) 24 // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
...@@ -34,8 +35,9 @@ module.exports = { ...@@ -34,8 +35,9 @@ module.exports = {
34 proxy: { 35 proxy: {
35 // detail: https://cli.vuejs.org/config/#devserver-proxy 36 // detail: https://cli.vuejs.org/config/#devserver-proxy
36 [process.env.VUE_APP_BASE_API]: { 37 [process.env.VUE_APP_BASE_API]: {
37 - //target: `http://localhost:8080`, 38 + // target: `https://imacuat.zmd.apac.fedex.com:9002/IMAC2`,
38 // target: `http://192.168.1.45:8080`, 39 // target: `http://192.168.1.45:8080`,
40 + // target: `http://47.103.140.98:9002`,
39 target: `http://192.168.1.134:18080`, 41 target: `http://192.168.1.134:18080`,
40 changeOrigin: true, 42 changeOrigin: true,
41 pathRewrite: { 43 pathRewrite: {
...@@ -81,7 +83,7 @@ module.exports = { ...@@ -81,7 +83,7 @@ module.exports = {
81 .plugin('ScriptExtHtmlWebpackPlugin') 83 .plugin('ScriptExtHtmlWebpackPlugin')
82 .after('html') 84 .after('html')
83 .use('script-ext-html-webpack-plugin', [{ 85 .use('script-ext-html-webpack-plugin', [{
84 - // `runtime` must same as runtimeChunk name. default is `runtime` 86 + // `runtime` must same as runtimeChunk name. default is `runtime`
85 inline: /runtime\..*\.js$/ 87 inline: /runtime\..*\.js$/
86 }]) 88 }])
87 .end() 89 .end()
...@@ -111,8 +113,8 @@ module.exports = { ...@@ -111,8 +113,8 @@ module.exports = {
111 }) 113 })
112 config.optimization.runtimeChunk('single'), 114 config.optimization.runtimeChunk('single'),
113 { 115 {
114 - from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件 116 + from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
115 - to: './', //到根目录下 117 + to: './', //到根目录下
116 } 118 }
117 } 119 }
118 ) 120 )
......