|
|
|
@ -10,17 +10,12 @@
|
|
|
|
|
<span class="iconfont icon-shujuyingshe"></span>
|
|
|
|
|
合票
|
|
|
|
|
</a-button>
|
|
|
|
|
<a-upload
|
|
|
|
|
:customRequest="customRequest"
|
|
|
|
|
:multiple="false"
|
|
|
|
|
<a-upload :customRequest="customRequest" :multiple="false"
|
|
|
|
|
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
|
|
|
|
:showUploadList="false"
|
|
|
|
|
name="file"
|
|
|
|
|
>
|
|
|
|
|
:showUploadList="false" name="file">
|
|
|
|
|
<a-button size="mini" type="link">
|
|
|
|
|
<span class="iconfont icon-a-17Fdaoru"></span>
|
|
|
|
|
导入</a-button
|
|
|
|
|
>
|
|
|
|
|
导入</a-button>
|
|
|
|
|
</a-upload>
|
|
|
|
|
<a-button type="link" @click="handleSuport" :loading="loadingExport" size="mini">
|
|
|
|
|
<span class="iconfont icon-jiantouxia"></span>
|
|
|
|
@ -36,12 +31,7 @@
|
|
|
|
|
<span class="iconfont icon-jiahao2fill"></span>
|
|
|
|
|
新增
|
|
|
|
|
</a-button>
|
|
|
|
|
<a-popconfirm
|
|
|
|
|
title="确定删除吗?"
|
|
|
|
|
ok-text="确定"
|
|
|
|
|
cancel-text="取消"
|
|
|
|
|
@confirm="handleDeleteAll"
|
|
|
|
|
>
|
|
|
|
|
<a-popconfirm title="确定删除吗?" ok-text="确定" cancel-text="取消" @confirm="handleDeleteAll">
|
|
|
|
|
<a-button type="link" size="mini">
|
|
|
|
|
<span class="iconfont icon-shanchu2"></span>
|
|
|
|
|
删除
|
|
|
|
@ -67,102 +57,67 @@
|
|
|
|
|
<span>{{ record.shipRateTotalCurrency }} {{ record.shipRateTotalAmount }}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-if="column.dataIndex == 'iS_CANCELLATION'">
|
|
|
|
|
<BulbOutlined
|
|
|
|
|
v-if="record.iS_CANCELLATION"
|
|
|
|
|
style="color: red; font-size: 16px"
|
|
|
|
|
:title="record.cancellatioN_DATE"
|
|
|
|
|
/>
|
|
|
|
|
<BulbOutlined v-if="record.iS_CANCELLATION" style="color: red; font-size: 16px"
|
|
|
|
|
:title="record.cancellatioN_DATE" />
|
|
|
|
|
</template>
|
|
|
|
|
<template v-if="column.dataIndex == 'isRecvBC'">
|
|
|
|
|
<BulbFilled
|
|
|
|
|
style="color: green; font-size: 16px"
|
|
|
|
|
:title="record.lstRecvBCDate"
|
|
|
|
|
v-if="record.isRecvBC"
|
|
|
|
|
/>
|
|
|
|
|
<BulbFilled style="color: green; font-size: 16px" :title="record.lstRecvBCDate" v-if="record.isRecvBC" />
|
|
|
|
|
</template>
|
|
|
|
|
<template v-if="column.dataIndex == 'labelList'">
|
|
|
|
|
<div @click="handleLabelBind(record)" style="min-width: 200px; min-height: 15px">
|
|
|
|
|
<a-tag
|
|
|
|
|
style="color: black !important; font-weight: bold; cursor: pointer"
|
|
|
|
|
:color="item.color"
|
|
|
|
|
@click="handleLabelBind(record)"
|
|
|
|
|
v-for="(item, index) in record.labelList"
|
|
|
|
|
:key="index"
|
|
|
|
|
>{{ item.name }}</a-tag
|
|
|
|
|
>
|
|
|
|
|
<a-tag style="color: black !important; font-weight: bold; cursor: pointer" :color="item.color"
|
|
|
|
|
@click="handleLabelBind(record)" v-for="(item, index) in record.labelList" :key="index">{{ item.name
|
|
|
|
|
}}</a-tag>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-if="column.dataIndex == 'isRecvBKCancel'">
|
|
|
|
|
<BulbFilled
|
|
|
|
|
style="color: red; font-size: 16px"
|
|
|
|
|
:title="record.lstRecvBCDate"
|
|
|
|
|
v-if="record.isRecvBKCancel"
|
|
|
|
|
/>
|
|
|
|
|
<BulbFilled style="color: red; font-size: 16px" :title="record.lstRecvBCDate" v-if="record.isRecvBKCancel" />
|
|
|
|
|
</template>
|
|
|
|
|
<template v-if="column.dataIndex == 'isShipperOwned'">
|
|
|
|
|
<CheckCircleFilled v-if="record.isShipperOwned" style="color: green; font-size: 16px" />
|
|
|
|
|
</template>
|
|
|
|
|
<template v-if="column.key === 'action'">
|
|
|
|
|
<TableAction
|
|
|
|
|
:actions="[
|
|
|
|
|
{
|
|
|
|
|
icon: 'clarity:note-edit-line',
|
|
|
|
|
tooltip: '编辑',
|
|
|
|
|
onClick: () => {
|
|
|
|
|
handleEdit(record)
|
|
|
|
|
},
|
|
|
|
|
<TableAction :actions="[
|
|
|
|
|
{
|
|
|
|
|
icon: 'clarity:note-edit-line',
|
|
|
|
|
tooltip: '编辑',
|
|
|
|
|
onClick: () => {
|
|
|
|
|
handleEdit(record)
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
icon: 'ant-design:delete-outlined',
|
|
|
|
|
tooltip: '删除',
|
|
|
|
|
popConfirm: {
|
|
|
|
|
title: '是否要删除?',
|
|
|
|
|
okText: '是',
|
|
|
|
|
cancelText: '否',
|
|
|
|
|
confirm: handleDelete.bind(null, record),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
icon: 'ant-design:delete-outlined',
|
|
|
|
|
tooltip: '删除',
|
|
|
|
|
popConfirm: {
|
|
|
|
|
title: '是否要删除?',
|
|
|
|
|
okText: '是',
|
|
|
|
|
cancelText: '否',
|
|
|
|
|
confirm: handleDelete.bind(null, record),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
icon: 'ant-design:profile-outlined',
|
|
|
|
|
tooltip: '生成订舱',
|
|
|
|
|
onClick: () => {
|
|
|
|
|
handleOpenSlot(record)
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
icon: 'ant-design:profile-outlined',
|
|
|
|
|
tooltip: '生成订舱',
|
|
|
|
|
onClick: () => {
|
|
|
|
|
handleOpenSlot(record)
|
|
|
|
|
},
|
|
|
|
|
]"
|
|
|
|
|
/>
|
|
|
|
|
},
|
|
|
|
|
]" />
|
|
|
|
|
</template>
|
|
|
|
|
</template>
|
|
|
|
|
</BasicTable>
|
|
|
|
|
<a-modal
|
|
|
|
|
width="800px"
|
|
|
|
|
@ok="handleSubmitLabel"
|
|
|
|
|
:visible="visible"
|
|
|
|
|
title="分配标签"
|
|
|
|
|
@cancel="visible = false"
|
|
|
|
|
>
|
|
|
|
|
<a-modal width="800px" @ok="handleSubmitLabel" :visible="visible" title="分配标签" @cancel="visible = false">
|
|
|
|
|
<a-spin :spinning="labelLoad">
|
|
|
|
|
<div class="content">
|
|
|
|
|
<div
|
|
|
|
|
class="items"
|
|
|
|
|
v-for="(serive, sindex) in labelList"
|
|
|
|
|
:key="sindex"
|
|
|
|
|
@click="handleClickLable(sindex)"
|
|
|
|
|
:class="{ active: serive.isActive }"
|
|
|
|
|
>
|
|
|
|
|
<div class="items" v-for="(serive, sindex) in labelList" :key="sindex" @click="handleClickLable(sindex)"
|
|
|
|
|
:class="{ active: serive.isActive }">
|
|
|
|
|
{{ serive.name }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</a-spin>
|
|
|
|
|
</a-modal>
|
|
|
|
|
<generationModal ref="generation" @register="registerModal"> </generationModal>
|
|
|
|
|
<a-modal
|
|
|
|
|
title="多提单号查询"
|
|
|
|
|
:width="400"
|
|
|
|
|
:visible="moreFlag"
|
|
|
|
|
@ok="moreNumSubmit"
|
|
|
|
|
@cancel="moreFlag = false"
|
|
|
|
|
>
|
|
|
|
|
<a-modal title="多提单号查询" :width="400" :visible="moreFlag" @ok="moreNumSubmit" @cancel="moreFlag = false">
|
|
|
|
|
<div>
|
|
|
|
|
<a-textarea v-model:value="moreNumVal" style="height: 200px" />
|
|
|
|
|
</div>
|
|
|
|
@ -170,315 +125,315 @@
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
<script lang="ts" setup name="舱位台账">
|
|
|
|
|
import { BasicTable, useTable, TableAction } from '/@/components/Table'
|
|
|
|
|
import {
|
|
|
|
|
BookingSlotPage,
|
|
|
|
|
BookingLabelList,
|
|
|
|
|
BookingLabelBind,
|
|
|
|
|
GetMergeList,
|
|
|
|
|
ImportSlotFromFile,
|
|
|
|
|
PrintOrder,
|
|
|
|
|
BookingSlotDelete,
|
|
|
|
|
} from './api'
|
|
|
|
|
import { reactive, ref, h, onMounted } from 'vue'
|
|
|
|
|
import { columns, searchFormSchema, FeeStatus } from './columns'
|
|
|
|
|
import { BulbFilled, CheckCircleFilled, BulbOutlined } from '@ant-design/icons-vue'
|
|
|
|
|
import { useModal } from '/@/components/Modal'
|
|
|
|
|
import generationModal from '../generation/index.vue'
|
|
|
|
|
import { formatParams } from '/@/hooks/web/common'
|
|
|
|
|
import { useGo } from '/@/hooks/web/usePage'
|
|
|
|
|
import { useOptionsStore } from '/@/store/modules/options'
|
|
|
|
|
import { useMessage } from '../../../hooks/web/useMessage'
|
|
|
|
|
const { createMessage } = useMessage()
|
|
|
|
|
const optionsStore = useOptionsStore()
|
|
|
|
|
const go = useGo()
|
|
|
|
|
const queryStr = ref({})
|
|
|
|
|
const [registerModal, { openModal }] = useModal()
|
|
|
|
|
const [
|
|
|
|
|
registerTable,
|
|
|
|
|
{ reload, setLoading, getForm, getSelectRows, setProps, setSelectedRowKeys },
|
|
|
|
|
] = useTable({
|
|
|
|
|
title: '',
|
|
|
|
|
api: async (p) => {
|
|
|
|
|
const res: API.DataResult = await BookingSlotPage(p)
|
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
const arr = res.data
|
|
|
|
|
for (let i = arr.length - 1; i >= 0; i--) {
|
|
|
|
|
if (arr[i].bookingSlotSaleInfoList && arr[i].bookingSlotSaleInfoList.length > 1) {
|
|
|
|
|
arr[i].bookingSlotSaleInfoList.forEach((ite, index) => {
|
|
|
|
|
const data = JSON.parse(JSON.stringify(arr[i]))
|
|
|
|
|
delete data.bookingSlotSaleInfoList
|
|
|
|
|
data.isRemark = true
|
|
|
|
|
data.dzmarkLoading = false
|
|
|
|
|
if (index === 0) {
|
|
|
|
|
data.isSPan = arr[i].bookingSlotSaleInfoList.length
|
|
|
|
|
} else {
|
|
|
|
|
data.isSPan = 0
|
|
|
|
|
}
|
|
|
|
|
arr.push({
|
|
|
|
|
...ite,
|
|
|
|
|
...data,
|
|
|
|
|
})
|
|
|
|
|
import { BasicTable, useTable, TableAction } from '/@/components/Table'
|
|
|
|
|
import {
|
|
|
|
|
BookingSlotPage,
|
|
|
|
|
BookingLabelList,
|
|
|
|
|
BookingLabelBind,
|
|
|
|
|
GetMergeList,
|
|
|
|
|
ImportSlotFromFile,
|
|
|
|
|
PrintOrder,
|
|
|
|
|
BookingSlotDelete,
|
|
|
|
|
} from './api'
|
|
|
|
|
import { reactive, ref, h, onMounted } from 'vue'
|
|
|
|
|
import { columns, searchFormSchema, FeeStatus } from './columns'
|
|
|
|
|
import { BulbFilled, CheckCircleFilled, BulbOutlined } from '@ant-design/icons-vue'
|
|
|
|
|
import { useModal } from '/@/components/Modal'
|
|
|
|
|
import generationModal from '../generation/index.vue'
|
|
|
|
|
import { formatParams } from '/@/hooks/web/common'
|
|
|
|
|
import { useGo } from '/@/hooks/web/usePage'
|
|
|
|
|
import { useOptionsStore } from '/@/store/modules/options'
|
|
|
|
|
import { useMessage } from '../../../hooks/web/useMessage'
|
|
|
|
|
const { createMessage } = useMessage()
|
|
|
|
|
const optionsStore = useOptionsStore()
|
|
|
|
|
const go = useGo()
|
|
|
|
|
const queryStr = ref({})
|
|
|
|
|
const [registerModal, { openModal }] = useModal()
|
|
|
|
|
const [
|
|
|
|
|
registerTable,
|
|
|
|
|
{ reload, setLoading, getForm, getSelectRows, setProps, setSelectedRowKeys },
|
|
|
|
|
] = useTable({
|
|
|
|
|
title: '',
|
|
|
|
|
api: async (p) => {
|
|
|
|
|
const res: API.DataResult = await BookingSlotPage(p)
|
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
|
const arr = res.data
|
|
|
|
|
for (let i = arr.length - 1; i >= 0; i--) {
|
|
|
|
|
if (arr[i].bookingSlotSaleInfoList && arr[i].bookingSlotSaleInfoList.length > 1) {
|
|
|
|
|
arr[i].bookingSlotSaleInfoList.forEach((ite, index) => {
|
|
|
|
|
const data = JSON.parse(JSON.stringify(arr[i]))
|
|
|
|
|
delete data.bookingSlotSaleInfoList
|
|
|
|
|
data.isRemark = true
|
|
|
|
|
data.dzmarkLoading = false
|
|
|
|
|
if (index === 0) {
|
|
|
|
|
data.isSPan = arr[i].bookingSlotSaleInfoList.length
|
|
|
|
|
} else {
|
|
|
|
|
data.isSPan = 0
|
|
|
|
|
}
|
|
|
|
|
arr.push({
|
|
|
|
|
...ite,
|
|
|
|
|
...data,
|
|
|
|
|
})
|
|
|
|
|
arr.splice(i, 1)
|
|
|
|
|
}
|
|
|
|
|
if (arr[i].bookingSlotSaleInfoList && arr[i].bookingSlotSaleInfoList.length == 1) {
|
|
|
|
|
arr[i].op = arr[i].bookingSlotSaleInfoList[0].op
|
|
|
|
|
arr[i].customerName = arr[i].bookingSlotSaleInfoList[0].customerName
|
|
|
|
|
arr[i].custService = arr[i].bookingSlotSaleInfoList[0].custService
|
|
|
|
|
arr[i].saleTime = arr[i].bookingSlotSaleInfoList[0].saleTime
|
|
|
|
|
arr[i].sellingPrice = arr[i].bookingSlotSaleInfoList[0].sellingPrice
|
|
|
|
|
arr[i].goodsName = arr[i].bookingSlotSaleInfoList[0].goodsName
|
|
|
|
|
arr[i].shipper = arr[i].bookingSlotSaleInfoList[0].shipper
|
|
|
|
|
arr[i].sale = arr[i].bookingSlotSaleInfoList[0].sale
|
|
|
|
|
arr[i].business = arr[i].bookingSlotSaleInfoList[0].business
|
|
|
|
|
arr[i].doc = arr[i].bookingSlotSaleInfoList[0].doc
|
|
|
|
|
}
|
|
|
|
|
arr[i].isRemark = true
|
|
|
|
|
arr[i].dzmarkLoading = false
|
|
|
|
|
})
|
|
|
|
|
arr.splice(i, 1)
|
|
|
|
|
}
|
|
|
|
|
setProps({
|
|
|
|
|
showIndexColumn: false,
|
|
|
|
|
}),
|
|
|
|
|
resolve({ data: arr, total: res.count })
|
|
|
|
|
optionsStore.getOptionsByCode('GetClientPortSelectList')
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
beforeFetch: (p) => {
|
|
|
|
|
queryStr.value = formatParams(p)
|
|
|
|
|
return formatParams(p)
|
|
|
|
|
},
|
|
|
|
|
columns,
|
|
|
|
|
formConfig: {
|
|
|
|
|
labelWidth: 120,
|
|
|
|
|
schemas: searchFormSchema,
|
|
|
|
|
useAdvancedSearch: true,
|
|
|
|
|
},
|
|
|
|
|
isTreeTable: false,
|
|
|
|
|
pagination: true,
|
|
|
|
|
striped: true,
|
|
|
|
|
useSearchForm: true,
|
|
|
|
|
showTableSetting: true,
|
|
|
|
|
bordered: true,
|
|
|
|
|
showIndexColumn: true,
|
|
|
|
|
rowKey: 'id',
|
|
|
|
|
indexColumnProps: {
|
|
|
|
|
width: 60,
|
|
|
|
|
},
|
|
|
|
|
canResize: true,
|
|
|
|
|
resizeHeightOffset: 35,
|
|
|
|
|
immediate: true,
|
|
|
|
|
})
|
|
|
|
|
const generation = ref('')
|
|
|
|
|
function handleOpenSlot(row) {
|
|
|
|
|
openModal(true, { type: 'cabin', row: row })
|
|
|
|
|
}
|
|
|
|
|
function handleRowclick(record, index, event) {
|
|
|
|
|
console.log(record, index, event)
|
|
|
|
|
}
|
|
|
|
|
function handledbclick(record) {
|
|
|
|
|
go(`/CabinManagementDetail?type=edit&id=${record.id}`)
|
|
|
|
|
}
|
|
|
|
|
function handleDelete(row) {
|
|
|
|
|
setLoading(true)
|
|
|
|
|
BookingSlotDelete([row.id]).then((res) => {
|
|
|
|
|
if (res.succeeded) {
|
|
|
|
|
reload()
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error(res.message)
|
|
|
|
|
if (arr[i].bookingSlotSaleInfoList && arr[i].bookingSlotSaleInfoList.length == 1) {
|
|
|
|
|
arr[i].op = arr[i].bookingSlotSaleInfoList[0].op
|
|
|
|
|
arr[i].customerName = arr[i].bookingSlotSaleInfoList[0].customerName
|
|
|
|
|
arr[i].custService = arr[i].bookingSlotSaleInfoList[0].custService
|
|
|
|
|
arr[i].saleTime = arr[i].bookingSlotSaleInfoList[0].saleTime
|
|
|
|
|
arr[i].sellingPrice = arr[i].bookingSlotSaleInfoList[0].sellingPrice
|
|
|
|
|
arr[i].goodsName = arr[i].bookingSlotSaleInfoList[0].goodsName
|
|
|
|
|
arr[i].shipper = arr[i].bookingSlotSaleInfoList[0].shipper
|
|
|
|
|
arr[i].sale = arr[i].bookingSlotSaleInfoList[0].sale
|
|
|
|
|
arr[i].business = arr[i].bookingSlotSaleInfoList[0].business
|
|
|
|
|
arr[i].doc = arr[i].bookingSlotSaleInfoList[0].doc
|
|
|
|
|
}
|
|
|
|
|
arr[i].isRemark = true
|
|
|
|
|
arr[i].dzmarkLoading = false
|
|
|
|
|
}
|
|
|
|
|
setLoading(false)
|
|
|
|
|
setProps({
|
|
|
|
|
showIndexColumn: false,
|
|
|
|
|
}),
|
|
|
|
|
resolve({ data: arr, total: res.count })
|
|
|
|
|
optionsStore.getOptionsByCode('GetClientPortSelectList')
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
const labelIdArray = ref([])
|
|
|
|
|
const labelList = ref([]) as any
|
|
|
|
|
const labelLoad = ref(false)
|
|
|
|
|
const visible = ref(false)
|
|
|
|
|
function handleLabel() {
|
|
|
|
|
const select = getSelectRows()
|
|
|
|
|
const pkIdArr = select.map((item, index) => {
|
|
|
|
|
return item.id
|
|
|
|
|
})
|
|
|
|
|
if (pkIdArr.length === 0) {
|
|
|
|
|
createMessage.error('请选择要分配的数据')
|
|
|
|
|
return false
|
|
|
|
|
},
|
|
|
|
|
beforeFetch: (p) => {
|
|
|
|
|
queryStr.value = formatParams(p)
|
|
|
|
|
return formatParams(p)
|
|
|
|
|
},
|
|
|
|
|
columns,
|
|
|
|
|
formConfig: {
|
|
|
|
|
labelWidth: 120,
|
|
|
|
|
schemas: searchFormSchema,
|
|
|
|
|
useAdvancedSearch: true,
|
|
|
|
|
},
|
|
|
|
|
isTreeTable: false,
|
|
|
|
|
pagination: true,
|
|
|
|
|
striped: true,
|
|
|
|
|
useSearchForm: true,
|
|
|
|
|
showTableSetting: true,
|
|
|
|
|
bordered: true,
|
|
|
|
|
showIndexColumn: true,
|
|
|
|
|
rowKey: 'id',
|
|
|
|
|
indexColumnProps: {
|
|
|
|
|
width: 60,
|
|
|
|
|
},
|
|
|
|
|
canResize: true,
|
|
|
|
|
resizeHeightOffset: 35,
|
|
|
|
|
immediate: true,
|
|
|
|
|
})
|
|
|
|
|
const generation = ref('')
|
|
|
|
|
function handleOpenSlot(row) {
|
|
|
|
|
openModal(true, { type: 'cabin', row: row })
|
|
|
|
|
}
|
|
|
|
|
function handleRowclick(record, index, event) {
|
|
|
|
|
console.log(record, index, event)
|
|
|
|
|
}
|
|
|
|
|
function handledbclick(record) {
|
|
|
|
|
go(`/CabinManagementDetail?type=edit&id=${record.id}`)
|
|
|
|
|
}
|
|
|
|
|
function handleDelete(row) {
|
|
|
|
|
setLoading(true)
|
|
|
|
|
BookingSlotDelete([row.id]).then((res) => {
|
|
|
|
|
if (res.succeeded) {
|
|
|
|
|
reload()
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
visible.value = true
|
|
|
|
|
labelIdArray.value = []
|
|
|
|
|
labelLoad.value = true
|
|
|
|
|
BookingLabelList({ scope: 1 }).then((res) => {
|
|
|
|
|
res.data.forEach((item) => {
|
|
|
|
|
item.isActive = false
|
|
|
|
|
})
|
|
|
|
|
labelList.value = res.data
|
|
|
|
|
labelLoad.value = false
|
|
|
|
|
})
|
|
|
|
|
setLoading(false)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
const labelIdArray = ref([])
|
|
|
|
|
const labelList = ref([]) as any
|
|
|
|
|
const labelLoad = ref(false)
|
|
|
|
|
const visible = ref(false)
|
|
|
|
|
function handleLabel() {
|
|
|
|
|
const select = getSelectRows()
|
|
|
|
|
const pkIdArr = select.map((item, index) => {
|
|
|
|
|
return item.id
|
|
|
|
|
})
|
|
|
|
|
if (pkIdArr.length === 0) {
|
|
|
|
|
createMessage.error('请选择要分配的数据')
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
function handleDeleteAll() {
|
|
|
|
|
const select = getSelectRows()
|
|
|
|
|
const pkIdArr = select.map((item, index) => {
|
|
|
|
|
return item.id
|
|
|
|
|
visible.value = true
|
|
|
|
|
labelIdArray.value = []
|
|
|
|
|
labelLoad.value = true
|
|
|
|
|
BookingLabelList({ scope: 1 }).then((res) => {
|
|
|
|
|
res.data.forEach((item) => {
|
|
|
|
|
item.isActive = false
|
|
|
|
|
})
|
|
|
|
|
if (pkIdArr.length === 0) {
|
|
|
|
|
createMessage.error('请选择要删除的数据')
|
|
|
|
|
return false
|
|
|
|
|
labelList.value = res.data
|
|
|
|
|
labelLoad.value = false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
function handleDeleteAll() {
|
|
|
|
|
const select = getSelectRows()
|
|
|
|
|
const pkIdArr = select.map((item, index) => {
|
|
|
|
|
return item.id
|
|
|
|
|
})
|
|
|
|
|
if (pkIdArr.length === 0) {
|
|
|
|
|
createMessage.error('请选择要删除的数据')
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
setLoading(true)
|
|
|
|
|
BookingSlotDelete(pkIdArr).then((res) => {
|
|
|
|
|
if (res.succeeded) {
|
|
|
|
|
reload()
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
setLoading(true)
|
|
|
|
|
BookingSlotDelete(pkIdArr).then((res) => {
|
|
|
|
|
if (res.succeeded) {
|
|
|
|
|
reload()
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error(res.message)
|
|
|
|
|
setLoading(false)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
const moreNumVal = ref('')
|
|
|
|
|
function moreNumSubmit() {
|
|
|
|
|
let data = ''
|
|
|
|
|
moreNumVal.value
|
|
|
|
|
.replace(/\n|\r/g, ',')
|
|
|
|
|
.split(',')
|
|
|
|
|
.forEach((item) => {
|
|
|
|
|
if (item.replace(/\s*/g, '')) {
|
|
|
|
|
if (data) {
|
|
|
|
|
data = `${data},${item}`
|
|
|
|
|
} else {
|
|
|
|
|
data = item
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
setLoading(false)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
const moreNumVal = ref('')
|
|
|
|
|
function moreNumSubmit() {
|
|
|
|
|
let data = ''
|
|
|
|
|
moreNumVal.value
|
|
|
|
|
.replace(/\n|\r/g, ',')
|
|
|
|
|
.split(',')
|
|
|
|
|
.forEach((item) => {
|
|
|
|
|
if (item.replace(/\s*/g, '')) {
|
|
|
|
|
if (data) {
|
|
|
|
|
data = `${data},${item}`
|
|
|
|
|
} else {
|
|
|
|
|
data = item
|
|
|
|
|
getForm().setFieldsValue({
|
|
|
|
|
slotBookingNo: data,
|
|
|
|
|
})
|
|
|
|
|
moreFlag.value = false
|
|
|
|
|
}
|
|
|
|
|
const moreFlag = ref(false)
|
|
|
|
|
function handleOpenS() {
|
|
|
|
|
moreFlag.value = true
|
|
|
|
|
}
|
|
|
|
|
function handleLabelBind(row) {
|
|
|
|
|
visible.value = true
|
|
|
|
|
labelIdArray.value = []
|
|
|
|
|
labelLoad.value = true
|
|
|
|
|
// setSelectedRowKeys([row.id])
|
|
|
|
|
BookingLabelList({ scope: 1 }).then((res) => {
|
|
|
|
|
res.data.forEach((item) => {
|
|
|
|
|
item.isActive = false
|
|
|
|
|
if (row.labelList) {
|
|
|
|
|
row.labelList.forEach((ite) => {
|
|
|
|
|
if (ite.id === item.id) {
|
|
|
|
|
item.isActive = true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
getForm().setFieldsValue({
|
|
|
|
|
slotBookingNo: data,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
moreFlag.value = false
|
|
|
|
|
}
|
|
|
|
|
const moreFlag = ref(false)
|
|
|
|
|
function handleOpenS() {
|
|
|
|
|
moreFlag.value = true
|
|
|
|
|
}
|
|
|
|
|
function handleLabelBind(row) {
|
|
|
|
|
visible.value = true
|
|
|
|
|
labelIdArray.value = []
|
|
|
|
|
labelLoad.value = true
|
|
|
|
|
// setSelectedRowKeys([row.id])
|
|
|
|
|
BookingLabelList({ scope: 1 }).then((res) => {
|
|
|
|
|
res.data.forEach((item) => {
|
|
|
|
|
item.isActive = false
|
|
|
|
|
if (row.labelList) {
|
|
|
|
|
row.labelList.forEach((ite) => {
|
|
|
|
|
if (ite.id === item.id) {
|
|
|
|
|
item.isActive = true
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
labelList.value = res.data
|
|
|
|
|
labelLoad.value = false
|
|
|
|
|
labelList.value = res.data
|
|
|
|
|
labelLoad.value = false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
function customRequest(data) {
|
|
|
|
|
const formData = new FormData()
|
|
|
|
|
formData.append('file', data.file)
|
|
|
|
|
setLoading(true)
|
|
|
|
|
ImportSlotFromFile(formData)
|
|
|
|
|
.then((res) => {
|
|
|
|
|
reload()
|
|
|
|
|
setLoading(false)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
function customRequest(data) {
|
|
|
|
|
const formData = new FormData()
|
|
|
|
|
formData.append('file', data.file)
|
|
|
|
|
setLoading(true)
|
|
|
|
|
ImportSlotFromFile(formData)
|
|
|
|
|
.then((res) => {
|
|
|
|
|
reload()
|
|
|
|
|
setLoading(false)
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
setLoading(false)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
.catch((err) => {
|
|
|
|
|
setLoading(false)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function handleAdd() {
|
|
|
|
|
go(`/CabinManagementDetail?type=Add`)
|
|
|
|
|
}
|
|
|
|
|
function handleEdit(row) {
|
|
|
|
|
go(`/CabinManagementDetail?type=edit&id=${row.id}`)
|
|
|
|
|
}
|
|
|
|
|
function handleAdd() {
|
|
|
|
|
go(`/CabinManagementDetail?type=Add`)
|
|
|
|
|
}
|
|
|
|
|
function handleEdit(row) {
|
|
|
|
|
go(`/CabinManagementDetail?type=edit&id=${row.id}`)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function handleSubmitLabel() {
|
|
|
|
|
const select = getSelectRows()
|
|
|
|
|
const pkIdArr = select.map((item, index) => {
|
|
|
|
|
return item.id
|
|
|
|
|
})
|
|
|
|
|
const arr = [] as any
|
|
|
|
|
labelList.value.forEach((item) => {
|
|
|
|
|
if (item.isActive) {
|
|
|
|
|
arr.push(item.id)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
const data = {
|
|
|
|
|
labelIdArray: arr,
|
|
|
|
|
businessIdArray: pkIdArr,
|
|
|
|
|
function handleSubmitLabel() {
|
|
|
|
|
const select = getSelectRows()
|
|
|
|
|
const pkIdArr = select.map((item, index) => {
|
|
|
|
|
return item.id
|
|
|
|
|
})
|
|
|
|
|
const arr = [] as any
|
|
|
|
|
labelList.value.forEach((item) => {
|
|
|
|
|
if (item.isActive) {
|
|
|
|
|
arr.push(item.id)
|
|
|
|
|
}
|
|
|
|
|
labelLoad.value = true
|
|
|
|
|
BookingLabelBind(data).then((res) => {
|
|
|
|
|
if (res.succeeded) {
|
|
|
|
|
createMessage.success('分配成功')
|
|
|
|
|
visible.value = false
|
|
|
|
|
reload()
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
labelLoad.value = false
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
const data = {
|
|
|
|
|
labelIdArray: arr,
|
|
|
|
|
businessIdArray: pkIdArr,
|
|
|
|
|
}
|
|
|
|
|
const sumload = ref(false)
|
|
|
|
|
function handleSum() {
|
|
|
|
|
const select = getSelectRows()
|
|
|
|
|
const pkIdArr = select.map((item, index) => {
|
|
|
|
|
return item.id
|
|
|
|
|
})
|
|
|
|
|
if (select.length <= 1) {
|
|
|
|
|
createMessage.warning('至少选择两条数据')
|
|
|
|
|
return false
|
|
|
|
|
labelLoad.value = true
|
|
|
|
|
BookingLabelBind(data).then((res) => {
|
|
|
|
|
if (res.succeeded) {
|
|
|
|
|
createMessage.success('分配成功')
|
|
|
|
|
visible.value = false
|
|
|
|
|
reload()
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
const data = {
|
|
|
|
|
mergeList: pkIdArr,
|
|
|
|
|
labelLoad.value = false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
const sumload = ref(false)
|
|
|
|
|
function handleSum() {
|
|
|
|
|
const select = getSelectRows()
|
|
|
|
|
const pkIdArr = select.map((item, index) => {
|
|
|
|
|
return item.id
|
|
|
|
|
})
|
|
|
|
|
if (select.length <= 1) {
|
|
|
|
|
createMessage.warning('至少选择两条数据')
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
const data = {
|
|
|
|
|
mergeList: pkIdArr,
|
|
|
|
|
}
|
|
|
|
|
sumload.value = true
|
|
|
|
|
GetMergeList(data).then((res) => {
|
|
|
|
|
if (res.succeeded) {
|
|
|
|
|
this.$refs.generation.initSum(res.data)
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
sumload.value = true
|
|
|
|
|
GetMergeList(data).then((res) => {
|
|
|
|
|
sumload.value = false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
function handleClickLable(index) {
|
|
|
|
|
labelList.value[index].isActive = !labelList.value[index].isActive
|
|
|
|
|
}
|
|
|
|
|
const loadingExport = ref(false)
|
|
|
|
|
function handleSuport() {
|
|
|
|
|
loadingExport.value = true
|
|
|
|
|
if (getSelectRows().length > 0) {
|
|
|
|
|
const arr = []
|
|
|
|
|
getSelectRows().forEach((item) => {
|
|
|
|
|
arr.push(item.id)
|
|
|
|
|
})
|
|
|
|
|
queryStr.value.otherQueryCondition = arr.join(',')
|
|
|
|
|
}
|
|
|
|
|
PrintOrder(queryStr.value)
|
|
|
|
|
.then((res) => {
|
|
|
|
|
if (res.succeeded) {
|
|
|
|
|
this.$refs.generation.initSum(res.data)
|
|
|
|
|
const fname = res.data // 下载文件的名字
|
|
|
|
|
const link = document.createElement('a')
|
|
|
|
|
link.href = `http://118.190.144.189:3008/LinkAttach/${res.data}`
|
|
|
|
|
link.setAttribute('download', fname)
|
|
|
|
|
document.body.appendChild(link)
|
|
|
|
|
link.click()
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
sumload.value = false
|
|
|
|
|
loadingExport.value = false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
function handleClickLable(index) {
|
|
|
|
|
labelList.value[index].isActive = !labelList.value[index].isActive
|
|
|
|
|
}
|
|
|
|
|
const loadingExport = ref(false)
|
|
|
|
|
function handleSuport() {
|
|
|
|
|
loadingExport.value = true
|
|
|
|
|
if (getSelectRows().length > 0) {
|
|
|
|
|
const arr = []
|
|
|
|
|
getSelectRows().forEach((item) => {
|
|
|
|
|
arr.push(item.id)
|
|
|
|
|
})
|
|
|
|
|
queryStr.value.otherQueryCondition = arr.join(',')
|
|
|
|
|
}
|
|
|
|
|
PrintOrder(queryStr.value)
|
|
|
|
|
.then((res) => {
|
|
|
|
|
if (res.succeeded) {
|
|
|
|
|
const fname = res.data // 下载文件的名字
|
|
|
|
|
const link = document.createElement('a')
|
|
|
|
|
link.href = `http://118.190.144.189:3008/LinkAttach/${res.data}`
|
|
|
|
|
link.setAttribute('download', fname)
|
|
|
|
|
document.body.appendChild(link)
|
|
|
|
|
link.click()
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
loadingExport.value = false
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {
|
|
|
|
|
loadingExport.value = false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
.catch(() => {
|
|
|
|
|
loadingExport.value = false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
|
@ -490,122 +445,59 @@
|
|
|
|
|
padding-bottom: 0px !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.table-operator {
|
|
|
|
|
margin-bottom: 18px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.Close {
|
|
|
|
|
height: 45px;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.vxe-table--render-default .vxe-body--row.row--stripe {
|
|
|
|
|
background: #f5f9fe;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ant-card-body {
|
|
|
|
|
padding-top: 10px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.inline {
|
|
|
|
|
.items {
|
|
|
|
|
display: inline-block;
|
|
|
|
|
height: 28px;
|
|
|
|
|
line-height: 26px;
|
|
|
|
|
border: 1px dashed #ccc;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
padding: 0 10px;
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
position: relative;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.inline-right {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 6px;
|
|
|
|
|
right: 25px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.change {
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
margin-top: 25px;
|
|
|
|
|
|
|
|
|
|
div {
|
|
|
|
|
width: 120px;
|
|
|
|
|
height: 50px;
|
|
|
|
|
background-color: rgb(247, 249, 250);
|
|
|
|
|
border: 1px solid rgb(247, 249, 250);
|
|
|
|
|
color: rgb(105, 102, 102);
|
|
|
|
|
line-height: 50px;
|
|
|
|
|
.edit {
|
|
|
|
|
width: 17px;
|
|
|
|
|
height: 17px;
|
|
|
|
|
border-radius: 0 3px 0 0;
|
|
|
|
|
background: #c9c9c9;
|
|
|
|
|
display: none;
|
|
|
|
|
position: absolute;
|
|
|
|
|
right: -1px;
|
|
|
|
|
top: -1px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
transition: box-shadow 0.3s, background-color 0.3s;
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
div:hover {
|
|
|
|
|
border: 1px solid #d1cfcf;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.content {
|
|
|
|
|
max-height: 300px;
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
overflow-x: hidden;
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
|
|
|
|
&::-webkit-scrollbar {
|
|
|
|
|
width: 0 !important;
|
|
|
|
|
line-height: 17px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.items {
|
|
|
|
|
display: inline-block;
|
|
|
|
|
height: 28px;
|
|
|
|
|
line-height: 26px;
|
|
|
|
|
border: 1px dashed #ccc;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
padding: 0 10px;
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
&:hover {
|
|
|
|
|
border: 1px dashed @primary-color;
|
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
|
|
.edit {
|
|
|
|
|
width: 17px;
|
|
|
|
|
height: 17px;
|
|
|
|
|
border-radius: 0 3px 0 0;
|
|
|
|
|
background: #c9c9c9;
|
|
|
|
|
display: none;
|
|
|
|
|
&::before {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
content: '';
|
|
|
|
|
background: @primary-color;
|
|
|
|
|
opacity: 0.08;
|
|
|
|
|
position: absolute;
|
|
|
|
|
right: -1px;
|
|
|
|
|
top: -1px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
line-height: 17px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
&:hover {
|
|
|
|
|
border: 1px dashed @primary-color;
|
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
|
|
&::before {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
content: '';
|
|
|
|
|
background: @primary-color;
|
|
|
|
|
opacity: 0.08;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.edit {
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
&.active {
|
|
|
|
|
background: @primary-color;
|
|
|
|
|
border: 1px dashed @primary-color;
|
|
|
|
|
color: #fff;
|
|
|
|
|
.edit {
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
:deep(.vben-basic-table-action button) {
|
|
|
|
|
padding: 0 3px !important;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
:deep(.vben-basic-table-action button) {
|
|
|
|
|
padding: 0 3px !important;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|