|
|
|
@ -155,8 +155,8 @@
|
|
|
|
|
</a-form-item>
|
|
|
|
|
</a-col>
|
|
|
|
|
<a-col :span="4">
|
|
|
|
|
<a-form-item label="箱型箱量">
|
|
|
|
|
<a-select mode="multiple" allowClear v-model="form.ctN_STAT" style="width: 100%" placeholder="请选择箱型箱量">
|
|
|
|
|
<a-form-item label="箱型">
|
|
|
|
|
<a-select mode="multiple" allowClear v-model="form.ctN_STAT" style="width: 100%" placeholder="请选择箱型">
|
|
|
|
|
<a-select-option v-for="(item, index) in ctnallList" :key="index" :value="item.code">{{ item.name
|
|
|
|
|
}}</a-select-option>
|
|
|
|
|
</a-select>
|
|
|
|
@ -164,12 +164,7 @@
|
|
|
|
|
</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 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>
|
|
|
|
@ -184,16 +179,18 @@
|
|
|
|
|
<div style="margin-bottom: 10px;display: flex;justify-content: space-between;">
|
|
|
|
|
<div>
|
|
|
|
|
<a-button type="primary" @click="handleAdd">新增</a-button>
|
|
|
|
|
<a-button type="danger" @click="handleDeleteAll">作废</a-button>
|
|
|
|
|
<a-button type="primary" style="margin-left: 50px;" @click="handleLabel">分配标签</a-button>
|
|
|
|
|
<a-upload
|
|
|
|
|
:customRequest="customRequest"
|
|
|
|
|
:multiple="false"
|
|
|
|
|
style="margin-left: 50px;"
|
|
|
|
|
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
|
|
|
|
:showUploadList="false"
|
|
|
|
|
name="file">
|
|
|
|
|
<a-button type="primary">导入</a-button>
|
|
|
|
|
</a-upload>
|
|
|
|
|
<a-button type="danger">作废</a-button>
|
|
|
|
|
<a-button type="primary" style="margin-left: 100px;" @click="handleLabel">分配标签</a-button>
|
|
|
|
|
<a-button type="danger" @click="handleSuport" :loading="loadingExport">导出</a-button>
|
|
|
|
|
<!-- <a-button type="primary" @click="handleSendAll">批量发送邮件</a-button> -->
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
@ -244,6 +241,24 @@
|
|
|
|
|
<template #eta="{ row }">
|
|
|
|
|
<span>{{ row.eta ? row.eta.substring(0, 10) : '' }}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template #remark="{ row }">
|
|
|
|
|
<a-spin :spinning="row.dzmarkLoading">
|
|
|
|
|
<div style="display: flex; align-items: center">
|
|
|
|
|
<a-input
|
|
|
|
|
@blur="getBlurMark(row, 'isRemark')"
|
|
|
|
|
@focus="getFocusMark(row, 'isRemark')"
|
|
|
|
|
style="margin-top: 0px"
|
|
|
|
|
v-model="row.remark">
|
|
|
|
|
</a-input>
|
|
|
|
|
<a-icon
|
|
|
|
|
v-show="row.isRemark"
|
|
|
|
|
style="cursor: pointer; margin-left: 5px; color: #36cfc9"
|
|
|
|
|
@mousedown.native="handleSaveMark(row, 1)"
|
|
|
|
|
type="check-circle"
|
|
|
|
|
theme="filled" />
|
|
|
|
|
</div>
|
|
|
|
|
</a-spin>
|
|
|
|
|
</template>
|
|
|
|
|
<template #iS_CANCELLATION="{ row }">
|
|
|
|
|
<a-icon
|
|
|
|
|
type="bulb"
|
|
|
|
@ -272,12 +287,7 @@
|
|
|
|
|
</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 mode="multiple" style="width: 80%" :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>
|
|
|
|
@ -295,7 +305,9 @@ import {
|
|
|
|
|
CreateBooking0rder,
|
|
|
|
|
slotSendEmail,
|
|
|
|
|
BookingLabelList,
|
|
|
|
|
BookingLabelBind
|
|
|
|
|
BookingLabelBind,
|
|
|
|
|
SaveDataInList,
|
|
|
|
|
PrintOrder
|
|
|
|
|
} from '@/api/modular/main/CompanySiteaccount'
|
|
|
|
|
import { mapGetters } from 'vuex'
|
|
|
|
|
import {
|
|
|
|
@ -327,6 +339,7 @@ export default {
|
|
|
|
|
},
|
|
|
|
|
loading: false,
|
|
|
|
|
labelList: [],
|
|
|
|
|
loadingExport: false,
|
|
|
|
|
setVisible: false,
|
|
|
|
|
labelIdArray: [],
|
|
|
|
|
CreateData: {
|
|
|
|
@ -421,7 +434,6 @@ export default {
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '100',
|
|
|
|
|
field: 'etd',
|
|
|
|
|
sortable: true,
|
|
|
|
|
slots: { default: 'etd' }
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -429,7 +441,6 @@ export default {
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '100',
|
|
|
|
|
field: 'eta',
|
|
|
|
|
sortable: true,
|
|
|
|
|
slots: { default: 'eta' }
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -482,13 +493,13 @@ export default {
|
|
|
|
|
field: 'salE_TIME'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '装货地',
|
|
|
|
|
title: '收货地',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '180',
|
|
|
|
|
field: 'placereceipt'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '收货地',
|
|
|
|
|
title: '交货地',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '180',
|
|
|
|
|
field: 'placedelivery'
|
|
|
|
@ -505,6 +516,12 @@ export default {
|
|
|
|
|
width: '180',
|
|
|
|
|
field: 'portdischarge'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '卸货港国家',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '180',
|
|
|
|
|
field: 'portdischargE_COUNTRY'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '箱型箱量',
|
|
|
|
|
align: 'center',
|
|
|
|
@ -521,21 +538,18 @@ export default {
|
|
|
|
|
title: '样单截止时间',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '150',
|
|
|
|
|
sortable: true,
|
|
|
|
|
field: 'sI_CUT_DATE'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: 'VGM截止时间',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '150',
|
|
|
|
|
sortable: true,
|
|
|
|
|
field: 'vgM_SUBMISSION_CUT_DATE'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '截港时间',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '150',
|
|
|
|
|
sortable: true,
|
|
|
|
|
field: 'cY_CUT_DATE'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -556,17 +570,9 @@ export default {
|
|
|
|
|
width: '100',
|
|
|
|
|
field: 'lanename'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '重量(KGS)',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '120',
|
|
|
|
|
sortable: true,
|
|
|
|
|
field: 'WEIGHKGS'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '创建日期',
|
|
|
|
|
align: 'center',
|
|
|
|
|
sortable: true,
|
|
|
|
|
width: '150',
|
|
|
|
|
field: 'createdTime'
|
|
|
|
|
},
|
|
|
|
@ -580,7 +586,6 @@ export default {
|
|
|
|
|
title: '更新日期',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '150',
|
|
|
|
|
sortable: true,
|
|
|
|
|
field: 'updatedTime'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -653,7 +658,8 @@ export default {
|
|
|
|
|
title: '备注',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '100',
|
|
|
|
|
field: 'remark'
|
|
|
|
|
field: 'remark',
|
|
|
|
|
slots: { default: 'remark' }
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '计费时间',
|
|
|
|
@ -671,7 +677,7 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
],
|
|
|
|
|
columnsAll: [
|
|
|
|
|
columnsAll: [
|
|
|
|
|
{
|
|
|
|
|
type: 'checkbox',
|
|
|
|
|
width: 60,
|
|
|
|
@ -726,7 +732,6 @@ export default {
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '100',
|
|
|
|
|
field: 'etd',
|
|
|
|
|
sortable: true,
|
|
|
|
|
slots: { default: 'etd' }
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -734,7 +739,6 @@ export default {
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '100',
|
|
|
|
|
field: 'eta',
|
|
|
|
|
sortable: true,
|
|
|
|
|
slots: { default: 'eta' }
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -787,13 +791,13 @@ export default {
|
|
|
|
|
field: 'salE_TIME'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '装货地',
|
|
|
|
|
title: '收货地',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '180',
|
|
|
|
|
field: 'placereceipt'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '收货地',
|
|
|
|
|
title: '交货地',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '180',
|
|
|
|
|
field: 'placedelivery'
|
|
|
|
@ -810,6 +814,12 @@ export default {
|
|
|
|
|
width: '180',
|
|
|
|
|
field: 'portdischarge'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '卸货港国家',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '180',
|
|
|
|
|
field: 'portdischargE_COUNTRY'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '箱型箱量',
|
|
|
|
|
align: 'center',
|
|
|
|
@ -826,21 +836,18 @@ export default {
|
|
|
|
|
title: '样单截止时间',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '150',
|
|
|
|
|
sortable: true,
|
|
|
|
|
field: 'sI_CUT_DATE'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: 'VGM截止时间',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '150',
|
|
|
|
|
sortable: true,
|
|
|
|
|
field: 'vgM_SUBMISSION_CUT_DATE'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '截港时间',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '150',
|
|
|
|
|
sortable: true,
|
|
|
|
|
field: 'cY_CUT_DATE'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -861,17 +868,9 @@ export default {
|
|
|
|
|
width: '100',
|
|
|
|
|
field: 'lanename'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '重量(KGS)',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '120',
|
|
|
|
|
sortable: true,
|
|
|
|
|
field: 'WEIGHKGS'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '创建日期',
|
|
|
|
|
align: 'center',
|
|
|
|
|
sortable: true,
|
|
|
|
|
width: '150',
|
|
|
|
|
field: 'createdTime'
|
|
|
|
|
},
|
|
|
|
@ -885,7 +884,6 @@ export default {
|
|
|
|
|
title: '更新日期',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '150',
|
|
|
|
|
sortable: true,
|
|
|
|
|
field: 'updatedTime'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
@ -958,7 +956,8 @@ export default {
|
|
|
|
|
title: '备注',
|
|
|
|
|
align: 'center',
|
|
|
|
|
width: '100',
|
|
|
|
|
field: 'remark'
|
|
|
|
|
field: 'remark',
|
|
|
|
|
slots: { default: 'remark' }
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title: '计费时间',
|
|
|
|
@ -995,8 +994,8 @@ export default {
|
|
|
|
|
mounted() {
|
|
|
|
|
this.getConfigStart()
|
|
|
|
|
BookingLabelList({ scope: 1 }).then(res => {
|
|
|
|
|
this.labelList = res.data
|
|
|
|
|
})
|
|
|
|
|
this.labelList = res.data
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
FnTurnD(data) {
|
|
|
|
@ -1008,6 +1007,23 @@ export default {
|
|
|
|
|
})
|
|
|
|
|
return Rdata
|
|
|
|
|
},
|
|
|
|
|
handleSuport() {
|
|
|
|
|
if (this.form.ctN_STAT) {
|
|
|
|
|
this.form.ctN_STAT = this.form.ctN_STAT.join(',')
|
|
|
|
|
}
|
|
|
|
|
this.loadingExport = true
|
|
|
|
|
PrintOrder(this.form).then(res => {
|
|
|
|
|
if (res.success) {
|
|
|
|
|
window.open(
|
|
|
|
|
` ${process.env.VUE_APP_API_BASE_URL}/BookingOrder/downloadPrint?filename=${res.data}`,
|
|
|
|
|
'_blank'
|
|
|
|
|
)
|
|
|
|
|
} else {
|
|
|
|
|
this.$message.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
this.loadingExport = false
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
expandVisibleMethod({ row }) {
|
|
|
|
|
if (row.bookingSlotSaleInfoList && row.bookingSlotSaleInfoList.length > 0) {
|
|
|
|
|
return true
|
|
|
|
@ -1041,12 +1057,26 @@ export default {
|
|
|
|
|
formData.append('file', data.file)
|
|
|
|
|
this.loading = true
|
|
|
|
|
ImportSlotFromFile(formData, (percent) => this.setUploadProcess(percent)).then((res) => {
|
|
|
|
|
if (res.data.succ) {
|
|
|
|
|
this.$message.success('上传成功')
|
|
|
|
|
this.$notification.open({
|
|
|
|
|
message: '批量导入',
|
|
|
|
|
description: (
|
|
|
|
|
<div>
|
|
|
|
|
{res.data.ext.map((item) => {
|
|
|
|
|
if (item.isSuccess) {
|
|
|
|
|
return <div>{item.slotBookingNo} 成功 </div>
|
|
|
|
|
} else {
|
|
|
|
|
return (
|
|
|
|
|
<div style={{ color: 'red' }} >
|
|
|
|
|
{item.slotBookingNo} 失败 {item.failReason}
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
})}
|
|
|
|
|
</div>
|
|
|
|
|
),
|
|
|
|
|
duration: 5
|
|
|
|
|
})
|
|
|
|
|
this.getList()
|
|
|
|
|
} else {
|
|
|
|
|
this.$message.error('上传失败:' + res.data.msg)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
checkboxChangeEvent() {
|
|
|
|
@ -1063,7 +1093,7 @@ export default {
|
|
|
|
|
const pkIdArr = select.map((item, index) => {
|
|
|
|
|
return item.id
|
|
|
|
|
})
|
|
|
|
|
if (pkIdArr.length == 0) {
|
|
|
|
|
if (pkIdArr.length === 0) {
|
|
|
|
|
this.$message.error('请选择要发送的记录')
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
@ -1075,26 +1105,61 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
handleDeleteAll() {
|
|
|
|
|
const select = this.$refs.table.getCheckboxRecords()
|
|
|
|
|
const pkIdArr = select.map((item, index) => {
|
|
|
|
|
return item.id
|
|
|
|
|
})
|
|
|
|
|
if (pkIdArr.length === 0) {
|
|
|
|
|
this.$message.error('请选择要删除的记录')
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
BookingSlotDelete(pkIdArr.join(',')).then(res => {
|
|
|
|
|
if (res.success) {
|
|
|
|
|
this.$message.success('删除成功')
|
|
|
|
|
this.getList()
|
|
|
|
|
} else {
|
|
|
|
|
this.$message.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
spanMethod({ row, _rowIndex, column, visibleData }) {
|
|
|
|
|
const arr = ['salE_TIME', 'sellinG_PRICE', 'goodsname', 'shipper', 'sale', 'custservice', 'customername']
|
|
|
|
|
const fields = [];
|
|
|
|
|
const cellValue = row[column.property];
|
|
|
|
|
if ((!arr.includes(column.property)) || column.type === 'checkbox' || column.field === 'caozuo') {
|
|
|
|
|
const prevRow = visibleData[_rowIndex - 1];
|
|
|
|
|
let nextRow = visibleData[_rowIndex + 1];
|
|
|
|
|
if (prevRow && prevRow.id === row.id) {
|
|
|
|
|
return { rowspan: 0, colspan: 0 };
|
|
|
|
|
return { rowspan: 0, colspan: 0 };
|
|
|
|
|
} else {
|
|
|
|
|
let countRowspan = 1;
|
|
|
|
|
while (nextRow && nextRow.id === row.id) {
|
|
|
|
|
nextRow = visibleData[++countRowspan + _rowIndex];
|
|
|
|
|
}
|
|
|
|
|
if (countRowspan > 1) {
|
|
|
|
|
return { rowspan: countRowspan, colspan: 1 };
|
|
|
|
|
return { rowspan: countRowspan, colspan: 1 };
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
handleSaveMark(row, type) {
|
|
|
|
|
const data = {
|
|
|
|
|
slotBase: {
|
|
|
|
|
Id: row.id
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (type === 1) {
|
|
|
|
|
row.dzmarkLoading = true
|
|
|
|
|
data.slotBase.Remark = row.remark
|
|
|
|
|
}
|
|
|
|
|
SaveDataInList(data).then((res) => {
|
|
|
|
|
if (res.success) {
|
|
|
|
|
this.$message.success('修改成功')
|
|
|
|
|
} else {
|
|
|
|
|
this.$message.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
row.dzmarkLoading = false
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
handleOpenSlot(row) {
|
|
|
|
|
this.$refs.generation.init(row)
|
|
|
|
|
},
|
|
|
|
@ -1121,6 +1186,7 @@ export default {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
this.visible = true
|
|
|
|
|
this.labelIdArray = []
|
|
|
|
|
this.labelLoad = true
|
|
|
|
|
BookingLabelList({ scope: 1 }).then(res => {
|
|
|
|
|
this.labelList = res.data
|
|
|
|
@ -1168,12 +1234,16 @@ export default {
|
|
|
|
|
arr[i].bookingSlotSaleInfoList.forEach(ite => {
|
|
|
|
|
const data = JSON.parse(JSON.stringify(arr[i]))
|
|
|
|
|
delete data.bookingSlotSaleInfoList
|
|
|
|
|
data.isRemark = true
|
|
|
|
|
data.dzmarkLoading = false
|
|
|
|
|
arr.push({
|
|
|
|
|
...ite, ...data
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
arr.splice(i, 1)
|
|
|
|
|
}
|
|
|
|
|
arr[i].isRemark = true
|
|
|
|
|
arr[i].dzmarkLoading = false
|
|
|
|
|
}
|
|
|
|
|
this.loadData = arr
|
|
|
|
|
console.log(arr)
|
|
|
|
@ -1194,7 +1264,7 @@ export default {
|
|
|
|
|
this.DjyWebsiteAccountConfigDeleteTenant(data)
|
|
|
|
|
},
|
|
|
|
|
DjyWebsiteAccountConfigDeleteTenant(record) {
|
|
|
|
|
BookingSlotDelete(record).then(res => {
|
|
|
|
|
BookingSlotDelete(record.id).then(res => {
|
|
|
|
|
if (res.success) {
|
|
|
|
|
this.$message.success('删除成功')
|
|
|
|
|
this.getList()
|
|
|
|
@ -1210,6 +1280,12 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
getFocusMark(row, file) {
|
|
|
|
|
row[file] = true
|
|
|
|
|
},
|
|
|
|
|
getBlurMark(row, file) {
|
|
|
|
|
row[file] = false
|
|
|
|
|
},
|
|
|
|
|
handleOk1() {
|
|
|
|
|
const projectList = []
|
|
|
|
|
this.bookingServiceItem.forEach(item => {
|
|
|
|
|