feature-JimuReport-1106-yjl
sunzehua 1 month ago
commit 50a5b98599

@ -12,7 +12,7 @@ VITE_PUBLIC_PATH = /
# Cross-domain proxy, you can configure multiple # Cross-domain proxy, you can configure multiple
# Please note that no line breaks # Please note that no line breaks
# VITE_PROXY = [["/basic-api","http:///60.209.125.238"],["/upload","http://localhost:3300/upload"]] # VITE_PROXY = [["/basic-api","http://60.209.125.238"],["/upload","http://localhost:3300/upload"]]
VITE_PROXY=[["/api","http://118.190.144.189:3008"],["/stage-api","https://www.666cxf.com/stage-api"]] # 开发 测试环境 VITE_PROXY=[["/api","http://118.190.144.189:3008"],["/stage-api","https://www.666cxf.com/stage-api"]] # 开发 测试环境
# Delete console # Delete console

@ -10,6 +10,7 @@ enum Api {
list = '/mainApi/Role/GetRoleList', list = '/mainApi/Role/GetRoleList',
editRole = '/mainApi/Role/EditRole', editRole = '/mainApi/Role/EditRole',
getRole = '/mainApi/Role/GetRoleInfo', getRole = '/mainApi/Role/GetRoleInfo',
deleteRole = '/mainApi/Role/DelRole',
getPermissionTree = '/mainApi/Role/GetClientRolePermissionTree', getPermissionTree = '/mainApi/Role/GetClientRolePermissionTree',
getRolePermission = '/mainApi/Role/GetRolePermission', getRolePermission = '/mainApi/Role/GetRolePermission',
updateRolePermission = '/mainApi/Role/UpdateClientRolePermission', updateRolePermission = '/mainApi/Role/UpdateClientRolePermission',
@ -46,6 +47,15 @@ export function getRoleList(data: PageRequest) {
}) })
} }
export function deleteRole(data: PageRequest) {
return request<DataResult>({
url: Api.deleteRole,
method: 'post',
data,
})
}
export function editRole(data: any) { export function editRole(data: any) {
return request<DataResult>({ return request<DataResult>({
url: Api.editRole, url: Api.editRole,

@ -124,6 +124,10 @@
return { label: item.ctn, value: item.ctnCode, name: item.ctn, isCtn: true } return { label: item.ctn, value: item.ctnCode, name: item.ctn, isCtn: true }
}) })
} }
res.forEach(item => {
item.label = item.label + '-' + item.enName
})
console.log([...b, ...res])
unitDict.value = [...b, ...res] unitDict.value = [...b, ...res]
}) })
} }
@ -249,7 +253,7 @@
source: async (query, process) => { source: async (query, process) => {
if (unitDict.value && unitDict.value.length) { if (unitDict.value && unitDict.value.length) {
const dict = unitDict.value.map((item) => { const dict = unitDict.value.map((item) => {
return item.name return item.label
}) })
process(dict) process(dict)
} }
@ -666,6 +670,9 @@
}) })
if (item) dict = item[0] if (item) dict = item[0]
list.value[changes[0][0]]['unit'] = dict?.value list.value[changes[0][0]]['unit'] = dict?.value
if (changes[0][3].indexOf('-') > -1) {
changes[0][3] = changes[0][3].split('-')[0]
}
list.value[changes[0][0]]['unitText'] = changes[0][3] list.value[changes[0][0]]['unitText'] = changes[0][3]
if (dict && dict?.value && dict.isCtn) { if (dict && dict?.value && dict.isCtn) {
// //

@ -21,6 +21,7 @@
:all-default-values="defaultValueRef" :all-default-values="defaultValueRef"
:form-model="formModel" :form-model="formModel"
:set-form-model="setFormModel" :set-form-model="setFormModel"
@click="handleClick(formModel, schema)"
> >
<template v-for="item in Object.keys($slots)" #[item]="data"> <template v-for="item in Object.keys($slots)" #[item]="data">
<slot :name="item" v-bind="data || {}"></slot> <slot :name="item" v-bind="data || {}"></slot>
@ -313,6 +314,10 @@
initDefault() initDefault()
emit('register', formActionType) emit('register', formActionType)
}) })
const handleClick = (data, field) => {
console.log(data)
console.log(field)
}
return { return {
getBindValue, getBindValue,
handleToggleAdvanced, handleToggleAdvanced,
@ -320,6 +325,7 @@
formModel, formModel,
defaultValueRef, defaultValueRef,
advanceState, advanceState,
handleClick,
getRow, getRow,
getProps, getProps,
formElRef, formElRef,

@ -231,9 +231,9 @@
const ids = res.data.map(item => { const ids = res.data.map(item => {
return item.id return item.id
}) })
GetPrintInfo({ businessType: 1, ids, id: props.bookingData.id }).then(res => { GetPrintInfo({ businessType: 1, ids, id: props.bookingData.id, value: 'ProfitAccountingReport' }).then(res => {
const postData = { const postData = {
jsonDataStr: JSON.stringify(res.data.details) || '', jsonDataStr: JSON.stringify(res.data) || '',
printType: type, printType: type,
templateId: item.id templateId: item.id
} }

@ -202,6 +202,7 @@ h5 {
.YFD, .YFD,
.YFC, .YFC,
.YSDBC, .YSDBC,
.WTJ,
.YDC { .YDC {
padding: 4px 13px; padding: 4px 13px;
border-radius: 30px; border-radius: 30px;

@ -219,6 +219,9 @@
</a-button> </a-button>
</template> </template>
</BasicModal> </BasicModal>
<a-modal v-model:visible="visible" title="驳回" width="40%" @ok="handleOk">
<BasicForm @register="modalRegisterForml" />
</a-modal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, computed, unref, watchEffect, watch } from 'vue' import { ref, computed, unref, watchEffect, watch } from 'vue'

@ -867,57 +867,58 @@
} }
IsAvailable({ IsAvailable({
...values, ...values,
...getFieldsValue1(), ...getFieldsValue(),
}) })
.then((res) => { .then((res) => {
IsAvailableDisabled.value = true IsAvailableDisabled.value = true
notification.success({ message: '校验成功', duration: 3 }) notification.success({ message: '校验成功', duration: 3 })
}) })
.catch(async (err) => { .catch(async (err) => {
const clientRes = await getCodeGoodsTypeInfo({ id: unref(rowId) })
let clientTagData: any = '' let clientTagData: any = ''
if (clientRes.data.clientTag) {
values.clientTag = {}
let ClientTag = await getDictOption('infoclient-ArrclientTag')
Object.keys(clientRes.data.clientTag).forEach((item, index) => {
ClientTag.forEach((e) => {
if (item == e.value && clientRes.data.clientTag[item]) {
clientTagData = clientTagData == '' ? e.name : `${clientTagData},${e.name}`
}
})
})
}
let SaleData: any = '' let SaleData: any = ''
if (clientRes.data.saleId) { if (rowId.value) {
const UserRes = await getUser({ id: clientRes.data.saleId }) const clientRes = await getCodeGoodsTypeInfo({ id: unref(rowId) })
SaleData = h('div', { class: 'UserRes' }, [ if (clientRes.data.clientTag) {
h( values.clientTag = {}
'span', let ClientTag = await getDictOption('infoclient-ArrclientTag')
{ style: { width: '50%', display: 'inline-block' } }, Object.keys(clientRes.data.clientTag).forEach((item, index) => {
`销售名称:${UserRes.data.userName ? UserRes.data.userName : '-'} `, ClientTag.forEach((e) => {
), if (item == e.value && clientRes.data.clientTag[item]) {
h( clientTagData = clientTagData == '' ? e.name : `${clientTagData},${e.name}`
'span', }
{ style: { width: '50%', display: 'inline-block' } }, })
` 英文名称:${UserRes.data.userEnName ? UserRes.data.userEnName : '-'}`, })
), }
h( if (clientRes.data.saleId) {
'span', const UserRes = await getUser({ id: clientRes.data.saleId })
{ style: { width: '50%', display: 'inline-block' } }, SaleData = h('div', { class: 'UserRes' }, [
`联系方式:${UserRes.data.officePhone ? UserRes.data.officePhone : '-'} `, h(
), 'span',
h( { style: { width: '50%', display: 'inline-block' } },
'span', `销售名称:${UserRes.data.userName ? UserRes.data.userName : '-'} `,
{ style: { width: '50%', display: 'inline-block' } }, ),
`QQ${UserRes.data.QQ ? UserRes.data.QQ : '-'}`, h(
), 'span',
h( { style: { width: '50%', display: 'inline-block' } },
'span', ` 英文名称:${UserRes.data.userEnName ? UserRes.data.userEnName : '-'}`,
{ style: { width: '50%', display: 'inline-block' } }, ),
`邮箱:${UserRes.data.email ? UserRes.data.email : '-'}`, h(
), 'span',
]) { style: { width: '50%', display: 'inline-block' } },
`联系方式:${UserRes.data.officePhone ? UserRes.data.officePhone : '-'} `,
),
h(
'span',
{ style: { width: '50%', display: 'inline-block' } },
`QQ${UserRes.data.QQ ? UserRes.data.QQ : '-'}`,
),
h(
'span',
{ style: { width: '50%', display: 'inline-block' } },
`邮箱:${UserRes.data.email ? UserRes.data.email : '-'}`,
),
])
}
} }
Modal.confirm({ Modal.confirm({

@ -2280,3 +2280,11 @@ export function RefundPool(data) {
}) })
} }
// 退舱
export function CreateRefundAuditTask(data) {
return request({
url: '/opApi/SeaExportRefund/CreateRefundAuditTask',
method: 'post',
data
})
}

@ -6,7 +6,7 @@
import { ref } from 'vue' import { ref } from 'vue'
import { BasicColumn, FormSchema } from '/@/components/Table' import { BasicColumn, FormSchema } from '/@/components/Table'
// 下拉框数据接口 // 下拉框数据接口
import { GetClientListByCode, GetCarrierSelectList } from '/@/api/common' import { GetClientListByCode, GetCarrierSelectList, GetSupplierListByCode } from '/@/api/common'
// 接口 // 接口
import { import {
GetControllerClientList, GetControllerClientList,
@ -116,6 +116,17 @@ export const searchFormSchema: FormSchema[] = [
allowClear: true, allowClear: true,
}, },
}, },
{
field: 'closeDocDate',
label: '截单时间',
component: 'RangePicker',
required: false,
dynamicDisabled: false,
colProps: { span: 4 },
componentProps: {
allowClear: true,
},
},
{ {
label: '操作', label: '操作',
field: 'operatorId', field: 'operatorId',
@ -512,12 +523,12 @@ export const columns: BasicColumn[] = [
{ {
dataIndex: 'lstDraftCompareRlt', dataIndex: 'lstDraftCompareRlt',
title: '格式单比对', title: '格式单比对',
width: 120, width: 100,
}, },
{ {
dataIndex: 'lstShipOrderCompareRlt', dataIndex: 'lstShipOrderCompareRlt',
title: '下货纸比对', title: '下货纸比对',
width: 120, width: 100,
}, },
{ {
dataIndex: 'arFeeStatus', dataIndex: 'arFeeStatus',
@ -565,7 +576,7 @@ export const columns: BasicColumn[] = [
value: '9', value: '9',
}, },
], ],
width: 120, width: 100,
}, },
{ {
dataIndex: 'apFeeStatus', dataIndex: 'apFeeStatus',
@ -613,36 +624,36 @@ export const columns: BasicColumn[] = [
value: '9', value: '9',
}, },
], ],
width: 120, width: 100,
}, },
{ {
dataIndex: 'arInvoiceStatus', dataIndex: 'arInvoiceStatus',
title: '应收开票', title: '应收开票',
sorter: true, sorter: true,
width: 120, width: 100,
}, },
{ {
dataIndex: 'apInvoiceStatus', dataIndex: 'apInvoiceStatus',
title: '应付开票', title: '应付开票',
sorter: true, sorter: true,
width: 120, width: 100,
}, },
{ {
dataIndex: 'arCheckStatus', dataIndex: 'arCheckStatus',
title: '应收对账', title: '应收对账',
sorter: true, sorter: true,
width: 120, width: 100,
}, },
{ {
dataIndex: 'isBusinessLocking', dataIndex: 'isBusinessLocking',
title: '业务锁定', title: '业务锁定',
sorter: true, sorter: true,
width: 100 width: 80
}, },
{ {
dataIndex: 'isFeeLocking', dataIndex: 'isFeeLocking',
title: '费用锁定', title: '费用锁定',
width: 100, width: 80,
sorter: true sorter: true
}, },
{ {
@ -688,7 +699,7 @@ export const columns: BasicColumn[] = [
width: 130, width: 130,
}, },
{ {
title: '截单日期', title: '截单时间',
sorter: true, sorter: true,
dataIndex: 'closeDocDate', dataIndex: 'closeDocDate',
width: 90, width: 90,
@ -703,25 +714,25 @@ export const columns: BasicColumn[] = [
title: '中转港', title: '中转港',
dataIndex: 'transport', dataIndex: 'transport',
sorter: true, sorter: true,
width: 130, width: 120,
}, },
{ {
dataIndex: 'yard', dataIndex: 'yard',
title: '场站', title: '场站',
sorter: true, sorter: true,
width: 130 width: 120
}, },
{ {
dataIndex: 'customser', dataIndex: 'customser',
title: '报关行', title: '报关行',
sorter: true, sorter: true,
width: 130 width: 120
}, },
{ {
dataIndex: 'trucker', dataIndex: 'trucker',
title: '承运车队', title: '承运车队',
sorter: true, sorter: true,
width: 130 width: 120
}, },
// { // {
// dataIndex: 'termDelivery', // dataIndex: 'termDelivery',
@ -739,31 +750,31 @@ export const columns: BasicColumn[] = [
dataIndex: 'shipper', dataIndex: 'shipper',
title: '发货人', title: '发货人',
sorter: true, sorter: true,
width: 150 width: 120
}, },
{ {
dataIndex: 'consignee', dataIndex: 'consignee',
title: '收货人', title: '收货人',
sorter: true, sorter: true,
width: 150 width: 120
}, },
{ {
dataIndex: 'notifyParty', dataIndex: 'notifyParty',
title: '通知人', title: '通知人',
width: 150, width: 120,
sorter: true sorter: true
}, },
{ {
title: '收货地', title: '收货地',
dataIndex: 'receiptPlace', dataIndex: 'receiptPlace',
sorter: true, sorter: true,
width: 150, width: 120,
}, },
{ {
dataIndex: 'kindPkgsName', dataIndex: 'kindPkgsName',
title: '包装', title: '包装',
sorter: true, sorter: true,
width: 150 width: 120
}, },
{ {
title: '件数', title: '件数',
@ -787,7 +798,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'marks', dataIndex: 'marks',
title: `唛头`, title: `唛头`,
sorter: true, sorter: true,
width: 100, width: 80,
}, },
{ {
dataIndex: 'description', dataIndex: 'description',
@ -840,13 +851,13 @@ export const columns: BasicColumn[] = [
title: '签单地点', title: '签单地点',
sorter: true, sorter: true,
dataIndex: 'issuePlace', dataIndex: 'issuePlace',
width: 150, width: 120,
}, },
{ {
dataIndex: 'noBill', dataIndex: 'noBill',
sorter: true, sorter: true,
title: '提单份数', title: '提单份数',
width: 150, width: 80,
customRender: ({ record }) => { customRender: ({ record }) => {
let name = '' let name = ''
FnnoBill.value.some((item) => { FnnoBill.value.some((item) => {
@ -862,7 +873,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'copyNoBill', dataIndex: 'copyNoBill',
title: '副本份数', title: '副本份数',
sorter: true, sorter: true,
width: 150, width: 80,
customRender: ({ record }) => { customRender: ({ record }) => {
let name = '' let name = ''
FncopyNoBill.value.some((item) => { FncopyNoBill.value.some((item) => {
@ -878,13 +889,13 @@ export const columns: BasicColumn[] = [
dataIndex: 'mblFrt', dataIndex: 'mblFrt',
title: '付费方式', title: '付费方式',
sorter: true, sorter: true,
width: 150 width: 100
}, },
{ {
dataIndex: 'prepareAt', dataIndex: 'prepareAt',
title: '预付地点', title: '预付地点',
sorter: true, sorter: true,
width: 150 width: 120
}, },
{ {
dataIndex: 'note', dataIndex: 'note',
@ -1199,7 +1210,7 @@ export const BatchModificationFormSchema: FormSchema[] = [
colProps: { span: 4 }, colProps: { span: 4 },
componentProps: () => { componentProps: () => {
return { return {
api: GetCustomClientList, api: GetSupplierListByCode,
labelField: 'shortName', labelField: 'shortName',
valueField: 'id', valueField: 'id',
resultField: 'data', resultField: 'data',

@ -41,7 +41,7 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, nextTick, defineProps, defineComponent, onMounted, defineExpose, watch } from 'vue' import { ref, nextTick, defineProps, defineComponent, onMounted, defineExpose, watch, defineEmits } from 'vue'
import { HotTable } from '@handsontable/vue3' import { HotTable } from '@handsontable/vue3'
import 'handsontable/dist/handsontable.full.min.css' import 'handsontable/dist/handsontable.full.min.css'
import { GetOpCtnList, BatchDelBillManageCtn } from '/@/views/operation/seaexport/api/BookingLedger' import { GetOpCtnList, BatchDelBillManageCtn } from '/@/views/operation/seaexport/api/BookingLedger'
@ -52,6 +52,7 @@
defineComponent({ defineComponent({
HotTable, HotTable,
}) })
const emits = defineEmits(['calcPkgs'])
const props = defineProps({ const props = defineProps({
// id // id
id: { id: {
@ -205,6 +206,33 @@
if (item) dict = item[0] if (item) dict = item[0]
list.value[changes[0][0]]['kindPkgs'] = dict?.ediCode list.value[changes[0][0]]['kindPkgs'] = dict?.ediCode
} }
//
if (changes[0][1] === 'pkgs') {
//
let pkgs = 0
list.value.forEach(item => {
if (item.pkgs) pkgs = pkgs + Number(item.pkgs)
})
emits('calcPkgs', { key: 'pkgs', value: pkgs })
}
//
if (changes[0][1] === 'kgs') {
//
let kgs = 0
list.value.forEach(item => {
if (item.kgs) kgs = kgs + Number(item.kgs)
})
emits('calcPkgs', { key: 'kgs', value: kgs })
}
//
if (changes[0][1] === 'cbm') {
//
let cbm = 0
list.value.forEach(item => {
if (item.cbm) cbm = cbm + Number(item.cbm)
})
emits('calcPkgs', { key: 'cbm', value: cbm })
}
}) })
} }
} }

@ -614,9 +614,9 @@ export const formSchema3: FormSchema[] = [
} }
formModel.pkgs = pkgs formModel.pkgs = pkgs
formActionType ? formActionType.submit() : null formActionType ? formActionType.submit() : null
}, }
} }
}, }
}, },
{ {
label: '总件数', label: '总件数',
@ -639,7 +639,7 @@ export const formSchema3: FormSchema[] = [
show: false, show: false,
}, },
{ {
label: '毛重(公斤)', label: '毛重',
field: 'grossWeight', field: 'grossWeight',
component: 'InputTextArea', component: 'InputTextArea',
required: false, required: false,
@ -647,7 +647,7 @@ export const formSchema3: FormSchema[] = [
componentProps: ({ formModel }) => { componentProps: ({ formModel }) => {
return { return {
autoSize: { minRows: 3, maxRows: 3 }, autoSize: { minRows: 3, maxRows: 3 },
onInput: (e) => { onkeyup: (e) => {
const arr = e.currentTarget._value.split('\n') const arr = e.currentTarget._value.split('\n')
let pkgs = 0 let pkgs = 0
for (let i = 0; i < arr.length; i++) { for (let i = 0; i < arr.length; i++) {
@ -661,18 +661,18 @@ export const formSchema3: FormSchema[] = [
} }
} }
formModel.kgs = pkgs formModel.kgs = pkgs
}, }
} }
}, }
}, },
{ {
label: '总KGS', label: '总KGS',
field: 'kgs', field: 'kgs',
component: 'Input', component: 'Input',
colProps: { span: 24 }, colProps: { span: 24 },
}, },
{ {
label: '尺码(立方米)', label: '尺码',
field: 'measurement', field: 'measurement',
component: 'InputTextArea', component: 'InputTextArea',
required: false, required: false,
@ -680,7 +680,7 @@ export const formSchema3: FormSchema[] = [
componentProps: ({ formModel }) => { componentProps: ({ formModel }) => {
return { return {
autoSize: { minRows: 3, maxRows: 3 }, autoSize: { minRows: 3, maxRows: 3 },
onInput: (e) => { onkeyup: (e) => {
const arr = e.currentTarget._value.split('\n') const arr = e.currentTarget._value.split('\n')
let pkgs = 0 let pkgs = 0
for (let i = 0; i < arr.length; i++) { for (let i = 0; i < arr.length; i++) {

@ -101,6 +101,7 @@
:mainId="activeId" :mainId="activeId"
:setFieldsValue="setFieldsValue3" :setFieldsValue="setFieldsValue3"
:ctnInfo="ctnInfo" :ctnInfo="ctnInfo"
@calcPkgs="calcPkgs"
></container> ></container>
<!-- ETD表单 --> <!-- ETD表单 -->
<BasicForm style="margin-top: 8px;" @register="ETDForm" @linkageForm="linkageETDForm" /> <BasicForm style="margin-top: 8px;" @register="ETDForm" @linkageForm="linkageETDForm" />
@ -361,6 +362,29 @@
}) })
} }
//
const calcPkgs = (obj) => {
if (obj.value) {
if (obj.key == 'pkgs') {
setFieldsValue3({
noPkgs: obj.value,
pkgs: obj.value
})
}
if (obj.key == 'kgs') {
setFieldsValue3({
grossWeight: obj.value,
kgs: obj.value
})
}
if (obj.key == 'cbm') {
setFieldsValue3({
measurement: obj.value,
cbm: obj.value
})
}
}
}
// //
const list = ref([]) const list = ref([])
onMounted(() => { onMounted(() => {

@ -99,12 +99,12 @@
rejectText="驳回任务" rejectText="驳回任务"
:approve="approveDc" :approve="approveDc"
:source="source" :source="source"
:status="route.query.status == 'WAIT_SI' ? 'WAIT_SI' : undefined" :status="route.query.status == 'WAIT_SI' ? 'WAIT_SI' : (route.query.status == 'RETURN_CABIN_AUDIT' ? 'RETURN_CABIN_AUDIT' : undefined)"
:id="id" :id="id"
businessType="1" businessType="1"
> >
<span> <span>
<a-button class="ml10" v-repeat v-if="refreshFlag && route.query.status != 'RETURN_CABIN_POOL' && route.query.status != 'WAIT_ORDER_AUDIT' && route.query.source != 'Complete'" @click="save(true)" type="primary"> <a-button class="ml10" v-repeat v-if="refreshFlag && route.query.status != 'RETURN_CABIN_POOL' && route.query.status != 'WAIT_ORDER_AUDIT' && route.query.status != 'RETURN_CABIN_AUDIT' && route.query.source != 'Complete'" @click="save(true)" type="primary">
{{ completeText }} {{ completeText }}
</a-button> </a-button>
<a-button class="ml10" v-repeat v-if="route.query.status == 'RETURN_CABIN_POOL' && route.query.source != 'Complete'" @click="save('cjtc')" type="primary"> <a-button class="ml10" v-repeat v-if="route.query.status == 'RETURN_CABIN_POOL' && route.query.source != 'Complete'" @click="save('cjtc')" type="primary">
@ -1152,7 +1152,7 @@
// } // }
// // cvisible.value = false // // cvisible.value = false
// } // }
// // ***(SI退)
const approveDc = async (remark) => { const approveDc = async (remark) => {
if (!remark) { if (!remark) {
// //

@ -2,7 +2,7 @@ import { BasicColumn, FormSchema } from '/@/components/Table'
import Space from '/@/views/operation/seaexport/components/Space.vue' import Space from '/@/views/operation/seaexport/components/Space.vue'
import { useComponentRegister } from '/@/components/Form' import { useComponentRegister } from '/@/components/Form'
// 下拉框数据接口 // 下拉框数据接口
import { GetClientListByCode } from '/@/api/common' import { GetClientListByCode, GetSupplierListByCode } from '/@/api/common'
import { t } from '/@/hooks/web/useI18n' import { t } from '/@/hooks/web/useI18n'
useComponentRegister('Space', Space) useComponentRegister('Space', Space)
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
@ -436,7 +436,7 @@ export const formSchema: FormSchema[] = [
colProps: { span: 8 }, colProps: { span: 8 },
componentProps: ({ formModel }) => { componentProps: ({ formModel }) => {
return { return {
api: GetClientListByCode, api: GetSupplierListByCode,
params: { code: 'yard' }, params: { code: 'yard' },
labelField: 'pinYinCode', labelField: 'pinYinCode',
showName: 'shortName', showName: 'shortName',
@ -468,13 +468,6 @@ export const formSchema: FormSchema[] = [
field: 'yardTel', field: 'yardTel',
component: 'Input', component: 'Input',
defaultValue: null, defaultValue: null,
rules: [
{
pattern: /^1\d{10}$/,
message: '请输入正确格式的手机号',
trigger: 'blur',
},
],
colProps: { colProps: {
span: 8 span: 8
} }

@ -102,6 +102,11 @@ const salerCodeDict = ref([])
getDictOption('saler_code').then((data) => { getDictOption('saler_code').then((data) => {
salerCodeDict.value = data salerCodeDict.value = data
}) })
// 退舱类型字典
const returnCabinDict = ref([])
getDictOption('return_cabin_type').then((data) => {
returnCabinDict.value = data
})
// 往来单位集合 // 往来单位集合
// GetMultiClientList().then(res => { // GetMultiClientList().then(res => {
// console.log(res) // console.log(res)
@ -869,7 +874,7 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
}, },
{ {
field: 'openPortDate', field: 'openPortDate',
label: '开港时间', label: '截VGM时间',
component: 'DatePicker', component: 'DatePicker',
required: false, required: false,
dynamicDisabled: false, dynamicDisabled: false,
@ -1195,60 +1200,18 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
// 备注信息表单 // 备注信息表单
export const noteFormSchema: FormSchema[] = [ export const noteFormSchema: FormSchema[] = [
{ // {
field: 'agentContent', // field: 'agentContent',
label: 'AGENT', // label: 'AGENT',
component: 'InputTextArea', // component: 'InputTextArea',
required: false, // required: false,
dynamicDisabled: false, // dynamicDisabled: false,
// defaultValue: '', // // defaultValue: '',
colProps: { span: 8 }, // colProps: { span: 8 },
componentProps: { // componentProps: {
autoSize: { minRows: 3, maxRows: 3 }, // autoSize: { minRows: 3, maxRows: 3 },
}, // },
}, // },
{
field: 'soRemark',
label: 'SO备注',
component: 'InputTextArea',
required: false,
dynamicDisabled: false,
// defaultValue: '',
colProps: { span: 8 },
componentProps: ({ formModel }) => {
return {
autoSize: { minRows: 3, maxRows: 3 },
enInput: true,
oninput: () => {
formModel.soRemark = formModel.soRemark.replace(/[\u4e00-\u9fa5]/ig,'')
formModel.soRemark = ToCDB(formModel.soRemark)
formModel.soRemark = formModel.soRemark.toUpperCase()
formModel.soRemark = removeTrailingSpaces(formModel.soRemark)
}
}
}
},
{
field: 'closeDocRemark',
label: 'SI备注',
component: 'InputTextArea',
required: false,
dynamicDisabled: false,
// defaultValue: '',
colProps: { span: 8 },
componentProps: ({ formModel }) => {
return {
autoSize: { minRows: 3, maxRows: 3 },
enInput: true,
oninput: () => {
formModel.closeDocRemark = formModel.closeDocRemark.replace(/[\u4e00-\u9fa5]/ig,'')
formModel.closeDocRemark = ToCDB(formModel.closeDocRemark)
formModel.closeDocRemark = formModel.closeDocRemark.toUpperCase()
formModel.closeDocRemark = removeTrailingSpaces(formModel.closeDocRemark)
}
}
}
},
{ {
field: 'issueType', field: 'issueType',
label: '签单方式', label: '签单方式',
@ -1786,6 +1749,48 @@ export const ediMoreFormSchema: FormSchema[] = [
required: false, required: false,
colProps: { span: 5 }, colProps: { span: 5 },
}, },
{
field: 'soRemark',
label: 'SO备注',
component: 'InputTextArea',
required: false,
dynamicDisabled: false,
// defaultValue: '',
colProps: { span: 12 },
componentProps: ({ formModel }) => {
return {
autoSize: { minRows: 3, maxRows: 3 },
enInput: true,
oninput: () => {
formModel.soRemark = formModel.soRemark.replace(/[\u4e00-\u9fa5]/ig,'')
formModel.soRemark = ToCDB(formModel.soRemark)
formModel.soRemark = formModel.soRemark.toUpperCase()
formModel.soRemark = removeTrailingSpaces(formModel.soRemark)
}
}
}
},
{
field: 'closeDocRemark',
label: 'SI备注',
component: 'InputTextArea',
required: false,
dynamicDisabled: false,
// defaultValue: '',
colProps: { span: 12 },
componentProps: ({ formModel }) => {
return {
autoSize: { minRows: 3, maxRows: 3 },
enInput: true,
oninput: () => {
formModel.closeDocRemark = formModel.closeDocRemark.replace(/[\u4e00-\u9fa5]/ig,'')
formModel.closeDocRemark = ToCDB(formModel.closeDocRemark)
formModel.closeDocRemark = formModel.closeDocRemark.toUpperCase()
formModel.closeDocRemark = removeTrailingSpaces(formModel.closeDocRemark)
}
}
}
},
] ]
export const mastetMoreFormSchema: FormSchema[] = [ export const mastetMoreFormSchema: FormSchema[] = [
@ -2823,7 +2828,7 @@ export const otherInfoFormSchema: FormSchema[] = [
componentProps: ({ formModel }) => { componentProps: ({ formModel }) => {
return { return {
api: GetSupplierListByCode, api: GetSupplierListByCode,
params: { code: 'isShipAgency' }, params: { code: 'shipagency' },
labelField: 'pinYinCode', labelField: 'pinYinCode',
showName: 'description', showName: 'description',
valueField: 'shortName', valueField: 'shortName',
@ -3277,5 +3282,52 @@ export const changeForm: FormSchema[] = [
dynamicDisabled: false, dynamicDisabled: false,
defaultValue: true, defaultValue: true,
colProps: { span: 21 }, colProps: { span: 21 },
}
]
// 退舱表单
export const returnCabinForm: FormSchema[] = [
{
field: 'orderProgress',
label: '订单进程',
component: 'Select',
dynamicDisabled: false,
colProps: { span: 21 },
required: true,
componentProps: () => {
return {
options: [
{ label: '已审未出号', value: 1 },
{ label: '已出号未申报', value: 2 },
{ label: '已申报', value: 3 }
]
}
}
}, },
{
field: 'refundReason',
label: '退舱类型',
component: 'Select',
dynamicDisabled: false,
colProps: { span: 21 },
required: true,
componentProps: () => {
return {
options: returnCabinDict.value
}
}
},
{
field: 'refundRemark',
label: '备注',
defaultValue: '',
component: 'InputTextArea',
colProps: { span: 21 },
componentProps: {
autoSize: {
minRows: 3
},
disTrans: true
}
}
] ]

@ -608,10 +608,12 @@
v-model:visible="returnCabinFlag" v-model:visible="returnCabinFlag"
title="退舱确认" title="退舱确认"
> >
<BasicForm @register="registerFormR" /> <a-spin :spinning="cabinLoad">
<BasicForm @register="registerFormR" />
</a-spin>
<template #footer> <template #footer>
<a-button @click="returnCabinFlag = false"> </a-button> <a-button v-repeat @click="returnCabinFlag = false"> </a-button>
<a-button type="primary" @click="handleCancelCabin">退 </a-button> <a-button v-repeat type="primary" @click="handleCancelCabin">退 </a-button>
</template> </template>
</a-modal> </a-modal>
</div> </div>
@ -640,7 +642,7 @@
UploadOcrFile, UploadOcrFile,
GetOcrImg, GetOcrImg,
DownloadBookingOrClosingEDI, DownloadBookingOrClosingEDI,
CancelAllocationSlot, CreateRefundAuditTask,
GetOcrText, GetOcrText,
SendTrace, SendTrace,
SubmitTelex, SubmitTelex,
@ -664,7 +666,7 @@
import { columns, searchFormSchema } from './operationAreaColumns' import { columns, searchFormSchema } from './operationAreaColumns'
import { BasicTable, useTable, TableAction } from '/@/components/Table' import { BasicTable, useTable, TableAction } from '/@/components/Table'
import { fileForm } from '/@/views/taskmanage/columns' import { fileForm } from '/@/views/taskmanage/columns'
import { changeForm } from './baseInfo' import { changeForm, returnCabinForm } from './baseInfo'
import { UploadBcThenRunTask } from '/@/views/taskmanage/api' import { UploadBcThenRunTask } from '/@/views/taskmanage/api'
const emit = defineEmits([ const emit = defineEmits([
'refresh', 'refresh',
@ -1132,7 +1134,7 @@
// 退 // 退
const [registerFormR, { validate: validater, setFieldsValue: setFieldsValuer }] = useForm({ const [registerFormR, { validate: validater, setFieldsValue: setFieldsValuer }] = useForm({
labelWidth: 100, labelWidth: 100,
schemas: changeForm, schemas: returnCabinForm,
showActionButtonGroup: false, showActionButtonGroup: false,
}) })
// //
@ -1660,9 +1662,34 @@
OcrVisible.value = false OcrVisible.value = false
CvBoxType.value = false CvBoxType.value = false
} }
function handleCancelCabin() { async function handleCancelCabin(b) {
cabinLoad.value = true cabinLoad.value = true
const postData = await validater()
postData['id'] = props.details.id
if (b) postData['isReserveFee'] = true
CreateRefundAuditTask(postData).then(res => {
cabinLoad.value = false
returnCabinFlag.value = false
if (res.message == '存在业务相关费用,是否保留费用?') {
Modal.confirm({
title: '提示',
okText: '确定',
cancelText: '取消',
content: res.message,
onOk() {
handleCancelCabin(true)
},
onCancel() {
console.log('Cancel')
}
})
} else {
createMessage.success(res.message)
}
}).catch(() => {
cabinLoad.value = false
returnCabinFlag.value = false
})
} }
function removeOrder() { function removeOrder() {
emit('removeOrder') emit('removeOrder')

@ -9,7 +9,7 @@ import {
GetVoynoSelectList, GetVoynoSelectList,
GetVesselSelectList, GetVesselSelectList,
} from '/@/views/operation/seaexport/api/BookingLedger' } from '/@/views/operation/seaexport/api/BookingLedger'
import { GetClientListByCode, GetCarrierSelectList } from '/@/api/common' import { GetClientListByCode, GetCarrierSelectList, GetSupplierListByCode } from '/@/api/common'
import { pl } from 'element-plus/es/locales.mjs' import { pl } from 'element-plus/es/locales.mjs'
let countryList = [] let countryList = []
// 基础信息表单 // 基础信息表单
@ -616,7 +616,7 @@ export const yardSchema: FormSchema[] = [
colProps: { span: 12 }, colProps: { span: 12 },
componentProps: ({ formModel }) => { componentProps: ({ formModel }) => {
return { return {
api: GetClientListByCode, api: GetSupplierListByCode,
params: { code: 'yard' }, params: { code: 'yard' },
labelField: 'pinYinCode', labelField: 'pinYinCode',
placeholder: '场站', placeholder: '场站',

@ -18,7 +18,7 @@
<span v-else-if="record.businessStatusName == ''" class="YFC">{{ record.businessStatusName }}</span> <span v-else-if="record.businessStatusName == ''" class="YFC">{{ record.businessStatusName }}</span>
<span v-else-if="record.businessStatusName == 'BC'" class="YSDBC">{{ record.businessStatusName }}</span> <span v-else-if="record.businessStatusName == 'BC'" class="YSDBC">{{ record.businessStatusName }}</span>
<span v-else-if="record.businessStatusName == ''" class="YDC">{{ record.businessStatusName }}</span> <span v-else-if="record.businessStatusName == ''" class="YDC">{{ record.businessStatusName }}</span>
<span v-else>{{ record.businessStatusName }}</span> <span v-else class="WTJ">{{ record.businessStatusName || '未提交' }}</span>
</template> </template>
<!-- 委托编号 --> <!-- 委托编号 -->
<template v-if="column.dataIndex == 'customerNo'"> <template v-if="column.dataIndex == 'customerNo'">
@ -722,6 +722,11 @@ onMounted(() => {
background: #F2FAE8; background: #F2FAE8;
} }
.WTJ {
color: #8C8C8C;
background: #F0F0F0;
}
.YSDAN { .YSDAN {
color: #007D75; color: #007D75;
background: #EDFAED; background: #EDFAED;

@ -21,6 +21,17 @@
tooltip: '授权', tooltip: '授权',
onClick: handlePermission.bind(null, record), onClick: handlePermission.bind(null, record),
}, },
{
icon: 'ant-design:delete-outlined',
tooltip: '删除',
color: 'error',
popConfirm: {
title: '是否要删除此条数据?',
okText: '是',
cancelText: '否',
confirm: handleDelete.bind(null, record),
},
},
]" ]"
/> />
</template> </template>
@ -33,12 +44,13 @@
<script lang="ts" setup> <script lang="ts" setup>
import { defineComponent, onMounted, ref } from 'vue' import { defineComponent, onMounted, ref } from 'vue'
import { BasicTable, useTable, TableAction } from '/@/components/Table' import { BasicTable, useTable, TableAction } from '/@/components/Table'
import { getRoleList } from '/@/api/system/role' import { getRoleList, deleteRole } from '/@/api/system/role'
import { useModal } from '/@/components/Modal' import { useModal } from '/@/components/Modal'
import RoleModal from './RoleModal.vue' import RoleModal from './RoleModal.vue'
import RolePermissionModal from './RolePermissionModal.vue' import RolePermissionModal from './RolePermissionModal.vue'
import { columns, searchFormSchema } from './columns' import { columns, searchFormSchema } from './columns'
const dictOptions = ref<any[]>([]) import { useMessage } from '../../../hooks/web/useMessage'
const { createMessage } = useMessage()
const [registerModal, { openModal }] = useModal() const [registerModal, { openModal }] = useModal()
const [registerPermissionModal, { openModal: openPermissionModal }] = useModal() const [registerPermissionModal, { openModal: openPermissionModal }] = useModal()
const [registerTable, { reload, getForm, getPaginationRef }] = useTable({ const [registerTable, { reload, getForm, getPaginationRef }] = useTable({
@ -114,8 +126,17 @@
isUpdate: true, isUpdate: true,
}) })
} }
function handleDelete(record: Recordable) { //
console.log(record) async function handleDelete(record: Recordable) {
const res = await deleteRole({
id: record.id
})
if (res.succeeded) {
createMessage.success(res.message)
reload()
} else {
createMessage.warning(res.message)
}
} }
function handleSuccess() { function handleSuccess() {

@ -68,7 +68,7 @@ const columns = [
align: 'center' align: 'center'
}, },
{ {
title: '开港时间', title: '截VGM时间',
width: 100, width: 100,
dataIndex: 'cyOpenDateTxt', dataIndex: 'cyOpenDateTxt',
key: 'cyOpenDateTxt', key: 'cyOpenDateTxt',

Loading…
Cancel
Save