jinhui.wang

增加航线字典,手动配舱增加到航线,航班信息维护航线完善

......@@ -42,11 +42,11 @@ export function findCargoAllocationData(data) {
}
//手动配舱
export function allocationFlight(data){
export function allocationFlight(data) {
return request({
url:'/cargo/allocationFlight',
method:'post',
data:data
url: '/cargo/allocationFlight',
method: 'post',
data: data
})
}
......@@ -67,4 +67,42 @@ export function releaseCargo(data) {
method: 'post',
data: data,
})
}
\ No newline at end of file
}
//航班号+日期查询航线(手动配舱)
/**
* @param fltDate * 航班日期
* @param fltNo * 航班号
*/
export function findFlightRoute(data) {
return request({
url: '/cargo/findFlightRoute',
method: 'post',
data: data
})
}
//航班号+日期查询ACCS航线(手动配舱查询项)
/**
* @param fltDateAccs 航班日期
* @param fltNoAccs 航班号
*/
export function getAccsRoute(data) {
return request({
url: '/dmDataLog/getAccsRoute',
method: 'post',
data: data
})
}
//航班号+日期查询ACCS航线(货物查询查询项)
/**
* @param fltNoAccs 航班号 list
*/
export function getFlightsRoutes(data) {
return request({
url: '/dictionary/getFlightsRoutes',
method: 'post',
data: data
})
}
......
......@@ -129,7 +129,7 @@ export function addFlight(data) {
})
}
//虚拟航班新增
//虚拟航班删除
/**
* @param flightNo 航班名称 list *
*/
......@@ -139,4 +139,68 @@ export function delFlight(data) {
method: 'post',
data: data
})
}
//查询航线
/**
* @param fltNo 航班号
* @param page 页数
* @param size 页长
*/
export function queryRoute(data) {
return request({
url: '/dictionary/queryRoute',
method: 'post',
data: data
})
}
//新增航线
/**
* @param fltNo 航班号 *
* @param route 航线 *
*/
export function addRoute(data) {
return request({
url: '/dictionary/addRoute',
method: 'post',
data: data
})
}
//删除航线
/**
* @param id *
*/
export function delRoute(data) {
return request({
url: '/dictionary/delRoute',
method: 'post',
data: data
})
}
//航线排序
/**
* @param id *
*/
export function orderRoute(data) {
return request({
url: '/dictionary/orderRoute',
method: 'post',
data: data
})
}
//航线删除确认
/**
* @param fltNo 航班号
* @param route 航线
*/
export function checkFlightRoute(data) {
return request({
url: '/FlightPreserveController/checkFlightRoute',
method: 'post',
data: data
})
}
\ No newline at end of file
......
......@@ -13,25 +13,25 @@ let tableHeaders = {
status: 1
},
{
columnChineseName: "总重量(KG)",
columnName: "totalWeight",
columnChineseName: "航线",
columnName: "route",
columnWidth: "",
status: 1
},
{
columnChineseName: "已配重量(KG)",
columnName: "allocationWeight",
columnChineseName: "重量(KG)",
columnName: "totalWeight",
columnWidth: "",
status: 1
},
{
columnChineseName: "总体积(cm³)",
columnName: "totalVolumn",
columnChineseName: "已配重量(KG)",
columnName: "allocationWeight",
columnWidth: "",
status: 1
},
{
columnChineseName: "已配体积(cm³)",
columnChineseName: "已配体积(m³)",
columnName: "allocationVolumn",
columnWidth: "",
status: 1
......@@ -173,6 +173,13 @@ let tableHeaders = {
status: 1
},
{
columnChineseName: "体积",
columnName: "volume",
columnWidth: "100",
ext1: "sorTable",
status: 1
},
{
columnChineseName: "收件人国家代码",
columnName: "consigneeCountry",
columnWidth: "150",
......@@ -406,6 +413,12 @@ let tableHeaders = {
status: 1
},
{
columnChineseName: "航线",
columnName: "router",
columnWidth: "140",
status: 1
},
{
columnChineseName: "ACCS原航班日期",
columnName: "accsFlightDate",
columnWidth: "140",
......@@ -420,7 +433,7 @@ let tableHeaders = {
{
columnChineseName: "货物状态",
columnName: "cargoStatus",
columnWidth: "80",
columnWidth: "100",
status: 1
},
{
......@@ -458,18 +471,6 @@ let tableHeaders = {
status: 1
},
{
columnChineseName: "航班起飞时间",
columnName: "takeOffTime",
columnWidth: "120",
status: 1
},
{
columnChineseName: "Pre-MDE CutOff时间",
columnName: "cutOffTime",
columnWidth: "150",
status: 1
},
{
columnChineseName: "航班号",
columnName: "fltNo",
columnWidth: "100",
......@@ -524,13 +525,7 @@ let tableHeaders = {
status: 1
},
{
columnChineseName: "总体积(cm³)",
columnName: "totalVolume",
columnWidth: "100",
status: 1
},
{
columnChineseName: "已配体积(cm³)",
columnChineseName: "已配体积(m³)",
columnName: "alloctedVolume",
columnWidth: "120",
status: 1
......@@ -974,25 +969,37 @@ let tableHeaders = {
{
columnChineseName: "航班号",
columnName: "purposeOfFlightNo",
columnWidth: "100",
status: 1
},
{
columnChineseName: "航班日期",
columnName: "ruleDate",
columnWidth: "150",
status: 1
},
{
columnChineseName: "航线优先级",
columnName: "flightRoute",
columnWidth: "",
status: 1
},
{
columnChineseName: "状态",
columnName: "status",
columnWidth: "",
columnWidth: "100",
status: 1
},
{
columnChineseName: "操作人",
columnName: "createUserName",
columnWidth: "",
columnName: "updateUserName",
columnWidth: "100",
status: 1
},
{
columnChineseName: "更新时间",
columnName: "createTime",
columnWidth: "",
columnName: "updateTime",
columnWidth: "150",
status: 1
},
],
......@@ -1127,6 +1134,12 @@ let tableHeaders = {
status: 1
},
{
columnChineseName: "当前配载航线",
columnName: "flightRoute",
columnWidth: "130",
status: 1
},
{
columnChineseName: "ACCS原航班号",
columnName: "dmFlightNbr",
columnWidth: "120",
......@@ -1247,6 +1260,12 @@ let tableHeaders = {
status: 1
},
{
columnChineseName: "航线",
columnName: "flightRoute",
columnWidth: "",
status: 1
},
{
columnChineseName: "申报类别",
columnName: "declarationCategory",
columnWidth: "100",
......@@ -1350,7 +1369,22 @@ let tableHeaders = {
columnWidth: "",
status: 1
},
]
],
"fltRoute": [
{
columnChineseName: "航班名称",
columnName: "fltNo",
columnWidth: "",
ext1: "slot",
status: 1
},
{
columnChineseName: "航线",
columnName: "route",
columnWidth: "",
status: 1
},
],
}
export default tableHeaders;
\ No newline at end of file
......
......@@ -292,4 +292,8 @@ body {
.el-select-dropdown {
max-width: 300px;
}
.el-select-dropdown__wrap {
max-height: 350px !important;
}
\ No newline at end of file
......
<template>
<!-- 拖拽交换位置效果 -->
<transition-group tag="div" class="container">
<div class="item" v-for="(item, index) in list" :key="index" draggable="true"
@dragstart="handleDragStart($event, item)" @dragover.prevent="handleDragOver($event, item)"
@dragenter="handleDragEnter($event, item)" @dragend="handleDragEnd($event, item)">
<svg-icon v-if="!disabled" icon-class="drag-text" class="el-input__icon input-icon" style="color:#bfbfbf" />
<span>{{ item.route }}</span>
</div>
</transition-group>
</template>
<script>
// draggable 属性规定元素是否可拖动
// dragstart 事件在用户开始拖动元素或选择的文本时触发
// dragover 当某被拖动的对象在另一对象容器范围内拖动时触发此事件
// dragenter - 当被鼠标拖动的对象进入其容器范围内时触发此事件
// dragend - 用户完成元素拖动后触发
export default {
name: 'Toolbar',
props: {
data: {
type: Array,
default: null
},
disabled: {
type: Boolean,
default: false
}
},
data() {
return {
list: [],
dragging: null
}
},
created() {
this.list = this.data
},
watch: {
data(val) {
if (val) {
this.list = this.data
}
}
},
methods: {
handleDragStart(e, item) {
this.disabled ? '' : this.dragging = item;
},
handleDragEnd(e, item) {
this.disabled ? '' : this.dragging = null
},
//首先把div变成可以放置的元素,即重写dragenter/dragover
// DataTransfer 对象用来保存,通过拖放动作,拖动到浏览器的数据。
// 如果dropEffect 属性设定为none,则不允许被拖放到目标元素中。
handleDragOver(e) {
this.disabled ? '' : e.dataTransfer.dropEffect = 'move'// e.dataTransfer.dropEffect="move";//在dragenter中针对放置目标来设置!
},
handleDragEnter(e, item) {
if (!this.disabled) {
e.dataTransfer.effectAllowed = "move"//为需要移动的元素设置dragstart事件
if (item === this.dragging) {
return
}
const newItems = [...this.list]
const src = newItems.indexOf(this.dragging)
const dst = newItems.indexOf(item)
// 替换
newItems.splice(dst, 0, ...newItems.splice(src, 1))
// 让item的颜色等于新交换的颜色
this.list = newItems
this.$emit('drag', newItems)
}
}
}
}
</script>
<style lang="scss" scoped>
.container {
max-width: 350px;
min-height: 32px;
max-height: 150px;
overflow-y: scroll;
display: flex;
flex-direction: column;
padding: 0;
border: 1px solid #ccc;
&::-webkit-scrollbar {
width: 7px;
height: 7px;
}
&::-webkit-scrollbar-track {
background-color: #fff;
}
&::-webkit-scrollbar-thumb {
background-color: #ccc;
border-radius: 20px;
}
&::-webkit-scrollbar-thumb:hover {
background-color: #409eff;
}
&::-webkit-scrollbar-track-piece {
background: #F2F6FC;
}
}
.item {
overflow-x: hidden;
white-space: nowrap;
text-overflow: ellipsis;
/* border-bottom: 1px solid #ccc; */
cursor: move;
transition: all linear .3s
}
.item:hover {
background-color: #c6e2ff;
}
</style>
\ No newline at end of file
......@@ -11,10 +11,11 @@ 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
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, download, handleTree, upCase, nowDate } from "@/utils/FedEx";
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, download, handleTree, upCase, nowDate, getRoute } from "@/utils/FedEx";
import { isArray } from "@/utils/validate";
import Pagination from "@/components/Pagination";
// 自定义表格工具扩展
......@@ -22,8 +23,9 @@ import RightToolbar from "@/components/RightToolbar"
import Table from "@/components/Table"
import Tooltip from "@/components/Tooltip"
import HeaderSetting from "@/components/HeaderSetting"
import Drag from "@/components/Drag"
import tableHeaders from '@/assets/languages/tableHeaders'
import dictLabels from "@/assets/languages/dictLabels.js";
import dictLabels from "@/assets/languages/dictLabels.js"
import settings from './settings.js'
// 全局方法挂载
......@@ -36,6 +38,7 @@ Vue.prototype.download = download
Vue.prototype.handleTree = handleTree
Vue.prototype.upCase = upCase
Vue.prototype.nowDate = nowDate
Vue.prototype.getRoute = getRoute
Vue.prototype.isArray = isArray
Vue.prototype.tableHeaders = tableHeaders
Vue.prototype.dictLabels = dictLabels
......@@ -63,6 +66,7 @@ Vue.component('RightToolbar', RightToolbar)
Vue.component('Tables', Table)
Vue.component('Tooltips', Tooltip)
Vue.component('HeaderSetting', HeaderSetting)
Vue.component('Drag', Drag)
Vue.use(permission)
/**
......@@ -92,5 +96,6 @@ new Vue({
el: '#app',
router,
store,
i18n,
render: h => h(App)
})
......
......@@ -58,5 +58,5 @@ module.exports = {
/**
* 版本号
*/
version: 'version:1.5.0'
version: 'version:1.6.0'
}
......
......@@ -2,187 +2,202 @@
* 通用js方法封装处理
* Copyright (c) 2019 FedEx
*/
const baseURL = process.env.VUE_APP_BASE_API
// 日期格式化
export function parseTime(time, pattern) {
//debugger
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
// 表单重置
export function resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
}
// 添加日期范围
export function addDateRange(params, dateRange, propName) {
var search = params;
search.params = {};
if (null != dateRange && '' != dateRange) {
if (typeof (propName) === "undefined") {
search.params["beginTime"] = dateRange[0];
search.params["endTime"] = dateRange[1];
} else {
search.params["begin" + propName] = dateRange[0];
search.params["end" + propName] = dateRange[1];
}
}
return search;
}
// 回显数据字典
export function selectDictLabel(datas, value) {
var actions = [];
Object.keys(datas).some((key) => {
if (datas[key].dictValue == ('' + value)) {
actions.push(datas[key].dictLabel);
return true;
}
})
return actions.join('');
}
// 回显数据字典(字符串数组)
export function selectDictLabels(datas, value, separator) {
var actions = [];
var currentSeparator = undefined === separator ? "," : separator;
var temp = value.split(currentSeparator);
Object.keys(value.split(currentSeparator)).some((val) => {
Object.keys(datas).some((key) => {
if (datas[key].dictValue == ('' + temp[val])) {
actions.push(datas[key].dictLabel + currentSeparator);
}
})
})
return actions.join('').substring(0, actions.join('').length - 1);
}
// 通用下载方法
export function download(fileName) {
window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
}
// 字符串格式化(%s )
export function sprintf(str) {
var args = arguments, flag = true, i = 1;
str = str.replace(/%s/g, function () {
var arg = args[i++];
if (typeof arg === 'undefined') {
flag = false;
return '';
}
return arg;
});
return flag ? 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) {
let config = {
id: id || 'id',
parentId: parentId || 'parentId',
childrenList: children || 'children'
};
var childrenListMap = {};
var nodeIds = {};
var tree = [];
for (let d of data) {
let parentId = d[config.parentId];
if (childrenListMap[parentId] == null) {
childrenListMap[parentId] = [];
}
nodeIds[d[config.id]] = d;
childrenListMap[parentId].push(d);
}
for (let d of data) {
let parentId = d[config.parentId];
if (nodeIds[parentId] == null) {
tree.push(d);
}
}
for (let t of tree) {
adaptToChildrenList(t);
}
function adaptToChildrenList(o) {
if (childrenListMap[o[config.id]] !== null) {
o[config.childrenList] = childrenListMap[o[config.id]];
}
if (o[config.childrenList]) {
for (let c of o[config.childrenList]) {
adaptToChildrenList(c);
}
}
}
return tree;
}
//字符串英文转大写,;转英文;
export function upCase(str) {
let newStr = str.replace(/;/g, ";").toUpperCase().trim();
return newStr;
}
//当前日期
export function nowDate() {
let date = new Date()
return `${date.getFullYear()}-${(date.getMonth() + 1) > 9 ? (date.getMonth() + 1) : '0' + (date.getMonth() + 1)}-${(date.getDate()) > 9 ? date.getDate() : '0' + (date.getDate())}`
}
\ No newline at end of file
import { queryRoute } from '@/api/system/dictionary.js'
const baseURL = process.env.VUE_APP_BASE_API
// 日期格式化
export function parseTime(time, pattern) {
//debugger
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
// 表单重置
export function resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
}
// 添加日期范围
export function addDateRange(params, dateRange, propName) {
var search = params;
search.params = {};
if (null != dateRange && '' != dateRange) {
if (typeof (propName) === "undefined") {
search.params["beginTime"] = dateRange[0];
search.params["endTime"] = dateRange[1];
} else {
search.params["begin" + propName] = dateRange[0];
search.params["end" + propName] = dateRange[1];
}
}
return search;
}
// 回显数据字典
export function selectDictLabel(datas, value) {
var actions = [];
Object.keys(datas).some((key) => {
if (datas[key].dictValue == ('' + value)) {
actions.push(datas[key].dictLabel);
return true;
}
})
return actions.join('');
}
// 回显数据字典(字符串数组)
export function selectDictLabels(datas, value, separator) {
var actions = [];
var currentSeparator = undefined === separator ? "," : separator;
var temp = value.split(currentSeparator);
Object.keys(value.split(currentSeparator)).some((val) => {
Object.keys(datas).some((key) => {
if (datas[key].dictValue == ('' + temp[val])) {
actions.push(datas[key].dictLabel + currentSeparator);
}
})
})
return actions.join('').substring(0, actions.join('').length - 1);
}
// 通用下载方法
export function download(fileName) {
window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
}
// 字符串格式化(%s )
export function sprintf(str) {
var args = arguments, flag = true, i = 1;
str = str.replace(/%s/g, function () {
var arg = args[i++];
if (typeof arg === 'undefined') {
flag = false;
return '';
}
return arg;
});
return flag ? 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) {
let config = {
id: id || 'id',
parentId: parentId || 'parentId',
childrenList: children || 'children'
};
var childrenListMap = {};
var nodeIds = {};
var tree = [];
for (let d of data) {
let parentId = d[config.parentId];
if (childrenListMap[parentId] == null) {
childrenListMap[parentId] = [];
}
nodeIds[d[config.id]] = d;
childrenListMap[parentId].push(d);
}
for (let d of data) {
let parentId = d[config.parentId];
if (nodeIds[parentId] == null) {
tree.push(d);
}
}
for (let t of tree) {
adaptToChildrenList(t);
}
function adaptToChildrenList(o) {
if (childrenListMap[o[config.id]] !== null) {
o[config.childrenList] = childrenListMap[o[config.id]];
}
if (o[config.childrenList]) {
for (let c of o[config.childrenList]) {
adaptToChildrenList(c);
}
}
}
return tree;
}
//字符串英文转大写,;转英文;
export function upCase(str) {
let newStr = str.replace(/;/g, ";").toUpperCase().trim();
return newStr;
}
//当前日期
export function nowDate() {
let date = new Date()
return `${date.getFullYear()}-${(date.getMonth() + 1) > 9 ? (date.getMonth() + 1) : '0' + (date.getMonth() + 1)}-${(date.getDate()) > 9 ? date.getDate() : '0' + (date.getDate())}`
}
//获取航线
export function getRoute(val) {
return queryRoute({ fltNo: val }).then(res => {
if (res.code === 200) {
return res.data
} else {
return res.msg
}
}).catch(err => {
console.log(err)
})
}
\ No newline at end of file
......
<template>
<div class="cargoAllocation">
<el-form ref="form" v-model="formData" class="form-header" label-position="right" label-width="auto" size="small">
<el-form ref="form" v-model="formData" class="form-header" label-position="right" label-width="auto" size="small"
@submit.native.prevent>
<el-row type="flex" style="flexWrap: wrap !important">
<el-col :span="6">
<el-form-item label="ACCS原航班日期">
......@@ -11,7 +12,8 @@
</el-col>
<el-col :span="6">
<el-form-item label="ACCS原航班号">
<el-input v-model="fltNo" placeholder="请输入ACCS原航班号" class="formItem" clearable></el-input>
<el-input v-model="fltNo" placeholder="请输入ACCS原航班号" class="formItem" clearable @change="fltNoChange">
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
......@@ -116,6 +118,23 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<template slot="label">
<div style="display:inline-block">ACCS航线
<el-tooltip class="item" effect="dark" content="选择航线需要先输入航班号,才能选择对应得航线" placement="top-start">
<span class="el-icon-warning" style="color:#1890ff;font-size:16px"></span>
</el-tooltip>
</div>
</template>
<el-select class="formItem" v-model="formData.route" placeholder="不限" :disabled="routeList.length == 0"
clearable>
<el-option v-for="item in routeList" :label="item" :value="item" :key="item">
<Tooltips :content="item" :refName="item"></Tooltips>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="运单号">
<el-input class="formItem" type="textarea" :rows="4" placeholder="请输入运单号(回车分割)" :maxlength="12000"
v-model="formData.waybillNo" clearable></el-input>
......@@ -187,7 +206,7 @@
<script>
import Dialog from "./info.vue";
import { findConditionData, findCargoAllocationData } from "@/api/cargoSelect";
import { findConditionData, findCargoAllocationData, getAccsRoute } from "@/api/cargoSelect";
import { allDictData } from "@/api/destinationFlight";
import { downLoadXlsx } from "@/utils/zipdownload";
......@@ -203,6 +222,7 @@ export default {
fltDateEnd: null,
typeId: null,
portName: null,
rtoue: null,
statusId: null,
kindToAllocFlightId: null,
serviceTypeId: null,
......@@ -230,6 +250,7 @@ export default {
SubCategory: [],
}, //查询条件
fltDate: [],
routeList: [],
ursaList: "",
siteNameList: "",
handingCodes: [],
......@@ -263,6 +284,8 @@ export default {
}
},
activated() {
this.tableSelection = []
this.cargoTotal()
this.seleData();
this.select();
},
......@@ -485,6 +508,20 @@ export default {
this.tableHeader = this.$store.getters.tableHeader['allocationCargo']
})
}
},
//获取航班号航线
fltNoChange(val) {
console.log(val)
this.routeList = []
getAccsRoute({ fltNoAccs: val }).then(res => {
if (res.code === 200) {
this.routeList = res.data
} else {
this.msgWarning(res.msg)
}
}).catch(err => {
console.log(err)
})
}
},
computed: {
......@@ -524,7 +561,7 @@ export default {
};
</script>
<style lang="scss">
<style lang="scss" scoped>
.tips {
display: inline-block;
color: #606266;
......
......@@ -11,16 +11,31 @@
:label="item.name" :key="index" :show-overflow-tooltip="true" :formatter="formatter">
</el-table-column>
</el-table>
<el-form ref="form" label-position="right" label-width="auto" style="width: 400px; margin: 30px auto"
:model="formData" :rules="rules">
<el-form ref="form" class="form-header" label-position="right" label-width="auto"
style="width: 400px; margin: 30px auto" :model="formData" :rules="rules">
<el-form-item label="航班号" prop="fltNo">
<el-input v-model="fltNo" size="medium" placeholder="请输入航班号" maxlength="10" style="width: 350px"></el-input>
<el-input class="formItem" v-model="fltNo" size="medium" placeholder="请输入航班号" maxlength="10"
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 class="formItem" v-model="formData.fltDate" type="date" placeholder="选择日期"
value-format="yyyy-MM-dd" size="medium" style="width: 350px" @change="dateChange">
</el-date-picker>
</el-form-item>
<el-form-item prop="route">
<template slot="label">
<div style="display:inline-block">航线:
<el-tooltip class="item" effect="dark" content="选择航线需要先输入航班号和航班日期,才能选择对应得航线" placement="top-start">
<span class="el-icon-warning" style="color:#1890ff;font-size:16px"></span>
</el-tooltip>
</div>
</template>
<el-select class="formItem" v-model="formData.route" placeholder="不限" :disabled="routeList.length == 0">
<el-option v-for="(item, index) in routeList" :label="item.route" :value="item.route" :key="index">
<Tooltips :content="item.route" :refName="item.route"></Tooltips>
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="dialogBeforeClose">取 消</el-button>
......@@ -31,7 +46,7 @@
</template>
<script>
import { allocationFlight } from "@/api/cargoSelect";
import { allocationFlight, findFlightRoute } from "@/api/cargoSelect";
export default {
props: {
......@@ -50,6 +65,7 @@ export default {
ids: [],
fltNo: undefined,
fltDate: undefined,
route: undefined,
overweight: false,
},
cargoHeader: [
......@@ -68,6 +84,7 @@ export default {
{ name: "创建人", value: "createUserName" },
{ name: "创建时间", value: "createTime" },
],
routeList: [],
rules: {
fltNo: [
{
......@@ -83,6 +100,13 @@ export default {
trigger: "blur",
},
],
route: [
{
required: true,
message: "航线不能为空",
trigger: "blur",
},
],
},
loading: false,
};
......@@ -93,8 +117,11 @@ export default {
ids: [],
fltNo: undefined,
fltDate: undefined,
route: undefined,
flightId: undefined,
overweight: false,
};
this.routeList = []
},
//确定配舱
submit() {
......@@ -104,6 +131,11 @@ export default {
arr.push(item.id);
});
this.formData.ids = arr;
this.routeList.forEach(item => {
if (item.route === this.formData.route) {
this.formData.flightId = item.id
}
})
if (this.formData.fltNo && this.formData.fltDate) {
allocationFlight(this.formData).then((res) => {
this.loading = false;
......@@ -165,6 +197,26 @@ export default {
}
}
return cellValue
},
//日期选择变化
dateChange(val) {
let obj = {
fltNo: this.formData.fltNo,
fltDate: val
}
findFlightRoute(obj).then(res => {
if (res.code === 200) {
res.data[0].route.indexOf(';') <= 0 ?
this.routeList = res.data :
res.data[0].route.split(';').forEach(item => {
this.routeList.push({ id: res.data[0].id, route: item })
})
} else {
this.msgWarning(res.msg)
}
}).catch(err => {
console.log(err)
})
}
},
computed: {
......
......@@ -55,14 +55,15 @@
</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" />
<el-table-column label="申报类别" align="center" prop="typeName" />
<el-table-column label="件数" align="center" prop="qty" width="70" />
<el-table-column label="实际重量" align="center" prop="actualWeight" width="100" />
<el-table-column :show-overflow-tooltip="true" label="品牌描述" align="center" prop="nameDescription" />
<el-table-column label="航班日期" align="center" prop="fltDate" />
<el-table-column label="航班号" align="center" prop="fltNo" width="100" />
<el-table-column label="航班路线" align="center" prop="route" />
<el-table-column label="配置航班类型" align="center" prop="kindName" width="130" />
<el-table-column label="尺寸" align="center" prop="sizeStr" width="70" />
<el-table-column label="件数" align="center" prop="qty" width="70" />
<el-table-column label="实际重量" align="center" prop="actualWeight" width="100" />
<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"
......
......@@ -4,8 +4,47 @@
append-to-body center>
<el-form ref="add" :model="newDictionary" label-width="auto" label-position="left" size="small"
:rules="rules" @submit.native.prevent>
<!-- 新增虚拟航班 -->
<div v-if="dictName == '虚拟航班'">
<el-form-item label="所属口岸" prop="portName">
<el-select v-model="newDictionary.portName" placeholder="选择口岸" disabled>
<el-option v-for="item in $store.state.user.portNames" :label="item" :value="item"
:key="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="航班名称" v-if="status == 'allAdd'" prop="flightNo">
<el-input type="textarea" v-model="flightNo" :rows="7" maxlength="255" show-word-limit
placeholder="用;分隔,单条航班名长度25">
</el-input>
</el-form-item>
<el-form-item label="航班名称" prop="flightNo" v-else>
<el-input type="text" v-model="flightNo" placeholder="请输入数据名称" maxlength="25"></el-input>
</el-form-item>
</div>
<!-- 新增航线 -->
<div v-else-if="dictName == '航线'">
<div v-if="status == 'add'">
<el-form-item label="航班号" prop="fltNo">
<el-input type="text" v-model="newDictionary.fltNo" placeholder="请输入航班号" maxlength="50">
</el-input>
</el-form-item>
<el-form-item label="航线" prop="route">
<el-input type="text" v-model="newDictionary.route" placeholder="请输入航线" maxlength="40">
</el-input>
</el-form-item>
</div>
<div v-else-if="status == 'sort'">
<el-form-item label="航班号" prop="fltNo">
<el-input type="text" v-model="newDictionary.fltNo" disabled></el-input>
</el-form-item>
<el-form-item label="航线">
<Drag :data="routeList" @drag="drag"></Drag>
</el-form-item>
</div>
</div>
<!-- 新增数据字典 -->
<div v-if="dictName != '虚拟航班'">
<div v-else>
<el-form-item label="所属父级" v-if="newDictionary.serviceCodeKey">
<el-input type="text" v-model="newDictionary.serviceCodeKey" placeholder="用回车分隔" disabled>
</el-input>
......@@ -32,24 +71,6 @@
</el-form-item>
</div>
</div>
<!-- 新增虚拟航班 -->
<div v-else>
<el-form-item label="所属口岸" prop="portName">
<el-select v-model="newDictionary.portName" placeholder="选择口岸" disabled>
<el-option v-for="item in $store.state.user.portNames" :label="item" :value="item"
:key="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="航班名称" v-if="status == 'allAdd'" prop="flightNo">
<el-input type="textarea" v-model="flightNo" :rows="7" maxlength="255" show-word-limit
placeholder="用;分隔,单条航班名长度25">
</el-input>
</el-form-item>
<el-form-item label="航班名称" prop="flightNo" v-else>
<el-input type="text" v-model="flightNo" placeholder="请输入数据名称" maxlength="25"></el-input>
</el-form-item>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" :loading="loading" @click="submit">确 定</el-button>
......@@ -60,7 +81,7 @@
</template>
<script>
import { addDict, addDictBatch, addServiceCodeBatch, addFlight } from '@/api/system/dictionary.js'
import { addDict, addDictBatch, addServiceCodeBatch, addFlight, addRoute, queryRoute, orderRoute } from '@/api/system/dictionary.js'
export default {
props: {
......@@ -83,7 +104,7 @@ export default {
},
data() {
return {
newDictionary: { flightNo: undefined, chineseName: undefined },
newDictionary: { flightNo: undefined, chineseName: undefined, route: undefined },
rules: {
chineseName: [
{
......@@ -98,8 +119,23 @@ export default {
message: "航班名称不能为空",
trigger: "blur",
},
]
],
fltNo: [
{
required: true,
message: "航班号不能为空",
trigger: "blur",
}
],
route: [
{
required: true,
message: "航线不能为空",
trigger: "blur",
}
],
},
routeList: [],
title: '',
loading: false,
}
......@@ -115,6 +151,18 @@ export default {
} else if (this.status == 'childrenAdd') {
this.newDictionary = this.addDictionary
this.title = '新增子集'
} else if (this.status == 'sort') {
this.newDictionary = this.addDictionary.serviceCodeKey
this.title = '航线排序'
queryRoute({ fltNo: this.newDictionary.fltNo }).then(res => {
if (res.code === 200) {
this.routeList = res.data.list
} else {
this.msgWarning(res.msg)
}
}).catch(err => {
console.log(err)
})
}
// else if (this.status == 'update') {
// if (this.addDictionary.serviceCodeValue) {
......@@ -145,6 +193,23 @@ export default {
if (this.status == 'add') {
if (this.dictName === '虚拟航班') {
this.flightAdd()
} else if (this.dictName === '航线') {
let obj = {
fltNo: this.upCase(this.newDictionary.fltNo),
route: this.upCase(this.newDictionary.route)
}
addRoute(obj).then(res => {
this.loading = false
if (res.code === 200) {
this.msgSuccess(res.msg)
this.close()
} else {
this.msgWarning(res.msg)
}
}).catch(err => {
this.loading = false
console.log(err)
})
} else {
addDict(this.newDictionary).then(res => {
this.loading = false
......@@ -210,6 +275,25 @@ export default {
console.log(err)
})
}
//航线排序
else if (this.status == 'sort') {
let arr = []
this.routeList.forEach(item => {
arr.push(item.id)
})
orderRoute(arr).then(res => {
this.loading = false
if (res.code === 200) {
this.msgSuccess(res.msg)
this.close()
} else {
this.msgWarning(res.msg)
}
}).catch(err => {
this.loading = false
console.log(err)
})
}
}
})
},
......@@ -230,9 +314,14 @@ export default {
console.log(err)
})
},
//航线排序
drag(val) {
this.routeList = val
},
//关闭
close() {
this.newDictionary = { chineseName: null, code: null, remark: null }
this.routeList = []
this.clearValidate('add')
this.$emit('close', false)
},
......@@ -263,6 +352,25 @@ export default {
this.newDictionary.flightNo = val
}
},
},
fltNo: {
get: function () {
return this.newDictionary.fltNo
},
set: function (val) {
this.newDictionary.fltNo = this.upCase(val)
},
},
route: {
get: function () {
return this.newDictionary.route
},
set: function (val) {
const reg = /^([0-9a-zA-Z!@#$%^&*()`]{0,100})$/
if (reg.test(val)) {
this.newDictionary.route = val
}
},
}
}
}
......