jinhui.wang

预审导入导出页面增加,手动配舱页面增加,公共组件增加,公共方法更新,样式更新

import service from "../utils/request";
import request from '@/utils/request'
export function downLoadTemplate(template) {
return request({
url:'/caPreReviewImport/downLoadTemplate?template=' + template,
method:'get',
responseType:'blob',
})
}
export function importcaPreReview(file, type){
let formData = new FormData();
formData.append("file", file);
formData.append("type", type);
return request({
url:'/caPreReviewImport/importcaPreReview',
method:'post',
data:formData
})
}
......@@ -17,4 +17,39 @@ export function findCargoData(data) {
data: data
})
}
//货物预审查询
export function findCagroPreData(data) {
return request({
url: '/cargo/findCagroPreData',
method: 'post',
data: data
})
}
//货物配舱查询
export function findCargoAllocationData(data) {
return request({
url: '/cargo/findCargoAllocationData',
method: 'post',
data: data
})
}
//手动配舱
export function allocationFlight(data){
return request({
url:'/cargo/allocationFlight',
method:'post',
data:data
})
}
//导出excel
export function downloadExcel(data) {
return request({
url: '/cargo/excel',
method: 'post',
data: data,
responseType: 'blob',
})
}
......
let ductLabels = {
"cargoRulesStatus":{
"1":"自动",
"2":"手动"
}
}
export default ductLabels;
\ No newline at end of file
<template>
<div class="Tables">
<el-table
:ref="tableName"
:data="data"
:headerData="headerData"
:border="border"
:stripe="stripe"
:size="size"
:fit="fit"
:indent="indent"
:show-header="showHeader"
:height="height"
:highlight-current-row="highlightCurrentRow"
:lazy="lazy"
:downShiftKey="shiftKey"
:limitStart="limitStart"
v-loading="loading"
@select="tableSelect"
@select-all="tableSelectAll"
@select-change="SelectChange"
>
<el-table-column
v-for="(item, index) in newHeader"
:type="item.type"
:prop="item.value"
:label="item.name"
:width="item.width"
:align="item.align"
:fixed="item.fixed"
:show-overflow-tooltip="showOverflowTooltip"
:sortable="item.sorTable"
header-align="center"
:formatter="formatter"
:slotHeader="slotHeader"
:key="index"
>
<template v-if="item.slot" slot-scope="">
<Item :dom="item.slot" @change="itemChange"></Item>
</template>
</el-table-column>
<slot></slot>
</el-table>
<el-pagination
:total="totalCount"
:page-size.sync="limitSize"
background
layout="prev, pager, next, jumper, ->, total, slot"
class="tablePagination"
@next-click="nextClick"
@prev-click="prevClick"
@current-change="currentChange"
>
</el-pagination>
<!-- <infoTable
v-bind="$attrs"
@checkChange="checkChange"
@top="top"
@bottom="bottom"
></infoTable> -->
</div>
</template>
<script>
// import infoTable from "./info.vue";
import Item from "./item.vue";
import dictLabels from "../../assets/languages/dictLabels.js"
import { scrollTo } from '@/utils/scroll-to'
export default {
name: "Table",
components: {
// infoTable,
Item,
},
props: {
tableName: { type: String, default: "tables" },
data: {
type: Array,
default() {
return [];
},
},
headerData: {
type: Array,
default: null,
},
border: {
type: Boolean,
default: true,
},
stripe: {
type: Boolean,
default: true,
},
size: {
type: String,
default: "mini",
},
height: {
type: String,
default: "400",
},
fit: {
type: Boolean,
default: true,
},
indent: {
type: Number,
default: 16,
},
showHeader: {
type: Boolean,
default: true,
},
slotHeader: {
type: Boolean,
default: true,
},
highlightCurrentRow: {
type: Boolean,
default: true,
},
lazy: {
type: Boolean,
default: true,
},
loading: {
type: Boolean,
default: false,
},
hidden: {
type: Boolean,
default: false,
},
showOverflowTooltip: {
type: Boolean,
default: true,
},
shiftKey:{
type:Boolean,
default:false,
},
page: {
type: Number,
default: 1,
},
limitSize: {
type: Number,
default: 20,
},
limitStart:{
type:Number,
default:0,
},
paginationBackground: {
type: Boolean,
default: true,
},
pageSize: {
type: Number,
default: 20,
},
totalCount: {
type: Number,
default: 0,
},
},
inheritAttrs: false,
data() {
return {
newHeader: [],
selectTable: [],
pageNum: 1,
start:-1,
// {
// type: "selection",
// name: "",
// value: "",
// slot: null,
// width: "",
// align: "center",
// sorTable: false,
// fixed:false,
// },
};
},
created() {
this.newHeader = this.headerData;
},
mounted() {
},
methods: {
nextClick() {
this.$emit('currentChange',{page:this.pageNum + 1,start:this.limitStart + this.limitSize})
scrollTo(0,800);
},
prevClick() {
this.$emit('currentChange',{page:this.pageNum - 1,start:this.limitStart - this.limitSiz})
scrollTo(0,800);
},
currentChange(val) {
this.$emit('currentChange',{page:val,start: val*this.limitSize+1});
scrollTo(0,800);
},
tableSelect(selection, row) {
let end = row.index;
if (this.shiftKey) {
const sum = Math.abs(this.start - end);
const min = Math.min(this.start, end);
let i;
if (
this.start === -1 &&
selection.includes(this.data[row.index])
) {
for (i = 0; i < sum; i++) {
this.$refs.tables.toggleRowSelection(this.data[i], true);
this.selectTable.push(this.data[i]);
}
} else if (selection.includes(this.data[row.index])) {
for (i = this.start + 1; i <= end; i++) {
this.$refs.tables.toggleRowSelection(this.data[i], true);
this.selectTable.push(this.data[i]);
}
} else if (!selection.includes(this.data[row.index])) {
this.selectTable.splice(end - 1, sum + 1);
for (i = end; i <= this.start; i++) {
this.$refs.tables.toggleRowSelection(this.data[i], false);
}
}
this.start = end;
} else {
this.start = end;
if (selection.includes(this.data[end])) {
this.selectTable.push(row);
} else {
for (let i = 0; i < this.selectTable.length; i++) {
if (this.selectTable[i].index == row.index) {
this.selectTable.splice(i, 1);
}
}
}
}
selection = this.selectTable
this.$emit("tableSelect", { selection, row });
},
tableSelectAll(selection) {
this.$emit("tableSelectAll", selection);
},
SelectChange(selection) {
this.$emit("SelectChange", selection);
},
clearTable(){
this.selectTable = []
this.$refs.tables.clearSelection()
},
// itemChange(val) {},
// checkChange(val) {
// console.log(val);
// },
// top(val) {
// console.log(val);
// },
// bottom(val) {
// console.log(val);
// },
formatter(row, column, cellValue, index) {
if(dictLabels[column.property]){
if(dictLabels[column.property][cellValue]){
return dictLabels[column.property][cellValue];
}
}
return cellValue;
},
},
};
</script>
<style>
.Tables {
width: 100%;
margin-top: 20px;
}
.tablePagination {
margin-top: 40px;
text-align: right;
}
</style>
<template>
<div class="tableInfo">
<el-dropdown trigger="click" :hide-on-click="false">
<el-button
type="primary"
icon="el-icon-edit"
size="medium"
circle
></el-button>
<el-dropdown-menu slot="dropdown">
<el-checkbox-group v-model="checkList">
<el-dropdown-item
v-for="(item, index) in infoData"
:key="index"
v-if="!item.type"
class="dropItem"
>
<el-checkbox
:label="item.name"
:checked="true"
@change="checkChange"
></el-checkbox>
<span class="itemRight">
<i class="el-icon-caret-top" @click.stop="top(index)"></i>
<i class="el-icon-caret-bottom" @click.stop="bottom(index)"></i>
</span>
</el-dropdown-item>
</el-checkbox-group>
</el-dropdown-menu>
</el-dropdown>
</div>
</template>
<script>
export default {
props: { infoData: { type: Array, default: null } },
inheritAttrs: false,
data() {
return {
checkList: [],
};
},
methods: {
checkChange(val) {
this.$emit("checkChange", { type: val });
},
top(val) {
this.$emit("top", val);
},
bottom(val) {
this.$emit("bottom", val);
},
},
created() {},
};
</script>
<style scope lang="scss">
.itemRight {
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
height: 34px;
width: 24px;
vertical-align: middle;
cursor: pointer;
overflow: initial;
position: relative;
.el-icon-caret-bottom,
.el-icon-caret-top {
width: 0;
height: 0;
border: solid 5px transparent;
position: absolute;
left: 10px;
}
.el-icon-caret-bottom {
bottom: 12px;
}
.el-icon-caret-top {
top: 5px;
}
}
.dropItem {
display: flex;
justify-content: space-between;
}
</style>
<style>
.tableInfo {
position: fixed;
right: 30px;
bottom: 40px;
z-index: 99999999;
}
</style>
\ No newline at end of file
<script>
export default {
name: "Item",
inheritAttrs: false,
props: {
dom: {
type: Object,
default: null,
},
},
render() {
let newDom = [];
newDom.push(this.dom);
return newDom;
},
methods: {
change(val){
this.$emit('change',val)
}
},
};
</script>
......@@ -2,7 +2,7 @@
<div v-if="!item.hidden">
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}" style="paddingRight:0">
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
</el-menu-item>
</app-link>
......@@ -19,6 +19,7 @@
:item="child"
:base-path="resolvePath(child.path)"
class="nest-menu"
:title="child.meta.title"
/>
</el-submenu>
</div>
......
......@@ -11,6 +11,7 @@ import App from './App'
import store from './store'
import router from './router'
import permission from './directive/permission'
import i18n from './i18n/index'
import './assets/icons' // icon
import './permission' // permission control
......@@ -20,6 +21,7 @@ import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels,
import Pagination from "@/components/Pagination";
// 自定义表格工具扩展
import RightToolbar from "@/components/RightToolbar"
import Table from "@/components/Table"
// 全局方法挂载
//Vue.prototype.getDicts = getDicts
......@@ -47,9 +49,9 @@ Vue.prototype.msgInfo = function (msg) {
// 全局组件挂载
Vue.component('Pagination', Pagination)
Vue.component('RightToolbar', RightToolbar)
Vue.component('Tables',Table)
Vue.use(permission)
/**
* If you don't want to use mock-server
* you want to use MockJs for mock api
......@@ -71,5 +73,6 @@ new Vue({
el: '#app',
router,
store,
i18n,
render: h => h(App)
})
......
......@@ -42,5 +42,5 @@ module.exports = {
/**
* 版本号
*/
version:'version:0.5.5'
version:'version:0.5.5.3'
}
......
......@@ -174,3 +174,9 @@ export function handleTree(data, id, parentId, children) {
}
return tree;
}
//字符串英文转大写,;转英文;
export function upCase(str){
let newStr = str.replace(/;/g,";").toUpperCase();
return newStr;
}
\ No newline at end of file
......
......@@ -8,6 +8,7 @@ const mimeMap = {
const baseUrl = 'https://imacuat.zmd.apac.fedex.com/iMAC' //uat服务器
// const baseUrl = 'http://47.103.140.98:7001/IMAC2' //阿里云服务器
// const baseUrl = 'http://192.168.1.133:7001/IMAC2' //测试服务器
export function downLoadZip(str, filename) {
var url = baseUrl + str
axios({
......@@ -44,28 +45,63 @@ export function downLoadZip(str, filename) {
// excel导出请求
export function downLoadXlsx(str, data,fileName) {
var url = baseUrl + str
return new Promise((resolve,rej)=>{
return new Promise((resolve,reject)=>{
axios({
method: 'post',
url: url,
data: data,
timeout:500000,
responseType: 'blob',
headers: { 'Authorization': decodeURIComponent(getToken()) }
// headers: { 'Authorization': decodeURIComponent(getToken()) }
//uat环境token需要做url解码处理
}).then(res => {
if (res.status === 200) {
cargoTableXlsx(res,fileName)
downLoadExcal(res,fileName)
}
resolve()
resolve(res)
}).catch((err)=>{
rej(err)
reject(err)
})
})
}
//excel导出下载
export function downLoadExcal(val,fileNames) {
export function downLoadExcal(val,filename) {
const aLink = document.createElement('a')
const fileName = filename+".xlsx"
aLink.href = URL.createObjectURL(val.data)
aLink.setAttribute('download', fileName) // 设置下载文件名称
document.body.appendChild(aLink)
aLink.click()
document.body.removeChild(aLink);
}
//航班预审导出
export function cargoXlsxPre(str, data) {
var url = baseUrl + str
return new Promise((resolve,reject)=>{
axios({
method: 'post',
url: url,
data: data,
responseType: 'blob',
headers: { 'Authorization': decodeURIComponent(getToken()) }
}).then(res => {
if (res.status === 200) {
cargoTableXlsxPre(res)
}
resolve()
}).catch((err)=>{
reject(err)
})
})
}
//航班预审导出
export function cargoTableXlsxPre(val) {
const aLink = document.createElement('a')
const fileName = fileNames+".xlsx"
const fileName = "航班预审表.xlsx"
aLink.href = URL.createObjectURL(val.data)
aLink.setAttribute('download', fileName) // 设置下载文件名称
document.body.appendChild(aLink)
......
This diff is collapsed. Click to expand it.
<template>
<div>
<el-dialog
title="货物配舱"
width="80%"
:visible.sync="dialogVisible"
:close-on-click-modal="false"
:append-to-body="true"
>
<el-divider content-position="left">已选货物信息</el-divider>
<el-table
:data="tableData"
size="mini"
height="200"
max-height="200"
border
stripe
highlight-current-row
style="width: 100%"
>
<el-table-column type="index" label="序号" align="center">
</el-table-column>
<el-table-column
v-for="(item, index) in cargoHeader"
header-align="center"
align="center"
:prop="item.value"
:label="item.name"
:key="index"
:show-overflow-tooltip="true"
>
</el-table-column>
</el-table>
<el-form
ref="form"
label-position="right"
label-width="auto"
style="width: 400px; margin: 30px auto"
>
<el-form-item label="航班号" prop="fltNo">
<el-input
v-model="fltNo"
size="medium"
placeholder="请输入航班号"
style="width: 350px"
></el-input>
</el-form-item>
<el-form-item label="航班日期:" prop="fltDate">
<el-date-picker
v-model="formData.fltDate"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
size="medium"
style="width: 350px"
>
</el-date-picker>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="dialogBeforeClose">取 消</el-button>
<el-button type="primary" @click="submit">确 定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { allocationFlight } from "@/api/cargoSelect";
export default {
props: {
dialogVisible: {
type: Boolean,
default: false,
},
tableData: {
type: Array,
default: null,
},
},
data() {
return {
formData: {
ids:[],
fltNo: undefined,
fltDate:undefined,
overweight:false
},
cargoHeader: [
{ name: "口岸代码", value: "portName" },
{ name: "运单号", value: "waybillNo" },
{ name: "货物状态", value: "statusName" },
{ name: "站点", value: "siteName" },
{ name: "申报类型", value: "typeName" },
{ name: "URSA", value: "ursa" },
{ name: "实际重量", value: "actualWeight" },
{ name: "件数", value: "qty" },
{ name: "品名描述", value: "nameDescription" },
{ name: "是否自动", value: "cargoRulesStatus" },
{ name: "创建人", value: "createUserName" },
{ name: "创建时间", value: "createTime" },
],
fltHeader: [
{ name: "航班日期", value: "fltDate" },
{ name: "航班号", value: "fltNo" },
{ name: "航班路线", value: "route" },
{ name: "航班类型", value: "typeName" },
{ name: "总重量", value: "totalWeight" },
{ name: "额外增重百分比", value: "extraWeightPercent" },
{ name: "已配重量", value: "alloctedWeight" },
{ name: "配舱优先级", value: "priorityRuleName" },
{ name: "是否开启高地价", value: "highLowPriceFlg" },
{ name: "航班起飞时间", value: "takeOffTime" },
{ name: "创建人", value: "createUserName" },
{ name: "创建时间", value: "createTime" },
],
rules:{
fltNo: [{
required: true,
message: "航班号不能为空",
trigger: "blur"
}],
fltDate: [{
required: true,
message: "航班日期不能为空",
trigger: "change"
}],
}
};
},
methods: {
//确定配舱
submit() {
let arr = [];
this.tableData.forEach(item => {
arr.push(item.id)
});
this.formData.ids = arr;
if(this.formData.fltNo && this.formData.fltDate){
allocationFlight(this.formData).then(res=>{//code 200 配舱成功 601 重量已满需要确认 其余code直接输出msg
if(code === 200){
this.$message({
message: "货物配舱成功",
type: "success",
});
}else if(code === 601){
this.$confirm('航班配重已满,是否继续配舱?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.formData.overweight = true;//确定继续overweight变为true再次请求接口
allocationFlight(this.formData).then(res=>{
if(code === 200){
this.$message({
message: "货物配舱成功",
type: "success",
});
this.$emit("dialogBeforeClose", {close:false,reload:false});
}else{
this.$message({
message: res.msg,
type: "warning",
});
}
})
}).catch(() => {//取消 取消当前配舱
this.$message({
message: "配舱已取消",
type: "success",
});
this.$emit("dialogBeforeClose", {close:false,reload:false});
});
}else{
this.$message({
message: res.msg,
type: "warning",
});
}
this.$emit("dialogBeforeClose", {close:false,reload:true});
})
}else{
this.$message({
message: "航班号或航班日期不能为空",
type: "warning",
});
}
},
dialogBeforeClose() {
this.$emit("dialogBeforeClose", {close:false,reload:false});
},
},
computed: {
fltNo: {
get: function () {
return this.formData.fltNo;
},
set: function (val) {
this.formData.fltNo = val.toUpperCase();
},
},
},
};
</script>
<style>
</style>
\ No newline at end of file
......@@ -6,7 +6,7 @@
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="航班号" prop="purposeOfFlightNo">
<el-input v-model.trim="form.purposeOfFlightNo" style="width: 30%" :disabled="nameDisabled"></el-input>
<el-input v-model.trim="form.purposeOfFlightNo" style="width: 50%" :disabled="nameDisabled"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -100,8 +100,12 @@
<el-form-item label="申报类别">
<el-card shadow="never" style="width: 70%">
<el-checkbox-group v-model="form.typeOfGoods">
<el-checkbox v-for="item in cargoType" :key="item.id" :label="item.chineseName" :name="item.chineseName">
<el-row>
<el-col :span="2" v-for="item in cargoType" :key="item.id">
<el-checkbox :label="item.chineseName" :name="item.chineseName">
</el-checkbox>
</el-col>
</el-row>
</el-checkbox-group>
</el-card>
</el-form-item>
......@@ -109,8 +113,11 @@
<el-form-item label="货物类型">
<el-card shadow="never" style="width: 70%">
<el-checkbox-group v-model="form.declarationCategory">
<el-checkbox v-for="item in cargoStatus" :key="item.id" :label="item.chineseName" :name="item.chineseName"
disabled></el-checkbox>
<el-row>
<el-col :span="3" v-for="item in cargoStatus" :key="item.id">
<el-checkbox :label="item.chineseName" :name="item.chineseName" disabled></el-checkbox>
</el-col>
</el-row>
</el-checkbox-group>
</el-card>
</el-form-item>
......@@ -118,8 +125,11 @@
<el-form-item label="Service Code">
<el-card shadow="never" style="width: 70%">
<el-checkbox-group v-model="form.serviceCode">
<el-checkbox v-for="item in serviceCode" :key="item.id" :label="item.englishName"
:name="item.englishName"></el-checkbox>
<el-row>
<el-col :span="2" v-for="item in serviceCode" :key="item.id">
<el-checkbox :label="item.englishName" :name="item.englishName"></el-checkbox>
</el-col>
</el-row>
</el-checkbox-group>
</el-card>
</el-form-item>
......@@ -127,8 +137,11 @@
<el-form-item label="Handling Code">
<el-card shadow="never" style="width: 70%">
<el-checkbox-group v-model="form.handlingCode">
<el-checkbox v-for="item in handlingCode" :key="item.id" :label="item.englishName"
:name="item.englishName"></el-checkbox>
<el-row>
<el-col :span="3" v-for="item in handlingCode" :key="item.id">
<el-checkbox :label="item.englishName" :name="item.englishName"></el-checkbox>
</el-col>
</el-row>
</el-checkbox-group>
</el-card>
</el-form-item>
......@@ -136,22 +149,27 @@
<el-form-item label="Sub Category">
<el-card shadow="never" style="width: 70%">
<el-checkbox-group v-model="form.subCategory">
<el-checkbox v-for="item in subCategory" :key="item.id" :label="item.englishName"
:name="item.englishName"></el-checkbox>
<el-row>
<el-col :span="3" v-for="item in subCategory" :key="item.id">
<el-checkbox :label="item.englishName" :name="item.englishName"></el-checkbox>
</el-col>
</el-row>
</el-checkbox-group>
</el-card>
</el-form-item>
<el-form-item>
</el-form-item>
</el-form>
<el-row style="margin-left: 200px">
<div style="marginLeft:200px">
<el-button type="primary" size="small" v-if="$route.params.handle != 'detail'" @click="submit('form')"
:loading="btnLoading">
<span v-if="$route.params.handle === 'add'">添加</span>
<span v-else>保存</span>
</el-button>
<el-button size="small" @click="close">取消</el-button>
</el-row>
</div>
</template>
</div>
</template>
......
<template>
<div class="app-container">
<el-form class="form-header" :model="queryParams" label-position="right" label-width="auto" size="medium">
<el-row>
<el-col :span="6">
<el-form-item label="航班日期从" prop="fltDateStart">
<el-date-picker
value-format="yyyy-MM-dd"
class="formItem"
v-model="queryParams.fltDateStart"
type="date"
placeholder="选择日期"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="到" prop="fltDateEnd">
<el-date-picker
value-format="yyyy-MM-dd"
class="formItem"
v-model="queryParams.fltDateEnd"
type="date"
placeholder="选择日期"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="航班号">
<el-input
type="textarea"
v-model="fltNo"
clearable
class="formItem"
placeholder="AC001;AC002"
rows="1"
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="运单号">
<el-input
clearable
type="textarea"
v-model="queryParams.waybillNo"
class="formItem"
placeholder="请输入运单号(回车间隔)"
rows="1"
></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="站点">
<el-input
type="textarea"
v-model="siteName"
class="formItem"
placeholder="PVG;PEK"
clearable
rows="1"
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="URSA">
<el-input
clearable
type="textarea"
v-model="ursa"
class="formItem"
placeholder="S_;P_;E2"
rows="1"
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-switch
v-model="queryParams.reExport"
active-color="#13ce66"
active-text="重新导出"
style="padding-left: 35px"
>
</el-switch>
</el-col>
</el-row>
<div style="margin-top:25px">
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button
type="warning"
:disabled="tableData.length == 0"
@click="xlse()"
:loading="downLoadingTip.downloading"
icon="el-icon-download"
size="mini"
>{{
downLoadingTip.downloading ? downLoadingTip.tip : "导出"
}}</el-button
>
</div>
</el-form>
<el-table
max-height="500"
highlight-current-row
border
stripe
v-loading="loading"
:data="tableData"
>
<el-table-column
label="运单号"
align="center"
prop="waybillNo"
width="120"
/>
<el-table-column
label="品牌描述"
align="center"
prop="nameDescription"
width="120"
/>
<el-table-column
label="航班日期"
align="center"
prop="fltDate"
width="130"
/>
<el-table-column label="航班号" align="center" prop="fltNo" />
<el-table-column
label="航班路线"
align="center"
prop="route"
width="150"
/>
<el-table-column
label="配置航班类型"
align="center"
prop="kindName"
width="130"
/>
<el-table-column label="尺寸" align="center" prop="sizeStr" />
<el-table-column label="件数" align="center" prop="qty" />
<el-table-column label="实际重量" align="center" prop="actualWeight" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
width="180"
/>
</el-table>
<pagination
v-show="total > 0"
:total="total"
layout=" prev, pager, next, jumper, sizes,total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.limitSize"
@pagination="findAllFltData"
/>
</div>
</template>
<script>
import { findCagroPreData } from "@/api/cargoSelect";
import { cargoXlsxPre } from "@/utils/zipdownload";
export default {
name: "caExportPreQualification",
data() {
return {
//导出
downLoadingTip: {
tip: "",
downloading: false,
},
tableData: [], //表格数据
// 遮罩层
loading: false,
// 弹出层标题
title: "",
// 总条数
total: 0,
// 原航班规则数据
findAllFltDatList: [],
// 新增修改查看规则弹出层
open: false,
// 查询参数
queryParams: {
limitStart: 0, //当前条数【代表第几条数据 +1开始】
pageNum: 1,
limitSize: 20, //一页显示多少条数据
fltDateStart: undefined, //航班日期开始
fltDateEnd: undefined, //航班日期结束
reExport: false,
//航班号
fltNo: null,
//运单号
waybillNo: "",
//站点
siteName: "",
//ursa
ursa: "",
},
// 表单校验
rules: {},
};
},
created() {},
methods: {
// 导出表格
xlse() {
this.downLoadingTip.downloading = true;
this.downLoadingTip.tip = "正在导出结果集请耐心等待";
let cargoXlse = { title: "航班预审表", cargoExportPreQueryDto: {} };
cargoXlse.cargoExportPreQueryDto = JSON.parse(
JSON.stringify(this.queryParams)
);
cargoXlse.cargoExportPreQueryDto.limitStart = 0;
cargoXlse.cargoExportPreQueryDto.limitSize = -1;
cargoXlsxPre("/cargo/excelPre", cargoXlse)
.then(() => {
this.downLoadingTip.downloading = false;
this.downLoadingTip.tip = "";
this.progress = 100;
})
.catch(() => {
this.downLoadingTip.downloading = false;
this.downLoadingTip.tip = "";
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.queryParams.start = 0;
this.findAllFltData();
},
/** 预审信息查寻*/
findAllFltData() {
this.loading = true;
if (this.queryParams.pageNum > 1) {
this.queryParams.limitStart =
(this.queryParams.pageNum - 1) * this.queryParams.limitSize;
} else {
this.queryParams.limitStart = 0;
}
findCagroPreData(this.queryParams).then((response) => {
if (response.code == 200) {
this.tableData = response.data.list;
this.total = response.data.totalCount;
this.loading = false;
} else {
this.msgError(response.msg);
}
});
},
},
computed: {
fltNo: {
get: function () {
return this.queryParams.fltNo;
},
set: function (val) {
this.queryParams.fltNo = val.toUpperCase();
},
},
siteName: {
get: function () {
return this.queryParams.siteName;
},
set: function (val) {
this.queryParams.siteName = val.toUpperCase();
},
},
ursa: {
get: function () {
return this.queryParams.ursa;
},
set: function (val) {
this.queryParams.ursa = val.toUpperCase();
},
},
},
};
</script>
<style scoped>
.tips {
float: right;
color: #606266;
font-size: 14px;
margin-right: 40px;
}
</style>
<template>
<div style="margin: 20px">
<el-form :inline="true" :model="form" class="demo-form-inline" size="small">
<el-form-item>
<el-upload action="/caPreReviewImport/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" v-loading="loading" 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="300">
<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-if="tableData.length > 0" label="运单号" align="center" prop="A" />
<el-table-column v-if="tableData.length > 0" label="品名描述" align="center" prop="B" />
<el-table-column v-if="tableData.length > 0" label="航班日期" align="center" prop="C" />
<el-table-column v-if="tableData.length > 0" label="航班号" align="center" prop="D" />
<el-table-column v-if="tableData.length > 0" label="预审意见" align="center" prop="E" />
<!-- <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 {
downLoadTemplate,
importcaPreReview,
} from "@/api/caPreReviewImport";
export default {
data() {
return {
// 遮罩层
loading: false,
flightType: [],
form: {
type: "",
region: "",
},
fileList: [],
tableData: [],
};
},
methods: {
downloadTempleate() {
let fileName = "航班预审导入模板.xlsx";
downLoadTemplate().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);
this.loading=true;
importcaPreReview(file, this.form.type).then((res) => {
this.loading=false;
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(res.msg);
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() {
},
};
</script>
<style rel="stylesheet/scss" lang="scss">
.upload-demo {
float: right;
}
.el-upload-list {
display: inline-block;
margin-left: 10px;
vertical-align: top;
}
</style>
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="90px">
<el-form class="form-header" :model="queryParams" ref="queryForm" label-position="right" label-width="auto" size="medium">
<el-row>
<el-col :span="8">
<el-col :span="6">
<el-form-item label="航班日期从" prop="fltDateStart">
<el-date-picker value-format="yyyy-MM-dd" v-model="queryParams.fltDateStart" type="date" placeholder="选择日期">
<el-date-picker class="formItem" value-format="yyyy-MM-dd" v-model="queryParams.fltDateStart" type="date" placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="6">
<el-form-item label="到" prop="fltDateEnd">
<el-date-picker value-format="yyyy-MM-dd" v-model="queryParams.fltDateEnd" type="date" placeholder="选择日期">
<el-date-picker class="formItem" value-format="yyyy-MM-dd" v-model="queryParams.fltDateEnd" type="date" placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="6">
<el-form-item label="航班号" prop="fltNo">
<el-input v-model="queryParams.fltNo" placeholder="请输入航班号" clearable size="small" />
<el-input class="formItem" v-model="queryParams.fltNo" placeholder="请输入航班号" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-col :span="6">
<el-form-item label="航班类型" prop="typeId">
<el-select v-model="queryParams.typeId" placeholder="请选择航班类型" clearable size="small">
<el-select class="formItem" v-model="queryParams.typeId" placeholder="请选择航班类型" clearable>
<el-option v-for="dict in flightTypelist" :key="dict.id" :label="dict.chineseName" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="6">
<el-form-item label="航班状态" prop="statusId">
<el-select v-model="queryParams.statusId" placeholder="请选择航班状态" clearable size="small">
<el-select class="formItem" v-model="queryParams.statusId" placeholder="请选择航班状态" clearable>
<el-option v-for="dict in flightStatuslist" :key="dict.id" :label="dict.chineseName" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="6">
<el-form-item label="航班种类" prop="flightKindId">
<el-select v-model="queryParams.flightKindId" placeholder="请选择航班种类" clearable size="small">
<el-select class="formItem" v-model="queryParams.flightKindId" placeholder="请选择航班种类" clearable>
<el-option v-for="dict in flightKindlist" :key="dict.id" :label="dict.chineseName" :value="dict.id" />
</el-select>
</el-form-item>
......@@ -51,12 +48,11 @@
</el-row>
<br />
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
</el-form-item>
<el-button type="primary" icon="el-icon-circle-check" size="mini" @click="handleFlightStatus('flightStatus10')">航班开启</el-button>
<el-button type="primary" icon="el-icon-circle-close" size="mini" @click="handleFlightStatus('flightStatus80')">航班关闭</el-button>
</el-form>
<!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5">
......@@ -130,7 +126,7 @@
<!-- 添加或修改对话框 -->
<el-dialog :title="title" :visible.sync="open" width="60%" :close-on-click-modal="false" :append-to-body="true">
<el-form ref="form" :model="form" :rules="rules" label-width="130px">
<el-form ref="form" :model="form" :rules="rules" label-position="right" label-width="auto">
<el-row>
<el-col :span="12">
<el-form-item label="航班号" prop="fltNo">
......@@ -365,7 +361,7 @@
}],
fltDate: [{
required: true,
message: "ACCS航班日期不能为空",
message: "航班日期不能为空",
trigger: "blur"
}],
kindId: [{
......@@ -716,6 +712,26 @@
this.queryParams.start = 0;
this.findAllFltData();
},
//批量开启/关闭航班
handleFlightStatus(status){
let handle = status == 'flightStatus80' ? '关闭' : '开启'
if (this.ids.length == 0){
this.msgError('请选择批量' + handle + '的航班')
return;
}
let data = {};
data.status = status;
data.updateIds = this.ids;
updateStatusBatch(data).then(response => {
if (response.code === 200) {
this.msgSuccess( handle + "成功");
this.findAllFltData();
} else {
this.msgError(response.msg);
}
});
}
}
};
......
......@@ -26,7 +26,7 @@
</el-col>
<el-col :span="6">
<el-form-item label="配载航班号:">
<el-input type="textarea" v-model="cargoPlaneNo" class="formItem" placeholder="AC001;AC002"></el-input>
<el-input type="textarea" v-model="cargoPlaneNo" class="formItem" placeholder="AC001;AC002" rows="1"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
......@@ -54,7 +54,8 @@
type="textarea"
v-model="formData.waybillNo"
class="formItem"
placeholder="xxxx;xxxx"
placeholder="请输入运单号(回车间隔)"
rows="1"
></el-input>
</el-form-item>
</el-col>
......@@ -102,6 +103,7 @@
v-model="ursa"
class="formItem"
placeholder="S_;P_;E2"
rows="1"
></el-input>
</el-form-item>
</el-col>
......@@ -112,6 +114,7 @@
v-model="siteName"
class="formItem"
placeholder="PVG;PEK"
rows="1"
></el-input>
</el-form-item>
</el-col>
......@@ -210,91 +213,6 @@
</el-collapse-item>
</el-collapse>
</el-col>
<!-- <el-col :span="6">
<el-form-item label="预配航班日期:">
<el-date-picker
class="formItem"
v-model="prepalyFlightTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:value-format="valueFormat"
>
</el-date-picker>
</el-form-item>
</el-col> -->
<!-- <el-col :span="6">
<el-form-item label="数据源:">
<el-select
placeholder="不限"
v-model="formData.dataSources"
class="formItem"
clearable
>
<el-option label="人工导入" value="1"> </el-option>
<el-option label="系统导入" value="2"> </el-option>
</el-select>
</el-form-item>
</el-col> -->
<!-- <el-col :span="6">
<el-form-item label="是否大货:">
<el-select
placeholder="不限"
v-model="formData.big"
class="formItem"
clearable
>
<el-option label="是" value="1"> </el-option>
<el-option label="否" value="0"> </el-option>
</el-select>
</el-form-item>
</el-col> -->
<!-- <el-col :span="6">
<el-form-item label="配置航班类型:">
<el-select
placeholder="不限"
v-model="formData.kindToAllocFlightId"
class="formItem"
clearable
>
<el-option
v-for="item in findConditionData.configureFlightType"
:label="item.chineseName"
:value="item.id"
:key="item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-col> -->
<!-- <el-col :span="6">
<el-form-item label="历史货物状态:">
<el-select
placeholder="不限"
v-model="formData.historyAllocaCargoTypeId"
class="formItem"
clearable
>
<el-option
v-for="item in findConditionData.cargoStatusHistory"
:label="item.chineseName"
:value="item.id"
:key="item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-col> -->
<!-- <el-col :span="6">
<el-form-item label="航班序列单号:">
<el-input
type="text"
v-model="formData.mawbCode"
class="formItem"
></el-input>
</el-form-item>
</el-col> -->
</el-row>
<div style="paddingLeft: 10px;marginTop:20px">
<el-button
......@@ -314,6 +232,8 @@
<el-button :type="downLoadingTip.downloading?'warning':'primary'" size="small" @click="xlse(1)" :disabled="tableData.length==0" :loading="downLoadingTip.downloading"
>{{downLoadingTip.downloading?downLoadingTip.tip:"导出全部查询结果"}}</el-button
>
<span style="marginLeft:20px;color:#ffba00">全部导出上限80000条数据</span>
<el-progress v-if="progress!=0" class="progress" :stroke-width="12" :show-text="true" :percentage="progress" :status="progress == 100?'success':'warning'"></el-progress>
<div class="tips">
<span style="paddingRight: 50px">总重量:{{ allWeight }}</span>
<span>总件数:{{ allQty }}</span>
......@@ -364,6 +284,7 @@
<script>
import { findConditionData, findCargoData } from "@/api/cargoSelect";
import { downLoadXlsx } from "@/utils/zipdownload";
import { upCase } from "@/utils/FedEx"
export default {
name:"queryCargo",
......@@ -461,6 +382,7 @@ export default {
createDate: [],
limitStart: 0,
limitSize: 100, //无限制-1
progress:0,
selecetALL:false,
};
},
......@@ -654,6 +576,7 @@ export default {
},
// 导出表格
xlse(page) {
this.progress = 1;
this.downLoadingTip.downloading = true;
let cargoXlse = {title:"货物导出表",cargoConditionDto:{}};
if(this.formData.customsReceiptStatusId != null && this.formData.customsReceiptStatusId.length < 1){
......@@ -696,6 +619,7 @@ export default {
downLoadXlsx("/cargo/excel",cargoXlse,"货物查询表").then(()=>{
this.downLoadingTip.downloading = false;
this.downLoadingTip.tip = ""
this.progress = 100;
}).catch(()=>{
this.downLoadingTip.downloading = false;
this.downLoadingTip.tip = ""
......@@ -708,6 +632,7 @@ export default {
downLoadXlsx("/cargo/excel",cargoXlse,"货物查询表").then(()=>{
this.downLoadingTip.downloading = false;
this.downLoadingTip.tip = ""
this.progress = 100;
}).catch(()=>{
this.downLoadingTip.downloading = false;
this.downLoadingTip.tip = ""
......@@ -739,7 +664,7 @@ export default {
return this.formData.fltNo;
},
set: function (val) {
this.formData.fltNo = val.toUpperCase();
this.formData.fltNo = upCase(val);
},
},
siteName: {
......@@ -747,7 +672,7 @@ export default {
return this.formData.siteName;
},
set: function (val) {
this.formData.siteName = val.toUpperCase();
this.formData.siteName = upCase(val);
},
},
ursa: {
......@@ -755,7 +680,7 @@ export default {
return this.formData.ursa;
},
set: function (val) {
this.formData.ursa = val.toUpperCase();
this.formData.ursa = upCase(val);
},
},
cargoPlaneNo:{
......@@ -763,7 +688,7 @@ export default {
return this.formData.cargoPlaneNo;
},
set: function (val) {
this.formData.cargoPlaneNo = val.toUpperCase();
this.formData.cargoPlaneNo = upCase(val);
},
}
},
......