diff --git a/src/views/bookingcabin/CabinManagement/index.vue b/src/views/bookingcabin/CabinManagement/index.vue index 38e96fe1..351ef32a 100644 --- a/src/views/bookingcabin/CabinManagement/index.vue +++ b/src/views/bookingcabin/CabinManagement/index.vue @@ -195,7 +195,7 @@ const [registerTable, { reload, setLoading, getForm, getSelectRows, setProps, se }) const generation = ref('') function handleOpenSlot(row) { - openModal(true, { type: 'init', row: row }) + openModal(true, { type: 'cabin', row: row }) } function handledbclick(record) { go(`/CabinManagementDetail?type=edit&id=${record.id}`) diff --git a/src/views/bookingcabin/generation/api.ts b/src/views/bookingcabin/generation/api.ts index 01a30c7a..490f945c 100644 --- a/src/views/bookingcabin/generation/api.ts +++ b/src/views/bookingcabin/generation/api.ts @@ -32,4 +32,12 @@ export function GetEnableProjectDictTreeList(parameter) { method: 'get', params: parameter }) +} + +export function CreateBookingAndSlot(parameter) { + return request({ + url: '/taskApi/TaskManageBC/CreateBookingAndSlot', + method: 'post', + data: parameter + }) } \ No newline at end of file diff --git a/src/views/bookingcabin/generation/columns.tsx b/src/views/bookingcabin/generation/columns.tsx deleted file mode 100644 index cb548147..00000000 --- a/src/views/bookingcabin/generation/columns.tsx +++ /dev/null @@ -1,343 +0,0 @@ - -import { ref } from 'vue' -import { BasicColumn, FormSchema } from '/@/components/Table' -import { GetControllerClientList, GetSaleUserList,GetCustomerServiceList,GetVouchingClerkList } from '/@/views/operation/seaexport/api/BookingLedger' -import { GetCtnSelectList } from '/@/api/common' -import { getDictOption } from '/@/utils/dictUtil' -import { useOptionsStore } from '/@/store/modules/options' -import { getOptions } from '/@/hooks/dict' -import { GetClientInfoWithContact } from './api' -import dayjs from 'dayjs'; -const customerContactAllList = ref([]) //接口获取的联系人信息 -//详情表单 -export const formSchema: FormSchema[] = [ - { - label: '', - field: 'id', - component: 'Input', - defaultValue: '', - show: false, - }, - { - field: 'slotNo', - label: '订舱编号', - component: 'Input', - slot: 'slotNo', - colProps: { span: 24 }, - }, - { - label: '委托单位', - field: 'customerId', - component: 'ApiSelect', - required: false, - dynamicDisabled: false, - colProps: { span: 12 }, - componentProps: ({ formModel }) => { - return { - api: () => { - return new Promise((resolve) => { - GetControllerClientList().then((res) => { - resolve(res) - }) - }) - }, - immediate: false, - 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.customerName = obj.label - const data = { - "clientId": obj.value, - "isController": true - } - GetClientInfoWithContact(data).then(res=>{ - customerContactAllList.value = res.data.clientContactList - if(res.data.saleId){ - formModel.saleId = res.data.saleId - } - if(res.data.op){ - formModel.operatorId = res.data.op - } - if(res.data.doc){ - formModel.docId = res.data.doc - } - if(res.data.customerService){ - formModel.custserviceId = res.data.customerService - } - }) - } - if (!obj && !e) { - formModel.customerName = '' - } - }, - } - }, - }, - { - field: 'customerContactId', - label: '联系人', - component: 'Select', - componentProps: ({ formModel }) => { - return { - mode: "multiple", - fieldNames:{ - label:'shortName', - value: 'id', - }, - options:customerContactAllList.value, - onChange: (e, obj) => { - if (obj) { - formModel.customerContactList = obj - } - if (!obj && !e) { - formModel.customerContactList = [] - } - }, - } - }, - colProps: { span: 12 }, - }, - { - field: 'customerContactList', - label: '联系人信息', - slot: 'customerContactList', - component: 'Input', - show: ({ values }) => { - console.log(values) - if(values.customerContactList && values.customerContactList.length>0){ - return true - } - }, - colProps: { span: 24 }, - }, - { - label: '销售', - field: 'saleId', - component: 'ApiSelect', - colProps: { span: 6 }, - componentProps: ({ formModel }) => { - return { - api: GetSaleUserList, - labelField: 'userName', - valueField: 'id', - resultField: 'data', - filterOption: (input: string, option: any) => { - return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 - }, - onChange: (e, obj) => { - if (obj) { - formModel.saleName = obj.label - } - if (!obj && !e) { - formModel.saleName = '' - } - }, - } - }, - }, - { - label: '操作', - field: 'operatorId', - component: 'ApiSelect', - colProps: { span: 6 }, - componentProps: ({ formModel }) => { - return { - api: GetSaleUserList, - labelField: 'userName', - valueField: 'id', - resultField: 'data', - filterOption: (input: string, option: any) => { - return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 - }, - onChange: (e, obj) => { - if (obj) { - formModel.opName = obj.label - - } - if (!obj && !e) { - formModel.opName = '' - } - }, - } - }, - }, - { - label: '单证', - field: 'docId', - component: 'ApiSelect', - colProps: { span: 6 }, - componentProps: ({ formModel }) => { - return { - api: GetVouchingClerkList, - labelField: 'userName', - valueField: 'id', - resultField: 'data', - filterOption: (input: string, option: any) => { - return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 - }, - onChange: (e, obj) => { - if (obj) { - formModel.docName = obj.label - - } - if (!obj && !e) { - formModel.docName = '' - } - }, - } - }, - }, - { - label: '客服', - field: 'custserviceId', - component: 'ApiSelect', - colProps: { span: 6 }, - componentProps: ({ formModel }) => { - return { - api: GetCustomerServiceList, - labelField: 'userName', - valueField: 'id', - resultField: 'data', - filterOption: (input: string, option: any) => { - return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 - }, - onChange: (e, obj) => { - if (obj) { - formModel.custserviceName = obj.label - - } - if (!obj && !e) { - formModel.custserviceName = '' - } - }, - } - }, - }, - { - label: '商务', - field: 'businessid', - component: 'ApiSelect', - colProps: { span: 6 }, - componentProps: ({ formModel }) => { - return { - api: GetSaleUserList, - labelField: 'userName', - valueField: 'id', - resultField: 'data', - filterOption: (input: string, option: any) => { - return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 - }, - onChange: (e, obj) => { - if (obj) { - formModel.business = obj.label - - } - if (!obj && !e) { - formModel.business = '' - } - }, - } - }, - }, - { - label: '航线操作', - field: 'routeID', - component: 'ApiSelect', - colProps: { span: 6 }, - componentProps: ({ formModel }) => { - return { - api: GetSaleUserList, - labelField: 'userName', - valueField: 'id', - resultField: 'data', - filterOption: (input: string, option: any) => { - return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 - }, - onChange: (e, obj) => { - if (obj) { - formModel.route = obj.label - - } - if (!obj && !e) { - formModel.route = '' - } - }, - } - }, - }, - { - label: '航线管理', - field: 'lineManageID', - component: 'ApiSelect', - colProps: { span: 6 }, - componentProps: ({ formModel }) => { - return { - api: GetSaleUserList, - labelField: 'userName', - valueField: 'id', - resultField: 'data', - filterOption: (input: string, option: any) => { - return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 - }, - onChange: (e, obj) => { - if (obj) { - formModel.lineManage = obj.label - - } - if (!obj && !e) { - formModel.lineManage = '' - } - }, - } - }, - }, - { - field: 'shipper', - label: 'SHIPPER', - component: 'Input', - colProps: { span: 6 }, - }, - { - field: 'goodsname', - label: '品名', - component: 'Input', - colProps: { span: 6 }, - }, - { - field: 'saleTime', - label: '销售日期', - component: 'DatePicker', - defaultValue: dayjs().format('YYYY-MM-DD'), - colProps: { span: 6 }, - componentProps: { - allowClear: true, - valueFormat: 'YYYY-MM-DD', - format: 'YYYY-MM-DD', - }, - }, - { - field: 'sellingPrice', - label: '卖价', - component: 'InputNumber', - colProps: { span: 6 }, - }, - { - field: 'czRemark', - label: '操作备注', - component: 'Input', - colProps: { span: 24 }, - }, - { - field: 'shenQingXiangShi', - label: '申请箱使', - component: 'Input', - colProps: { span: 24 }, - }, -] - - diff --git a/src/views/bookingcabin/generation/index.vue b/src/views/bookingcabin/generation/index.vue index dc162c9a..911e9728 100644 --- a/src/views/bookingcabin/generation/index.vue +++ b/src/views/bookingcabin/generation/index.vue @@ -14,13 +14,14 @@
-
服务项目
+
服务项目
-
{{ - item.name }}
+
{{ + item.name }}
-
+
选择箱型
@@ -50,21 +51,403 @@ import { ref, watch, onMounted } from 'vue' import { BasicModal, useModalInner } from '/@/components/Modal' import { BasicForm, useForm } from '/@/components/Form/index' -import { getAvailableCtnsBySlot, CreateBookingOrder, GetEnableProjectDictTreeList } from './api' -import { formSchema } from './columns' +import { getAvailableCtnsBySlot, CreateBookingOrder, GetEnableProjectDictTreeList,CreateBookingAndSlot } from './api' import { useMessage } from '/@/hooks/web/useMessage' const { createMessage } = useMessage() +import { BasicColumn, FormSchema } from '/@/components/Table' +import { GetControllerClientList, GetSaleUserList, GetCustomerServiceList, GetVouchingClerkList } from '/@/views/operation/seaexport/api/BookingLedger' +import { GetClientInfoWithContact } from './api' +import dayjs from 'dayjs'; +const customerContactAllList = ref([]) //接口获取的联系人信息 +const formSchema: FormSchema[] = [ + { + label: '', + field: 'id', + component: 'Input', + defaultValue: '', + show: false, + }, + { + field: 'slotNo', + label: '订舱编号', + component: 'Input', + slot: 'slotNo', + show: ({ values }) => { + if (generationType.value === 'cabin') { + return true + } + }, + colProps: { span: 24 }, + }, + { + field: 'generateMethod', + label: '生成方式', + component: 'RadioGroup', + show: ({ values }) => { + if (generationType.value === 'task') { + return true + } + }, + componentProps: ({ formModel }) => { + return { + options:[ + {label: '更新订舱', value: 'UPD_BOOKING' }, + {label: '直接生成舱位和订舱', value: 'GEN_BOOKING_SLOT' }, + {label: '只生成订舱', value: 'GEN_BOOKING' }, + {label: '只生成舱位', value: 'GEN_SLOT' }, + {label: '匹配已有订舱', value: 'GEN_EXIST_BOOKING' } + ] + } + }, + colProps: { span: 24 }, + }, + { + field: 'isDirectSend', + component: 'CheckboxGroup', + show: ({ values }) => { + if (generationType.value === 'task') { + return true + } + }, + componentProps: ({ formModel }) => { + return { + options:[ + {label: '是否直接发送邮件给订舱联系人', value: 'isDirectSend' }, + ] + } + }, + colProps: { span: 24 }, + }, + { + label: '委托单位', + field: 'customerId', + component: 'ApiSelect', + required: false, + dynamicDisabled: false, + colProps: { span: 12 }, + componentProps: ({ formModel }) => { + return { + api: () => { + return new Promise((resolve) => { + GetControllerClientList().then((res) => { + resolve(res) + }) + }) + }, + immediate: false, + 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.customerName = obj.label + const data = { + "clientId": obj.value, + "isController": true + } + GetClientInfoWithContact(data).then(res => { + customerContactAllList.value = res.data.clientContactList + if (res.data.saleId) { + formModel.saleId = res.data.saleId + } + if (res.data.op) { + formModel.operatorId = res.data.op + } + if (res.data.doc) { + formModel.docId = res.data.doc + } + if (res.data.customerService) { + formModel.custserviceId = res.data.customerService + } + }) + } + if (!obj && !e) { + formModel.customerName = '' + } + }, + } + }, + }, + { + field: 'customerContactId', + label: '联系人', + component: 'Select', + componentProps: ({ formModel }) => { + return { + mode: "multiple", + fieldNames: { + label: 'shortName', + value: 'id', + }, + options: customerContactAllList.value, + onChange: (e, obj) => { + if (obj) { + formModel.customerContactList = obj + } + if (!obj && !e) { + formModel.customerContactList = [] + } + }, + } + }, + colProps: { span: 12 }, + }, + { + field: 'customerContactList', + label: '联系人信息', + slot: 'customerContactList', + component: 'Input', + show: ({ values }) => { + if (values.customerContactList && values.customerContactList.length > 0) { + return true + } + }, + colProps: { span: 24 }, + }, + { + label: '销售', + field: 'saleId', + component: 'ApiSelect', + colProps: { span: 6 }, + componentProps: ({ formModel }) => { + return { + api: GetSaleUserList, + labelField: 'userName', + valueField: 'id', + resultField: 'data', + filterOption: (input: string, option: any) => { + return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }, + onChange: (e, obj) => { + if (obj) { + formModel.saleName = obj.label + } + if (!obj && !e) { + formModel.saleName = '' + } + }, + } + }, + }, + { + label: '操作', + field: 'operatorId', + component: 'ApiSelect', + colProps: { span: 6 }, + componentProps: ({ formModel }) => { + return { + api: GetSaleUserList, + labelField: 'userName', + valueField: 'id', + resultField: 'data', + filterOption: (input: string, option: any) => { + return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }, + onChange: (e, obj) => { + if (obj) { + formModel.opName = obj.label + + } + if (!obj && !e) { + formModel.opName = '' + } + }, + } + }, + }, + { + label: '单证', + field: 'docId', + component: 'ApiSelect', + colProps: { span: 6 }, + componentProps: ({ formModel }) => { + return { + api: GetVouchingClerkList, + labelField: 'userName', + valueField: 'id', + resultField: 'data', + filterOption: (input: string, option: any) => { + return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }, + onChange: (e, obj) => { + if (obj) { + formModel.docName = obj.label + + } + if (!obj && !e) { + formModel.docName = '' + } + }, + } + }, + }, + { + label: '客服', + field: 'custserviceId', + component: 'ApiSelect', + colProps: { span: 6 }, + componentProps: ({ formModel }) => { + return { + api: GetCustomerServiceList, + labelField: 'userName', + valueField: 'id', + resultField: 'data', + filterOption: (input: string, option: any) => { + return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }, + onChange: (e, obj) => { + if (obj) { + formModel.custserviceName = obj.label + + } + if (!obj && !e) { + formModel.custserviceName = '' + } + }, + } + }, + }, + { + label: '商务', + field: 'businessid', + component: 'ApiSelect', + colProps: { span: 6 }, + componentProps: ({ formModel }) => { + return { + api: GetSaleUserList, + labelField: 'userName', + valueField: 'id', + resultField: 'data', + filterOption: (input: string, option: any) => { + return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }, + onChange: (e, obj) => { + if (obj) { + formModel.business = obj.label + + } + if (!obj && !e) { + formModel.business = '' + } + }, + } + }, + }, + { + label: '航线操作', + field: 'routeID', + component: 'ApiSelect', + colProps: { span: 6 }, + componentProps: ({ formModel }) => { + return { + api: GetSaleUserList, + labelField: 'userName', + valueField: 'id', + resultField: 'data', + filterOption: (input: string, option: any) => { + return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }, + onChange: (e, obj) => { + if (obj) { + formModel.route = obj.label + + } + if (!obj && !e) { + formModel.route = '' + } + }, + } + }, + }, + { + label: '航线管理', + field: 'lineManageID', + component: 'ApiSelect', + colProps: { span: 6 }, + componentProps: ({ formModel }) => { + return { + api: GetSaleUserList, + labelField: 'userName', + valueField: 'id', + resultField: 'data', + filterOption: (input: string, option: any) => { + return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0 + }, + onChange: (e, obj) => { + if (obj) { + formModel.lineManage = obj.label + + } + if (!obj && !e) { + formModel.lineManage = '' + } + }, + } + }, + }, + { + field: 'shipper', + label: 'SHIPPER', + component: 'Input', + colProps: { span: 6 }, + }, + { + field: 'goodsname', + label: '品名', + component: 'Input', + colProps: { span: 6 }, + }, + { + field: 'saleTime', + label: '销售日期', + component: 'DatePicker', + defaultValue: dayjs().format('YYYY-MM-DD'), + colProps: { span: 6 }, + componentProps: { + allowClear: true, + valueFormat: 'YYYY-MM-DD', + format: 'YYYY-MM-DD', + }, + }, + { + field: 'sellingPrice', + label: '卖价', + component: 'InputNumber', + colProps: { span: 6 }, + }, + { + field: 'czRemark', + label: '操作备注', + component: 'Input', + colProps: { span: 24 }, + }, + { + field: 'shenQingXiangShi', + label: '申请箱使', + component: 'Input', + colProps: { span: 24 }, + }, +] const [registerForm, { resetFields, setFieldsValue, getFieldsValue }] = useForm({ labelWidth: 150, schemas: formSchema, showActionButtonGroup: false, }) +const generationType = ref('') +const taskId = ref('') const [registerModal, { setModalProps, closeModal }] = useModalInner((data) => { resetFields() - if (data.type === 'init') { - console.log(1231233) + generationType.value = data.type + if (data.type === 'cabin') { setFieldsValue(data.row) - init(data.row) + cabinInit(data.row) + } + if (data.type === 'task') { + taskInit() + taskId.value = data.taskId } }) const projectList = ref([]) as any @@ -85,7 +468,6 @@ onMounted(() => { function handleClickPro(index) { projectList.value[index].active = !projectList.value[index].active } -const type = ref('') const CtnList = ref([]) as any const ctnListCopy = ref([]) as any const slotEdit = ref({}) as any @@ -120,9 +502,8 @@ watch(CtnList, (nval, Old) => { } }, { deep: true }) - -function init(row) { - type.value = 'cabin' +// 舱位生成初始化 +function cabinInit(row) { setModalProps({ loading: true }) getAvailableCtnsBySlot({ slotId: row.id }).then(res => { if (res.succeeded) { @@ -143,11 +524,19 @@ function init(row) { setModalProps({ loading: false }) }) } +// 任务生成初始化 +function taskInit() { + setFieldsValue({generateMethod:'GEN_BOOKING'}) +} function handleSave() { - if (type.value === 'cabin') { + if (generationType.value === 'cabin') { handleSaveCabin() } + if (generationType.value === 'task') { + handleSaveTask() + } } +// 舱位生成保存 function handleSaveCabin() { const projectArr = [] as any projectList.value.forEach(item => { @@ -172,8 +561,8 @@ function handleSaveCabin() { } const ApiData = { slotId: slotEdit.value.id, - projectList:projectArr, - ctnList:CtnList.value, + projectList: projectArr, + ctnList: CtnList.value, ...getFieldsValue() } setModalProps({ loading: true }) @@ -182,12 +571,38 @@ function handleSaveCabin() { closeModal() createMessage.success(res.message) } else { - createMessage.error(res.message) + createMessage.error(res.data.msg) + } + setModalProps({ loading: false }) + }) +} +// 任务生成保存 +function handleSaveTask(){ + const projectArr = [] as any + projectList.value.forEach(item => { + if (item.active) { + projectArr.push(item.code) + } + }) + const ApiData = { + projectList: projectArr, + bcTaskId: taskId.value, + ...getFieldsValue() + } + setModalProps({ loading: true }) + CreateBookingAndSlot(ApiData).then(res => { + if (res.succeeded) { + closeModal() + createMessage.success(res.message) + } else { + createMessage.error(res.data.msg) } setModalProps({ loading: false }) }) } + + \ No newline at end of file diff --git a/src/views/taskmanage/taskList/taskStyle.less b/src/views/taskmanage/taskList/taskStyle.less index 7360e13a..f772f33c 100644 --- a/src/views/taskmanage/taskList/taskStyle.less +++ b/src/views/taskmanage/taskList/taskStyle.less @@ -1,6 +1,7 @@ .LeftHead { display: flex; justify-content: space-between; + margin-bottom: 10px; .title { font-size: 12px; font-weight: 700; @@ -10,6 +11,7 @@ font-size: 12px; font-weight: 700; color: black; + margin-bottom: 0px; } } @@ -30,7 +32,7 @@ margin-bottom: 16px; .title { - font-size: 15px; + font-size: 12px; font-weight: 700; color: black; } @@ -46,7 +48,7 @@ display: flex; .unit { - margin-right: 15px; + margin-right: 1px; padding: 0 5px; } } diff --git a/src/views/taskmanage/taskList/transPlanHasChange.vue b/src/views/taskmanage/taskList/transPlanHasChange.vue index fa889738..6626c1b8 100644 --- a/src/views/taskmanage/taskList/transPlanHasChange.vue +++ b/src/views/taskmanage/taskList/transPlanHasChange.vue @@ -1,3 +1,464 @@ \ No newline at end of file +
+ +
+
+

+ + 货物运输计划已变更 {{ taskData.carrier }} +

+

时间:{{ taskData.createTime }}

+
+ + +
提单号
+ {{ taskData.billNo }} +
+ +
此订舱号派生自原单号
+ {{ taskData.origBillNo }} +
+
+ + +
订舱号
+ {{ taskData.bookingNo }} +
+ +
集装箱号
+ {{ taskData.contaNoList }} +
+
+ + +
变更原因
+ {{ taskData.changeReasonNotes }} +
+
+
+
+
+
出运计划
+
+
+
+
港口名,国家,码头
+
+ {{ item.portName }},{{ item.countryCode }},{{ item.terminalName }}
+
+
+
预计离港日
+
+ {{ item.dateVal }}
+
+
+
船名,航次,船旗
+
+ {{ item.vessel }},{{ item.voyno }},{{ item.flag }}
+
+
+
+
+
+
到达计划
+
+
+
+
港口名,国家,码头
+
+ {{ item.portName }},{{ item.countryCode }},{{ item.terminalName }}
+
+
+
预计到港日
+
+ {{ item.dateVal }}
+
+
+
船名,航次,船旗
+
+ {{ item.vessel }},{{ item.voyno }},{{ item.flag }}
+
+
+
+ + + +
+
+ + + \ No newline at end of file diff --git a/src/views/taskmanage/taskList/vgmDetail.vue b/src/views/taskmanage/taskList/vgmDetail.vue index ffc8fff3..474ac7c6 100644 --- a/src/views/taskmanage/taskList/vgmDetail.vue +++ b/src/views/taskmanage/taskList/vgmDetail.vue @@ -1,3 +1,137 @@ \ No newline at end of file +
+ +
+
+

VGM + mission + submission + ({{ carrier }} ) +

+

时间:{{ time }}

+
+ + +
+
-
+
+
+ + +
+
-
+
+ + {{ record.vgmWeight }} {{ record.vgmWeightUnit }} + +
+ +
+
+
+ + + + \ No newline at end of file