修改bug

master
sunzehua 6 months ago
parent e66d702523
commit 7ecd616222

@ -87,6 +87,11 @@ export const constantRouterMap = [
path: '/ServiceItems', path: '/ServiceItems',
component: () => import('@/views/ServiceItems/index') component: () => import('@/views/ServiceItems/index')
}, },
{
name: 'flowList',
path: '/flowList',
component: () => import('@/views/flowList/index')
},
{ {
path: '/404', path: '/404',
component: () => import(/* webpackChunkName: "fail" */ '@/views/system/exception/404') component: () => import(/* webpackChunkName: "fail" */ '@/views/system/exception/404')

@ -10,7 +10,7 @@ import { ACCESS_TOKEN, ALL_APPS_MENU } from '@/store/mutation-types'
import { Modal, notification } from 'ant-design-vue' // NProgress Configuration import { Modal, notification } from 'ant-design-vue' // NProgress Configuration
import { timeFix } from '@/utils/util' /// es/notification import { timeFix } from '@/utils/util' /// es/notification
NProgress.configure({ showSpinner: false }) NProgress.configure({ showSpinner: false })
const whiteList = ['login', 'register', 'registerResult', 'notifications', 'getway', 'ServiceItems'] // no redirect whitelist const whiteList = ['login', 'register', 'registerResult', 'notifications', 'getway', 'ServiceItems', 'flowList'] // no redirect whitelist
// 无默认首页的情况 // 无默认首页的情况
const defaultRoutePath = '/welcome' const defaultRoutePath = '/welcome'

@ -1,6 +1,6 @@
<template> <template>
<div class="service"> <div class="service">
<!-- <a-card :bodyStyle="tstyle" :bordered="false"> <a-card :bodyStyle="tstyle" :bordered="false">
<div class="title"><i class="iconfont icon-fuwu"></i><span>服务项目</span></div> <div class="title"><i class="iconfont icon-fuwu"></i><span>服务项目</span></div>
<a-spin :spinning="seriveLoading"> <a-spin :spinning="seriveLoading">
<div class="content"> <div class="content">
@ -32,7 +32,7 @@
<p v-if="serive.actRemark">{{ serive.actRemark }}</p> <p v-if="serive.actRemark">{{ serive.actRemark }}</p>
<p v-if="serive.actVal">{{ serive.actVal }}</p> <p v-if="serive.actVal">{{ serive.actVal }}</p>
</template> </template>
<div v-if="!serive.isBr" class="goods-box"> <div v-if="!serive.isBr" class="goods-box">
<div class="goods-content" :class="{ active: serive.isYield }" @click="saveGoodsStatus(serive)"> <div class="goods-content" :class="{ active: serive.isYield }" @click="saveGoodsStatus(serive)">
<a-icon v-if="serive.isYield" class="serve-icon" type="check-circle" theme="filled" /> <a-icon v-if="serive.isYield" class="serve-icon" type="check-circle" theme="filled" />
<div v-else class="round"></div> <div v-else class="round"></div>
@ -40,106 +40,13 @@
</div> </div>
<div class="box-line" v-if="changeGoods && !serive.isEnd" :class="{ active: serive.isYield }"></div> <div class="box-line" v-if="changeGoods && !serive.isEnd" :class="{ active: serive.isYield }"></div>
<div class="box-edit" @click.stop="FnOpenEdit(serive)"><a-icon type="edit" /></div> <div class="box-edit" @click.stop="FnOpenEdit(serive)"><a-icon type="edit" /></div>
</div>
</a-tooltip>
</div>
</div>
</div>
</a-spin>
</a-card> -->
<a-spin :spinning="flowLoad">
<div class="list-box">
<div class="list-box-title">
<span>提单号{{ flowData.blNo }}</span>
<span style="display: flex;align-items: center;">
<img src="./u1041.svg" alt=""> 起运港:{{ flowData.routingInfoList ? flowData.routingInfoList[0].loading : '-' }}
<a-icon style="margin: 0 15px;" type="swap-right" />
<img src="./u1041.svg" alt=""> 目的港{{ flowData.routingInfoList ? flowData.routingInfoList[0].discharging : '-' }}</span>
<span style="cursor: pointer;color: blue;" @click="handleDetail"><a-icon
type="appstore"
theme="filled" /></span>
</div>
<div class="list-box-content">
<div class="content-left">
<div>{{ flowData.carrier }}</div>
<div>订阅港区CNTAO</div>
<div>船名{{ flowData.vslNameEn }}</div>
<div>航次{{ flowData.voy }}</div>
</div>
<div class="content-right">
<div
class="conent-item"
:class="{ 'active': item.active, 'isEnd': item.isEnd }"
v-for="(item, index) in timeData"
:key="index">
<div class="line" v-if="index !== 0"></div>
<div class="cont-box">
<div class="item-top">{{ item.name }}</div>
<a-icon class="icon" type="check-circle" theme="filled" />
<div class="item-bottom">{{ item.text }}</div>
<div class="item-time">{{ item.time }}</div>
</div>
</div>
</div>
</div>
</div>
<div class="main-box" v-if="showFlag">
<div class="box-left">
<div
class="box-tab"
@click="handleClick(index)"
:class="{ 'isActive': item.isActive }"
v-for="(item, index) in flowData.containerInfoList"
:key="index">
<div style="font-size: 15px;font-weight: bold;color: black">{{ item.containerNo }}</div>
<div style="font-size: 12px;color: #666;margin: 5px 0;">{{ item.size }}</div>
<div style="font-size: 12px;color: green;">开船:{{ item.currentNodeTime }}</div>
</div>
</div>
<div class="box-right">
<div>
<!-- <a-row>
<a-col :span="6">铅封号M/CN50000001</a-col>
<a-col :span="6">VGMM/CN50000001</a-col>
<a-col :span="6">VGM接收时间-</a-col>
<a-col :span="6">配载Y</a-col>
</a-row>
<a-table
style="margin: 15px 0;margin-bottom: 30px;"
:pagination="false"
bordered
size="small"
:data-source="data">
<a-table-column key="name" title="报关单号" data-index="name"></a-table-column>
<a-table-column key="name1" title="件数" data-index="name1"></a-table-column>
<a-table-column key="name2" title="毛重" data-index="name2"></a-table-column>
<a-table-column key="name3" title="体积" data-index="name3"></a-table-column>
<a-table-column key="name4" title="船公司操作" data-index="name4"></a-table-column>
</a-table> -->
</div>
<div class="box-right-title">
<span style="width: 150px">动态</span>
<span style="width: 200px">时间</span>
<span style="width: 200px;margin-right: 30px;">地点</span>
<span style="width: 200px">船名航次</span>
</div>
<div class="box-item" :class="{ 'isActive': item.isActive }" v-for="(item, index) in timeList" :key="index">
<div class="box-time">
<div class="time-line" :style="{ background: index == 0 ? 'none' : '' }"></div>
<div class="time-circular"></div>
<div class="time-line" :style="{ background: index == timeList.length - 1 ? 'none' : '' }"></div>
</div>
<div style="display: flex;align-items: center;padding: 15px 0;">
<div style="width: 150px;">{{ item.statusDescription }}</div>
<div style="width: 200px;">{{ item.statusTime }} <span class="tag"></span> </div>
<div style="width: 200px;word-wrap: break-word;margin-right: 30px;">{{ item.statusPlace }}</div>
<div style="width: 200px;">{{ item.voy ? item.voy : '-' }}/{{ item.vslName ? item.vslName : '-' }}</div>
</div> </div>
</a-tooltip>
</div> </div>
</div> </div>
</div> </div>
</a-spin> </a-spin>
</a-card>
<a-modal v-model="GoodsStatusVisible" width="600px" title="编辑" @ok="GoodsStatusHandleOk"> <a-modal v-model="GoodsStatusVisible" width="600px" title="编辑" @ok="GoodsStatusHandleOk">
<a-spin :spinning="goodStatusLoading"> <a-spin :spinning="goodStatusLoading">
@ -197,9 +104,8 @@ export default {
goodStatusLoading: false, goodStatusLoading: false,
booGoodsStatusItem: [], booGoodsStatusItem: [],
delayTime: 500, delayTime: 500,
timeData: [ embedTraceFlowStatusList: [],
timeData: [ ],
],
boxList: [ boxList: [
{ {
name: 'SLEU0000001', name: 'SLEU0000001',
@ -220,9 +126,7 @@ export default {
isActive: false isActive: false
} }
], ],
timeList: [ timeList: [],
],
data: [{ data: [{
name: '测试111', name: '测试111',
name1: '测试111', name1: '测试111',
@ -259,9 +163,8 @@ export default {
this.USER_KEY = this.$route.query.USER_KEY this.USER_KEY = this.$route.query.USER_KEY
this.businessId = this.$route.query.businessId this.businessId = this.$route.query.businessId
this.USER_SECRET = this.$route.query.USER_SECRET this.USER_SECRET = this.$route.query.USER_SECRET
this.getFlowInfo() this.getServiceItemList(1)
// this.getServiceItemList(1) this.getStatusServiceList(1)
// this.getStatusServiceList(1)
}, },
watch: { watch: {
'$route': { '$route': {
@ -271,8 +174,8 @@ export default {
this.USER_KEY = this.$route.query.USER_KEY this.USER_KEY = this.$route.query.USER_KEY
this.businessId = this.$route.query.businessId this.businessId = this.$route.query.businessId
this.USER_SECRET = this.$route.query.USER_SECRET this.USER_SECRET = this.$route.query.USER_SECRET
// this.getServiceItemList(1) this.getServiceItemList(1)
// this.getStatusServiceList(1) this.getStatusServiceList(1)
} }
} }
} }
@ -351,7 +254,6 @@ export default {
billNo: '237065744', billNo: '237065744',
carrier: 'MSK', carrier: 'MSK',
ctnNo: '', ctnNo: '',
isAllCtn: true,
USER_KEY: '731e2d42af0f4209a8edccfcae20d7c4', USER_KEY: '731e2d42af0f4209a8edccfcae20d7c4',
USER_SECRET: 'c513dff9ac617fd064ada5f3ccdbd6a1bde59e7c7ffe29e9dc225c49a0904a1535f7bf3d97bc2ff4' USER_SECRET: 'c513dff9ac617fd064ada5f3ccdbd6a1bde59e7c7ffe29e9dc225c49a0904a1535f7bf3d97bc2ff4'
} }
@ -359,6 +261,7 @@ export default {
GetTraceFlowInfo(data).then(res => { GetTraceFlowInfo(data).then(res => {
if (res.success) { if (res.success) {
this.flowData = res.data.resultData this.flowData = res.data.resultData
this.embedTraceFlowStatusList = res.data.embedTraceFlowStatusList
} else { } else {
this.$message.error(res.message) this.$message.error(res.message)
} }
@ -663,11 +566,7 @@ export default {
height: 20px; height: 20px;
width: 20px; width: 20px;
} }
.service {
background: rgb(234, 242, 255);
padding-top: 50px;
min-height: 100vh;
}
.list-box { .list-box {
background: white; background: white;

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

@ -0,0 +1,698 @@
<template>
<div class="service">
<a-spin :spinning="flowLoad">
<div class="list-box" @click="handleDetail">
<div class="list-box-title">
<span>提单号{{ flowData.blNo }}</span>
<div>{{ flowData.carrier }}</div>
<span style="display: flex;align-items: center;">
<img src="./u1041.svg" alt=""> 起运港:{{ flowData.routingInfoList ? flowData.routingInfoList[0].loading : '-'
}}
<a-icon style="margin: 0 15px;" type="swap-right" />
<img src="./u1041.svg" alt=""> 目的港{{ flowData.routingInfoList ? flowData.routingInfoList[0].discharging :
'-' }}</span>
<div>船名{{ flowData.vslNameEn }}</div>
<div>航次{{ flowData.voy }}</div>
<span style="cursor: pointer;color: blue;" >详情<a-icon
type="appstore"
theme="filled" /></span>
</div>
<div class="list-box-content">
<div class="content-right">
<div
class="conent-item"
:class="{ 'active': item.isComplete, 'isEnd': item.isCurrentStatus }"
v-for="(item, index) in embedTraceFlowStatusList"
:key="index">
<div class="line" v-if="index !== 0 && !item.isSplitEnd"></div>
<div class="line-long" v-if="item.isSplitEnd"></div>
<div class="cont-box">
<div class="item-top">{{ item.statusCnName }}</div>
<a-icon class="icon" v-if="!item.isCurrentStatus" type="check-circle" theme="filled" />
<img v-else src="./1.png" style="height: 20px;width: 20px;" alt="">
<div class="item-bottom">{{ item.statusCtnStatic }}</div>
<div class="item-time" v-if="item.isCurrentStatus">{{ item.statusTime }}</div>
</div>
</div>
</div>
</div>
</div>
<div class="main-box" v-if="showFlag">
<div class="box-left">
<div
class="box-tab"
@click="handleClick(index)"
:class="{ 'isActive': item.isActive }"
v-for="(item, index) in flowData.containerInfoList"
:key="index">
<div style="font-size: 15px;font-weight: bold;color: black">{{ item.containerNo }}</div>
<div style="font-size: 12px;color: #666;margin: 5px 0;">{{ item.sizeName ? item.sizeName : item.size }}</div>
<div style="font-size: 12px;color: green;">开船:{{ item.currentNodeTime }}</div>
</div>
</div>
<div class="box-right">
<div>
<a-row style="margin-bottom: 20px">
<a-col :span="6" style="color: #122db3;font-size: 14px;font-weight: bold;">箱号{{ flowData.containerInfoList[changeIndex].containerNo }}</a-col>
<!-- <a-col :span="6">VGMM/CN50000001</a-col>
<a-col :span="6">VGM接收时间-</a-col>
<a-col :span="6">配载Y</a-col> -->
</a-row>
<!-- <a-table
style="margin: 15px 0;margin-bottom: 30px;"
:pagination="false"
bordered
size="small"
:data-source="data">
<a-table-column key="name" title="报关单号" data-index="name"></a-table-column>
<a-table-column key="name1" title="件数" data-index="name1"></a-table-column>
<a-table-column key="name2" title="毛重" data-index="name2"></a-table-column>
<a-table-column key="name3" title="体积" data-index="name3"></a-table-column>
<a-table-column key="name4" title="船公司操作" data-index="name4"></a-table-column>
</a-table> -->
</div>
<div class="box-right-title">
<span style="width: 150px">动态</span>
<span style="width: 190px">时间</span>
<span style="width: 150px;margin-right: 20px;">地点</span>
<span style="width: 150px">船名航次</span>
</div>
<div
class="box-item"
:class="{ 'isActive': item.isEst == 'N' }"
v-for="(item, index) in timeList"
:key="index">
<div class="box-time">
<div class="time-line" :style="{ background: index == 0 ? 'none' : '' }"></div>
<div class="time-circular" v-if="!item.isCurrentStatus"></div>
<img v-else src="./1.png" style="height: 15px;width: 15px;" alt="">
<div class="time-line" :style="{ background: index == timeList.length - 1 ? 'none' : '' }"></div>
</div>
<div style="display: flex;align-items: center;padding: 15px 0;">
<div style="width: 150px;">{{ item.statusCnName }}</div>
<div style="width: 200px;" v-if="item.isEst == 'N'">{{ item.statusTime }} <span class="tag"></span> </div>
<div style="width: 200px;" v-else>{{ item.statusTime }} <span class="tag" style="background: #FFF2E6;color: #ff8d1a;"></span> </div>
<div style="width: 150px;word-wrap: break-word;margin-right: 20px;">{{ item.statusPlace }}</div>
<div style="width: 150px;font-size: 12px;word-break: break-all;" v-if="item.vslName">{{ item.vslName }} / {{ item.voy }}</div>
<div style="width: 150px;font-size: 12px;word-break: break-all;" v-if="!item.vslName">-</div>
</div>
</div>
</div>
</div>
</a-spin>
</div>
</template>
<script>
import {
GetServiceProiectListIfram,
GetServiceStatusListIfram,
CancelServiceProjectIfram,
SaveServiceProjectIfram,
SaveServiceStatusIfram,
CancelServiceStatusIfram,
GetTraceFlowInfo
} from '@/api/modular/main/BookingLedger'
export default {
data() {
return {
seriveLoading: false,
bookingServiceItem: [],
changeGoods: true,
flowLoad: true,
showFlag: false,
flowData: {},
GoodsStatusVisible: false,
GoodsStatusEditData: {},
StatusVisibleForm: this.$form.createForm(this),
goodStatusLoading: false,
booGoodsStatusItem: [],
delayTime: 500,
embedTraceFlowStatusList: [],
timeData: [],
boxList: [
{
name: 'SLEU0000001',
type: '20GP',
text: '开航,2024-02-20 14:00',
isActive: true
},
{
name: 'SLEU0000002',
type: '20GP',
text: '开航,2024-02-20 14:00',
isActive: false
},
{
name: 'SLEU0000003',
type: '20GP',
text: '开航,2024-02-20 14:00',
isActive: false
}
],
timeList: [],
data: [{
name: '测试111',
name1: '测试111',
name2: '测试111',
name3: '测试111',
name4: '测试111'
}],
time: null,
changeIndex:0,
labelCol: {
xs: { span: 24 },
sm: { span: 8 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 }
},
labelCol2: {
xs: { span: 24 },
sm: { span: 4 }
},
wrapperCol2: {
xs: { span: 24 },
sm: { span: 20 }
},
spinning: false,
USER_KEY: '',
businessId: '',
billNo: '',
carrier: '',
ctnNo: '',
USER_SECRET: '',
tstyle: { padding: '0 15px 15px', 'margin-bottom': '10px', background: '#fff' }
};
},
created() {
this.USER_KEY = this.$route.query.USER_KEY
this.carrier = this.$route.query.carrier
this.billNo = this.$route.query.billNo
this.ctnNo = this.$route.query.ctnNo
this.USER_SECRET = this.$route.query.USER_SECRET
this.getFlowInfo()
},
watch: {
'$route': {
immediate: true,
handler(to, from) {
if (this.$route.name == 'ServiceItems') {
this.USER_KEY = this.$route.query.USER_KEY
this.carrier = this.$route.query.carrier
this.billNo = this.$route.query.billNo
this.ctnNo = this.$route.query.ctnNo
this.USER_SECRET = this.$route.query.USER_SECRET
this.getFlowInfo()
}
}
}
},
methods: {
saveService(data) {
const obj = {
businessId: this.businessId,
USER_KEY: this.USER_KEY,
USER_SECRET: this.USER_SECRET,
projectCodes: [data.projectCode]
}
if (!data.isYield) {
this.bookingServiceItem.forEach((item) => {
if (item.projectCode == data.projectCode) {
item.isYield = !item.isYield
}
})
SaveServiceProjectIfram(obj).then((res) => {
if (res.success) {
if (res.data.succ) {
if (this.time !== null) {
this.stopTimer()
}
this.time = setTimeout(() => {
this.spinning = true
this.getServiceItemList(2, data.projectCode)
}, 500)
} else {
this.$message.error(res.message)
this.spinning = false
this.getServiceItemList(1)
}
} else {
this.$message.error(res.message)
}
})
} else {
this.bookingServiceItem.forEach((item) => {
if (item.projectCode == data.projectCode) {
item.isYield = !item.isYield
}
})
CancelServiceProjectIfram(obj).then((res) => {
if (res.data.succ) {
if (this.time !== null) {
this.stopTimer()
}
this.time = setTimeout(() => {
this.spinning = true
this.getServiceItemList(2, data.projectCode)
}, 500)
} else {
this.$message.error(res.message)
this.spinning = false
this.getServiceItemList(1)
}
})
}
},
handleDetail() {
this.showFlag = !this.showFlag
this.timeList = this.flowData.containerInfoList[0].containerStatusInfoList
this.flowData.containerInfoList[0].isActive = true
this.$forceUpdate()
},
handleClick(index) {
this.flowData.containerInfoList.forEach(item => {
item.isActive = false
})
this.changeIndex = index
this.flowData.containerInfoList[index].isActive = true
this.timeList = this.flowData.containerInfoList[index].containerStatusInfoList
this.$forceUpdate()
},
getFlowInfo() {
const data = {
billNo: this.billNo,
carrier: this.carrier,
ctnNo: this.ctnNo,
USER_KEY: this.USER_KEY,
USER_SECRET: this.USER_SECRET
}
// const data = {
// billNo: '237065744',
// carrier: 'MSK',
// ctnNo: '',
// USER_KEY: '731e2d42af0f4209a8edccfcae20d7c4',
// USER_SECRET: 'c513dff9ac617fd064ada5f3ccdbd6a1bde59e7c7ffe29e9dc225c49a0904a1535f7bf3d97bc2ff4'
// }
this.flowLoad = true
GetTraceFlowInfo(data).then(res => {
if (res.success) {
this.flowData = res.data.resultData
this.embedTraceFlowStatusList = res.data.embedTraceFlowStatusList
} else {
this.$message.error(res.message)
}
this.flowLoad = false
})
},
GoodsStatusHandleOk() {
const {
StatusVisibleForm: { validateFields }
} = this
this.GoodsStatusVisible = true
validateFields((errors, values) => {
if (!errors || this.GoodsStatusEditData.systemCode === 'SQXS') {
for (const key in values) {
if (typeof values[key] === 'object' && !(values[key] === null)) {
values[key] = JSON.stringify(values[key])
}
}
const data = {
businessId: this.businessId,
USER_KEY: this.USER_KEY,
USER_SECRET: this.USER_SECRET,
statusCodes: [
{
setActDate: values.setActDate,
actRemark: values.actRemark,
setActVal: values.setActVal,
statusCode: this.GoodsStatusEditData.statusSKUCode
}
]
}
this.goodStatusLoading = true
SaveServiceStatusIfram(data).then((res) => {
if (res.data.succ) {
this.GoodsStatusVisible = false
this.getStatusServiceList(1)
} else {
this.$message.error(res.data.msg)
}
this.goodStatusLoading = false
})
} else {
console.log(errors, values)
}
})
},
stopTimer() {
window.clearTimeout(this.time)
},
FnOpenEdit(data) {
setTimeout(() => {
this.GoodsStatusEditData = data
this.GoodsStatusVisible = true
this.$nextTick(() => {
this.StatusVisibleForm.setFieldsValue({
setActDate: data.actDate ? data.actDate : '',
actRemark: data.actRemark ? data.actRemark : '',
setActVal: data.actVal ? data.actVal : ''
})
})
}, 100)
},
saveGoodsStatus(data) {
const obj = {
businessId: this.businessId,
USER_KEY: this.USER_KEY,
USER_SECRET: this.USER_SECRET,
statusCodes: [{ statusCode: data.statusSKUCode }]
}
this.spinning = true
if (!data.isYield) {
this.booGoodsStatusItem.forEach((item) => {
if (item.statusSKUCode == data.statusSKUCode) {
item.isYield = !item.isYield
}
})
SaveServiceStatusIfram(obj).then((res) => {
if (res.data.succ) {
} else {
this.$message.error(res.data.msg)
this.getStatusServiceList(1)
}
this.spinning = false
})
} else {
this.booGoodsStatusItem.forEach((item) => {
if (item.statusSKUCode == data.statusSKUCode) {
item.isYield = !item.isYield
}
})
CancelServiceStatusIfram(obj).then((res) => {
if (res.data.succ) {
} else {
this.$message.error(res.data.msg)
this.getStatusServiceList(1)
}
this.spinning = false
})
}
},
getStatusServiceList(type, code) {
const data = {
queryType: 2,
businessId: this.businessId,
USER_KEY: this.USER_KEY,
USER_SECRET: this.USER_SECRET
}
if (type == 2) {
this.booGoodsStatusItem.forEach((item) => {
if (item.statusSKUCode == code) {
item.isYield = !item.isYield
}
})
}
this.spinning = true
GetServiceStatusListIfram(data).then((res) => {
if (res.data.succ) {
for (let i = 0; i < res.data.ext.length; i++) {
if (res.data.ext[i].isEnd) {
res.data.ext.splice(i + 1, 0, { isBr: true })
}
}
this.booGoodsStatusItem = res.data.ext
} else {
this.$message.error(res.data.msg)
}
this.spinning = false
})
},
getServiceItemList(type, code) {
if (type === 1) {
this.seriveLoading = true
const data = {
USER_KEY: this.USER_KEY,
USER_SECRET: this.USER_SECRET,
queryType: 0,
businessId: this.businessId
}
GetServiceProiectListIfram(data).then((res) => {
if (res.data.succ) {
this.bookingServiceItem = res.data.ext
} else {
this.$message.error(res.data.msg)
}
this.seriveLoading = false
})
} else {
this.spinning = true
this.getStatusServiceList(1)
}
}
}
}
</script>
<style lang="less" scoped>
.tag {
display: inline-block;
margin-left: 10px;
color: rgb(26, 184, 26);
text-align: center;
line-height: 20px;
background: rgb(227, 252, 248);
font-size: 12px;
height: 20px;
width: 20px;
}
.service {
background: rgb(234, 242, 255);
padding-top: 10px;
min-height: 100vh;
padding-left: 15px;
}
.list-box {
background: white;
width: 950px;
color: #17181a;
font-weight: 400;
.list-box-title {
padding: 10px;
font-size: 13px;
border-bottom: 1px solid rgb(168, 177, 192);
display: flex;
align-items: center;
justify-content: space-between;
img {
margin-right: 5px;
}
}
.list-box-content {
padding: 10px;
display: flex;
align-items: center;
padding-bottom: 10px;
.content-right {
display: flex;
overflow-x: auto;
align-content: center;
padding-bottom: 70px;
padding-left: 50px;
width: 100%;
.cont-box {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.conent-item {
display: flex;
align-items: center;
position: relative;
flex-shrink: 0;
&.active {
.item-top {
font-weight: bold;
color: black;
}
.icon {
color: rgb(66, 102, 246);
}
.item-bottom {
color: black;
}
.line {
background: rgb(66, 102, 246);
}
}
&.isEnd {
.item-top {
font-weight: bold;
color: rgb(255, 141, 26);
}
.item-time {
color: rgb(255, 141, 26);
}
.icon {
color: rgb(255, 141, 26);
}
.item-bottom {
font-weight: bold;
color: rgb(255, 141, 26);
}
.line {
color: rgb(66, 102, 246);
}
}
.item-time {
word-wrap: break-word;
width: 80px;
position: absolute;
bottom: -48px;
text-align: center;
}
.item-top {
color: #c0bebe;
margin-bottom: 10px;
}
.icon {
height: 20px;
width: 20px;
color: #c0bebe;
}
.item-bottom {
color: #c0bebe;
margin-top: 10px;
font-size: 12px;
}
.line {
width: 50px;
height: 2px;
background: #c0bebe;
}
.line-long {
width: 100px;
border-bottom: 2px dashed #c0bebe;
}
}
}
}
}
.main-box {
background: white;
width: 950px;
margin-top: 50px;
display: flex;
.box-left {
width: 20%;
background: rgb(234, 242, 255);
}
.box-tab {
background: rgb(234, 242, 255);
border-left: 2px solid rgb(255, 87, 51);
margin-bottom: 3px;
padding: 15px 0;
padding-left: 10px;
cursor: pointer;
&.isActive {
background: white;
}
}
.box-right {
padding-top: 20px;
margin-left: 30px;
width: 80%;
padding-right: 10px;
color: #17181a;
font-weight: 400;
padding-bottom: 30px;
max-height: 1000px;
overflow-y: auto;
overflow-x: hidden;
.box-right-title {
text-align: left;
padding-left: 25px;
padding-bottom: 8px;
border-bottom: 1px solid rgb(235, 238, 245);
span {
display: inline-block;
}
}
.box-item {
border-bottom: 1px solid rgb(235, 238, 245);
display: flex;
color: #737780;
font-weight: 400;
&.isActive {
color: #17181a;
font-weight: 400;
.time-line {
background: rgb(66, 102, 246);
}
.time-circular {
border: 3px solid rgb(66, 102, 246);
}
}
}
.box-time {
width: 20px;
display: flex;
margin-right: 5px;
flex-shrink: 0;
flex-direction: column;
align-items: center;
}
.time-line {
width: 2px;
height: calc(50% - 5px);
background: rgb(201, 203, 209);
}
.time-circular {
width: 10px;
height: 10px;
border: 3px solid rgb(201, 203, 209);
border-radius: 50%;
}
}
}
</style>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="14px" height="14px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -8 -10 )">
<path d="M 7.351562499999999 2.372747747747747 C 7.450520833333334 2.272897897897897 7.500000000000002 2.154654654654654 7.5 2.018018018018018 C 7.500000000000002 1.8813813813813798 7.450520833333334 1.7631381381381366 7.351562499999999 1.663288288288288 C 7.252604166666667 1.5634384384384379 7.135416666666667 1.5135135135135136 7 1.5135135135135136 C 6.864583333333334 1.5135135135135136 6.747395833333334 1.5634384384384379 6.6484375 1.663288288288288 C 6.549479166666667 1.7631381381381366 6.5 1.8813813813813798 6.5 2.018018018018018 C 6.5 2.154654654654654 6.549479166666667 2.272897897897897 6.6484375 2.372747747747747 C 6.747395833333334 2.472597597597596 6.864583333333334 2.5225225225225234 7 2.5225225225225234 C 7.135416666666667 2.5225225225225234 7.252604166666667 2.472597597597596 7.351562499999999 2.372747747747747 Z M 13.9296875 9.152027027027028 C 13.9765625 9.199324324324323 14 9.25975975975976 14 9.333333333333334 L 14 12.108108108108109 C 14 12.223723723723724 13.947916666666668 12.302552552552552 13.84375 12.344594594594595 C 13.802083333333336 12.355105105105105 13.770833333333336 12.36036036036036 13.75 12.36036036036036 C 13.6875 12.36036036036036 13.627604166666668 12.336711711711711 13.5703125 12.289414414414415 L 12.84375 11.556306306306308 C 12.223958333333334 12.307807807807807 11.39453125 12.902965465465465 10.35546875 13.34177927927928 C 9.31640625 13.780593093093094 8.197916666666668 14 7 14 C 5.802083333333334 14 4.68359375 13.780593093093094 3.64453125 13.34177927927928 C 2.60546875 12.902965465465465 1.776041666666667 12.307807807807807 1.15625 11.556306306306308 L 0.4296875 12.289414414414415 C 0.3828125 12.336711711711711 0.3229166666666667 12.36036036036036 0.25 12.36036036036036 C 0.22916666666666669 12.36036036036036 0.19791666666666669 12.355105105105105 0.15625 12.344594594594595 C 0.05208333333333333 12.302552552552552 0 12.223723723723724 0 12.108108108108109 L 0 9.333333333333334 C 0 9.25975975975976 0.0234375 9.199324324324323 0.0703125 9.152027027027028 C 0.11718750000000003 9.10472972972973 0.17708333333333334 9.08108108108108 0.25 9.08108108108108 L 3 9.08108108108108 C 3.1145833333333335 9.08108108108108 3.1927083333333335 9.133633633633634 3.234375 9.23873873873874 C 3.276041666666667 9.338588588588587 3.2578125 9.430555555555555 3.1796875 9.51463963963964 L 2.3984375 10.302927927927929 C 2.7473958333333335 10.781156156156158 3.240885416666667 11.184496996996996 3.87890625 11.51295045045045 C 4.516927083333334 11.841403903903904 5.223958333333334 12.058183183183182 6 12.163288288288289 L 6 7.063063063063062 L 4.5 7.063063063063062 C 4.364583333333334 7.063063063063062 4.247395833333334 7.013138138138138 4.1484375 6.913288288288288 C 4.049479166666667 6.813438438438438 4 6.695195195195195 4 6.558558558558558 L 4 5.549549549549549 C 4 5.412912912912911 4.049479166666667 5.294669669669668 4.1484375 5.194819819819819 C 4.247395833333334 5.094969969969969 4.364583333333334 5.045045045045045 4.5 5.045045045045045 L 6 5.045045045045045 L 6 3.760135135135134 C 5.697916666666667 3.5814564564564555 5.455729166666667 3.3384009009009006 5.2734375 3.030968468468469 C 5.091145833333334 2.7235360360360366 5 2.3858858858858856 5 2.018018018018018 C 5 1.460960960960961 5.1953125 0.98536036036036 5.5859375 0.591216216216216 C 5.9765625 0.197072072072072 6.447916666666667 0 7 0 C 7.552083333333334 0 8.0234375 0.197072072072072 8.4140625 0.591216216216216 C 8.8046875 0.98536036036036 9 1.460960960960961 9 2.018018018018018 C 9 2.3858858858858856 8.908854166666668 2.7235360360360366 8.7265625 3.030968468468469 C 8.544270833333334 3.3384009009009006 8.302083333333334 3.5814564564564555 8 3.760135135135134 L 8 5.045045045045045 L 9.5 5.045045045045045 C 9.635416666666668 5.045045045045045 9.752604166666668 5.094969969969969 9.8515625 5.194819819819819 C 9.950520833333334 5.294669669669668 10 5.412912912912911 10 5.549549549549549 L 10 6.558558558558558 C 10 6.695195195195195 9.950520833333334 6.813438438438438 9.8515625 6.913288288288288 C 9.752604166666668 7.013138138138138 9.635416666666668 7.063063063063062 9.5 7.063063063063062 L 8 7.063063063063062 L 8 12.163288288288289 C 8.776041666666668 12.058183183183182 9.483072916666668 11.841403903903904 10.12109375 11.51295045045045 C 10.759114583333334 11.184496996996996 11.252604166666668 10.781156156156158 11.6015625 10.302927927927929 L 10.8203125 9.51463963963964 C 10.7421875 9.430555555555555 10.723958333333334 9.338588588588587 10.765625 9.23873873873874 C 10.807291666666668 9.133633633633634 10.885416666666668 9.08108108108108 11 9.08108108108108 L 13.75 9.08108108108108 C 13.822916666666668 9.08108108108108 13.8828125 9.10472972972973 13.9296875 9.152027027027028 Z " fill-rule="nonzero" fill="#02a7f0" stroke="none" transform="matrix(1 0 0 1 8 10 )" />
</g>
</svg>

@ -143,7 +143,8 @@
@rules="getRules" @rules="getRules"
@upDateRight="upDateRightFun" @upDateRight="upDateRightFun"
@inGoodsSave="inGoodsSaveFun" @inGoodsSave="inGoodsSaveFun"
@handleRefsh="handleRefshRight"></rightContent> @handleRefsh="handleRefshRight">
</rightContent>
</a-col> </a-col>
</a-row> </a-row>
</a-tab-pane> </a-tab-pane>
@ -502,6 +503,7 @@ export default {
) )
}, },
beforeRouteUpdate(to, from, next) { beforeRouteUpdate(to, from, next) {
console.log(222)
if (this.inAddSave) { if (this.inAddSave) {
next() next()
return false return false
@ -522,7 +524,11 @@ export default {
const secActive = this.$refs.sedOrder.$data.editIndex const secActive = this.$refs.sedOrder.$data.editIndex
hisData.secActive = secActive hisData.secActive = secActive
} }
if (!this.$route.query.copyId) {
this.$set(this.historyData, `copy-${this.id}`, hisData) this.$set(this.historyData, `copy-${this.id}`, hisData)
} else {
this.$set(this.historyData, `copy-${this.id}-${this.$route.query.copyId}`, hisData)
}
} else if (this.$route.query.addNum) { } else if (this.$route.query.addNum) {
const hisData = { const hisData = {
bookingDetails: this.bookingDetails, bookingDetails: this.bookingDetails,
@ -574,6 +580,7 @@ export default {
}, 800) }, 800)
}, },
beforeRouteLeave(to, from, next) { beforeRouteLeave(to, from, next) {
console.log(3333)
this.inChildLoading = true this.inChildLoading = true
if (this.isCopy) { if (this.isCopy) {
const hisData = { const hisData = {
@ -595,6 +602,7 @@ export default {
this.$set(this.historyData, `copy-${this.id}`, hisData) this.$set(this.historyData, `copy-${this.id}`, hisData)
} else { } else {
this.$set(this.historyData, `copy-${this.id}-${this.$route.query.copyId}`, hisData) this.$set(this.historyData, `copy-${this.id}-${this.$route.query.copyId}`, hisData)
console.log(this.historyData,this.$route.query.copyId)
} }
} else if (this.$route.query.addNum) { } else if (this.$route.query.addNum) {
const hisData = { const hisData = {
@ -640,6 +648,7 @@ export default {
}, 2000) }, 2000)
}, },
beforeRouteEnter(to, from, next) { beforeRouteEnter(to, from, next) {
console.log(1111)
next(vm => { next(vm => {
vm.getRouterHis() vm.getRouterHis()
}) })
@ -742,8 +751,7 @@ export default {
getRouterHis() { getRouterHis() {
this.inChildLoading = true this.inChildLoading = true
const newId = this.$route.query.id ? this.$route.query.id.toString() : '' const newId = this.$route.query.id ? this.$route.query.id.toString() : ''
if ((Object.keys(this.historyData).includes(`copy-${newId}`) || Object.keys(this.historyData).includes(`copy-${newId}-${this.$route.query.copyId}`)) && if ((Object.keys(this.historyData).includes(`copy-${newId}`)) && this.$route.query.isCopy === 'true' && !this.$route.query.copyId) {
this.$route.query.isCopy === 'true') {
if (!this.$route.query.copyId) { if (!this.$route.query.copyId) {
const $data = JSON.parse(JSON.stringify(this.historyData[`copy-${newId}`])) const $data = JSON.parse(JSON.stringify(this.historyData[`copy-${newId}`]))
this.bookingDetails = $data.bookingDetails this.bookingDetails = $data.bookingDetails
@ -753,7 +761,41 @@ export default {
this.isAdd = $data.isAdd this.isAdd = $data.isAdd
this.tabActiveKey = $data.tabActiveKey this.tabActiveKey = $data.tabActiveKey
this.mainOrderActiveKey = $data.mainOrderActiveKey this.mainOrderActiveKey = $data.mainOrderActiveKey
}
this.id = this.$route.query.id
this.isCopy = this.$route.query.isCopy
this.inPageLoading = false
setTimeout(() => {
if (this.bookingDetails.hbList && this.bookingDetails.hbList.length > 0) {
this.Showtabs = true
if (Object.keys(this.$refs).includes('sedOrder')) {
this.$refs.sedOrder.init(this.bookingDetails.hbList)
}
} else { } else {
this.Showtabs = false
if (Object.keys(this.$refs).includes('sedOrder')) {
this.$refs.sedOrder.init([])
}
}
if (Object.keys(this.$refs).includes('goodsTable')) {
this.$refs.goodsTable.init()
}
}, 200)
setTimeout(() => {
const key = this.$route.fullPath
const detailsChange = Object.keys(this.needSavePages).includes(key)
? !!this.needSavePages[key].details
: false
this.checkSaveFun({ type: 'details', hasChange: detailsChange })
const hbListChange = !!this.needSavePages[key].hbList
this.checkSaveFun({ type: 'hbList', hasChange: hbListChange })
this.inChildLoading = false
}, 500)
this.isLockBooking = false
this.getFilter()
this.$forceUpdate()
} else if (this.$route.query.isCopy === 'true' && this.$route.query.copyId && Object.keys(this.historyData).includes(`copy-${newId}-${this.$route.query.copyId}`)) {
const $data = JSON.parse(JSON.stringify(this.historyData[`copy-${newId}-${this.$route.query.copyId}`])) const $data = JSON.parse(JSON.stringify(this.historyData[`copy-${newId}-${this.$route.query.copyId}`]))
this.bookingDetails = $data.bookingDetails this.bookingDetails = $data.bookingDetails
this.oldBookingDetails = JSON.parse(JSON.stringify(this.bookingDetails)) this.oldBookingDetails = JSON.parse(JSON.stringify(this.bookingDetails))
@ -762,7 +804,6 @@ export default {
this.isAdd = $data.isAdd this.isAdd = $data.isAdd
this.tabActiveKey = $data.tabActiveKey this.tabActiveKey = $data.tabActiveKey
this.mainOrderActiveKey = $data.mainOrderActiveKey this.mainOrderActiveKey = $data.mainOrderActiveKey
}
this.id = this.$route.query.id this.id = this.$route.query.id
this.isCopy = this.$route.query.isCopy this.isCopy = this.$route.query.isCopy
this.inPageLoading = false this.inPageLoading = false
@ -950,6 +991,7 @@ export default {
this.$refs.basicInfo.$refs.basicFrom.clearValidate() this.$refs.basicInfo.$refs.basicFrom.clearValidate()
this.$refs.mailingInfo.$refs.mailingFrom.clearValidate() this.$refs.mailingInfo.$refs.mailingFrom.clearValidate()
this.$refs.cargoInfo.$refs.cargoFrom.clearValidate() this.$refs.cargoInfo.$refs.cargoFrom.clearValidate()
console.log(this.historyData)
}, },
init() { init() {
this.bookingDetails = JSON.parse(JSON.stringify(initDetail)) this.bookingDetails = JSON.parse(JSON.stringify(initDetail))

@ -1503,7 +1503,6 @@ export default {
this.tableData = arr this.tableData = arr
this.tableLoaded = true this.tableLoaded = true
this.totalCtnall = '' this.totalCtnall = ''
console.log(this.tableData)
} else { } else {
this.tableData = [] this.tableData = []
this.tableLoaded = true this.tableLoaded = true

@ -1,7 +1,7 @@
<template> <template>
<a-spin :spinning="loading"> <a-spin :spinning="loading">
<div class="main"> <div class="main">
<div style="width: 80%;margin-right: 20px;background: white;padding: 10px;"> <div style="width: 74%;margin-right: 20px;background: white;padding: 10px;">
<div style="margin-bottom: 20px;"> <div style="margin-bottom: 20px;">
<a-button type="primary" @click="handleSave"></a-button> <a-button type="primary" @click="handleSave"></a-button>
<a-button v-if="type === 'Edit'" style="margin: 0 10px;" type="primary"></a-button> <a-button v-if="type === 'Edit'" style="margin: 0 10px;" type="primary"></a-button>
@ -12,10 +12,13 @@
</a-popconfirm> </a-popconfirm>
</div> </div>
<a-form-model :model="form" :label-col="labelCol" :wrapper-col="wrapperCol"> <a-form-model :model="form" :label-col="labelCol" :wrapper-col="wrapperCol">
<div class="title" v-if="type === 'Edit'"></div> <div class="title" v-if="type === 'Edit' && form.bookingSlotSaleInfoList.length > 0"></div>
<div v-if="type === 'Edit'"> <div v-if="type === 'Edit'">
<div class="line-bootm" v-for="(item, index) in form.bookingSlotSaleInfoList" :key="index"> <div
<a-row > :class="{ 'line-bootm': index != form.bookingSlotSaleInfoList.length - 1 }"
v-for="(item, index) in form.bookingSlotSaleInfoList"
:key="index">
<a-row>
<a-col :span="6"> <a-col :span="6">
<a-form-model-item label="委托单位"> <a-form-model-item label="委托单位">
<a-select <a-select
@ -46,7 +49,7 @@
@search="SearchUser($event, 0)" @search="SearchUser($event, 0)"
size="small" size="small"
@change="e => { @change="e => {
ChangeUser(e, 'custserviceName', 0,index) ChangeUser(e, 'custserviceName', 0, index)
} }
"> ">
<a-select-option v-for="item1 in UserList" :key="item1.id" :value="item1.id"> <a-select-option v-for="item1 in UserList" :key="item1.id" :value="item1.id">
@ -68,7 +71,7 @@
@search="SearchUser($event, 1)" @search="SearchUser($event, 1)"
size="small" size="small"
@change="e => { @change="e => {
ChangeUser(e, 'sale', 1,index) ChangeUser(e, 'sale', 1, index)
} }
"> ">
<a-select-option v-for="item1 in UserList1" :key="item1.id" :value="item1.id"> <a-select-option v-for="item1 in UserList1" :key="item1.id" :value="item1.id">
@ -78,7 +81,7 @@
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row > <a-row>
<a-col :span="6"> <a-col :span="6">
<a-form-model-item label="SHIPPER"> <a-form-model-item label="SHIPPER">
<a-input v-model="item.shipper" size="small" /> <a-input v-model="item.shipper" size="small" />
@ -171,7 +174,7 @@
<a-form-model-item label="ETD"> <a-form-model-item label="ETD">
<a-date-picker <a-date-picker
valueFormat="YYYY-MM-DD 00:00:00" valueFormat="YYYY-MM-DD 00:00:00"
style="width: 75%;" style="width: 70%;"
v-model="form.etd" v-model="form.etd"
format="YYYY-MM-DD" /> format="YYYY-MM-DD" />
<span class="week" v-if="etdWeek && etdWeek !== 'NaN'">W{{ etdWeek || '--' }}</span> <span class="week" v-if="etdWeek && etdWeek !== 'NaN'">W{{ etdWeek || '--' }}</span>
@ -245,7 +248,7 @@
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
<a-form-model-item label="箱使天数"> <a-form-model-item label="箱使天数">
<a-input style="width: 90%;" v-model="form.detensioN_FREE_DAYS" /> <a-input style="width: 80%;" v-model="form.detensioN_FREE_DAYS" />
<span style="margin-left: 10px;"></span> <span style="margin-left: 10px;"></span>
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
@ -363,7 +366,7 @@
</vxe-pager> </vxe-pager>
</div> </div>
</div> </div>
<div style="background: white;padding: 10px;width: 19%;"> <div style="background: white;padding: 10px;width: 25%;">
<a-card :bodyStyle="tstyle" :bordered="false"> <a-card :bodyStyle="tstyle" :bordered="false">
<div class="right-title"><i class="iconfont icon-fujian-wenjian"></i><span>附件</span></div> <div class="right-title"><i class="iconfont icon-fujian-wenjian"></i><span>附件</span></div>
<div class="content"> <div class="content">
@ -406,7 +409,7 @@
<div class="list"> <div class="list">
<span class="btn">{{ log.createdUserName }}</span> <span class="btn">{{ log.createdUserName }}</span>
<span class="btn"> <span class="btn">
{{ log.createdTime.substring(0, 10) }} {{ log.createdTime }}
<!-- <span class="more"> --> <!-- <span class="more"> -->
<i <i
class="iconfont icon-xia more" class="iconfont icon-xia more"
@ -475,7 +478,8 @@ export default {
return { return {
form: { form: {
ctnList: [], ctnList: [],
logList: [] logList: [],
bookingSlotSaleInfoList: []
}, },
boxOpenFlag: false, boxOpenFlag: false,
loadData: [], loadData: [],
@ -502,6 +506,7 @@ export default {
UserList1: [], UserList1: [],
UserList: [], UserList: [],
id: 0, id: 0,
oldBook: [],
dataSource: [], dataSource: [],
columns: [ columns: [
{ {
@ -758,6 +763,9 @@ export default {
BookingSlotDetail({ id: this.id }).then(res => { BookingSlotDetail({ id: this.id }).then(res => {
if (res.success) { if (res.success) {
this.form = res.data this.form = res.data
if (this.form.bookingSlotSaleInfoList) {
this.oldBook = JSON.parse(JSON.stringify(this.form.bookingSlotSaleInfoList))
}
} else { } else {
this.$message.error(res.message) this.$message.error(res.message)
} }
@ -815,7 +823,6 @@ export default {
this.$forceUpdate() this.$forceUpdate()
}, },
handleSave() { handleSave() {
console.log(this.form)
if (this.form.bookinG_SLOT_TYPE === 'CONTRACT_ORDER') { if (this.form.bookinG_SLOT_TYPE === 'CONTRACT_ORDER') {
this.form.bookinG_SLOT_TYPE_NAME = '合约订舱' this.form.bookinG_SLOT_TYPE_NAME = '合约订舱'
} }
@ -835,15 +842,23 @@ export default {
} }
}) })
} }
// this.form.weeK_AT = 'W' + this.etdWeek
this.form.ctN_STAT = this.boxTotal this.form.ctN_STAT = this.boxTotal
this.loading = true this.loading = true
for (let i = 0; i < this.form.bookingSlotSaleInfoList.length; i++) {
this.form.bookingSlotSaleInfoList[i].updateFlag = false
const change = this.compareObjects(this.form.bookingSlotSaleInfoList[i], this.oldBook[i])
if (Object.keys(change).length > 0) {
this.form.bookingSlotSaleInfoList[i].updateFlag = true
}
}
BookingSlotSave(this.form).then(res => { BookingSlotSave(this.form).then(res => {
if (res.success) { if (res.success) {
this.$message.success('保存成功') this.$message.success('保存成功')
this.type = 'Edit' this.type = 'Edit'
this.id = res.data.id this.id = res.data.id
this.getDetail() this.form = res.data
this.loading = false
// this.getDetail()
} else { } else {
this.$message.error(res.message) this.$message.error(res.message)
this.loading = false this.loading = false
@ -876,6 +891,35 @@ export default {
}) })
this.$forceUpdate() this.$forceUpdate()
}, },
compareObjects(oldObj, newObj) {
const differences = {};
for (const key in oldObj) {
if (oldObj.hasOwnProperty(key)) {
if (newObj.hasOwnProperty(key)) {
if (oldObj[key] !== newObj[key]) {
differences[key] = {
oldValue: oldObj[key],
newValue: newObj[key]
};
}
} else {
differences[key] = {
oldValue: oldObj[key],
newValue: undefined // undefined
};
}
}
}
for (const key in newObj) {
if (newObj.hasOwnProperty(key) && !oldObj.hasOwnProperty(key)) {
differences[key] = {
oldValue: undefined, // undefined
newValue: newObj[key]
};
}
}
return differences;
},
getWeek(dateTime) { getWeek(dateTime) {
// eslint-disable-next-line camelcase // eslint-disable-next-line camelcase
const temp_ms = new Date(dateTime).getTime() const temp_ms = new Date(dateTime).getTime()
@ -927,7 +971,7 @@ export default {
font-size: 16px; font-size: 16px;
margin-left: 8px; margin-left: 8px;
border-radius: 2px; border-radius: 2px;
width: 52px; width: 48px;
text-align: center; text-align: center;
} }
@ -1153,8 +1197,8 @@ export default {
} }
.cargo-info { .cargo-info {
max-height: 1015px; max-height: 800px;
overflow: visible; overflow: scroll;
.info-header { .info-header {
display: flex; display: flex;
@ -1258,11 +1302,13 @@ export default {
} }
} }
} }
.line-bootm{
border-bottom: 1px dashed #696767; .line-bootm {
border-bottom: 1px dashed #cccbcb;
margin-bottom: 10px; margin-bottom: 10px;
} }
/deep/ .ant-form-item{
/deep/ .ant-form-item {
margin-bottom: 10px !important; margin-bottom: 10px !important;
} }
</style> </style>

@ -146,12 +146,12 @@
<a-row> <a-row>
<a-col :span="4"> <a-col :span="4">
<a-form-item label="航线名称"> <a-form-item label="航线名称">
<a-input v-model="form.week_at" allow-clear placeholder="请输入航线名称" /> <a-input v-model="form.LANENAME" allow-clear placeholder="请输入航线名称" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="4"> <a-col :span="4">
<a-form-item label="Week"> <a-form-item label="Week">
<a-input v-model="form.week_at" allow-clear placeholder="请输入Week" /> <a-input-number style="width:100%" v-model="form.week_at" allow-clear placeholder="请输入Week" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="4"> <a-col :span="4">
@ -680,6 +680,48 @@ export default {
field: 'iS_CANCELLATION', field: 'iS_CANCELLATION',
slots: { default: 'iS_CANCELLATION' } slots: { default: 'iS_CANCELLATION' }
}, },
{
title: '委托单位',
align: 'center',
width: '100',
field: 'customername'
},
{
title: '客服',
align: 'center',
width: '100',
field: 'custservice'
},
{
title: '销售',
align: 'center',
width: '100',
field: 'sale'
},
{
title: 'SHIPPER',
align: 'center',
width: '100',
field: 'shipper'
},
{
title: '品名',
align: 'center',
width: '100',
field: 'goodsname'
},
{
title: '卖价',
align: 'center',
width: '100',
field: 'sellinG_PRICE'
},
{
title: '销售日期',
align: 'center',
width: '100',
field: 'salE_TIME'
},
{ {
title: '装货地', title: '装货地',
align: 'center', align: 'center',
@ -939,7 +981,7 @@ export default {
const arr = ['salE_TIME', 'sellinG_PRICE', 'goodsname', 'shipper', 'sale', 'custservice', 'customername'] const arr = ['salE_TIME', 'sellinG_PRICE', 'goodsname', 'shipper', 'sale', 'custservice', 'customername']
const fields = []; const fields = [];
const cellValue = row[column.property]; const cellValue = row[column.property];
if ((cellValue && !arr.includes(column.property)) || column.type === 'checkbox') { if ((cellValue && !arr.includes(column.property)) || column.type === 'checkbox' || column.field === 'caozuo') {
const prevRow = visibleData[_rowIndex - 1]; const prevRow = visibleData[_rowIndex - 1];
let nextRow = visibleData[_rowIndex + 1]; let nextRow = visibleData[_rowIndex + 1];
if (prevRow && prevRow.id === row.id) { if (prevRow && prevRow.id === row.id) {

@ -219,6 +219,16 @@ export default {
values[key] = JSON.stringify(values[key]) values[key] = JSON.stringify(values[key])
} }
} }
const arr = []
this.ItemData.forEach(item => {
if (item.itemCode == values.itemCode) {
values.itemName = item.itemName
arr.push(1)
}
})
if (arr.length === 0) {
values.itemName = values.itemCode
}
DJYTenantParamAddParamValue(values) DJYTenantParamAddParamValue(values)
.then(res => { .then(res => {
if (res.success) { if (res.success) {

@ -116,7 +116,7 @@ export default {
}, },
typeData: [], typeData: [],
visible: false, visible: false,
ItemCodeLoad:false, ItemCodeLoad: false,
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this), form: this.$form.createForm(this),
data: {}, data: {},
@ -220,7 +220,16 @@ export default {
} }
values.id = this.data.id values.id = this.data.id
const arr = []
this.ItemData.forEach(item => {
if (item.itemCode == values.itemCode) {
values.itemName = item.itemName
arr.push(1)
}
})
if (arr.length === 0) {
values.itemName = values.itemCode
}
DJYTenantParamEditParamValue(values) DJYTenantParamEditParamValue(values)
.then(res => { .then(res => {
if (res.success) { if (res.success) {

@ -79,7 +79,13 @@
</div> </div>
</template> </template>
</vxe-toolbar> </vxe-toolbar>
<vxe-table :data="loadData" stripe resizable round :loading="loading" empty-text=""> <vxe-table
:data="loadData"
stripe
resizable
round
:loading="loading"
empty-text="没有更多数据了!">
<vxe-column type="seq" width="40" fixed="left"></vxe-column> <vxe-column type="seq" width="40" fixed="left"></vxe-column>
<vxe-column <vxe-column
v-for="item in columns" v-for="item in columns"
@ -89,6 +95,10 @@
:title="item.title" :title="item.title"
:align="item.align" :align="item.align"
> >
<template #default="{ row }">
<span v-if="item.dataIndex == 'itemCodeName'"> {{ row.itemCodeName ? row.itemCodeName : row.itemCode }} </span>
<span v-else>{{ row[item.dataIndex] }}</span>
</template>
</vxe-column> </vxe-column>
<vxe-column title="操作" fixed="right" width="200" align="center"> <vxe-column title="操作" fixed="right" width="200" align="center">
<template #default="{ row }"> <template #default="{ row }">
@ -172,7 +182,7 @@ export default {
title: '租户参数名称', title: '租户参数名称',
align: 'center', align: 'center',
width: '80', width: '80',
dataIndex: 'itemCode' dataIndex: 'itemCodeName'
}, },
{ {
title: '备注', title: '备注',
@ -259,7 +269,7 @@ export default {
}) })
DJYTenantParamGet({ pageNo: 1, pageSize: 999 }).then(res => { DJYTenantParamGet({ pageNo: 1, pageSize: 999 }).then(res => {
this.TypeData = res.data.items this.TypeData = res.data.items
let data = [] const data = []
res.data.items.forEach(item => { res.data.items.forEach(item => {
if (data.length) { if (data.length) {
let type2 = false let type2 = false
@ -286,7 +296,7 @@ export default {
}, },
FnGetData() { FnGetData() {
this.loading = true this.loading = true
let data = { ...this.queryParam } const data = { ...this.queryParam }
DJYTenantParamGetParamValue(data).then(res => { DJYTenantParamGetParamValue(data).then(res => {
this.loadData = res.data.items this.loadData = res.data.items
this.loading = false this.loading = false

@ -3,7 +3,6 @@
<a-card :bordered="false" :bodyStyle="tstyle"> <a-card :bordered="false" :bodyStyle="tstyle">
<div <div
class="table-page-search-wrapper" class="table-page-search-wrapper"
v-if="hasPerm('BookingTemplate:page')"
:class="advanced ? 'Open' : 'Close'"> :class="advanced ? 'Open' : 'Close'">
<a-form layout="inline"> <a-form layout="inline">
<a-row :gutter="48"> <a-row :gutter="48">

@ -189,11 +189,16 @@ export default {
values.paramType = item.type values.paramType = item.type
} }
}) })
const arr = []
this.ItemData.forEach(item => { this.ItemData.forEach(item => {
if (item.itemCode == values.itemCode) { if (item.itemCode == values.itemCode) {
values.itemName = item.itemName values.itemName = item.itemName
arr.push(1)
} }
}) })
if (arr.length === 0) {
values.itemName = values.itemCode
}
saveParamValue(values) saveParamValue(values)
.then(res => { .then(res => {
if (res.success) { if (res.success) {

@ -199,11 +199,16 @@ export default {
values.paramType = item.type values.paramType = item.type
} }
}) })
const arr = []
this.ItemData.forEach(item => { this.ItemData.forEach(item => {
if (item.itemCode == values.itemCode) { if (item.itemCode == values.itemCode) {
values.itemName = item.itemName values.itemName = item.itemName
arr.push(1)
} }
}) })
if (arr.length === 0) {
values.itemName = values.itemCode
}
saveParamValue(values) saveParamValue(values)
.then(res => { .then(res => {
if (res.success) { if (res.success) {

@ -81,6 +81,10 @@
:title="item.title" :title="item.title"
:align="item.align" :align="item.align"
> >
<template #default="{ row }">
<span v-if="item.dataIndex == 'itemCodeName'"> {{ row.itemCodeName ? row.itemCodeName : row.itemCode }} </span>
<span v-else>{{ row[item.dataIndex] }}</span>
</template>
</vxe-column> </vxe-column>
<vxe-column title="操作" fixed="right" width="200" align="center"> <vxe-column title="操作" fixed="right" width="200" align="center">
<template #default="{ row }"> <template #default="{ row }">
@ -146,7 +150,7 @@ export default {
pageSize: 10 pageSize: 10
}, },
ColumnsQuery: [], ColumnsQuery: [],
customerQuery:"", customerQuery: '',
columns: [ columns: [
{ {
title: '客户', title: '客户',

Loading…
Cancel
Save