修改bug

master
sunzehua 6 months ago
parent 7ecd616222
commit 8374150b80

@ -7,12 +7,12 @@ VUE_APP_TYPE = 'hechuan'
# 打包部署的三个端 客户端customer 和川端hechuan 运营端djy # 打包部署的三个端 客户端customer 和川端hechuan 运营端djy
# 和川大简云正式 # 和川大简云正式
# VUE_APP_API_BASE_URL=http://47.104.85.216:12345/api VUE_APP_API_BASE_URL=http://47.104.85.216:12345/api
# VUE_APP_SOCKET_BASE_URL=http://47.104.85.216:12345 VUE_APP_SOCKET_BASE_URL=http://47.104.85.216:12345
# 和川大简云测试 # 和川大简云测试
VUE_APP_API_BASE_URL=http://60.209.125.238:35100 # VUE_APP_API_BASE_URL=http://60.209.125.238:35100
VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:35100 # VUE_APP_SOCKET_BASE_URL=http://60.209.125.238:35100
# 客户端测试 # 客户端测试
# VUE_APP_API_BASE_URL=http://60.209.125.238:30813 # VUE_APP_API_BASE_URL=http://60.209.125.238:30813

@ -131,7 +131,13 @@ export function ValidateCreateBookingOrder(parameter) {
params: parameter params: parameter
}) })
} }
export function getAvailableCtnsBySlot(parameter) {
return axios({
url: '/BookingSlot/getAvailableCtnsBySlot',
method: 'get',
params: parameter
})
}
export function slotSendEmail(parameter) { export function slotSendEmail(parameter) {
return axios({ return axios({
url: '/BookingSlot/SendEmail', url: '/BookingSlot/SendEmail',
@ -140,5 +146,42 @@ export function slotSendEmail(parameter) {
}) })
} }
export function BookingLabelSave(parameter) {
return axios({
url: 'BookingLabel/Save',
method: 'post',
data: parameter
})
}
export function BookingLabelPageList(parameter) {
return axios({
url: 'BookingLabel/PageList',
method: 'post',
data: parameter
})
}
export function BookingLabelDelete(parameter) {
return axios({
url: 'BookingLabel/Delete',
method: 'post',
data: parameter
})
}
export function BookingLabelList(parameter) {
return axios({
url: 'BookingLabel/List',
method: 'get',
params: parameter
})
}
export function BookingLabelBind(parameter) {
return axios({
url: 'BookingLabel/Bind',
method: 'post',
data: parameter
})
}

@ -558,3 +558,28 @@ export function GetBookingOrder(parameter) {
params: parameter params: parameter
}) })
} }
export function GetToShipSelect(parameter) {
return axios({
url: '/TaskManageRollingNomination/GetToShipSelect',
method: 'get',
params: parameter
})
}
export function GetRollingNominationNoticeReview(parameter) {
return axios({
url: '/TaskManageRollingNomination/GetRollingNominationNoticeReview',
method: 'post',
data: parameter
})
}
export function SendRollingNominationNotice(parameter) {
return axios({
url: '/TaskManageRollingNomination/SendRollingNominationNotice',
method: 'post',
data: parameter
})
}

@ -134,6 +134,30 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row v-if="type==='B'">
<a-col :span="8">
<a-form-item label="SHIPPER" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
<a-input v-model="CreateData.SHIPPER"></a-input>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="品名" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
<a-input v-model="CreateData.GOODSNAME"></a-input>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="卖价" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
<a-input-number style="width: 100%;" :precision="2" v-model="CreateData.GOODSNAME"></a-input-number>
</a-form-item>
</a-col>
</a-row>
<a-row v-if="type==='B'">
<a-col :span="8">
<a-form-item label="销售日期" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
<a-date-picker style="width: 100%;" v-model="CreateData.SALE_TIME" />
</a-form-item>
</a-col>
</a-row>
<a-row> <a-row>
<a-col :span="8"> <a-col :span="8">
<a-form-item label="客服:" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2"> <a-form-item label="客服:" :label-col="formItemLayout.labelCol2" :wrapper-col="formItemLayout.wrapperCol2">
@ -238,7 +262,8 @@
import { DjyCustomerSuggest, GetSysUserPage, DjyCustomerContacts, DjyCustomerdetail } from '@/api/modular/main/BookingLedger' import { DjyCustomerSuggest, GetSysUserPage, DjyCustomerContacts, DjyCustomerdetail } from '@/api/modular/main/BookingLedger'
import { GetProjectList, CreateBookingAndSlot, GetBookingOrder } from '@/api/modular/main/TaskmanageList' import { GetProjectList, CreateBookingAndSlot, GetBookingOrder } from '@/api/modular/main/TaskmanageList'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { ValidateCreateBookingOrder, CreateBooking0rder } from '@/api/modular/main/CompanySiteaccount' import moment from 'moment'
import { getAvailableCtnsBySlot, CreateBooking0rder } from '@/api/modular/main/CompanySiteaccount'
let timer let timer
export default { export default {
components: { components: {
@ -365,9 +390,10 @@ export default {
this.userInfoList = [] this.userInfoList = []
this.$forceUpdate() this.$forceUpdate()
this.CreateData = {} this.CreateData = {}
this.CreateData.SALE_TIME = moment().format('YYYY-MM-DD HH:mm:ss')
this.SlotVisible = true this.SlotVisible = true
this.spinning = true this.spinning = true
ValidateCreateBookingOrder({ id: row.id }).then(res => { getAvailableCtnsBySlot({ slotId: row.id }).then(res => {
if (res.success) { if (res.success) {
this.slotEdit = row this.slotEdit = row
} else { } else {

@ -24,9 +24,15 @@ export const sortMixin = {
let itemToMove = list.splice(indexToMove, 1)[0]; let itemToMove = list.splice(indexToMove, 1)[0];
list.unshift(itemToMove); list.unshift(itemToMove);
} }
const arr = JSON.parse(JSON.stringify(this.columns))
this.columns = JSON.parse(JSON.stringify(list)) this.columns = JSON.parse(JSON.stringify(list))
this.columns.forEach((item, index) => { this.columns.forEach((item, index) => {
arr.forEach(ite => {
if (item.field === ite.field) {
item.width = ite.width
this.$set(this.columns, index, item) this.$set(this.columns, index, item)
}
})
}) })
this.$forceUpdate() this.$forceUpdate()
this.editColumnsSave(this.columns) this.editColumnsSave(this.columns)

@ -44,6 +44,7 @@ const booking = {
shipagencyInitList: [], shipagencyInitList: [],
saleInitList: [], saleInitList: [],
opInitList: [], opInitList: [],
subOpInitList: [],
docInitList: [], docInitList: [],
custserviceInitList: [], custserviceInitList: [],
routeInitList: [], routeInitList: [],
@ -446,6 +447,7 @@ const booking = {
case 'user': case 'user':
allData['saleInitList'] = $data allData['saleInitList'] = $data
allData['opInitList'] = $data allData['opInitList'] = $data
allData['subOpInitList'] = $data
allData['docInitList'] = $data allData['docInitList'] = $data
allData['custserviceInitList'] = $data allData['custserviceInitList'] = $data
allData['routeInitList'] = $data allData['routeInitList'] = $data

@ -3,17 +3,17 @@
<a-spin :spinning="flowLoad"> <a-spin :spinning="flowLoad">
<div class="list-box" @click="handleDetail"> <div class="list-box" @click="handleDetail">
<div class="list-box-title"> <div class="list-box-title">
<span>提单号{{ flowData.blNo }}</span> <span>提单号:{{ flowData.blNo }}</span>
<div>{{ flowData.carrier }}</div> <div style="margin: 0 10px;">{{ flowData.carrier }}</div>
<span style="display: flex;align-items: center;"> <span style="display: flex;align-items: center;">
<img src="./u1041.svg" alt=""> 起运港:{{ flowData.routingInfoList ? flowData.routingInfoList[0].loading : '-' <img src="./u1041.svg" alt=""> 起运港:{{ flowData.routingInfoList ? flowData.routingInfoList[0].loading : '-'
}} }}
<a-icon style="margin: 0 15px;" type="swap-right" /> <a-icon style="margin: 0 15px;" type="swap-right" />
<img src="./u1041.svg" alt=""> 目的港{{ flowData.routingInfoList ? flowData.routingInfoList[0].discharging : <img src="./u1041.svg" alt=""> 目的港:{{ flowData.routingInfoList ? flowData.routingInfoList[0].discharging :
'-' }}</span> '-' }}</span>
<div>船名{{ flowData.vslNameEn }}</div> <div style="margin: 0 10px;">船名:{{ flowData.vslNameEn }}</div>
<div>航次{{ flowData.voy }}</div> <div>航次:{{ flowData.voy }}</div>
<span style="cursor: pointer;color: blue;" >详情<a-icon <span style="cursor: pointer;color: blue;margin-left: 10px;" >详情<a-icon
type="appstore" type="appstore"
theme="filled" /></span> theme="filled" /></span>
</div> </div>
@ -73,9 +73,9 @@
</a-table> --> </a-table> -->
</div> </div>
<div class="box-right-title"> <div class="box-right-title">
<span style="width: 150px">动态</span> <span style="width: 130px">动态</span>
<span style="width: 190px">时间</span> <span style="width: 190px">时间</span>
<span style="width: 150px;margin-right: 20px;">地点</span> <span style="width: 130px;margin-right: 10px;">地点</span>
<span style="width: 150px">船名航次</span> <span style="width: 150px">船名航次</span>
</div> </div>
<div <div
@ -90,10 +90,10 @@
<div class="time-line" :style="{ background: index == timeList.length - 1 ? 'none' : '' }"></div> <div class="time-line" :style="{ background: index == timeList.length - 1 ? 'none' : '' }"></div>
</div> </div>
<div style="display: flex;align-items: center;padding: 15px 0;"> <div style="display: flex;align-items: center;padding: 15px 0;">
<div style="width: 150px;">{{ item.statusCnName }}</div> <div style="width: 130px;">{{ item.statusCnName }}</div>
<div style="width: 200px;" v-if="item.isEst == 'N'">{{ item.statusTime }} <span class="tag"></span> </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: 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: 130px;word-wrap: break-word;margin-right: 10px;">{{ 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">{{ item.vslName }} / {{ item.voy }}</div>
<div style="width: 150px;font-size: 12px;word-break: break-all;" v-if="!item.vslName">-</div> <div style="width: 150px;font-size: 12px;word-break: break-all;" v-if="!item.vslName">-</div>
</div> </div>
@ -476,11 +476,13 @@ export default {
padding-top: 10px; padding-top: 10px;
min-height: 100vh; min-height: 100vh;
padding-left: 15px; padding-left: 15px;
min-width: 100vw;
padding-bottom: 200px;
} }
.list-box { .list-box {
background: white; background: white;
width: 950px; // width: 950px;
color: #17181a; color: #17181a;
font-weight: 400; font-weight: 400;
@ -490,7 +492,6 @@ export default {
border-bottom: 1px solid rgb(168, 177, 192); border-bottom: 1px solid rgb(168, 177, 192);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between;
img { img {
margin-right: 5px; margin-right: 5px;
@ -508,7 +509,7 @@ export default {
overflow-x: auto; overflow-x: auto;
align-content: center; align-content: center;
padding-bottom: 70px; padding-bottom: 70px;
padding-left: 50px; padding-left: 20px;
width: 100%; width: 100%;
.cont-box { .cont-box {
display: flex; display: flex;
@ -607,7 +608,7 @@ export default {
.main-box { .main-box {
background: white; background: white;
width: 950px; // width: 950px;
margin-top: 50px; margin-top: 50px;
display: flex; display: flex;
@ -631,7 +632,7 @@ export default {
.box-right { .box-right {
padding-top: 20px; padding-top: 20px;
margin-left: 30px; margin-left: 15px;
width: 80%; width: 80%;
padding-right: 10px; padding-right: 10px;
color: #17181a; color: #17181a;

@ -558,7 +558,26 @@
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="10"> <a-row :gutter="10">
<a-col :xs="24" :sm="9" :md="9" :lg="9" :xl="8"> <a-col :xs="24" :sm="9" :md="9" :lg="9" :xl="4">
<a-form-model-item
class="from-label"
label="分单操作"
:labelCol="{span:8}"
:wrapperCol="{span:16}"
has-feedback
prop="subOp">
<selectView
type="subOp"
:defaultVal="details.subOp"
searchApi="GetSysUserPage"
:searchQuery="{ name: '' }"
:showLabel="['name']"
:openSearch="true"
@change="getSelectViewRes">
</selectView>
</a-form-model-item>
</a-col>
<a-col :xs="24" :sm="9" :md="9" :lg="9" :xl="7">
<a-form-model-item <a-form-model-item
class="from-label" class="from-label"
label="操作备注" label="操作备注"
@ -573,7 +592,7 @@
@getInputChange="inputChange" /> @getInputChange="inputChange" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :xs="24" :sm="9" :md="9" :lg="9" :xl="8"> <a-col :xs="24" :sm="9" :md="9" :lg="9" :xl="7">
<a-form-model-item <a-form-model-item
class="from-label" class="from-label"
label="单证备注" label="单证备注"
@ -588,7 +607,7 @@
@getInputChange="inputChange" /> @getInputChange="inputChange" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :xs="24" :sm="6" :md="6" :lg="6" :xl="8"> <a-col :xs="24" :sm="6" :md="6" :lg="6" :xl="6">
<a-form-model-item <a-form-model-item
class="from-label" class="from-label"
label="申请箱使" label="申请箱使"
@ -1278,7 +1297,7 @@ export default {
} else if (type === 'shipagency') { } else if (type === 'shipagency') {
this.details.shipagency = res.name || '' this.details.shipagency = res.name || ''
this.details.shipagencyid = res.code || '' this.details.shipagencyid = res.code || ''
} else if (['sale', 'op', 'doc', 'custservice', 'route', 'lineManage'].includes(type)) { } else if (['sale', 'op', 'doc', 'custservice', 'route', 'lineManage', 'subOp'].includes(type)) {
this.details[type] = res.name || '' this.details[type] = res.name || ''
if (type == 'lineManage') { if (type == 'lineManage') {
this.details.lineManage = res.name || '' this.details.lineManage = res.name || ''

@ -1052,31 +1052,36 @@
width="1300px" width="1300px"
v-model="cabinSpaceFlag" v-model="cabinSpaceFlag"
title="引入舱位"> title="引入舱位">
<a-form :model="cabinQueryForm" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }"> <a-form :model="cabinQueryForm" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }">
<a-row> <a-row>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="装货地"> <a-form-item label="装货地">
<a-input v-model="cabinQueryForm.placereceipt" allow-clear placeholder="请输入装货地" /> <a-input v-model="cabinQueryForm.placereceipt" allow-clear placeholder="请输入装货地" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="交货地"> <a-form-item label="交货地">
<a-input v-model="cabinQueryForm.placedelivery" allow-clear placeholder="请输入交货地" /> <a-input v-model="cabinQueryForm.placedelivery" allow-clear placeholder="请输入交货地" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="船名"> <a-form-item label="船名">
<a-input v-model="cabinQueryForm.VESSEL" allow-clear placeholder="请输入船名" /> <a-input v-model="cabinQueryForm.VESSEL" allow-clear placeholder="请输入船名" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="订舱编号">
<a-input v-model="cabinQueryForm.SLOT_BOOKING_NO" allow-clear placeholder="请输入订舱编号" />
</a-form-item>
</a-col>
<a-col :span="4">
<a-form-item label="航次"> <a-form-item label="航次">
<a-input v-model="cabinQueryForm.VOYNO" allow-clear placeholder="请输入航次" /> <a-input v-model="cabinQueryForm.VOYNO" allow-clear placeholder="请输入航次" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="承运模式"> <a-form-item label="承运模式">
<a-select v-model="cabinQueryForm.CARRIAGE_TYPE"> <a-select v-model="cabinQueryForm.CARRIAGE_TYPE">
<a-select-option value="DIRECT_SHIP"> <a-select-option value="DIRECT_SHIP">
@ -1088,7 +1093,7 @@
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="订舱方式"> <a-form-item label="订舱方式">
<a-select v-model="cabinQueryForm.BOOKING_SLOT_TYPE"> <a-select v-model="cabinQueryForm.BOOKING_SLOT_TYPE">
<a-select-option value="CONTRACT_ORDER"> <a-select-option value="CONTRACT_ORDER">
@ -1100,7 +1105,7 @@
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="箱型箱量"> <a-form-item label="箱型箱量">
<a-select <a-select
mode="multiple" mode="multiple"
@ -1113,7 +1118,7 @@
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="5">
<div class="model-btn-list" style="margin-bottom: 0px;margin-left: 38px;margin-top: 3px;"> <div class="model-btn-list" style="margin-bottom: 0px;margin-left: 38px;margin-top: 3px;">
<a-button class="btn" type="primary" @click="getCabinList"></a-button> <a-button class="btn" type="primary" @click="getCabinList"></a-button>
<a-button class="btn" style="margin-left: 8px" @clikc="refshCabin"></a-button> <a-button class="btn" style="margin-left: 8px" @clikc="refshCabin"></a-button>
@ -1125,7 +1130,9 @@
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio', }" :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio', }"
:scroll="{ x: 1200, y: 500 }" :scroll="{ x: 1200, y: 500 }"
size="small" size="small"
:pagination="false" :pagination="paginationCab"
:loading="cabLoad"
@change="tablePaginationChangeCab"
:columns="cabinColums" :columns="cabinColums"
:data-source="cabinList"> :data-source="cabinList">
<div slot="vessel" slot-scope="text,record">{{ record.vessel }}/{{ record.voyno }}</div> <div slot="vessel" slot-scope="text,record">{{ record.vessel }}/{{ record.voyno }}</div>
@ -1225,6 +1232,7 @@ export default {
cabinLoad: false, cabinLoad: false,
cabinShow: true, cabinShow: true,
boxRemaining: '', boxRemaining: '',
cabLoad: false,
boxTotal: '', boxTotal: '',
selectedRowKeys: [], selectedRowKeys: [],
tearFlag: false, tearFlag: false,
@ -1408,6 +1416,13 @@ export default {
pageSizeOptions: ['1', '10', '20', '40', '80', '100'], pageSizeOptions: ['1', '10', '20', '40', '80', '100'],
pageSize: 10 pageSize: 10
}, },
paginationCab: {
current: 1,
total: 0, //
showSizeChanger: true,
pageSizeOptions: ['1', '10', '20', '40', '80', '100'],
pageSize: 20
},
hisColums: [ hisColums: [
{ {
title: '创建人', title: '创建人',
@ -1847,9 +1862,12 @@ export default {
if (this.cabinQueryForm.ctN_STAT) { if (this.cabinQueryForm.ctN_STAT) {
this.cabinQueryForm.ctN_STAT = this.cabinQueryForm.ctN_STAT.join(',') this.cabinQueryForm.ctN_STAT = this.cabinQueryForm.ctN_STAT.join(',')
} }
this.cabLoad = true
this.cabinQueryForm.PageSize = this.paginationCab.PageSize
this.cabinQueryForm.PageNo = this.paginationCab.current
BookingSlotGetAvailableSlots(this.cabinQueryForm).then(res => { BookingSlotGetAvailableSlots(this.cabinQueryForm).then(res => {
if (res.success) { if (res.success) {
res.data.forEach(item => { res.data.items.forEach(item => {
item.ctN_STAT = '' item.ctN_STAT = ''
if (item.ctnList) { if (item.ctnList) {
item.ctnListCopy = JSON.parse(JSON.stringify(item.ctnList)) item.ctnListCopy = JSON.parse(JSON.stringify(item.ctnList))
@ -1859,10 +1877,12 @@ export default {
ite.maxNum = JSON.parse(JSON.stringify(ite.ctnnum)) ite.maxNum = JSON.parse(JSON.stringify(ite.ctnnum))
}) })
}) })
this.cabinList = res.data this.cabinList = res.data.items
this.paginationCab.total = res.data.totalCount
} else { } else {
this.$message.error(res.message) this.$message.error(res.message)
} }
this.cabLoad = false
}) })
}, },
onSelectChange(selectedRowKeys) { onSelectChange(selectedRowKeys) {
@ -1980,6 +2000,11 @@ export default {
this.pagination.pageSize = pagination.pageSize this.pagination.pageSize = pagination.pageSize
this.getList() this.getList()
}, },
tablePaginationChangeCab(pagination) {
this.paginationCab.current = pagination.current
this.paginationCab.pageSize = pagination.pageSize
this.getCabinList()
},
handleSearch() { handleSearch() {
this.getList() this.getList()
}, },
@ -2413,6 +2438,7 @@ export default {
this.getVgmLink() this.getVgmLink()
} else if (type === 'cabinSpace') { } else if (type === 'cabinSpace') {
this.cabinSpaceFlag = true this.cabinSpaceFlag = true
this.cabinList = []
this.getCabinList() this.getCabinList()
} }
}, },
@ -2881,7 +2907,15 @@ export default {
this.$emit('copy') this.$emit('copy')
}, },
addChild() { addChild() {
if (process.env.VUE_APP_TYPE === 'hechuan') {
if (!this.details.hblno) {
this.$message.error('请输入分提单号')
} else {
this.$emit('addSedList') this.$emit('addSedList')
}
} else {
this.$emit('addSedList')
}
}, },
downLoadFile(type, type2) { downLoadFile(type, type2) {
if (!this.id || !this.initCabinFrom.id) { if (!this.id || !this.initCabinFrom.id) {

@ -657,6 +657,10 @@ export default {
this.$message.error('请输入分提单号') this.$message.error('请输入分提单号')
return false return false
} }
if (!this.editDetails.foreignAgent) {
this.$message.error('请输入境外代理')
return false
}
let basicFrom = true let basicFrom = true
this.$refs.basicInfo.$refs.basicFrom.validate((valid, err) => { this.$refs.basicInfo.$refs.basicFrom.validate((valid, err) => {
console.log(err) console.log(err)

@ -194,7 +194,7 @@ export default {
}, },
form: {}, form: {},
firstFlag: false, firstFlag: false,
country:[], country: [],
sortMixinForm: { sortMixinForm: {
column: 'CabinInventory_list_column', column: 'CabinInventory_list_column',
setting: 'CabinInventorySetting', setting: 'CabinInventorySetting',
@ -248,7 +248,7 @@ export default {
title: '取消库存', title: '取消库存',
align: 'center', align: 'center',
width: '100', width: '100',
field: 'portdischarge' field: 'canceL_NUM'
}, },
{ {
title: '收货地', title: '收货地',
@ -274,6 +274,12 @@ export default {
width: '100', width: '100',
field: 'placedelivery' field: 'placedelivery'
}, },
{
title: '卸货港国家',
align: 'center',
width: '100',
field: 'portdischargE_COUNTRY'
},
{ {
title: 'WEEK', title: 'WEEK',
align: 'center', align: 'center',
@ -370,7 +376,7 @@ export default {
title: '取消库存', title: '取消库存',
align: 'center', align: 'center',
width: '100', width: '100',
field: 'portdischarge' field: 'canceL_NUM'
}, },
{ {
title: '收货地', title: '收货地',
@ -396,6 +402,12 @@ export default {
width: '100', width: '100',
field: 'placedelivery' field: 'placedelivery'
}, },
{
title: '卸货港国家',
align: 'center',
width: '100',
field: 'portdischargE_COUNTRY'
},
{ {
title: 'WEEK', title: 'WEEK',
align: 'center', align: 'center',
@ -549,7 +561,6 @@ export default {
contracT_NO: row.contracT_NO, contracT_NO: row.contracT_NO,
portloadid: row.portloadid, portloadid: row.portloadid,
portdischargeid: row.portdischargeid, portdischargeid: row.portdischargeid,
placedelivery: row.placedelivery,
bookinG_SLOT_TYPE: row.bookinG_SLOT_TYPE, bookinG_SLOT_TYPE: row.bookinG_SLOT_TYPE,
carrierid: row.carrierid carrierid: row.carrierid
} }

@ -94,7 +94,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 v-model="item.sellinG_PRICE" size="small" /> <a-input-number :precision="2" v-model="item.sellinG_PRICE" size="small" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
@ -261,7 +261,7 @@
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
<a-form-model-item label="weeKAT"> <a-form-model-item label="weeKAT">
<a-input v-model="form.weeK_AT" /> <a-input-number style="width: 100%;" :precision="0" v-model="form.weeK_AT" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
@ -271,7 +271,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 v-model="form.pricE_CALCULATION_DATE" /> <a-date-picker show-time v-model="form.pricE_CALCULATION_DATE" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
</a-row> </a-row>

@ -162,6 +162,20 @@
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="4">
<a-form-item label="标签">
<a-select
mode="multiple"
style="width: 100%"
:filter-option="filterOption"
v-model="form.labelIdArray"
>
<a-select-option v-for="(item, i) in labelList" :key="i" :value="item.id">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row> </a-row>
</a-form> </a-form>
</div> </div>
@ -179,6 +193,7 @@
<a-button type="primary">导入</a-button> <a-button type="primary">导入</a-button>
</a-upload> </a-upload>
<a-button type="danger">作废</a-button> <a-button type="danger">作废</a-button>
<a-button type="primary" style="margin-left: 100px;" @click="handleLabel"></a-button>
<!-- <a-button type="primary" @click="handleSendAll"></a-button> --> <!-- <a-button type="primary" @click="handleSendAll"></a-button> -->
</div> </div>
<div> <div>
@ -240,6 +255,9 @@
<template #etd="{ row }"> <template #etd="{ row }">
<span>{{ row.etd ? row.etd.substring(0, 10) : '' }}</span> <span>{{ row.etd ? row.etd.substring(0, 10) : '' }}</span>
</template> </template>
<template #labelList="{ row }">
<a-tag :color="item.color" v-for="(item, index) in row.labelList" :key="index">{{ item.name }}</a-tag>
</template>
<template #pager> <template #pager>
<vxe-pager <vxe-pager
@ -252,6 +270,20 @@
</template> </template>
</vxe-grid> </vxe-grid>
</a-card> </a-card>
<a-modal width="800px" @ok="handleSubmitLabel" v-model="visible" title="分配标签" @cancel="visible = false">
<a-spin :spinning="labelLoad">
<a-select
mode="multiple"
style="width: 100%"
:filter-option="filterOption"
v-model="labelIdArray"
>
<a-select-option v-for="(item, i) in labelList" :key="i" :value="item.id">
{{ item.name }}
</a-select-option>
</a-select>
</a-spin>
</a-modal>
<generation ref="generation"></generation> <generation ref="generation"></generation>
</div> </div>
</template> </template>
@ -261,7 +293,9 @@ import {
BookingSlotDelete, BookingSlotDelete,
ImportSlotFromFile, ImportSlotFromFile,
CreateBooking0rder, CreateBooking0rder,
slotSendEmail slotSendEmail,
BookingLabelList,
BookingLabelBind
} from '@/api/modular/main/CompanySiteaccount' } from '@/api/modular/main/CompanySiteaccount'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { import {
@ -292,12 +326,15 @@ export default {
labelField: 'sloT_BOOKING_NO' labelField: 'sloT_BOOKING_NO'
}, },
loading: false, loading: false,
labelList: [],
setVisible: false, setVisible: false,
labelIdArray: [],
CreateData: { CreateData: {
customerContactId: [] customerContactId: []
}, },
UserList: [], UserList: [],
customerByList: [], customerByList: [],
visible: false,
CustomerList: [], CustomerList: [],
SlotVisible: false, SlotVisible: false,
userInfoList: [], userInfoList: [],
@ -327,6 +364,7 @@ export default {
STATUS: '1' STATUS: '1'
}, },
slotEdit: {}, slotEdit: {},
labelLoad: false,
ColumnsQuery: [], ColumnsQuery: [],
columns: [ columns: [
{ {
@ -334,6 +372,13 @@ export default {
width: 60, width: 60,
noDraggable: true noDraggable: true
}, },
{
title: '标签',
align: 'center',
width: '100',
field: 'labelList',
slots: { default: 'labelList' }
},
{ {
title: '订舱编号', title: '订舱编号',
align: 'center', align: 'center',
@ -448,6 +493,18 @@ export default {
width: '180', width: '180',
field: 'placedelivery' field: 'placedelivery'
}, },
{
title: '装货港',
align: 'center',
width: '180',
field: 'portload'
},
{
title: '卸货港',
align: 'center',
width: '180',
field: 'portdischarge'
},
{ {
title: '箱型箱量', title: '箱型箱量',
align: 'center', align: 'center',
@ -502,7 +559,7 @@ export default {
{ {
title: '重量(KGS)', title: '重量(KGS)',
align: 'center', align: 'center',
width: '100', width: '120',
sortable: true, sortable: true,
field: 'WEIGHKGS' field: 'WEIGHKGS'
}, },
@ -620,6 +677,13 @@ export default {
width: 60, width: 60,
noDraggable: true noDraggable: true
}, },
{
title: '标签',
align: 'center',
width: '100',
field: 'labelList',
slots: { default: 'labelList' }
},
{ {
title: '订舱编号', title: '订舱编号',
align: 'center', align: 'center',
@ -734,6 +798,18 @@ export default {
width: '180', width: '180',
field: 'placedelivery' field: 'placedelivery'
}, },
{
title: '装货港',
align: 'center',
width: '180',
field: 'portload'
},
{
title: '卸货港',
align: 'center',
width: '180',
field: 'portdischarge'
},
{ {
title: '箱型箱量', title: '箱型箱量',
align: 'center', align: 'center',
@ -788,7 +864,7 @@ export default {
{ {
title: '重量(KGS)', title: '重量(KGS)',
align: 'center', align: 'center',
width: '100', width: '120',
sortable: true, sortable: true,
field: 'WEIGHKGS' field: 'WEIGHKGS'
}, },
@ -918,6 +994,9 @@ export default {
}, },
mounted() { mounted() {
this.getConfigStart() this.getConfigStart()
BookingLabelList({ scope: 1 }).then(res => {
this.labelList = res.data
})
}, },
methods: { methods: {
FnTurnD(data) { FnTurnD(data) {
@ -936,6 +1015,25 @@ export default {
return false return false
} }
}, },
handleSubmitLabel() {
const select = this.$refs.table.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.id
})
const data = {
labelIdArray: this.labelIdArray,
businessIdArray: pkIdArr
}
BookingLabelBind(data).then(res => {
if (res.success) {
this.$message.success('分配成功')
this.visible = false
this.getList()
} else {
this.$message.error(res.message)
}
})
},
customRequest(data) { customRequest(data) {
this.isUpload = true; this.isUpload = true;
this.percent = 0; this.percent = 0;
@ -981,7 +1079,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' || column.field === 'caozuo') { if ((!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) {
@ -1013,6 +1111,27 @@ export default {
this.CustomerList = res.data.rows this.CustomerList = res.data.rows
}) })
}, },
handleLabel() {
const select = this.$refs.table.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.id
})
if (pkIdArr.length === 0) {
this.$message.error('请选择要分配的数据')
return false
}
this.visible = true
this.labelLoad = true
BookingLabelList({ scope: 1 }).then(res => {
this.labelList = res.data
this.labelLoad = false
})
},
filterOption(input, option) {
return (
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
);
},
ChangeCustomer(e) { ChangeCustomer(e) {
this.customerByList = [] this.customerByList = []
this.CreateData.customerContactId = [] this.CreateData.customerContactId = []

@ -0,0 +1,566 @@
<template>
<div>
<a-card :bordered="false" :bodyStyle="tstyle">
<div class="table-page-search-wrapper" :class="advanced ? 'Open' : 'Close'">
<a-form :model="form" :label-col="{ span: 7 }" :wrapper-col="{ span: 17 }">
<a-row>
<a-col :span="6">
<a-form-item label="标签名称">
<a-input v-model="form.name" allow-clear placeholder="请输入标签名称" />
</a-form-item>
</a-col>
<a-col :span="6">
<a-form-item label="标签使用范围">
<a-select v-model="form.scope">
<a-select-option :value="1">
舱位
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
</a-form>
</div>
</a-card>
<a-card :bordered="false">
<div style="margin-bottom: 10px;display: flex;justify-content: space-between;">
<div>
<a-button type="primary" @click="handleAdd"></a-button>
</div>
<div>
<a-button type="primary" @click="getList"></a-button>
<a-button style="margin-left: 8px" @click="init"></a-button>
<!-- <tableSort @columnChange="handleColumnChange" :columns="columns" :columnsAll="columnsAll"></tableSort> -->
</div>
</div>
<vxe-grid
:data="loadData"
stripe
resizable
round
ref="table"
border
:columns="columns"
:loading="loading"
:height="tableHeight"
empty-text="没有更多数据了!">
<template #caozuo="{ row }">
<a-icon type="form" style="cursor: pointer;" @click="handleEdit(row)" :style="{ color: '#13c2c2' }" />
<a-popconfirm
title="请确认删除?"
ok-text="是"
cancel-text="否"
@confirm="e => {
confirm(e, row)
}
">
<a-icon type="delete" style="margin: 0 8px;" :style="{ color: '#13c2c2' }" />
</a-popconfirm>
</template>
<template #scope="{ row }">
<span v-if="row.scope == 1"></span>
</template>
<template #pager>
<vxe-pager
:current-page="queryParam.PageNo"
:page-size="queryParam.pageSize"
:total="queryParam.totalCount"
:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
@page-change="tablePaginationChange">
</vxe-pager>
</template>
</vxe-grid>
<a-modal width="800px" @ok="handleOk" v-model="visible" :title="title" @cancel="visible = false">
<a-row style="margin-bottom: 15px;">
<span style="display: inline-block;width: 120px;">标签名称</span><a-input
style="display: inline-block;width: 80%;"
v-model="labelData.name"
size="small"></a-input>
</a-row>
<a-row>
<span style="display: inline-block;width: 115px;">标签使用范围</span> <a-select
size="small"
style="display: inline-block;width: 80%;"
v-model="labelData.scope">
<a-select-option :value="1">
舱位
</a-select-option>
</a-select>
</a-row>
<a-row>
<span style="display: inline-block;width: 120px;">选择颜色</span>
<a-input style="display: inline-block;width: 10%;margin-top: 15px;" type="color" v-model="labelData.color"></a-input>
</a-row>
</a-modal>
</a-card>
</div>
</template>
<script>
import {
BookingLabelPageList,
BookingLabelDelete,
ImportSlotFromFile,
CreateBooking0rder,
slotSendEmail,
BookingLabelSave
} from '@/api/modular/main/CompanySiteaccount'
import { mapGetters } from 'vuex'
import { DjyCustomerSuggest, GetSysUserPage, DjyCustomerContacts } from '@/api/modular/main/BookingLedger'
import columnSetting from '@/components/tableColumnSetting'
import tableSort from '@/components/tableSort'
import generation from '@/components/generation'
export default {
components: {
columnSetting, tableSort, generation
},
computed: {
...mapGetters([
'ctnallList'
])
},
data() {
return {
TypeData: [],
// /
advanced: false,
tableHeight: 0,
expandConfig: {
labelField: 'sloT_BOOKING_NO'
},
labelData: {
scope: 1
},
loading: false,
setVisible: false,
CreateData: {
customerContactId: []
},
visible: false,
UserList: [],
customerByList: [],
title: '',
CustomerList: [],
SlotVisible: false,
userInfoList: [],
setVisible1: false,
fetching: false,
queryParam: {
PageNo: 1,
pageSize: 10,
totalCount: 1
},
bookingServiceItem: [],
formItemLayout: {
labelCol1: { span: 6 },
wrapperCol1: { span: 18 },
labelCol2: { span: 8 },
wrapperCol2: { span: 16 },
labelCol3: { span: 4 },
wrapperCol3: { span: 20 },
labelCol4: { span: 8 },
wrapperCol4: { span: 16 },
labelCol5: { span: 14 },
wrapperCol5: { span: 10 },
labelCol6: { span: 8 },
wrapperCol6: { span: 16 }
},
form: {
STATUS: '1'
},
slotEdit: {},
ColumnsQuery: [],
columns: [
{
title: '标签名称',
align: 'center',
field: 'name'
},
{
title: '标签使用范围',
align: 'center',
field: 'scope',
slots: { default: 'scope' }
},
{
title: '操作',
align: 'center',
field: 'caozuo',
slots: { default: 'caozuo' },
width: 100
}
],
tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' },
// Promise
loadData: []
}
},
created() {
this.tableHeight = document.body.clientHeight - 320
},
mounted() {
this.getList()
},
methods: {
FnTurnD(data) {
let Rdata = ''
this.TypeData.forEach(item => {
if (item.code == data) {
Rdata = item.name
}
})
return Rdata
},
expandVisibleMethod({ row }) {
if (row.bookingSlotSaleInfoList && row.bookingSlotSaleInfoList.length > 0) {
return true
} else {
return false
}
},
customRequest(data) {
this.isUpload = true;
this.percent = 0;
const formData = new FormData()
formData.append('file', data.file)
this.loading = true
ImportSlotFromFile(formData, (percent) => this.setUploadProcess(percent)).then((res) => {
if (res.data.succ) {
this.$message.success('上传成功')
this.getList()
} else {
this.$message.error('上传失败:' + res.data.msg)
}
})
},
checkboxChangeEvent() {
console.log('== 选中,取消选中 ==', this.$refs.table.getCheckboxRecords())
},
toggleAdvanced() {
this.advanced = !this.advanced
},
handledbclick(row) {
},
handleSendAll() {
const select = this.$refs.table.getCheckboxRecords()
const pkIdArr = select.map((item, index) => {
return item.id
})
if (pkIdArr.length == 0) {
this.$message.error('请选择要发送的记录')
return false
}
slotSendEmail(pkIdArr).then(res => {
if (res.data.succ) {
this.$message.success('发送成功')
} else {
this.$message.error(res.data.msg)
}
})
},
tablePaginationChange({ currentPage, pageSize }) {
this.queryParam.PageNo = currentPage
this.queryParam.PageSize = pageSize
this.queryParam.pageNo = currentPage
this.queryParam.pageSize = pageSize
this.getList()
},
handleOpenSlot(row) {
this.$refs.generation.init(row)
},
init() {
this.form = {}
},
handlePageChange({ currentPage, pageSize }) {
this.queryParam.PageNo = currentPage
this.queryParam.pageSize = pageSize
this.getList()
},
SearchCustomer(e) {
DjyCustomerSuggest({ keyword: e, type: 'consignor' }).then(res => {
this.CustomerList = res.data.rows
})
},
ChangeCustomer(e) {
this.customerByList = []
this.CreateData.customerContactId = []
this.CustomerList.forEach(item => {
if (item.id == e) {
this.CreateData.customerName = item.shortName
}
})
this.fetching = true
DjyCustomerContacts({ customerId: e }).then(res => {
if (res.success) {
this.customerByList = res.data
} else {
this.$message.error(res.message)
}
this.fetching = false
})
},
getList() {
this.loading = true
this.form.pageSize = this.queryParam.pageSize
this.form.PageNo = this.queryParam.PageNo
BookingLabelPageList(this.form).then(res => {
if (res.success) {
this.loadData = res.data.items
this.queryParam.PageNo = res.data.pageNo
this.queryParam.pageSize = res.data.pageSize
this.queryParam.totalCount = res.data.totalCount
} else {
this.$message.error(res.message)
}
this.loading = false
})
},
switchingDate() {
const obj = JSON.parse(JSON.stringify(this.queryParam))
return obj
},
confirm(e, data) {
this.DjyWebsiteAccountConfigDeleteTenant(data)
},
DjyWebsiteAccountConfigDeleteTenant(record) {
BookingLabelDelete([record.id]).then(res => {
if (res.success) {
this.$message.success('删除成功')
this.getList()
} else {
this.$message.error(`删除失败,${res.message}`)
}
})
},
ChangeCustomerList(e) {
this.customerByList.forEach(item => {
if (item.id == e) {
this.CreateData.customerContactName = item.name
}
})
},
handleOk1() {
const projectList = []
this.bookingServiceItem.forEach(item => {
if (item.isYield) {
projectList.push(item.serviceProjectCode)
}
})
const ApiData = {
slotId: this.slotEdit.id,
projectList,
...this.CreateData
}
console.log(ApiData)
CreateBooking0rder(ApiData).then(res => {
if (res.success) {
this.SlotVisible = false
this.$message.success(res.message)
} else {
this.$message.error(res.message)
}
})
},
SearchUser(e) {
console.log(e)
// consignor
// booking_agent
GetSysUserPage({ name: e }).then(res => {
this.UserList = res.data
})
},
ChangeUser(e, Tname) {
this.UserList.forEach(item => {
if (item.id == e) {
console.log(e)
this.CreateData[Tname] = item.name
}
})
},
handleOk() {
if (!this.labelData.name) {
this.$message.error('请输入标签名称')
return false
}
const data = {
...this.labelData
}
BookingLabelSave(data).then(res => {
if (res.success) {
this.$message.success('操作成功')
this.getList()
this.visible = false
} else {
this.$message.error(res.message)
}
})
},
handleAdd() {
this.visible = true
this.title = '新增标签'
this.labelData = {
scope: 1
}
},
handleChangeUser(val) {
const arr = []
this.customerByList.forEach(item => {
val.forEach(ite => {
if (item.id == ite) {
arr.push(item)
}
})
})
this.userInfoList = arr
},
handleEdit(row) {
this.visible = true
this.labelData = JSON.parse(JSON.stringify(row))
this.title = '编辑标签'
}
}
}
</script>
<style lang="less" scoped>
@import url('../BookingLedger/detail/style/rightContent.less');
.table-operator {
margin-bottom: 18px;
}
button {
margin-right: 8px;
}
.Open {}
.Close {
height: 45px;
overflow: hidden;
}
.vxe-table--render-default .vxe-body--row.row--stripe {
background: #f5f9fe;
}
.ant-card-body {
padding-top: 10px;
}
.nav-box {
padding: 0 10px;
.nav {
display: inline-block;
margin-right: 8px;
cursor: pointer;
border: 1px solid rgba(255, 255, 255, 0);
padding: 0 10px;
height: 28px;
line-height: 26px;
.iconfont {
margin-right: 6px;
}
&:hover {
border: 1px solid rgba(255, 255, 255, 0);
border-radius: 4px;
}
&:nth-of-type(1) {
.iconfont {
color: #1d8aff;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(2) {
.iconfont {
color: #865ef8;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(3) {
.iconfont {
color: #ff9702;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(4) {
.iconfont {
color: #1d8aff;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(5) {
.iconfont {
color: #ff1062;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(6) {
.iconfont {
color: #1ebeca;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(7) {
.iconfont {
color: #82c93d;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
&:nth-of-type(8) {
.iconfont {
color: #1d8aff;
}
&:hover {
background: #fff;
box-shadow: 0 0 10px #eee;
}
}
}
}
/deep/ .ant-form-item {
margin-bottom: 0px !important;
}
</style>

@ -16,11 +16,13 @@
</div> </div>
<div class="content"> <div class="content">
<div class="row"> <div class="row">
<img src="../../../../assets/icons/u1041.svg" alt="">船名/航次{{ item.fromShip.vessel }} / {{ item.fromShip.voyNo }} <img src="../../../../assets/icons/u1041.svg" alt="">船名/航次{{ item.fromShip.vessel }} / {{
item.fromShip.voyNo }}
</div> </div>
<div class="row"> <div class="row">
<img src="../../../../assets/icons/u1043.svg" alt="">{{ item.fromShip.port }} <img src="../../../../assets/icons/u1043.svg" alt="">{{ item.fromShip.port }}
<img src="../../../../assets/icons/u1044.svg" style="margin-left: 20px;" alt="">ETD{{ item.fromShip.etd }} <img src="../../../../assets/icons/u1044.svg" style="margin-left: 20px;" alt="">ETD{{ item.fromShip.etd
}}
</div> </div>
<div class="row"> <div class="row">
<img src="../../../../assets/icons/u1046.svg" alt="">{{ item.fromShip.terminal }} <img src="../../../../assets/icons/u1046.svg" alt="">{{ item.fromShip.terminal }}
@ -391,6 +393,51 @@
<a-modal title="最后期限" width="600px" @ok="handleSaveDate" @cancel="dateFlag = false" v-model="dateFlag"> <a-modal title="最后期限" width="600px" @ok="handleSaveDate" @cancel="dateFlag = false" v-model="dateFlag">
<a-date-picker show-time v-model="manualDeadLineDate" /> <a-date-picker show-time v-model="manualDeadLineDate" />
</a-modal> </a-modal>
<a-modal title="发送通知" :maskClosable="false" width="1200px" @cancel="sendFlag = false" v-model="sendFlag">
<a-spin :spinning="sendLoad">
<div style="display: flex;align-content: center;">
<div class="send-left" style="margin-right: 30px;">
<a-radio-group @change="handleChangeRadio" v-model="templateId">
<div style="margin-bottom: 10px;" v-for="(item, index) in tempList" :key="index">
<a-radio :value="item.id">
{{ item.displayName }}
</a-radio>
</div>
</a-radio-group>
</div>
<div class="right">
<div class="top" style="color: black">
<span style="font-weight: bold;margin-right: 20px">原船</span>
<span>船名/航次:{{ sendShip.fromShip.vessel }} / {{ sendShip.fromShip.voyNo }}</span>
<span style="margin: 0 10px;">ETD:{{ sendShip.fromShip.etd ? sendShip.fromShip.etd.substring(0, 10) : ''
}}</span>
<span>{{ sendShip.fromShip.terminal }}</span>
</div>
<a-radio-group
@change="handleChangeRadio1"
v-model="toShipPKId"
style="margin-top: 15px"
button-style="solid">
<a-radio-button v-for="(toData, index) in sendShip.toShipList" :key="index" :value="toData.pkId">
<div style="font-size: 13px;line-height: 20px;">新船:{{ index + 1 }}VslCode:{{ toData.vslCode }} String:{{
toData.shipString }}</div>
<div style="font-size: 13px;line-height: 20px;">船名/航次:{{ toData.vessel }} / {{ toData.voyNo }}</div>
<div style="font-size: 13px;line-height: 20px;">{{ toData.terminal }}</div>
<div style="font-size: 13px;line-height: 20px;">ETD:{{ toData.etd ? toData.etd.substring(0, 10) : '' }}
</div>
</a-radio-button>
</a-radio-group>
<div style="font-size: 15px;font-weight: bold;margin-top: 20px;border-bottom: 1px solid rgb(203 198 198);">
预甩通知</div>
<div style="margin-top: 20px;" v-html="sendHtml"></div>
</div>
</div>
</a-spin>
<template slot="footer">
<a-button type="danger" @click="sendFlag = false">取消</a-button>
<a-button type="primary" @click="handleSaveDate"></a-button>
</template>
</a-modal>
</div> </div>
</template> </template>
<script> <script>
@ -413,25 +460,42 @@ import {
SaveDetai1Container, SaveDetai1Container,
PushShareLink, PushShareLink,
GenShareLink, GenShareLink,
GetUserFeedBack GetUserFeedBack,
GetToShipSelect,
GetRollingNominationNoticeReview,
SendRollingNominationNotice
} from '@/api/modular/main/TaskmanageList' } from '@/api/modular/main/TaskmanageList'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { DjyCustomerSuggest, GetSysUserPage, DjyCustomerContacts } from '@/api/modular/main/BookingLedger' import {
DjyCustomerSuggest,
GetSysUserPage,
DjyCustomerContacts,
BookingOrderPrintTemplateWithHistoryList
} from '@/api/modular/main/BookingLedger'
export default { export default {
data() { data() {
return { return {
CustomerList: [], CustomerList: [],
CreateData: {}, CreateData: {},
ctnCode: '', ctnCode: '',
sendFlag: false,
toShipPKId: '',
manualDeadLineDate: '', manualDeadLineDate: '',
templateId: 0,
ctnChangeFlag: false, ctnChangeFlag: false,
UserId: '', UserId: '',
confirmDeadLine: '', confirmDeadLine: '',
dateFlag: false, dateFlag: false,
sendLoad: false,
tempList: [],
fromToList: [], fromToList: [],
selectedRowKeys: [], selectedRowKeys: [],
carrierId: '', carrierId: '',
value: '', value: '',
sendShip: {
fromShip: {},
toShipList: []
},
selectedRowKeysTable: [], selectedRowKeysTable: [],
getloadDetailList: [], getloadDetailList: [],
tableLoad: false, tableLoad: false,
@ -778,6 +842,7 @@ export default {
ctnFlag: false, ctnFlag: false,
userRow: '', userRow: '',
userFlag: false, userFlag: false,
sendHtml: '',
totalCtn: '', totalCtn: '',
rollingPlanList: [], rollingPlanList: [],
nominationId: '', nominationId: '',
@ -847,15 +912,55 @@ export default {
}) })
}, },
handleSendNotice() { handleSendNotice() {
const newList = Array.from(new Set(this.selectedRowKeysTable)) const data = {
console.log(this.selectedRowKeysTable, newList) cateCode: 'rolling_nomination_notice_template',
PushShareLink(newList).then(res => { printType: 20
}
this.sendFlag = true
this.sendLoad = true
const request1 = BookingOrderPrintTemplateWithHistoryList(data);
const request2 = GetToShipSelect({ taskPkId: this.$route.query.taskPKId });
Promise.all([request1, request2])
.then(([res1, res2]) => {
if (res1.success) {
this.tempList = res1.data;
if (res1.data.length > 0) {
this.templateId = res1.data[0].id;
}
} else {
this.$message.error(res1.message);
}
if (res2.data.succ) {
if (res2.data.ext.length > 0) {
this.sendShip = res2.data.ext[0];
if (res2.data.ext[0].toShipList.length > 0) {
this.toShipPKId = res2.data.ext[0].toShipList[0].pkId;
}
} else {
this.sendShip = {};
}
} else {
this.$message.error(res2.data.msg);
}
const data1 = {
taskId: this.$route.query.taskPKId,
templateId: this.templateId,
fromShipPKId: this.sendShip.fromShip.pkId,
toShipPKId: this.toShipPKId
}
GetRollingNominationNoticeReview(data1).then(res => {
this.sendLoad = false;
if (res.data.succ) { if (res.data.succ) {
this.$message.success('操作成功') this.sendHtml = res.data.ext
} else { } else {
this.$message.error(res.data.msg) this.$message.error(res.data.msg)
} }
}) })
})
.catch(error => {
console.error('Error fetching data:', error);
});
}, },
handleRefshPage() { handleRefshPage() {
this.getList() this.getList()
@ -890,26 +995,29 @@ export default {
onSelectChangeTable(selectedRowKeys) { onSelectChangeTable(selectedRowKeys) {
this.selectedRowKeysTable = selectedRowKeys; this.selectedRowKeysTable = selectedRowKeys;
}, },
handleClick(index) {
this.sendShip.toShipList.forEach(item => {
item.active = false
})
this.sendShip.toShipList[index].active = true
this.$forceUpdate()
},
handleSaveDate() { handleSaveDate() {
if (!this.manualDeadLineDate) {
this.$message.warning('请先选择')
return false
}
this.tableLoad = true
const data = { const data = {
dispatchBatchId: this.dateRow.batchId, taskId: this.$route.query.taskPKId,
isRenew: true, templateId: this.templateId,
manualDeadLineDate: this.manualDeadLineDate fromShipPKId: this.sendShip.fromShip.pkId,
toShipPKId: this.toShipPKId
} }
GenShareLink(data).then(res => { this.sendLoad = true
SendRollingNominationNotice(data).then(res => {
if (res.data.succ) { if (res.data.succ) {
this.$message.success('操作成功') this.$message.success('发送成功')
this.dateFlag = false this.sendFlag = false
this.getList()
} else { } else {
this.$message.error(res.data.msg) this.$message.error(res.data.msg)
} }
this.tableLoad = false this.sendLoad = false
}) })
}, },
mergeCells(text, data, key, index) { mergeCells(text, data, key, index) {
@ -1087,6 +1195,42 @@ export default {
this.spinning = false this.spinning = false
}) })
}, },
handleChangeRadio(val) {
const data1 = {
taskId: this.$route.query.taskPKId,
templateId: val.target.value,
fromShipPKId: this.sendShip.fromShip.pkId,
toShipPKId: this.toShipPKId
}
this.sendLoad = true
GetRollingNominationNoticeReview(data1).then(res => {
this.sendLoad = false;
if (res.data.succ) {
this.sendHtml = res.data.ext
} else {
this.$message.error(res.data.msg)
this.sendHtml = ''
}
})
},
handleChangeRadio1(val) {
const data1 = {
taskId: this.$route.query.taskPKId,
templateId: this.templateId,
fromShipPKId: this.sendShip.fromShip.pkId,
toShipPKId: val.target.value
}
this.sendLoad = true
GetRollingNominationNoticeReview(data1).then(res => {
this.sendLoad = false;
if (res.data.succ) {
this.sendHtml = res.data.ext
} else {
this.$message.error(res.data.msg)
this.sendHtml = ''
}
})
},
handleCopy(row) { handleCopy(row) {
this.tableLoad = true this.tableLoad = true
TaskManageRolingWominationGetUrl({ dispatchBatchId: row.batchId }).then(res => { TaskManageRolingWominationGetUrl({ dispatchBatchId: row.batchId }).then(res => {
@ -1249,6 +1393,7 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: 15px; margin-top: 15px;
.box { .box {
.box-title { .box-title {
@ -1280,7 +1425,6 @@ export default {
font-size: 13px; font-size: 13px;
color: black; color: black;
padding: 5px; padding: 5px;
height: 88px;
img { img {
margin-right: 5px; margin-right: 5px;
@ -1291,13 +1435,17 @@ export default {
align-items: center; align-items: center;
margin-bottom: 5px; margin-bottom: 5px;
} }
&.active {
border: 1px solid rgb(45, 45, 218);
}
} }
.middle { .middle {
background: rgba(202, 249, 130, 1); background: rgba(202, 249, 130, 1);
text-align: center; text-align: center;
height: 88px; height: 88px;
min-width:65px; min-width: 65px;
font-size: 18px; font-size: 18px;
margin-top: 31px; margin-top: 31px;
line-height: 88px; line-height: 88px;
@ -1307,7 +1455,7 @@ export default {
background: yellow; background: yellow;
text-align: center; text-align: center;
height: 88px; height: 88px;
min-width:35px; min-width: 35px;
font-size: 18px; font-size: 18px;
margin-top: 31px; margin-top: 31px;
line-height: 88px; line-height: 88px;
@ -1400,4 +1548,13 @@ export default {
color: green; color: green;
} }
} }
.send-left {
border-right: 1px dashed rgb(185, 184, 184);
padding-right: 10px;
}
/deep/ .ant-radio-button-wrapper {
height: auto !important;
}
</style> </style>

@ -3,9 +3,8 @@
title="新增配置" title="新增配置"
:width="1100" :width="1100"
:visible="visible" :visible="visible"
:confirmLoading="confirmLoading"
@ok="handleSubmit"
@cancel="handleCancel" @cancel="handleCancel"
:confirmLoading="confirmLoading"
> >
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form :form="form">
@ -226,6 +225,11 @@
</a-row> </a-row>
</a-form> </a-form>
</a-spin> </a-spin>
<template slot="footer">
<a-button type="danger" @click="handleCancel"></a-button>
<a-button type="primary" @click="handleCopySave"></a-button>
<a-button type="primary" @click="handleSubmit"></a-button>
</template>
</a-modal> </a-modal>
</template> </template>
@ -312,7 +316,96 @@ export default {
this.yardData = res.data this.yardData = res.data
}) })
}, },
handleCopySave() {
const {
form: { validateFields }
} = this
this.confirmLoading = true
validateFields((errors, values) => {
console.log(values)
if (!errors) {
for (const key in values) {
if (typeof values[key] === 'object' && !(values[key] === null)) {
values[key] = JSON.stringify(values[key])
}
}
if (this.portLoadingData.length) {
this.portLoadingData.forEach(item => {
if (item.code == values.portLoadingId) {
values.portLoading = item.enName
}
})
}
if (this.portTransitData.length) {
this.portTransitData.forEach(item => {
if (item.code == values.portTransitId) {
values.portTransit = item.enName
}
})
}
if (this.portDischargeData.length) {
this.portDischargeData.forEach(item => {
if (item.code == values.portDischargeId) {
values.portDischarge = item.enName
}
})
}
if (this.carrierData.length) {
this.carrierData.forEach(item => {
if (item.code == values.carrierid) {
values.carrier = item.cnName
}
})
}
if (this.yardData.length) {
this.yardData.forEach(item => {
if (item.code == values.yardCode) {
values.yard = item.name
}
})
}
DjyVesselInfoServiceAddOrUpdate(values)
.then(res => {
if (res.success) {
this.$message.success('新增成功')
this.confirmLoading = false
this.$emit('ok', values)
this.edit(values)
} else {
this.$message.error(`新增失败,${res.message}`)
}
})
.finally(res => {
this.confirmLoading = false
})
} else {
this.confirmLoading = false
}
})
},
edit(record) {
this.data = record
setTimeout(() => {
this.form.setFieldsValue({
vessel: record.vessel,
voyno: record.voyno,
portTransitId: record.portTransitId,
portDischargeId: record.portDischargeId,
portTransit: record.portTransit,
portDischarge: record.portDischarge,
etd: record.etd,
closingDate: record.closingDate,
eta: record.eta,
yard: record.yard,
ygtETD: record.ygtETD,
yardCode: record.yardCode,
atd: record.atd,
carrierid: record.carrierid,
voynoInside: record.voynoInside,
closeDocTime: record.closeDocTime
})
}, 100)
},
/** /**
* 提交表单 * 提交表单
*/ */

Loading…
Cancel
Save