szh-new
张同海 5 months ago
parent 7e6621f4e3
commit 4be3791139

@ -4,6 +4,7 @@ export default {
cancelText: 'Cancel',
loadingText: 'Loading...',
saveText: 'Save',
addText: 'Add',
delText: 'Delete',
resetText: 'Reset',
editText: 'Edit',

@ -4,6 +4,7 @@ export default {
cancelText: '取消',
loadingText: '加载中...',
saveText: '保存',
addText: '新建',
delText: '删除',
resetText: '重置',
editText: '编辑',

@ -57,30 +57,32 @@
showActionButtonGroup: false,
})
const [registerModal, { setModalProps, closeModal, updateFormField }] = useModalInner(async (data) => {
resetFields()
setModalProps({ confirmLoading: false, loading: true })
isUpdate.value = !!data?.isUpdate
if (unref(isUpdate)) {
// setModalProps({ confirmLoading: true });
rowId.value = data.record.id
updateFormField(updateSchema)
const res: API.DataResult = await ApiInfo({ id: unref(rowId) })
if (res.succeeded) {
setFieldsValue({
...res.data,
})
// console.log('Form', getFieldsValue());
// setFieldsValue({ trainId: unref(res.data.trainId) });
const [registerModal, { setModalProps, closeModal, updateFormField }] = useModalInner(
async (data) => {
resetFields()
setModalProps({ confirmLoading: false, loading: true })
isUpdate.value = !!data?.isUpdate
if (unref(isUpdate)) {
// setModalProps({ confirmLoading: true });
rowId.value = data.record.id
updateFormField(updateSchema)
const res: API.DataResult = await ApiInfo({ id: unref(rowId) })
if (res.succeeded) {
setFieldsValue({
...res.data,
})
// console.log('Form', getFieldsValue());
// setFieldsValue({ trainId: unref(res.data.trainId) });
}
// setModalProps({ confirmLoading: false });
} else {
setFieldsValue({ permissionIdentity: unref(2) })
}
// setModalProps({ confirmLoading: false });
} else {
setFieldsValue({ permissionIdentity: unref(2) })
}
setModalProps({ loading: false })
})
setModalProps({ loading: false })
},
)
const getTitle = computed(() => (!unref(isUpdate) ? '新增集装箱信息' : '编辑集装箱信息'))
const getTitle = computed(() => (!unref(isUpdate) ? '新增第三方账户' : '编辑第三方账户'))
async function handleSave(exit) {
try {

@ -0,0 +1,56 @@
// @ts-ignore
import { request } from '/@/utils/request'
import { DataResult, PageRequest } from '/@/api/model/baseModel'
enum Api {
list = '/financeApi/BusinessLocking/GetBusinessLockingList',
BLocking = '/financeApi/BusinessLocking/BusinessLocking',
BUnLocking = '/financeApi/BusinessLocking/BusinessUnLocking',
FLocking = '/financeApi/BusinessLocking/FeeLocking',
FUnLocking = '/financeApi/BusinessLocking/FeeUnLocking',
}
// 列表 (Auth)
export function ApiList(data: PageRequest) {
return request<DataResult>({
url: Api.list,
method: 'post',
data,
})
}
// 业务锁定 (Auth)
export function ApiBLocking(data: PageRequest) {
return request<DataResult>({
url: Api.BLocking,
method: 'post',
data,
})
}
// 业务解除锁定 (Auth)
export function ApiBUnLocking(data: PageRequest) {
return request<DataResult>({
url: Api.BUnLocking,
method: 'post',
data,
})
}
// 费用锁定 (Auth)
export function ApiFLocking(data: PageRequest) {
return request<DataResult>({
url: Api.FLocking,
method: 'post',
data,
})
}
// 费用解除锁定 (Auth)
export function ApiFUnLocking(data: PageRequest) {
return request<DataResult>({
url: Api.FUnLocking,
method: 'post',
data,
})
}

@ -0,0 +1,487 @@
import { BasicColumn, FormSchema } from '/@/components/Table'
import { Tag } from 'ant-design-vue'
export const columns: BasicColumn[] = [
{
title: '主提单号',
dataIndex: 'mblno',
sorter: true,
width: 150,
},
{
title: '是否业务锁定',
dataIndex: 'isBusinessLocking',
sorter: true,
width: 150,
customRender: ({ text }) => {
if (text) {
return <Tag color="success"></Tag>
} else {
return <Tag color="error"></Tag>
}
return text
},
},
{
title: '是否费用锁定',
dataIndex: 'isFeeLocking',
sorter: true,
width: 150,
customRender: ({ text }) => {
if (text) {
return <Tag color="success"></Tag>
} else {
return <Tag color="error"></Tag>
}
return text
},
},
{
title: '单据类型',
dataIndex: 'businessTypeName',
sorter: true,
width: 150,
},
{
title: '业务状态',
dataIndex: 'businessStatus',
sorter: true,
width: 150,
},
{
title: '分提单号',
dataIndex: 'hblno',
sorter: true,
width: 150,
},
{
title: '委托编号',
dataIndex: 'customerNo',
sorter: true,
width: 150,
},
{
title: '委托单位',
dataIndex: 'customerName',
sorter: true,
width: 150,
},
{
title: '装运方式',
dataIndex: 'blType',
sorter: true,
width: 150,
},
{
title: '场站',
dataIndex: 'yard',
sorter: true,
width: 150,
},
{
title: '船名',
dataIndex: 'vessel',
sorter: true,
width: 150,
},
{
title: '航次',
dataIndex: 'voyno',
sorter: true,
width: 150,
},
{
title: '开船日期',
dataIndex: 'etd',
sorter: true,
width: 150,
},
{
title: '预抵日期',
dataIndex: 'eta',
sorter: true,
width: 150,
},
{
title: 'ATD',
dataIndex: 'atd',
sorter: true,
width: 150,
},
{
title: 'ATA',
dataIndex: 'ata',
sorter: true,
width: 150,
},
{
title: '截港日期',
dataIndex: 'closingDate',
sorter: true,
width: 150,
},
{
title: '收货地',
dataIndex: 'receiptPlace',
sorter: true,
width: 150,
},
{
title: '装货港',
dataIndex: 'loadPort',
sorter: true,
width: 150,
},
{
title: '卸货港',
dataIndex: 'dischargePort',
sorter: true,
width: 150,
},
{
title: '目的地',
dataIndex: 'destination',
sorter: true,
width: 150,
},
{
title: '签单方式',
dataIndex: 'issueType',
sorter: true,
width: 150,
},
{
title: '运输条款 ',
dataIndex: 'service',
sorter: true,
width: 150,
},
{
title: '箱号封号',
dataIndex: 'cntrSealNo',
sorter: true,
width: 150,
},
{
title: '品名',
dataIndex: 'goodsName',
sorter: true,
width: 150,
},
{
title: '件数',
dataIndex: 'pkgs',
sorter: true,
width: 150,
},
{
title: '包装',
dataIndex: 'kindPkgs',
sorter: true,
width: 150,
},
{
title: '毛重',
dataIndex: 'kgs',
sorter: true,
width: 150,
},
{
title: '尺码',
dataIndex: 'cbm',
sorter: true,
width: 150,
},
{
title: '箱TEU',
dataIndex: 'teu',
sorter: true,
width: 150,
},
{
title: '集装箱',
dataIndex: 'cntrTotal',
sorter: true,
width: 150,
},
{
title: '客服',
dataIndex: 'customerService',
sorter: true,
width: 150,
},
{
title: '外国客服',
dataIndex: 'foreignCustomerService',
sorter: true,
width: 150,
},
{
title: '航线',
dataIndex: 'lane',
sorter: true,
width: 150,
},
{
title: '揽货人',
dataIndex: 'sale',
sorter: true,
width: 150,
},
{
title: '船公司',
dataIndex: 'carrier',
sorter: true,
width: 150,
},
{
title: '货代公司',
dataIndex: 'forwarder',
sorter: true,
width: 150,
},
{
title: '承运车队',
dataIndex: 'trucker',
sorter: true,
width: 150,
},
{
title: '发票号',
dataIndex: 'invoiceNo',
sorter: true,
width: 150,
},
{
title: '危险品分类',
dataIndex: 'dangerClass',
sorter: true,
width: 150,
},
{
title: '报关票数',
dataIndex: 'customsNum',
sorter: true,
width: 150,
},
{
title: '运费协议号',
dataIndex: 'contractNo',
sorter: true,
width: 150,
},
{
title: '订舱编号',
dataIndex: 'bookingNo',
sorter: true,
width: 150,
},
{
title: '是否生成凭证',
dataIndex: 'isVoucher',
sorter: true,
width: 150,
},
{
title: '凭证号',
dataIndex: 'voucherNo',
sorter: true,
width: 150,
},
{
title: '备注',
dataIndex: 'remark',
sorter: true,
width: 150,
},
{
title: '单证',
dataIndex: 'doc',
sorter: true,
width: 150,
},
{
title: '截单日期',
dataIndex: 'closeDocDate',
sorter: true,
width: 150,
},
{
title: 'MBL付费方式',
dataIndex: 'mblFrt',
sorter: true,
width: 150,
},
{
title: '结算方式',
dataIndex: 'stlName',
sorter: true,
width: 150,
},
{
title: '月结算时间',
dataIndex: 'stlDate',
sorter: true,
width: 150,
},
{
title: '订舱编号',
dataIndex: 'orderNo',
sorter: true,
width: 150,
},
{
title: '服务合同号',
dataIndex: 'serviceContractNo',
sorter: true,
width: 150,
},
{
title: '申请放箱号',
dataIndex: 'applyNo',
sorter: true,
width: 150,
},
{
title: '报关单号',
dataIndex: 'customNo',
sorter: true,
width: 150,
},
{
title: '商检单号',
dataIndex: 'inspectionNo',
sorter: true,
width: 150,
},
{
title: '商检日期',
dataIndex: 'inspectionDate',
sorter: true,
width: 150,
},
{
title: '贸易条款',
dataIndex: 'tradeTerm',
sorter: true,
width: 150,
},
{
title: '船代',
dataIndex: 'shipAgency',
sorter: true,
width: 150,
},
{
title: '是否打印小票',
dataIndex: 'isPrintReceipt',
sorter: true,
width: 150,
},
{
title: '交货日期',
dataIndex: 'deliveryDate',
sorter: true,
width: 150,
},
{
title: '创建时间',
dataIndex: 'createTime',
sorter: true,
width: 150,
},
{
title: '销售人',
dataIndex: 'saleName',
sorter: true,
width: 150,
},
{
title: '操作人员',
dataIndex: 'operatorName',
sorter: true,
width: 150,
},
{
title: '应收开票状态',
dataIndex: 'arInvoiceStatus',
sorter: true,
width: 150,
},
{
title: '应付开票状态',
dataIndex: 'apInvoiceStatus',
sorter: true,
width: 150,
},
{
title: '应收对账状态',
dataIndex: 'arCheckStatus',
sorter: true,
width: 150,
},
{
title: '整单费用状态时间',
dataIndex: 'billFeeStatusTime',
sorter: true,
width: 150,
},
{
title: '业务锁定人',
dataIndex: 'businessLockingUserName',
sorter: true,
width: 150,
},
{
title: '业务锁定时间',
dataIndex: 'businessLockingTime',
sorter: true,
width: 150,
},
{
title: '业务解锁人',
dataIndex: 'businessUnLockingUserName',
sorter: true,
width: 150,
},
{
title: '业务解锁时间',
dataIndex: 'businessUnLockingTime',
sorter: true,
width: 150,
},
{
title: '费用锁定人',
dataIndex: 'feeLockingUserName',
sorter: true,
width: 150,
},
{
title: '费用锁定时间',
dataIndex: 'feeLockingTime',
sorter: true,
width: 150,
},
{
title: '用解锁人',
dataIndex: 'feeUnLockingUserName',
sorter: true,
width: 150,
},
{
title: '费用解锁时间',
dataIndex: 'feeUnLockingTime',
sorter: true,
width: 150,
},
]
export const searchFormSchema: FormSchema[] = [
{
field: 'mblno',
label: '主提单号',
component: 'Input',
colProps: { span: 6 },
},
]

@ -0,0 +1,160 @@
<template>
<div>
<BasicTable class="ds-table" @register="registerTable" @row-dbClick="handleAudit">
<template #tableTitle>
<a-button type="link" @click="BLocking">
<span class="iconfont icon-new_document"></span>
业务锁定
</a-button>
<a-button type="link" @click="BUnLocking">
<span class="iconfont icon-new_document"></span>
解除业务锁定
</a-button>
<a-button type="link" @click="FLocking">
<span class="iconfont icon-new_document"></span>
费用锁定
</a-button>
<a-button type="link" @click="FUnLocking">
<span class="iconfont icon-new_document"></span>
解除费用锁定
</a-button>
</template>
</BasicTable>
</div>
</template>
<script lang="ts" setup>
import { BasicTable, useTable } from '/@/components/Table'
import { ApiList, ApiBLocking, ApiBUnLocking, ApiFLocking, ApiFUnLocking } from './api'
import { columns, searchFormSchema } from './columns'
import { useMessage } from '/@/hooks/web/useMessage'
const { notification } = useMessage()
const [registerTable, { reload, getSelectRows }] = useTable({
title: '业务锁定列表',
api: async (p) => {
const res: API.DataResult = await ApiList(p)
return new Promise((resolve) => {
resolve({ data: [...res.data], total: res.count })
})
},
beforeFetch: (p) => {
const postParam: API.PageRequest = {
queryCondition: '',
pageCondition: {
pageIndex: p.current,
pageSize: p.pageSize,
sortConditions: [],
},
}
if (p.field) {
postParam.pageCondition.sortConditions = [
{
sortField: p.field,
listSortDirection: p.order == 'ascend' ? 0 : 1,
},
]
} else {
postParam.pageCondition.sortConditions = []
}
let condition: API.ConditionItem[] = []
if (!!p.mblno) {
condition.push({
FieldName: 'mblno',
FieldValue: p.mblno,
ConditionalType: 1,
})
}
postParam.queryCondition = JSON.stringify(condition)
return postParam
},
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,
})
function BLocking() {
if (getSelectRows().length) {
const ids = getSelectRows().map((res) => {
return res.id
})
const ApiData = {
ids,
}
ApiBLocking(ApiData).then((res) => {
if (res.succeeded) {
notification.success({ message: res.message, duration: 3 })
reload()
}
})
} else {
notification.warning({ message: '请至少选择一条数据', duration: 3 })
}
}
function BUnLocking() {
if (getSelectRows().length) {
const ids = getSelectRows().map((res) => {
return res.id
})
const ApiData = {
ids,
}
ApiBUnLocking(ApiData).then((res) => {
if (res.succeeded) {
notification.success({ message: res.message, duration: 3 })
reload()
}
})
} else {
notification.warning({ message: '请至少选择一条数据', duration: 3 })
}
}
function FLocking() {
if (getSelectRows().length) {
const ids = getSelectRows().map((res) => {
return res.id
})
const ApiData = {
ids,
}
ApiFLocking(ApiData).then((res) => {
if (res.succeeded) {
notification.success({ message: res.message, duration: 3 })
reload()
}
})
} else {
notification.warning({ message: '请至少选择一条数据', duration: 3 })
}
}
function FUnLocking() {
if (getSelectRows().length) {
const ids = getSelectRows().map((res) => {
return res.id
})
const ApiData = {
ids,
}
ApiFUnLocking(ApiData).then((res) => {
if (res.succeeded) {
notification.success({ message: res.message, duration: 3 })
reload()
}
})
} else {
notification.warning({ message: '请至少选择一条数据', duration: 3 })
}
}
</script>

@ -24,18 +24,29 @@
导入对账excel
</a-button>
</a-upload>
<a-button type="link">
<span class="iconfont icon-xiazai" @click="Fnawait"></span>
</a-button>
<a-button type="link"
><span class="iconfont icon-xiazai" @click="Fnawait"></span></a-button
>
<a-button type="link"
><span class="iconfont icon-xiazai" @click="Fnawait"></span></a-button
>
<a-button type="link"
><span class="iconfont icon-xiazai" @click="Fnawait"></span></a-button
<a-popconfirm
title="确定删除当前选中数据?"
ok-text="是"
cancel-text="否"
@confirm="DelDetail"
>
<a-button type="link">
<span class="iconfont icon-shanchu1"></span>
删除明细
</a-button>
</a-popconfirm>
<a-button type="link" @click="Recount">
<span class="iconfont icon-shuaxin"></span>重新匹配
</a-button>
<a-button type="link" @click="Create">
<span class="iconfont icon-xiazai"></span>生成对账单
</a-button>
<a-button type="link" @click="Cancel">
<span class="iconfont icon-duibi"></span>取消对账单
</a-button>
<!-- <a-button type="link" @click="Fnawait">
<span class="iconfont icon-xiazai"></span>生成付费申请
</a-button> -->
</template>
</BasicTable>
<template #footer>
@ -68,7 +79,16 @@
</template>
<script lang="ts" setup>
import { ref, computed, unref, watchEffect, watch } from 'vue'
import { ApiEdit, ApiInfo, ApiBasicsList, ApiImport } from './api'
import {
ApiEdit,
ApiInfo,
ApiBasicsList,
ApiImport,
ApiDelDetail,
ApiRecount,
ApiCreate,
ApiCancel,
} from './api'
import { GetClientListByCode } from '/@/api/common'
import { BasicForm, useForm } from '/@/components/Form/index'
import { BasicTable, useTable, TableAction } from '/@/components/Table'
@ -154,7 +174,7 @@
showActionButtonGroup: false,
})
// ------------------------------------------------------------------------------
const [registerTable, { reload, getRawDataSource }] = useTable({
const [registerTable, { reload, getSelectRows }] = useTable({
title: '',
api: async (p) => {
const res: API.DataResult = await ApiBasicsList(p)
@ -197,6 +217,7 @@
showTableSetting: false,
bordered: true,
showIndexColumn: true,
rowSelection: { type: 'checkbox' },
indexColumnProps: {
width: 60,
},
@ -225,6 +246,58 @@
}
})
}
function DelDetail() {
if (getSelectRows().length) {
const ids = getSelectRows().map((res) => {
return res.id
})
const ApiData = {
id: rowId.value,
ids,
}
ApiDelDetail(ApiData).then((res) => {
if (res.succeeded) {
notification.success({ message: res.message, duration: 3 })
reload()
}
})
} else {
notification.warning({ message: '请至少选择一条数据', duration: 3 })
}
}
function Recount() {
const ApiData = {
id: rowId.value,
}
ApiRecount(ApiData).then((res) => {
if (res.succeeded) {
notification.success({ message: res.message, duration: 3 })
reload()
}
})
}
function Create() {
const ApiData = {
id: rowId.value,
}
ApiCreate(ApiData).then((res) => {
if (res.succeeded) {
notification.success({ message: res.message, duration: 3 })
reload()
}
})
}
function Cancel() {
const ApiData = {
id: rowId.value,
}
ApiCancel(ApiData).then((res) => {
if (res.succeeded) {
notification.success({ message: res.message, duration: 3 })
reload()
}
})
}
function Fnawait() {
notification.warning({ message: '等待开发', duration: 3 })
}

@ -5,9 +5,19 @@ enum Api {
list = '/checkApi/CheckBillAuto/GetCheckBillAutoList',
edit = '/checkApi/CheckBillAuto/EditCheckBillAutoInfo',
info = '/checkApi/CheckBillAuto/GetCheckBillAutoInfo',
// 自动对账批量删除 (Auth)
del = '/checkApi/CheckBillAuto/BatchDelCheckBillAuto',
BasicsList = '/checkApi/CheckBillAuto/GetCheckBillAutoDetailList',
Import = '/checkApi/CheckBillAuto/ImportExcel',
// 对账明细批量删除 (Auth)
delDetail = '/checkApi/CheckBillAuto/BatchDelCheckBillAutoDetail',
// 自动对账重新匹配 (Auth)
recount = '/checkApi/CheckBillAuto/RecountCheckBillAuto',
// 生成对账单 (Auth)
create = '/checkApi/CheckBillAuto/CreateCheckBill',
// 取消生成的对账单 (Auth)
cancel = '/checkApi/CheckBillAuto/CancelCheckBill',
}
// 列表 (Auth)
export function ApiList(data: PageRequest) {
@ -33,6 +43,14 @@ export function ApiInfo(query) {
params: query,
})
}
// 删除 (Auth)
export function ApiDel(data) {
return request<DataResult>({
url: Api.del,
method: 'post',
data
})
}
// 自动对账明细列表 (Auth)
export function ApiBasicsList(data: PageRequest) {
@ -47,6 +65,40 @@ export function ApiImport(data) {
return request<DataResult>({
url: Api.Import,
method: 'post',
data:data.data,
data: data.data,
})
}
// 对账明细批量删除 (Auth)
export function ApiDelDetail(data) {
return request<DataResult>({
url: Api.delDetail,
method: 'post',
data: data,
})
}
// 自动对账重新匹配 (Auth)
export function ApiRecount(data) {
return request<DataResult>({
url: Api.recount,
method: 'post',
data: data,
})
}
// 生成对账单 (Auth)
export function ApiCreate(data) {
return request<DataResult>({
url: Api.create,
method: 'post',
data: data,
})
}
// 取消生成的对账单 (Auth)
export function ApiCancel(data) {
return request<DataResult>({
url: Api.cancel,
method: 'post',
data: data,
})
}

@ -4,17 +4,17 @@
<template #toolbar>
<a-button type="link" size="mini" @click="handleCreate">
<span class="iconfont icon-new_document"></span>
新建
{{ t('common.addText') }}
</a-button>
<a-popconfirm
title="确定删除当前选中数据?"
ok-text="是"
cancel-text="否"
@confirm="Fnawait"
@confirm="DelData"
>
<a-button type="link">
<span class="iconfont icon-shanchu1"></span>
删除
{{ t('common.delText') }}
</a-button>
</a-popconfirm>
</template>
@ -39,7 +39,7 @@
<script lang="ts" setup>
import { ref } from 'vue'
import { BasicTable, useTable, TableAction } from '/@/components/Table'
import { ApiList } from './api'
import { ApiList, ApiDel } from './api'
import { useModal } from '/@/components/Modal'
import TenantAuditStepModal from './TenantAuditStepModal.vue'
import { columns, searchFormSchema } from './columns'
@ -51,8 +51,9 @@
optionsStore.getOptionsByCode('GetVesselSelectList')
optionsStore.getOptionsByCode('GetCustomerServiceList')
optionsStore.getOptionsByCode('GetSaleList')
let sortInfo: SorterResult = {}
const [registerTable, { reload, getForm, getPaginationRef }] = useTable({
import { useI18n } from '/@/hooks/web/useI18n'
const { t } = useI18n()
const [registerTable, { reload, getForm, getSelectRows }] = useTable({
api: async (p) => {
const res: API.DataResult = await ApiList(p)
return new Promise((resolve) => {
@ -145,6 +146,25 @@
isUpdate: false,
})
}
//
function DelData() {
if (getSelectRows().length) {
const ids = getSelectRows().map((res) => {
return res.id
})
const postData = {
ids,
}
ApiDel(postData).then((res) => {
if (res.succeeded) {
notification.success({ message: '删除成功', duration: 3 })
handleSuccess()
}
})
} else {
notification.warning({ message: '请至少选择一条数据', duration: 3 })
}
}
function handleAudit(record: Recordable) {
openModal(true, {
record,

@ -1,4 +1,33 @@
Could not convert string to boolean: 1. Path 'smtpSSL', line 1, position 171
Could not convert string to boolean: 1. Path 'useImap', line 1, position 90
Could not convert string to boolean: 1. Path 'receiveSSL', line 1, position 125.
[
{
"ConditionalList": [
{
"Key": 1,
"Value": { "FieldName": "MBLNO", "FieldValue": "contains", "ConditionalType": "1" }
},
{
"Key": 1,
"Value": { "FieldName": "Id", "FieldValue": "contains", "ConditionalType": "1" }
},
{
"Key": 1,
"Value": {
"ConditionalList": [
{
"Key": 1,
"Value": { "FieldName": "Id", "FieldValue": "contains", "ConditionalType": "1" }
},
{
"Key": 1,
"Value": {
"FieldName": "AgentContent",
"FieldValue": "equal",
"ConditionalType": "123"
}
}
]
}
}
]
}
]

Loading…
Cancel
Save