jinhui.wang

手动配舱页面更新,样式修改,bug修正

......@@ -35,6 +35,14 @@ export function findCargoAllocationData(data) {
})
}
//手动配舱
export function allocationFlight(data){
return request({
url:'/cargo/allocationFlight',
method:'post',
data:data
})
}
//导出excel
export function downloadExcel(data) {
......
let ductLabels = {
"cargoRulesStatus":{
"1":"自动",
"2":"手动"
}
}
export default ductLabels;
\ No newline at end of file
var en = {
"common": {
"risk": "risk",
"exit": "exit",
"index":"index"
}
}
export default en
var zh = {
"common": {
"risk": "风险",
"exit": "退出",
"index":"首页"
}
}
export default zh
......@@ -12,7 +12,6 @@
:show-header="showHeader"
:height="height"
:highlight-current-row="highlightCurrentRow"
:label-position="labelPosition"
:lazy="lazy"
:downShiftKey="shiftKey"
:limitStart="limitStart"
......@@ -65,6 +64,8 @@
<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: {
......@@ -103,10 +104,6 @@ export default {
type: Boolean,
default: true,
},
labelPosition: {
type: String,
default: "left",
},
indent: {
type: Number,
default: 16,
......@@ -184,13 +181,11 @@ export default {
// align: "center",
// sorTable: false,
// fixed:false,
// formatter:{}
// },
};
},
created() {
this.newHeader = this.headerData;
this.total = this.data.length;
},
mounted() {
......@@ -198,12 +193,15 @@ export default {
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;
......@@ -253,9 +251,10 @@ export default {
this.$emit("SelectChange", selection);
},
clearTable(){
this.selectTable = []
this.$refs.tables.clearSelection()
},
itemChange(val) {},
// itemChange(val) {},
// checkChange(val) {
// console.log(val);
// },
......@@ -266,6 +265,11 @@ export default {
// console.log(val);
// },
formatter(row, column, cellValue, index) {
if(dictLabels[column.property]){
if(dictLabels[column.property][cellValue]){
return dictLabels[column.property][cellValue];
}
}
return cellValue;
},
},
......
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import ElementLocale from 'element-ui/lib/locale'
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
import langZh from "@/assets/languages/zh.js"
import langEN from "@/assets/languages/en.js"
Vue.use(VueI18n)
const i18n = new VueI18n({
locale: 'zh',//默认语言
messages: {
'zh': {...langZh,...zhLocale},
'en': {...langEN,...enLocale}
}
})
ElementLocale.i18n((key, value) => i18n.t(key, value))
export default i18n
......@@ -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>
......
......@@ -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
......@@ -48,10 +49,9 @@ Vue.prototype.msgInfo = function (msg) {
// 全局组件挂载
Vue.component('Pagination', Pagination)
Vue.component('RightToolbar', RightToolbar)
Vue.component('Table', Table)
Vue.component('Tables',Table)
Vue.use(permission)
/**
* If you don't want to use mock-server
* you want to use MockJs for mock api
......@@ -73,5 +73,6 @@ new Vue({
el: '#app',
router,
store,
i18n,
render: h => h(App)
})
......
......@@ -3,11 +3,11 @@
* Copyright (c) 2019 FedEx
*/
const baseURL = process.env.VUE_APP_BASE_API
const baseURL = process.env.VUE_APP_BASE_API
// 日期格式化
export function parseTime(time, pattern) {
debugger
// 日期格式化
export function parseTime(time, pattern) {
//debugger
if (arguments.length === 0 || !time) {
return null
}
......@@ -45,17 +45,17 @@ export function parseTime(time, pattern) {
return value || 0
})
return time_str
}
}
// 表单重置
export function resetForm(refName) {
// 表单重置
export function resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
}
}
// 添加日期范围
export function addDateRange(params, dateRange, propName) {
// 添加日期范围
export function addDateRange(params, dateRange, propName) {
var search = params;
search.params = {};
if (null != dateRange && '' != dateRange) {
......@@ -68,10 +68,10 @@ export function addDateRange(params, dateRange, propName) {
}
}
return search;
}
}
// 回显数据字典
export function selectDictLabel(datas, value) {
// 回显数据字典
export function selectDictLabel(datas, value) {
var actions = [];
Object.keys(datas).some((key) => {
if (datas[key].dictValue == ('' + value)) {
......@@ -80,10 +80,10 @@ export function selectDictLabel(datas, value) {
}
})
return actions.join('');
}
}
// 回显数据字典(字符串数组)
export function selectDictLabels(datas, value, separator) {
// 回显数据字典(字符串数组)
export function selectDictLabels(datas, value, separator) {
var actions = [];
var currentSeparator = undefined === separator ? "," : separator;
var temp = value.split(currentSeparator);
......@@ -95,15 +95,15 @@ export function selectDictLabels(datas, value, separator) {
})
})
return actions.join('').substring(0, actions.join('').length - 1);
}
}
// 通用下载方法
export function download(fileName) {
// 通用下载方法
export function download(fileName) {
window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
}
}
// 字符串格式化(%s )
export function sprintf(str) {
// 字符串格式化(%s )
export function sprintf(str) {
var args = arguments, flag = true, i = 1;
str = str.replace(/%s/g, function () {
var arg = args[i++];
......@@ -114,24 +114,24 @@ export function sprintf(str) {
return arg;
});
return flag ? str : '';
}
}
// 转换字符串,undefined,null等转化为""
export function praseStrEmpty(str) {
// 转换字符串,undefined,null等转化为""
export function praseStrEmpty(str) {
if (!str || str == "undefined" || str == "null") {
return "";
}
return str;
}
}
/**
/**
* 构造树型结构数据
* @param {*} data 数据源
* @param {*} id id字段 默认 'id'
* @param {*} parentId 父节点字段 默认 'parentId'
* @param {*} children 孩子节点字段 默认 'children'
*/
export function handleTree(data, id, parentId, children) {
export function handleTree(data, id, parentId, children) {
let config = {
id: id || 'id',
parentId: parentId || 'parentId',
......@@ -173,4 +173,10 @@ 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
......
......@@ -15,6 +15,7 @@
max-height="200"
border
stripe
highlight-current-row
style="width: 100%"
>
<el-table-column type="index" label="序号" align="center">
......@@ -30,35 +31,13 @@
>
</el-table-column>
</el-table>
<el-divider content-position="left">可配置航班信息</el-divider>
<el-table
:data="fltData"
size="mini"
height="200"
max-height="200"
border
stripe
style="width: 100%"
>
<el-table-column type="index" label="序号" align="center">
</el-table-column>
<el-table-column
v-for="(item, index) in fltHeader"
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="航班号">
<el-form-item label="航班号" prop="fltNo">
<el-input
v-model="fltNo"
size="medium"
......@@ -66,7 +45,7 @@
style="width: 350px"
></el-input>
</el-form-item>
<el-form-item label="航班日期:">
<el-form-item label="航班日期:" prop="fltDate">
<el-date-picker
v-model="formData.fltDate"
type="date"
......@@ -87,7 +66,7 @@
</template>
<script>
import { findAllFltDataApi } from "@/api/findAllFltData";
import { allocationFlight } from "@/api/cargoSelect";
export default {
props: {
dialogVisible: {
......@@ -101,17 +80,11 @@ export default {
},
data() {
return {
formData: { fltNo: "" },
fltSelect:{
limitStart: 0, //当前条数【代表第几条数据 +1开始】
pageNum: 1,
limitSize: -1, //一页显示多少条数据
fltDateStart: undefined, //航班日期开始
fltDateEnd: undefined, //航班日期结束
typeId: undefined, //航班类型
statusId: '83937', //航班状态
flightKindId: undefined, //航班种类
fltNo: undefined //航班号,要大写
formData: {
ids:[],
fltNo: undefined,
fltDate:undefined,
overweight:false
},
cargoHeader: [
{ name: "口岸代码", value: "portName" },
......@@ -141,18 +114,81 @@ export default {
{ name: "创建人", value: "createUserName" },
{ name: "创建时间", value: "createTime" },
],
fltData: [],
rules:{
fltNo: [{
required: true,
message: "航班号不能为空",
trigger: "blur"
}],
fltDate: [{
required: true,
message: "航班日期不能为空",
trigger: "change"
}],
}
};
},
methods: {
//确定配舱
submit() {
this.$emit("dialogBeforeClose", false);
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", false);
},
this.$emit("dialogBeforeClose", {close:false,reload:false});
},
watch:{
},
computed: {
fltNo: {
......
......@@ -4,9 +4,9 @@
<template v-else>
<el-form ref="form" :model="form" label-width="200px" size="small" :disabled="disable" :rules="rules">
<el-row :gutter="20">
<el-col :span="8">
<el-col :span="12">
<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: 60%" :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>
......
......@@ -232,7 +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
>
<el-progress class="progress" :stroke-width="12" :show-text="true" :percentage="progress" :status="progress == 100?'success':'warning'"></el-progress>
<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>
......@@ -283,6 +284,7 @@
<script>
import { findConditionData, findCargoData } from "@/api/cargoSelect";
import { downLoadXlsx } from "@/utils/zipdownload";
import { upCase } from "@/utils/FedEx"
export default {
name:"queryCargo",
......@@ -574,7 +576,7 @@ export default {
},
// 导出表格
xlse(page) {
this.progress = 0;
this.progress = 1;
this.downLoadingTip.downloading = true;
let cargoXlse = {title:"货物导出表",cargoConditionDto:{}};
if(this.formData.customsReceiptStatusId != null && this.formData.customsReceiptStatusId.length < 1){
......@@ -662,8 +664,7 @@ export default {
return this.formData.fltNo;
},
set: function (val) {
val = val.replace(/;/g,";");
this.formData.fltNo = val.toUpperCase();
this.formData.fltNo = upCase(val);
},
},
siteName: {
......@@ -671,8 +672,7 @@ export default {
return this.formData.siteName;
},
set: function (val) {
val = val.replace(/;/g,";");
this.formData.siteName = val.toUpperCase();
this.formData.siteName = upCase(val);
},
},
ursa: {
......@@ -680,8 +680,7 @@ export default {
return this.formData.ursa;
},
set: function (val) {
val = val.replace(/;/g,";");
this.formData.ursa = val.toUpperCase();
this.formData.ursa = upCase(val);
},
},
cargoPlaneNo:{
......@@ -689,8 +688,7 @@ export default {
return this.formData.cargoPlaneNo;
},
set: function (val) {
val = val.replace(/;/g,";");
this.formData.cargoPlaneNo = val.toUpperCase();
this.formData.cargoPlaneNo = upCase(val);
},
}
},
......