lijingjia 4 months ago
commit 98e811704e

@ -219,7 +219,7 @@ export const columns: BasicColumn[] = [
{
title: '剩余箱型箱量',
align: 'center',
width: '110',
width: 110,
dataIndex: 'remaiN_CTN_STAT'
},
{
@ -237,7 +237,7 @@ export const columns: BasicColumn[] = [
{
title: '船公司',
align: 'center',
width: '150',
width: 150,
dataIndex: 'carrier'
}
]

@ -1,5 +1,5 @@
<template>
<div class="ds-sea-export-table">
<div >
<BasicTable class="ds-table" @register="registerTable" @row-dbClick="handledbclick">
<template #toolbar> </template>
<template v-slot:bodyCell="{ column, record }">
@ -366,7 +366,6 @@
labelWidth: 120,
schemas: searchFormSchema,
},
clickToRowSelect: false,
isTreeTable: false,
pagination: true,
striped: true,
@ -378,7 +377,8 @@
width: 60,
},
canResize: true,
resizeHeightOffset: 80,
resizeHeightOffset: 35,
immediate: true,
actionColumn: {
width: 50,

@ -62,7 +62,7 @@ export function GetPortlist(parameter) {
export function BookingSlotPage(parameter) {
return request<DataResult>({
url: '/BookingSlot/page',
url: '/opApi/BookingSlotService/page',
method: 'post',
data: parameter
})
@ -70,7 +70,7 @@ export function BookingSlotPage(parameter) {
export function BookingSlotSave(parameter) {
return request<DataResult>({
url: '/BookingSlot/save',
url: '/opApi/BookingSlotService/save',
method: 'post',
data: parameter
})
@ -78,7 +78,7 @@ export function BookingSlotSave(parameter) {
export function BookingSlotDetail(parameter) {
return request<DataResult>({
url: '/BookingSlot/detail',
url: '/opApi/BookingSlotService/detail',
method: 'get',
params: parameter
})
@ -86,14 +86,14 @@ export function BookingSlotDetail(parameter) {
export function BookingSlotDelete(parameter) {
return request<DataResult>({
url: '/BookingSlot/delete?ids=' + parameter,
url: '/opApi/BookingSlotService/delete?ids=' + parameter,
method: 'post'
})
}
export function BookingSlotPageStock(parameter) {
return request<DataResult>({
url: '/BookingSlot/pageStock',
url: '/opApi/BookingSlotService/pageStock',
method: 'post',
data: parameter
})
@ -101,7 +101,7 @@ export function BookingSlotPageStock(parameter) {
export function BookingSlotRefreshStock(parameter) {
return request<DataResult>({
url: '/BookingSlot/refreshStock',
url: '/opApi/BookingSlotService/refreshStock',
method: 'post',
data: parameter
})
@ -109,7 +109,7 @@ export function BookingSlotRefreshStock(parameter) {
export function BookingSlotGetFile(parameter) {
return request<DataResult>({
url: '/BookingSlot/GetFile',
url: '/opApi/BookingSlotService/GetFile',
method: 'get',
params: parameter
})
@ -117,7 +117,7 @@ export function BookingSlotGetFile(parameter) {
export function ImportSlotFromFile(parameter) {
return request<DataResult>({
url: '/BookingSlot/ImportSlotFromFile',
url: '/opApi/BookingSlotService/ImportSlotFromFile',
method: 'post',
data: parameter
})
@ -125,7 +125,7 @@ export function ImportSlotFromFile(parameter) {
export function CreateBooking0rder(parameter) {
return request<DataResult>({
url: '/BookingSlot/CreateBookingOrder',
url: '/opApi/BookingSlotService/CreateBookingOrder',
method: 'post',
data: parameter
})
@ -133,65 +133,27 @@ export function CreateBooking0rder(parameter) {
export function ValidateCreateBookingOrder(parameter) {
return request<DataResult>({
url: '/BookingSlot/ValidateCreateBookingOrder',
url: '/opApi/BookingSlotService/ValidateCreateBookingOrder',
method: 'get',
params: parameter
})
}
export function getAvailableCtnsBySlot(parameter) {
return request<DataResult>({
url: '/BookingSlot/getAvailableCtnsBySlot',
url: '/opApi/BookingSlotService/getAvailableCtnsBySlot',
method: 'get',
params: parameter
})
}
export function slotSendEmail(parameter) {
return request<DataResult>({
url: '/BookingSlot/SendEmail',
url: '/opApi/BookingSlotService/SendEmail',
method: 'post',
data: parameter
})
}
export function BookingLabelSave(parameter) {
return request<DataResult>({
url: 'BookingLabel/Save',
method: 'post',
data: parameter
})
}
export function BookingLabelPageList(parameter) {
return request<DataResult>({
url: 'BookingLabel/PageList',
method: 'post',
data: parameter
})
}
export function BookingLabelDelete(parameter) {
return request<DataResult>({
url: 'BookingLabel/Delete',
method: 'post',
data: parameter
})
}
export function BookingLabelList(parameter) {
return request<DataResult>({
url: 'BookingLabel/List',
method: 'get',
params: parameter
})
}
export function BookingLabelBind(parameter) {
return request<DataResult>({
url: 'BookingLabel/Bind',
method: 'post',
data: parameter
})
}
export function SaveDataInList(parameter) {
return request<DataResult>({

@ -406,19 +406,19 @@ export const columns: BasicColumn[] = [
{
title: '操作',
align: 'center',
width: '80',
width: 80,
dataIndex: 'op'
},
{
title: '单证',
align: 'center',
width: '80',
width: 80,
dataIndex: 'doc'
},
{
title: '商务',
align: 'center',
width: '80',
width: 80,
dataIndex: 'business'
},
{
@ -468,35 +468,35 @@ export const columns: BasicColumn[] = [
{
title: '收货地',
align: 'center',
width: '180',
width: 180,
dataIndex: 'placereceipt',
customCell: sharedOnCell,
},
{
title: '交货地',
align: 'center',
width: '180',
width: 180,
dataIndex: 'placedelivery',
customCell: sharedOnCell,
},
{
title: '装货港',
align: 'center',
width: '180',
width: 180,
dataIndex: 'portload',
customCell: sharedOnCell,
},
{
title: '卸货港',
align: 'center',
width: '180',
width: 180,
dataIndex: 'portdischarge',
customCell: sharedOnCell,
},
{
title: '卸货港国家',
align: 'center',
width: '180',
width: 180,
dataIndex: 'portdischargE_COUNTRY',
customCell: sharedOnCell,
},
@ -679,6 +679,13 @@ export const columns: BasicColumn[] = [
]
export const detialForm: FormSchema[] = [
{
label: '',
field: 'id',
component: 'Input',
defaultValue: '',
show: false,
},
{
field: 'sloT_BOOKING_NO',
label: '舱位提单号',

@ -1,5 +1,5 @@
<template>
<div class="ds-sea-export-table">
<div>
<BasicTable class="ds-table" @register="registerTable" @row-dbClick="handledbclick">
<template #toolbar>
<a-button type="link" size="mini" @click="handleAdd">
@ -47,44 +47,31 @@
<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 == '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: () => {},
},
{
icon: 'ant-design:delete-outlined',
tooltip: '删除',
onClick: () => {},
},
]"
/>
<TableAction :actions="[
{
icon: 'clarity:note-edit-line',
tooltip: '编辑',
onClick: () => { },
},
{
icon: 'ant-design:delete-outlined',
tooltip: '删除',
onClick: () => { },
},
]" />
</template>
</template>
</BasicTable>
@ -92,403 +79,20 @@
</template>
<script lang="ts" setup>
import { BasicTable, useTable, TableAction } from '/@/components/Table'
import { PageDataByBooking } from '../../operation/seaexport/api/BookingLedger'
import { BookingSlotPage } from './api'
import { columns, searchFormSchema, FeeStatus } from './columns'
import { BulbFilled, CheckCircleFilled,BulbOutlined } from '@ant-design/icons-vue';
import { BulbFilled, CheckCircleFilled, BulbOutlined } from '@ant-design/icons-vue';
import { useModal } from '/@/components/Modal'
import { formatParams } from '/@/hooks/web/common'
import { useGo } from '/@/hooks/web/usePage'
const go = useGo()
const [registerModal, { openModal }] = useModal()
const [registerTable, { reload, getForm, getPaginationRef, getSelectRows, setProps }] = useTable({
title: '',
api: async (p) => {
const res: API.DataResult = await PageDataByBooking(p)
const res: API.DataResult = await BookingSlotPage(p)
return new Promise((resolve) => {
const arr = [
{
"id": 563488536383557,
"createdTime": "2024-06-30 16:20:45",
"updatedTime": "2024-06-30 20:59:33",
"createdUserName": "石慧",
"updatedUserName": "石慧",
"labelList": [],
"sloT_BOOKING_NO": "238699308",
"contracT_NO": "299026908",
"bookinG_PARTY": "QINGDAO CHENGSI FREIGHT FORWARDER CO",
"vessel": "MORTEN MAERSK3",
"voyno": "424W3",
"etd": "2024-06-15 00:00:00",
"eta": "2024-07-25 00:00:00",
"placereceipt": "Dalian,Liaoning,China",
"placedelivery": "Melbourne,Victoria,Australia",
"portloadid": "CNDAL",
"portload": "DALIAN",
"portdischargeid": "AUMEL",
"portdischarge": "MELBOURNE,VI,AU",
"portdischargE_COUNTRY_CODE": "AU",
"portdischargE_COUNTRY": "澳大利亚(AUSTRALIA)",
"transfeR_PORT_1": "CO BUSAN INTERNATIONAL TRANSHIPMENT",
"transfeR_PORT_2": "Beilun Container Terminal Phase 4",
"carrierid": "MSK",
"carrier": "马士基",
"carriagE_TYPE": "TRANSFER_SHIP",
"carriagE_TYPE_NAME": "中转",
"bookinG_SLOT_TYPE": "CONTRACT_ORDER",
"bookinG_SLOT_TYPE_NAME": "合约订舱",
"ctN_STAT": "20GP* 3 ",
"weeK_AT": 24,
"detensioN_FREE_DAYS": 0,
"sI_CUT_DATE": "2024-06-30 20:00:00",
"vgM_SUBMISSION_CUT_DATE": "2024-06-30 20:00:00",
"manifesT_CUT_DATE": "2024-06-11 14:30:00",
"iS_CANCELLATION": true,
"custoM_SI_CUT_DATE": "2024-06-11 10:00:00",
"pricE_CALCULATION_DATE": "2024-06-15 00:00:00"
},
{
"id": 562064187785285,
"createdTime": "2024-06-30 16:20:45",
"updatedTime": "2024-06-30 20:59:33",
"createdUserName": "石慧",
"updatedUserName": "石慧",
"labelList": [],
"sloT_BOOKING_NO": "232397405",
"loaD_GUARANTEE_FLAG_NAME": "全部舱保",
"spliT_OR_MERGE_FLAG": 0,
"contracT_NO": "299026908",
"bookinG_PARTY": "QINGDAO CHENGSI FREIGHT FORWARDER CO",
"vessel": "MORTEN MAERSK3",
"voyno": "424W3",
"etd": "2024-06-15 00:00:00",
"eta": "2024-07-25 00:00:00",
"placereceipt": "Dalian,Liaoning,China",
"placedelivery": "Melbourne,Victoria,Australia",
"portloadid": "CNDAL",
"portload": "DALIAN",
"portdischargeid": "AUMEL",
"portdischarge": "MELBOURNE,VI,AU",
"portdischargE_COUNTRY_CODE": "AU",
"portdischargE_COUNTRY": "澳大利亚(AUSTRALIA)",
"transfeR_PORT_1": "CO BUSAN INTERNATIONAL TRANSHIPMENT",
"transfeR_PORT_2": "Beilun Container Terminal Phase 4",
"carrierid": "MSK",
"carrier": "马士基",
"carriagE_TYPE": "TRANSFER_SHIP",
"carriagE_TYPE_NAME": "中转",
"bookinG_SLOT_TYPE": "CONTRACT_ORDER",
"bookinG_SLOT_TYPE_NAME": "合约订舱",
"ctN_STAT": "20GP* 3 ",
"weeK_AT": 24,
"detensioN_FREE_DAYS": 0,
"sI_CUT_DATE": "2024-06-30 20:00:00",
"vgM_SUBMISSION_CUT_DATE": "2024-06-30 20:00:00",
"manifesT_CUT_DATE": "2024-06-11 14:30:00",
"iS_CANCELLATION": true,
"custoM_SI_CUT_DATE": "2024-06-11 10:00:00",
"pricE_CALCULATION_DATE": "2024-06-15 00:00:00",
"bookingSlotSaleInfoList": [
{
"id": 562064420188229,
"bookinG_ID": 562064397226053,
"bookinG_SLOT_ID": 562064187785285,
"customerid": 505381205700677,
"customername": "青岛测试",
"custserviceid": "519572541472837",
"custservice": "丛黎晓",
"saleid": "519572541472837",
"sale": "何雨菲",
"opid": "519572983967813",
"op": "纪亚男",
"docid": "519572338753605",
"doc": "何雨菲",
"businessid": "",
"business": "123",
"shipper": "123",
"goodsname": "123",
"sellinG_PRICE": "123",
"salE_TIME": "2024-06-26 15:45:30",
"updateFlag": false,
"createdUserId": 505423895470149
},
{
"id": 562064648892485,
"bookinG_ID": 562064635387973,
"bookinG_SLOT_ID": 562064187785285,
"customerid": 505381205700677,
"customername": "青岛测试",
"custserviceid": "519572541472837",
"custservice": "丛黎晓",
"saleid": "519572541472837",
"sale": "何雨菲",
"opid": "519572983967813",
"op": "纪亚男",
"docid": "519572338753605",
"doc": "何雨菲",
"businessid": "",
"business": "",
"salE_TIME": "2024-06-26 15:46:32",
"updateFlag": false,
"createdUserId": 505423895470149
}
]
},
{
"id": 559255102201925,
"createdTime": "2024-06-18 17:14:52",
"updatedTime": "2024-06-18 18:53:25",
"createdUserName": "石慧",
"updatedUserName": "石慧",
"spliT_OR_MERGE_FLAG": 0,
"sloT_BOOKING_NO": "XIA1380066",
"contracT_NO": "QHOF247973",
"bookinG_PARTY": "SUNNINESS LOGISTICS CO LTD",
"vessel": "CMA CGM TUTICORIN",
"voyno": "0TND5S1MA",
"etd": "2024-07-01 09:00:00",
"placereceipt": "CNXMN (XIAMEN)",
"placedelivery": "MXLZC (LAZARO CARDENAS)",
"portloadid": "CNXIA",
"portload": "XIAMEN",
"portdischargeid": "MXLZC",
"portdischarge": "LAZARO CARDENAS,MEXICO",
"portdischargE_COUNTRY_CODE": "MX",
"portdischargE_COUNTRY": "墨西哥(MEXICO)",
"carrierid": "CMA",
"carrier": "法国达飞",
"carriagE_TYPE": "DIRECT_SHIP",
"carriagE_TYPE_NAME": "直达",
"bookinG_SLOT_TYPE": "CONTRACT_ORDER",
"bookinG_SLOT_TYPE_NAME": "合约订舱",
"ctN_STAT": "40GP*1",
"detensioN_FREE_DAYS": 0,
"sI_CUT_DATE": "2024-06-27 09:00:00",
"cY_CUT_DATE": "2024-06-29 04:00:00",
"vgM_SUBMISSION_CUT_DATE": "2024-06-29 04:00:00",
"iS_CANCELLATION": false,
"bookingSlotSaleInfoList": [
{
"id": 559258301587525,
"bookinG_ID": 559258276556869,
"bookinG_SLOT_ID": 559255102201925,
"updateFlag": false,
"createdUserId": 505423895470149
}
]
},
{
"id": 559234884751429,
"createdTime": "2024-06-18 15:52:36",
"updatedTime": "2024-06-25 11:01:56",
"createdUserName": "石慧",
"updatedUserName": "石慧",
"labelList": [],
"spliT_OR_MERGE_FLAG": 0,
"sloT_BOOKING_NO": "XIA1356764",
"contracT_NO": "QHOFXP244396",
"bookinG_PARTY": "SUNNINESS LOGISTICS CO LTD",
"vessel": "CMA CGM UNITY",
"voyno": "0MEI1W1MA",
"etd": "2024-05-27 08:00:00",
"eta": "2024-09-21 22:00:00",
"placereceipt": "CNXMN (XIAMEN)",
"placedelivery": "MXZLO (MANZANILLO, MX)",
"portloadid": "CNXIA",
"portload": "XIAMEN",
"portdischargeid": "PAMIT",
"portdischarge": "MANZANILLO,PANAMA",
"portdischargE_COUNTRY_CODE": "PA",
"portdischargE_COUNTRY": "PANAMA",
"carrierid": "CMA",
"carrier": "法国达飞",
"carriagE_TYPE": "DIRECT_SHIP",
"carriagE_TYPE_NAME": "直达",
"bookinG_SLOT_TYPE": "CONTRACT_ORDER",
"bookinG_SLOT_TYPE_NAME": "合约订舱",
"ctN_STAT": "40HC* 1 ",
"detensioN_FREE_DAYS": 0,
"sI_CUT_DATE": "2024-05-23 16:00:00",
"cY_CUT_DATE": "2024-05-24 09:00:00",
"vgM_SUBMISSION_CUT_DATE": "2024-05-24 09:00:00",
"iS_CANCELLATION": false,
"bookingSlotSaleInfoList": [
{
"id": 559948185612357,
"bookinG_ID": 559948173021253,
"bookinG_SLOT_ID": 559234884751429,
"customerid": 505381205700677,
"customername": "青岛测试",
"custserviceid": "519572541472837",
"custservice": "丛黎晓",
"saleid": "519572541472837",
"sale": "何雨菲",
"opid": "519572983967813",
"op": "纪亚男",
"docid": "519572338753605",
"doc": "何雨菲",
"businessid": "",
"business": "",
"salE_TIME": "2024-06-20 16:14:23",
"updateFlag": false,
"createdUserId": 505423895470149
}
]
},
{
"id": 554957557194821,
"createdTime": "2024-06-06 13:48:07",
"updatedTime": "2024-06-26 11:27:33",
"createdUserName": "单证007",
"updatedUserName": "单证007",
"labelList": [],
"spliT_OR_MERGE_FLAG": 0,
"sloT_BOOKING_NO": "2222",
"sloT_NO": "222",
"ctN_STAT": "",
"detensioN_FREE_DAYS": 0,
"sI_CUT_DATE": "2024-06-26 11:00:00",
"cY_CUT_DATE": "2024-06-26 11:00:00",
"vgM_SUBMISSION_CUT_DATE": "2024-06-26 11:00:00",
"mdgF_CUT_DATE": "2024-06-26 11:00:00",
"manifesT_CUT_DATE": "2024-06-26 11:00:00",
"iS_CANCELLATION": false
},
{
"id": 547926230757445,
"createdTime": "2024-05-17 16:57:34",
"createdUserName": "超级管理员",
"labelList": [
{
"id": 549232334430277,
"name": "测试2",
"scope": 1,
"color": "#10dacd"
},
{
"id": 549232370462789,
"name": "测试3",
"scope": 1,
"color": "#d60040"
},
{
"id": 548907868680261,
"name": "测试1",
"scope": 1,
"color": "#23b388"
}
],
"spliT_OR_MERGE_FLAG": 0,
"sloT_BOOKING_NO": "QGD0884913",
"vessel": "CMA CGM TROCADERO",
"voyno": "0FMFVW1MA",
"portload": "QINGDAO",
"portdischarge": "MOGADISHU",
"carrierid": "CMA",
"carrier": "法国达飞",
"bookinG_SLOT_TYPE": "SPOT_ORDER",
"bookinG_SLOT_TYPE_NAME": "SPOT订舱",
"detensioN_FREE_DAYS": 0,
"vgM_SUBMISSION_CUT_DATE": "2024-06-01 21:00:00",
"iS_CANCELLATION": false
},
{
"id": 547900976529477,
"createdTime": "2024-05-17 15:14:49",
"updatedTime": "2024-06-24 10:44:18",
"createdUserName": "邵芳",
"updatedUserName": "邵芳",
"spliT_OR_MERGE_FLAG": 2,
"loaD_GUARANTEE_FLAG": "FULL",
"loaD_GUARANTEE_FLAG_NAME": "全部舱保",
"sloT_BOOKING_NO": "238699307BB",
"contracT_NO": "299026908",
"bookinG_PARTY": "QINGDAO CHENGSI FREIGHT FORWARDER CO",
"vessel": "MORTEN MAERSK",
"voyno": "424W",
"etd": "2024-06-15 00:00:00",
"eta": "2024-07-25 00:00:00",
"placereceipt": "Dalian,Liaoning,China",
"placedelivery": "Melbourne,Victoria,Australia",
"portloadid": "CNDAL",
"portload": "DALIAN",
"portdischargeid": "AUMEL",
"portdischarge": "MELBOURNE,VI,AU",
"portdischargE_COUNTRY_CODE": "AU",
"portdischargE_COUNTRY": "澳大利亚(AUSTRALIA)",
"transfeR_PORT_1": "CO BUSAN INTERNATIONAL TRANSHIPMENT",
"transfeR_PORT_2": "Beilun Container Terminal Phase 4",
"carrierid": "MSK",
"carrier": "马士基",
"carriagE_TYPE": "TRANSFER_SHIP",
"carriagE_TYPE_NAME": "中转",
"bookinG_SLOT_TYPE": "CONTRACT_ORDER",
"bookinG_SLOT_TYPE_NAME": "合约订舱",
"ctN_STAT": "20GP* 3 ",
"weeK_AT": 24,
"detensioN_FREE_DAYS": 0,
"sI_CUT_DATE": "2024-06-11 16:00:00",
"manifesT_CUT_DATE": "2024-06-11 14:30:00",
"iS_CANCELLATION": false,
"custoM_SI_CUT_DATE": "2024-06-11 10:00:00",
"pricE_CALCULATION_DATE": "2024-05-17 00:00:00",
"bookingSlotSaleInfoList": [
{
"id": 561288040603717,
"bookinG_ID": 561288029708358,
"bookinG_SLOT_ID": 547900976529477,
"customerid": 505381205700677,
"customername": "青岛测试",
"custserviceid": "519572541472837",
"custservice": "丛黎晓",
"saleid": "519572541472837",
"sale": "何雨菲",
"opid": "519572983967813",
"op": "纪亚男",
"docid": "519572338753605",
"doc": "何雨菲",
"businessid": "",
"business": "",
"updateFlag": false,
"createdUserId": 505423895470149
}
]
},
{
"id": 547555377487941,
"createdTime": "2024-05-16 15:48:34",
"createdUserName": "超级管理员",
"spliT_OR_MERGE_FLAG": 0,
"sloT_BOOKING_NO": "QGD0877999",
"vessel": "CSL MANHATTAN",
"voyno": "0WU07E1MA",
"portload": "QINGDAO",
"portdischarge": "MANZANILLO, MX",
"carrierid": "CMA",
"carrier": "法国达飞",
"bookinG_SLOT_TYPE": "SPOT_ORDER",
"bookinG_SLOT_TYPE_NAME": "SPOT订舱",
"detensioN_FREE_DAYS": 0,
"vgM_SUBMISSION_CUT_DATE": "2024-06-01 05:00:00",
"iS_CANCELLATION": false
},
{
"id": 546477107662917,
"createdTime": "2024-05-13 14:41:05",
"createdUserName": "超级管理员",
"spliT_OR_MERGE_FLAG": 0,
"sloT_BOOKING_NO": "test22",
"detensioN_FREE_DAYS": 0,
"iS_CANCELLATION": false
},
{
"id": 546476199157829,
"createdTime": "2024-05-13 14:37:23",
"createdUserName": "超级管理员",
"spliT_OR_MERGE_FLAG": 0,
"sloT_BOOKING_NO": "test111",
"detensioN_FREE_DAYS": 0,
"iS_CANCELLATION": false
}
] as any
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) => {
@ -510,45 +114,35 @@ const [registerTable, { reload, getForm, getPaginationRef, getSelectRows, setPro
arr[i].isRemark = true
arr[i].dzmarkLoading = false
}
console.log(arr)
setProps({
showIndexColumn: false,
}),
resolve({data: arr, total: 10})
resolve({ data: arr, total: 10 })
})
},
beforeFetch: (p) => {
var data = getForm().getFieldsValue()
const postParam: API.PageRequest = {
queryCondition: '',
pageCondition: {
pageIndex: p.current,
pageSize: p.pageSize,
sortConditions: []
}
}
return postParam
return formatParams(p)
},
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
clickToRowSelect: false,
isTreeTable: false,
pagination: true,
striped: true,
useSearchForm: true,
showTableSetting: true,
bordered: true,
showIndexColumn: false,
showIndexColumn: true,
indexColumnProps: {
width: 60,
},
canResize: true,
resizeHeightOffset: 80,
resizeHeightOffset: 35,
immediate: true,
})
function handledbclick(record) {
@ -560,61 +154,61 @@ function handleAdd() {
</script>
<style lang="less" scoped>
/deep/ .ant-form-item {
margin-bottom: 10px !important;
}
/deep/ .ant-form-item {
margin-bottom: 10px !important;
}
/deep/ .ant-card-body {
padding-bottom: 0px !important;
}
/deep/ .ant-card-body {
padding-bottom: 0px !important;
}
.table-operator {
margin-bottom: 18px;
}
.table-operator {
margin-bottom: 18px;
}
.Close {
height: 45px;
overflow: hidden;
}
.Close {
height: 45px;
overflow: hidden;
}
.vxe-table--render-default .vxe-body--row.row--stripe {
background: #f5f9fe;
}
.vxe-table--render-default .vxe-body--row.row--stripe {
background: #f5f9fe;
}
.ant-card-body {
padding-top: 10px;
}
.ant-card-body {
padding-top: 10px;
}
.inline {
position: relative;
}
.inline {
position: relative;
}
.inline-right {
position: absolute;
top: 6px;
right: 25px;
}
.inline-right {
position: absolute;
top: 6px;
right: 25px;
}
.change {
display: flex;
justify-content: center;
margin-top: 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;
text-align: center;
cursor: pointer;
transition: box-shadow 0.3s, background-color 0.3s;
margin-right: 10px;
}
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;
text-align: center;
cursor: pointer;
transition: box-shadow 0.3s, background-color 0.3s;
margin-right: 10px;
}
div:hover {
border: 1px solid #d1cfcf;
}
div:hover {
border: 1px solid #d1cfcf;
}
}
</style>

@ -107,35 +107,48 @@ export const searchFormSchema: FormSchema[] = [
//列表
export const columns: BasicColumn[] = [
{ dataIndex: 'contractNo', title: '合约号编号', showHeaderOverflow: true, sortable: true },
{ dataIndex: 'contractName', title: '合约号名称', showHeaderOverflow: true, sortable: true },
{ dataIndex: 'contractNote', title: '合约号备注', showHeaderOverflow: true, sortable: true },
{ dataIndex: 'carrierCode', title: '船公司', showHeaderOverflow: true, sortable: true },
{ dataIndex: 'podCode', title: '目的港', showHeaderOverflow: true, sortable: true },
{ dataIndex: 'laneCName', title: '航线', showHeaderOverflow: true, sortable: true },
{ dataIndex: 'createUserName', title: '创建者名称', showHeaderOverflow: true, sortable: true },
{ dataIndex: 'createTime', title: '创建时间', showHeaderOverflow: true, sortable: true },
{ dataIndex: 'updateTime', title: '更新时间', showHeaderOverflow: true, sortable: true },
{ dataIndex: 'contractNo', title: '合约号编号', width: 100, },
{ dataIndex: 'contractName', title: '合约号名称', width: 100, },
{ dataIndex: 'contractNote', title: '合约号备注', width: 100, },
{ dataIndex: 'carrier', title: '船公司', width: 100, },
{ dataIndex: 'podName', title: '目的港', width: 100, },
{ dataIndex: 'laneCName', title: '航线', width: 100, },
{ dataIndex: 'createUserName', title: '创建者名称', width: 100, },
{ dataIndex: 'createTime', title: '创建时间', width: 100, },
{ dataIndex: 'updateTime', title: '更新时间', width: 100, },
]
//详情表单
export const formSchema: FormSchema[] = [
{
label: '',
field: 'id',
component: 'Input',
defaultValue: '',
show: false,
},
{
field: 'contractNo',
label: '合约号编号',
component: 'Input',
rules: [{ required:true, message: '请填写合约号编号' }],
rules: [{ required: true, message: '请填写合约号编号' }],
colProps: { span: 6 },
},
{
field: 'contractName',
label: '合约号名称',
component: 'Input',
rules: [{ required:true, message: '请填写合约号名称' }],
rules: [{ required: true, message: '请填写合约号名称' }],
colProps: { span: 6 },
},
{
label: '船公司名称',
field: 'carrier',
component: 'Input',
show: false,
},
{
label: '船公司代码',
field: 'carrierCode',
component: 'Input',
show: false,
@ -144,43 +157,49 @@ export const formSchema: FormSchema[] = [
field: 'carrierId',
label: '船公司',
component: 'ApiSelect',
dynamicDisabled: false,
rules: [{ required:true, message: '请填写船公司' }],
rules: [{ required: true, message: '请填写船公司' }],
colProps: { span: 6 },
componentProps: ({ formModel }) => {
return {
allowClear: true,
showSearch: true,
api: () => {
return new Promise((resolve) => {
const arr = getOptions('carrier')
resolve(arr)
})
},
labelField: 'name',
showName: 'shortName',
api: GetCarrierlist,
labelField: 'shortName',
valueField: 'id',
resultField: 'data',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
onChange: (e, obj) => {
if (obj) {
formModel.carrierCode = obj.label
} else {
formModel.carrier = obj.label
formModel.carrierCode = obj.codeName
}
if(!obj && !e){
formModel.carrier = ''
formModel.carrierCode = ''
}
},
}
},
}
},
{
label: '目的港',
label: '目的港代码',
field: 'podCode',
component: 'Input',
show: false,
},
{
label: '目的港名称',
field: 'podName',
component: 'Input',
show: false,
},
{
label: '目的港',
field: 'podId',
component: 'ApiSelect',
dynamicDisabled: false,
colProps: { span: 6 },
rules: [{ required:true, message: '请填写合约号编号' }],
componentProps: () => {
rules: [{ required: true, message: '请填写合约号编号' }],
componentProps: ({formModel}) => {
return {
api: () => {
return new Promise((resolve) => {
@ -192,33 +211,62 @@ export const formSchema: FormSchema[] = [
})
})
},
immediate: false,
labelField: 'cnName',
valueField: 'id',
resultField: 'data',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
},
onChange: (e, obj) => {
if (e && obj) {
formModel.podCode = obj.ediCode
formModel.podName = obj.label
}
if(!obj && !e){
formModel.podCode = ''
formModel.podName =''
}
},
}
}
},
{
label: '航线',
label: '航线港代码',
field: 'laneCode',
component: 'Input',
show: false,
},
{
label: '航线名称',
field: 'laneCName',
component: 'Input',
show: false,
},
{
label: '航线',
field: 'laneId',
component: 'ApiSelect',
rules: [{ required:true, message: '请填写合约号编号' }],
dynamicDisabled: false,
rules: [{ required: true, message: '请填写合约号编号' }],
colProps: { span: 6 },
componentProps: () => {
componentProps: ({formModel}) => {
return {
api: GetClientLanesSelectList,
immediate: false,
labelField: 'laneName',
valueField: 'id',
resultField: 'data',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
},
onChange: (e, obj) => {
if (e && obj) {
formModel.laneCode = obj.ediCode
formModel.laneCName = obj.label
}
if(!obj && !e){
formModel.laneCode = ''
formModel.laneCName =''
}
},
}
}
},

@ -24,7 +24,7 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data
getInfo(data.id)
}
})
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
const [registerForm, { resetFields, setFieldsValue, validate,getFieldsValue }] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,

@ -1,5 +1,5 @@
<template>
<div class="ds-sea-export-table">
<div>
<BasicTable class="ds-table" @register="registerTable" @row-dbClick="handledbclick">
<template #toolbar>
<a-button type="link" size="mini" @click="handleAdd">
@ -9,24 +9,22 @@
</template>
<template v-slot:bodyCell="{ column, record }">
<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: '删除',
onClick: () => {
handleDelete(record)
{
icon: 'ant-design:delete-outlined',
tooltip: '删除',
onClick: () => {
handleDelete(record)
}
}
}
]"
/>
]" />
</template>
</template>
</BasicTable>
@ -35,7 +33,7 @@
</template>
<script lang="ts" setup>
import { BasicTable, useTable, TableAction } from '/@/components/Table'
import { GetParaContractNoPage,DeleteParaContractNoInfo } from '../cabinBooking/api'
import { GetParaContractNoPage, DeleteParaContractNoInfo } from '../cabinBooking/api'
import { columns, searchFormSchema, FeeStatus } from './columns'
import { BulbFilled, CheckCircleFilled, BulbOutlined } from '@ant-design/icons-vue';
import Modal from './detail.vue'
@ -62,35 +60,35 @@ const [registerTable, { reload, getForm, getPaginationRef, getSelectRows, setPro
labelWidth: 120,
schemas: searchFormSchema,
},
clickToRowSelect: false,
isTreeTable: false,
pagination: true,
striped: true,
useSearchForm: true,
showTableSetting: true,
bordered: true,
showIndexColumn: false,
showIndexColumn: true,
indexColumnProps: {
width: 60,
},
canResize: true,
resizeHeightOffset: 35,
immediate: true,
actionColumn: {
width: 80,
width: 50,
title: '操作',
dataIndex: 'action',
fixed: 'right',
},
canResize: true,
resizeHeightOffset: 80,
})
function handledbclick(record) {
console.log('双击')
handleEdit(record)
}
function handlesuccess() {
reload()
}
function handleDelete(row){
DeleteParaContractNoInfo([row.id]).then(res=>{
function handleDelete(row) {
DeleteParaContractNoInfo([row.id]).then(res => {
if (res.succeeded) {
reload()
} else {
@ -107,61 +105,61 @@ function handleAdd() {
</script>
<style lang="less" scoped>
/deep/ .ant-form-item {
margin-bottom: 10px !important;
}
/deep/ .ant-form-item {
margin-bottom: 10px !important;
}
/deep/ .ant-card-body {
padding-bottom: 0px !important;
}
/deep/ .ant-card-body {
padding-bottom: 0px !important;
}
.table-operator {
margin-bottom: 18px;
}
.table-operator {
margin-bottom: 18px;
}
.Close {
height: 45px;
overflow: hidden;
}
.Close {
height: 45px;
overflow: hidden;
}
.vxe-table--render-default .vxe-body--row.row--stripe {
background: #f5f9fe;
}
.vxe-table--render-default .vxe-body--row.row--stripe {
background: #f5f9fe;
}
.ant-card-body {
padding-top: 10px;
}
.ant-card-body {
padding-top: 10px;
}
.inline {
position: relative;
}
.inline {
position: relative;
}
.inline-right {
position: absolute;
top: 6px;
right: 25px;
}
.inline-right {
position: absolute;
top: 6px;
right: 25px;
}
.change {
display: flex;
justify-content: center;
margin-top: 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;
text-align: center;
cursor: pointer;
transition: box-shadow 0.3s, background-color 0.3s;
margin-right: 10px;
}
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;
text-align: center;
cursor: pointer;
transition: box-shadow 0.3s, background-color 0.3s;
margin-right: 10px;
}
div:hover {
border: 1px solid #d1cfcf;
}
div:hover {
border: 1px solid #d1cfcf;
}
}
</style>

@ -573,7 +573,7 @@
</template>
<script lang="ts" setup>
import { onMounted, ref, reactive, UnwrapRef, h } from 'vue'
import { onMounted, ref, reactive, h } from 'vue'
import { Modal } from 'ant-design-vue';
import { BasicModal, useModalInner } from '/@/components/Modal'
import { GetCtnSelectList } from '/@/views/operation/seaexport/api/BookingLedger'
@ -591,7 +591,6 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner((data) => {
const number = data.number ? data.number : null
const copyId = data.copyId ? data.copyId : null
if (data.mskBookType === 'api') {
console.log(id, type, number, copyId)
init(id, type, number, copyId)
}
if (data.mskBookType === 'spot') {
@ -730,6 +729,8 @@ function handleOpenCQ() {
shipList.value = []
}
cqLoading.value = false
}).catch(err => {
cqLoading.value = false
})
}
}

@ -1,5 +1,5 @@
<template>
<div class="ds-sea-export-table">
<div>
<BasicTable class="ds-table" @register="registerTable" @row-dbClick="handledbclick">
<template #toolbar>
<a-button type="link" size="mini" @click="handleAdd">
@ -26,18 +26,10 @@
<span>{{ record.shipRateTotalCurrency }} {{ record.shipRateTotalAmount }}</span>
</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 == '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" />
@ -89,10 +81,10 @@
<script lang="ts" setup>
import { BasicTable, useTable, TableAction } from '/@/components/Table'
import {
GetInitInfoMskApi, CheckWarningBatchCopy, BatchSend, BatchSendSPOT,
CheckWarningBatchCopy, BatchSend, BatchSendSPOT,
CheckWarningBatchSend, mskGetPage, ChannelSelectShow, maskCopy, maskCopySPOT
} from './api'
import { columns, searchFormSchema, FeeStatus } from './columns'
import { columns, searchFormSchema } from './columns'
import { BulbFilled, CheckCircleFilled } from '@ant-design/icons-vue';
import cabinModal from './detail.vue'
import { useModal } from '/@/components/Modal'
@ -101,7 +93,7 @@ import { useMessage } from '../../../hooks/web/useMessage'
import { formatParams } from '/@/hooks/web/common'
const { createMessage } = useMessage()
const [registerModal, { openModal }] = useModal()
const [registerTable, { reload, getForm, getPaginationRef, getSelectRows, setProps }] = useTable({
const [registerTable, { reload, getSelectRows }] = useTable({
api: async (p) => {
const res: API.DataResult = await mskGetPage(p)
return new Promise((resolve) => {
@ -118,12 +110,10 @@ const [registerTable, { reload, getForm, getPaginationRef, getSelectRows, setPro
labelWidth: 120,
schemas: searchFormSchema,
},
clickToRowSelect: false,
isTreeTable: false,
pagination: true,
striped: true,
useSearchForm: true,
rowSelection: true,
showTableSetting: true,
bordered: true,
showIndexColumn: true,
@ -131,7 +121,8 @@ const [registerTable, { reload, getForm, getPaginationRef, getSelectRows, setPro
width: 60,
},
canResize: true,
resizeHeightOffset: 80,
resizeHeightOffset: 35,
immediate: true,
actionColumn: {
width: 80,
title: '操作',
@ -427,61 +418,61 @@ function handleOpenCopy() {
</script>
<style lang="less" scoped>
/deep/ .ant-form-item {
margin-bottom: 10px !important;
}
/deep/ .ant-form-item {
margin-bottom: 10px !important;
}
/deep/ .ant-card-body {
padding-bottom: 0px !important;
}
/deep/ .ant-card-body {
padding-bottom: 0px !important;
}
.table-operator {
margin-bottom: 18px;
}
.table-operator {
margin-bottom: 18px;
}
.Close {
height: 45px;
overflow: hidden;
}
.Close {
height: 45px;
overflow: hidden;
}
.vxe-table--render-default .vxe-body--row.row--stripe {
background: #f5f9fe;
}
.vxe-table--render-default .vxe-body--row.row--stripe {
background: #f5f9fe;
}
.ant-card-body {
padding-top: 10px;
}
.ant-card-body {
padding-top: 10px;
}
.inline {
position: relative;
}
.inline {
position: relative;
}
.inline-right {
position: absolute;
top: 6px;
right: 25px;
}
.inline-right {
position: absolute;
top: 6px;
right: 25px;
}
.change {
display: flex;
justify-content: center;
margin-top: 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;
text-align: center;
cursor: pointer;
transition: box-shadow 0.3s, background-color 0.3s;
margin-right: 10px;
}
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;
text-align: center;
cursor: pointer;
transition: box-shadow 0.3s, background-color 0.3s;
margin-right: 10px;
}
div:hover {
border: 1px solid #d1cfcf;
}
div:hover {
border: 1px solid #d1cfcf;
}
}
</style>

@ -0,0 +1,43 @@
// @ts-ignore
import { request } from '/@/utils/request'
import { DataResult, PageRequest } from '/@/api/model/baseModel'
export function BookingLabelSave(parameter) {
return request<DataResult>({
url: '/opApi/BookingLabel/Save',
method: 'post',
data: parameter
})
}
export function BookingLabelPageList(parameter) {
return request<DataResult>({
url: '/opApi/BookingLabel/GetPage',
method: 'post',
data: parameter
})
}
export function BookingLabelDelete(parameter) {
return request<DataResult>({
url: '/opApi/BookingLabel/Delete',
method: 'post',
data: parameter
})
}
export function BookingLabelList(parameter) {
return request<DataResult>({
url: '/opApi/BookingLabel/List',
method: 'get',
params: parameter
})
}
export function BookingLabelBind(parameter) {
return request<DataResult>({
url: '/opApi/BookingLabel/Bind',
method: 'post',
data: parameter
})
}

@ -0,0 +1,108 @@
import { BasicColumn, FormSchema } from '/@/components/Table'
export const searchFormSchema: FormSchema[] = [
{
field: 'name',
label: '标签名称',
component: 'Input',
colProps: { span: 4 },
},
{
field: 'scope',
label: '标签使用范围',
component: 'Select',
colProps: { span: 4 },
componentProps: {
allowClear: true,
optionLabelProp: 'label',
options: [
{
label: '舱位',
value: 1
}
]
},
},
]
//列表
export const columns: BasicColumn[] = [
{
title: '标签名称',
align: 'center',
width: 50,
dataIndex: 'name'
},
{
title: '标签使用范围',
align: 'center',
width: 50,
dataIndex: 'scope'
},
{
title: '标签颜色',
align: 'center',
width: 50,
dataIndex: 'color'
},
{
title: '匹配规则',
align: 'center',
width: 300,
dataIndex: 'regexPatternTxt'
},
]
//详情表单
export const formSchema: FormSchema[] = [
{
label: '',
field: 'id',
component: 'Input',
defaultValue: '',
show: false,
},
{
field: 'name',
label: '标签名称',
component: 'Input',
rules: [{ required: true, message: '请填写标签名称' }],
colProps: { span: 6 },
},
{
field: 'scope',
label: '标签使用范围',
component: 'Select',
colProps: { span: 6 },
componentProps: {
options: [
{
label: '舱位',
value: 1
}
]
},
},
{
field: 'color',
label: '选择颜色',
component: 'Input',
defaultValue:'#000000',
colProps: { span: 3 },
slot: 'color'
},
{
field: 'regexPatternTxt',
label: '匹配规则',
component: 'InputTextArea',
colProps: { span: 22 },
componentProps: {
autoSize: { minRows: 5, maxRows: 10 }
},
},
]

@ -0,0 +1,60 @@
<template>
<BasicModal width="800px" v-bind="$attrs" :use-wrapper="true" title="标签详情" @register="registerModal" @ok="handleSave">
<BasicForm @register="registerForm">
<template #color="{ model, field }">
<a-input size="small" type="color" v-model:value="model[field]"></a-input>
</template>
</BasicForm>
<template #footer>
<a-button pre-icon="ant-design:close-outlined" type="warning" :loading="loading" ghost
style="margin-right: 0.8rem" @click="closeModal">取消</a-button>
<a-button type="success" :loading="loading" pre-icon="ant-design:check-outlined" style="margin-right: 0.8rem"
@click="handleSave(false)">保存</a-button>
</template>
</BasicModal>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { BasicModal, useModalInner } from '/@/components/Modal'
import { BasicForm, useForm } from '/@/components/Form/index'
import { BookingLabelSave } from './api'
import { formSchema } from './columns'
import { useMessage } from '/@/hooks/web/useMessage'
const { createMessage } = useMessage()
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
setModalProps({ loading: false })
if (data.type === 'edit') {
setFieldsValue({
...data.row
})
}
})
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
})
function getInfo(id) {
}
const loading = ref(false)
const emit = defineEmits(['success', 'register'])
async function handleSave() {
try {
const values = await validate()
setModalProps({ confirmLoading: true, loading: true })
const res: API.DataResult = await BookingLabelSave(values)
if (res.succeeded) {
createMessage.success(res.message)
emit('success')
} else {
createMessage.error(res.message)
}
closeModal()
} finally {
setModalProps({ confirmLoading: false, loading: false })
}
}
</script>

@ -0,0 +1,176 @@
<template>
<div>
<BasicTable class="ds-table" @register="registerTable" @row-dbClick="handledbclick">
<template #toolbar>
<a-button type="link" size="mini" @click="handleAdd">
<span class="iconfont icon-jiahao2fill"></span>
新增标签
</a-button>
</template>
<template v-slot:bodyCell="{ column, record }">
<template v-if="column.key == 'scope'">
<span v-if="record.scope == 1"></span>
</template>
<template v-if="column.key == 'color'">
<div style="width: 100px;height: 20px;" :style="{ background: record.color }"></div>
</template>
<template v-if="column.key === 'action'">
<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),
},
}
]" />
</template>
</template>
</BasicTable>
<Modal @register="registerModal" @success="handlesuccess"></Modal>
</div>
</template>
<script lang="ts" setup>
import { BasicTable, useTable, TableAction } from '/@/components/Table'
import { BookingLabelPageList, BookingLabelDelete } from './api'
import { columns, searchFormSchema, FeeStatus } from './columns'
import { BulbFilled, CheckCircleFilled, BulbOutlined } from '@ant-design/icons-vue';
import Modal from './detail.vue'
import { useModal } from '/@/components/Modal'
import { formatParams } from '/@/hooks/web/common'
import { useMessage } from '/@/hooks/web/useMessage'
const { createMessage } = useMessage()
const [registerModal, { openModal }] = useModal()
const [registerTable, { reload, setLoading, getPaginationRef, getSelectRows, setProps }] = useTable({
title: '',
api: async (p) => {
const res: API.DataResult = await BookingLabelPageList(p)
return new Promise((resolve) => {
resolve({
data: res.data, total: 10
})
})
},
beforeFetch: (p) => {
return formatParams(p)
},
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
isTreeTable: false,
pagination: true,
striped: true,
useSearchForm: true,
showTableSetting: true,
bordered: true,
showIndexColumn: true,
indexColumnProps: {
width: 60,
},
canResize: true,
resizeHeightOffset: 35,
immediate: true,
actionColumn: {
width: 50,
title: '操作',
dataIndex: 'action',
fixed: 'right',
},
})
function handledbclick(record) {
openModal(true, { type: 'edit', row: record })
}
function handlesuccess() {
reload()
}
function handleDelete(row) {
setLoading(true);
BookingLabelDelete([row.id]).then(res => {
if (res.succeeded) {
reload()
} else {
createMessage.error(res.message)
}
setLoading(false);
})
}
function handleEdit(row) {
openModal(true, { type: 'edit', row: row })
}
function handleAdd() {
openModal(true, { type: 'add' })
}
</script>
<style lang="less" scoped>
/deep/ .ant-form-item {
margin-bottom: 10px !important;
}
/deep/ .ant-card-body {
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 {
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;
text-align: center;
cursor: pointer;
transition: box-shadow 0.3s, background-color 0.3s;
margin-right: 10px;
}
div:hover {
border: 1px solid #d1cfcf;
}
}
</style>
Loading…
Cancel
Save