发票+任务+舱位

feature-JimuReport-1106-yjl
sunzehua 4 weeks ago
parent 48d62f13e7
commit 2e42974af1

@ -13,7 +13,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://60.209.125.238:3008"],["/stage-api","https://www.666cxf.com/stage-api"]] # 开发 测试环境
# Delete console # Delete console
VITE_DROP_CONSOLE = false VITE_DROP_CONSOLE = false

@ -189,3 +189,11 @@ export function SaveRolling(parameter) {
data: parameter data: parameter
}) })
} }
export function GetRollingList(parameter) {
return request<DataResult>({
url: '/opApi/BookingSlotService/GetRollingList',
method: 'get',
params: parameter
})
}

@ -294,7 +294,7 @@ import { GetCtnSelectList, GetClientListByCode } from '/@/api/common'
import DsFile from '/@/components/File/index.vue' import DsFile from '/@/components/File/index.vue'
import { ref, nextTick, onMounted, watch } from 'vue' import { ref, nextTick, onMounted, watch } from 'vue'
import { import {
BookingSlotSave, BookingSlotDetail, SaveRolling BookingSlotSave, BookingSlotDetail, SaveRolling,GetRollingList
} from '../api' } from '../api'
import { import {
GetCustomerServiceList, GetSaleList, GetVouchingClerkList GetCustomerServiceList, GetSaleList, GetVouchingClerkList
@ -740,6 +740,11 @@ function getDetail() {
} }
loading.value = false loading.value = false
}) })
GetRollingList({ slotId: id.value }).then(res=>{
if(res.succeeded){
setTableData(res.data)
}
})
} }
const rollLoad = ref(false) const rollLoad = ref(false)
function handleSaveRoll(){ function handleSaveRoll(){
@ -932,6 +937,7 @@ function handleClick(item) {
item.ctnNum = 1 item.ctnNum = 1
}) })
} }
// //
function compareObjects(oldObj, newObj) { function compareObjects(oldObj, newObj) {
const differences = {}; const differences = {};

@ -215,6 +215,12 @@ export const columns: BasicColumn[] = [
width: 100, width: 100,
align: 'left', align: 'left',
}, },
{
title: '分单号',
dataIndex: 'hblNo',
width: 100,
align: 'left',
},
{ {
title: '提单签发状态', title: '提单签发状态',
dataIndex: 'statusName', dataIndex: 'statusName',
@ -222,11 +228,29 @@ export const columns: BasicColumn[] = [
align: 'left', align: 'left',
}, },
{ {
title: '签单方式', title: '提单类型',
dataIndex: 'blTypeName', dataIndex: 'blTypeName',
width: 100, width: 100,
align: 'left', align: 'left',
}, },
{
title: '业务类型',
dataIndex: 'busiTypeName',
width: 100,
align: 'left',
},
{
title: '签单方式',
dataIndex: 'issueType',
width: 100,
align: 'left',
},
{
title: '主单分单',
dataIndex: 'masterHBillName',
width: 100,
align: 'left',
},
{ {
title: '最近操作人', title: '最近操作人',
dataIndex: 'updateUserName', dataIndex: 'updateUserName',
@ -247,7 +271,7 @@ export const columns: BasicColumn[] = [
}, },
{ {
title: '结算方式', title: '结算方式',
dataIndex: 'createByName', dataIndex: 'stlName',
width: 100, width: 100,
align: 'left', align: 'left',
}, },
@ -299,12 +323,6 @@ export const columns: BasicColumn[] = [
width: 100, width: 100,
align: 'left', align: 'left',
}, },
{
title: '业务类型',
dataIndex: 'busiTypeName',
width: 100,
align: 'left',
},
{ {
title: '起运港', title: '起运港',
dataIndex: 'loadPort', dataIndex: 'loadPort',
@ -397,31 +415,31 @@ export const detailColumns: BasicColumn[] = [
{ {
title: '操作人', title: '操作人',
dataIndex: 'createUserName', dataIndex: 'createUserName',
width: 100, width: 80,
align: 'left', align: 'left',
}, },
{ {
title: '操作时间', title: '操作时间',
dataIndex: 'createTime', dataIndex: 'createTime',
width: 120, width: 130,
align: 'left', align: 'left',
}, },
{ {
title: '动作', title: '动作',
dataIndex: 'actionName', dataIndex: 'actionName',
width: 100, width: 80,
align: 'left', align: 'left',
}, },
{ {
title: '结果', title: '结果',
dataIndex: 'result', dataIndex: 'result',
width: 50, width: 45,
align: 'left', align: 'left',
}, },
{ {
title: '备注', title: '备注',
dataIndex: 'note', dataIndex: 'note',
width: 100, width: 90,
align: 'left', align: 'left',
}, },
] ]
@ -435,17 +453,17 @@ export const feeColumns: BasicColumn[] = [
{ {
title: 'RMB应收欠费(超期)', title: 'RMB应收欠费(超期)',
dataIndex: 'noPayAmountCNY', dataIndex: 'noPayAmountCNY',
width: 140, width: 130,
}, },
{ {
title: 'USD应收欠费(超期)', title: 'USD应收欠费(超期)',
dataIndex: 'noPayAmountUSD', dataIndex: 'noPayAmountUSD',
width: 140, width: 130,
}, },
{ {
title: '合计应收欠费(超期)', title: '合计应收欠费(超期)',
dataIndex: 'noPayAmountTotal', dataIndex: 'noPayAmountTotal',
width: 140, width: 130,
}, },

@ -1,7 +1,7 @@
<template> <template>
<div class="main"> <div class="main">
<div class="top"> <div class="top" style="padding-left: 14px;">
<BasicTable :rowClassName="rowClassName" height="600px" @row-click="handleClick" class="examine-table" @register="registerTable"> <BasicTable :rowClassName="rowClassName" @row-click="handleClick" class="examine-table" @register="registerTable">
<template #tableTitle> <template #tableTitle>
<div class="ds-h-aciton-btns-fee"> <div class="ds-h-aciton-btns-fee">
<a-tooltip placement="top" :mouseEnterDelay="0.5"> <a-tooltip placement="top" :mouseEnterDelay="0.5">
@ -129,9 +129,8 @@
</template> </template>
</BasicTable> </BasicTable>
</div> </div>
<div style="padding-left: 20px;"> <div style="padding-left: 20px;height: 250px">
<a-spin :spinning="loading"> <div style="display: flex;height: 100%;">
<div style="display: flex;">
<div class="left"> <div class="left">
<div class="title-bold">日志</div> <div class="title-bold">日志</div>
<BasicTable class="ds-mini-table-detail pay-table" @register="registerTable2"> <BasicTable class="ds-mini-table-detail pay-table" @register="registerTable2">
@ -139,29 +138,28 @@
</BasicTable> </BasicTable>
</div> </div>
<div class="middle"> <div class="middle">
<div style="display: flex"> <div style="display: flex;width: 100%;">
<div style="width: 65%;margin-right: 1%"> <div style="width: 63%;margin-right: 2%">
<div class="title-bold">欠费信息</div> <div class="title-bold">欠费信息</div>
<BasicTable class="ds-mini-table-detail pay-table" @register="registerTable3"> <BasicTable class="ds-mini-table-detail pay-table" @register="registerTable3">
</BasicTable> </BasicTable>
</div> </div>
<div style="width: 38%"> <div style="width: 35%">
<div class="title-bold" style="display: flex"> <div class="title-bold" style="display: flex;line-height: 18.84px;height: 18.84px">
<span>附件</span> <span>附件</span>
<DsFile @handleSuccess="fileSuccess" ref="dsFile" :showFileList="false" :id="bookid" <DsFile @handleSuccess="fileSuccess" ref="dsFile" :showFileList="false" :id="bookid" :show="false"
:show="false" height="300"> height="300">
<i style="margin-left: 15px;color: #257afa;cursor: pointer;" @click="addFile" <i style="margin-left: 15px;color: #257afa;cursor: pointer;" @click="addFile"
class="iconfont icon-fujian"></i> class="iconfont icon-fujian"></i>
</DsFile> </DsFile>
</div> </div>
<a-table size="small" :scroll="{ x: 200 }" :pagination="false" rowKey="id" <BasicTable class="ds-mini-table-detail pay-table" @register="registerTable5">
:columns="columnsFile" :data-source="fileData" bordered>
<template v-slot:bodyCell="{ column, record }"> <template v-slot:bodyCell="{ column, record }">
<template v-if="column.dataIndex == 'fileName'"> <template v-if="column.dataIndex == 'fileName'">
<a @click="download(record)">{{ record.fileName }}</a> <a @click="download(record)">{{ record.fileName }}</a>
</template> </template>
</template> </template>
</a-table> </BasicTable>
</div> </div>
</div> </div>
</div> </div>
@ -179,10 +177,9 @@
</div> </div>
</div> </div>
</div> </div>
</a-spin>
</div> </div>
<a-modal width="600px" @cancel="checkFlag = false" @ok="sureCheckIn" :visible="checkFlag" title="签入"> <a-modal width="600px" @cancel="checkFlag = false" @ok="sureCheckIn" :visible="checkFlag"
:title="checkType == 2 ? '签出' : '签入'">
<a-spin :spinning="loadingCheck"> <a-spin :spinning="loadingCheck">
<a-form :label-col="{ span: 4 }" :wrapper-col="{ span: 20 }" style="margin-top: 10px"> <a-form :label-col="{ span: 4 }" :wrapper-col="{ span: 20 }" style="margin-top: 10px">
<a-form-item label="签入日期"> <a-form-item label="签入日期">
@ -198,8 +195,8 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onMounted, defineExpose, computed } from 'vue' import { ref, reactive, onMounted, defineExpose, computed } from 'vue'
import { import {
GetList, GetList,
GetOpFileList, GetOpFileList,
BLCheckIn, BLCheckIn,
@ -218,16 +215,16 @@
GetOverdueFeeList, GetOverdueFeeList,
CommonExcelExport, CommonExcelExport,
DownloadOpFile, DownloadOpFile,
} from './api.js' } from './api.js'
import { BasicTable, useTable } from '/@/components/Table' import { BasicTable, useTable } from '/@/components/Table'
import { formatParams } from '/@/hooks/web/common' import { formatParams } from '/@/hooks/web/common'
import DsFile from '/@/components/File/index.vue' import DsFile from '/@/components/File/index.vue'
import { columns, searchFormSchema, detailColumns, feeColumns, feeColumnsSum } from './columns' import { columns, searchFormSchema, detailColumns, feeColumns, feeColumnsSum } from './columns'
import { useMessage } from '/@/hooks/web/useMessage' import { useMessage } from '/@/hooks/web/useMessage'
const { createMessage } = useMessage() const { createMessage } = useMessage()
const queryData = ref({}) const queryData = ref({})
const [registerTable, { reload, setLoading, getSelectRows, getForm, getColumns }] = useTable({ const [registerTable, { reload, setLoading, getSelectRows, getForm, getColumns }] = useTable({
maxHeight: 300, maxHeight: 380,
api: async (p) => { api: async (p) => {
const res: API.DataResult = await GetList(p) const res: API.DataResult = await GetList(p)
return new Promise((resolve) => { return new Promise((resolve) => {
@ -262,7 +259,7 @@
} }
} }
data.queryCondition = JSON.stringify(queryDataObj) data.queryCondition = JSON.stringify(queryDataObj)
data.OtherQueryCondition = obj data.otherQueryCondition = JSON.stringify(obj)
queryData.value = JSON.parse(JSON.stringify(data)) queryData.value = JSON.parse(JSON.stringify(data))
return data return data
}, },
@ -284,59 +281,65 @@
}, },
canResize: true, canResize: true,
immediate: true, immediate: true,
}) })
const columnsFile = [
const [registerTable2, { getSelectRows: getSelectRows2, setTableData }] = useTable({ {
title: '文件名称',
width: 100,
dataIndex: 'fileName',
},
{
title: '上传日期',
width: 100,
dataIndex: 'createTime',
},
{
title: '上传者',
width: 100,
dataIndex: 'createUserName',
},
]
const [registerTable2, { getSelectRows: getSelectRows2, setTableData }] = useTable({
columns: detailColumns, columns: detailColumns,
isTreeTable: false, isTreeTable: false,
pagination: false, pagination: false,
showIndexColumn: false, showIndexColumn: false,
maxHeight: 450,
bordered: true, bordered: true,
striped: true,
rowKey: 'id',
canResize: false, canResize: false,
}) })
const feeList = ref([]) const feeList = ref([])
const [registerTable3, { setTableData: setTableDataFee }] = useTable({ const [registerTable3, { setTableData: setTableDataFee }] = useTable({
columns: feeColumns, columns: feeColumns,
useSearchForm: false, useSearchForm: false,
showIndexColumn: false, showIndexColumn: false,
maxHeight: 450,
pagination: false, pagination: false,
showTableSetting: false, showTableSetting: false,
striped: true, striped: true,
rowKey: 'id', rowKey: 'id',
bordered: true, bordered: true,
canResize: true, canResize: false,
immediate: false, immediate: false,
}) })
const [registerTable4, { setTableData: setTableDataFeeSum }] = useTable({
columns: feeColumnsSum, const [registerTable5, { setTableData: setTableDataFile }] = useTable({
columns: columnsFile,
useSearchForm: false, useSearchForm: false,
showIndexColumn: false, showIndexColumn: false,
maxHeight: 450,
pagination: false, pagination: false,
showTableSetting: false, showTableSetting: false,
striped: true, striped: true,
rowKey: 'id', rowKey: 'id',
bordered: true, bordered: true,
canResize: true, canResize: false,
immediate: false, immediate: false,
}) })
const columnsFile = [
{ function exportExcel() {
title: '文件名称',
width: 100,
dataIndex: 'fileName',
},
{
title: '上传日期',
width: 100,
dataIndex: 'createTime',
},
{
title: '上传者',
width: 100,
dataIndex: 'createUserName',
},
]
function exportExcel() {
const list = [] as any const list = [] as any
getColumns().forEach((item) => { getColumns().forEach((item) => {
list.push({ list.push({
@ -370,8 +373,8 @@
.catch(() => { .catch(() => {
setLoading(false) setLoading(false)
}) })
} }
function radioChange(val) { function radioChange(val) {
reload() reload()
} }
const dsFile = ref('') const dsFile = ref('')
@ -380,26 +383,26 @@ function addFile() {
ids = getSelectRows().map((item) => { ids = getSelectRows().map((item) => {
return item.bookingId return item.bookingId
}) })
if (ids.length==0) { if (ids.length == 0) {
createMessage.warning('请选择一条数据') createMessage.warning('请选择一条数据')
return false return false
} }
if (ids.length>1) { if (ids.length > 1) {
createMessage.warning('请选择一条数据') createMessage.warning('请选择一条数据')
return false return false
} }
dsFile.value.init() dsFile.value.init()
} }
function fileSuccess() { function fileSuccess() {
getfileList() getfileList()
} }
const loading = ref(false) const loading = ref(false)
const fileData = ref([]) as any const fileData = ref([]) as any
const queryTabCode = ref('BLQuery') const queryTabCode = ref('BLQuery')
const loadingCheck = ref(false) const loadingCheck = ref(false)
const notes = ref('') const notes = ref('')
const checkDate = ref('') const checkDate = ref('')
function download(item) { function download(item) {
DownloadOpFile({ id: item.id }).then((res) => { DownloadOpFile({ id: item.id }).then((res) => {
const pdfUrl = window.URL.createObjectURL( const pdfUrl = window.URL.createObjectURL(
new Blob([res.data], { type: 'application/txt;charset=utf-8' }), new Blob([res.data], { type: 'application/txt;charset=utf-8' }),
@ -439,8 +442,8 @@ function handleClick(row) {
activeRow.value = row activeRow.value = row
getfileList() getfileList()
} }
function rowClassName(record, index){ function rowClassName(record, index) {
if(record.id==activeRow.value.id){ if (record.id == activeRow.value.id) {
return 'active-row' return 'active-row'
} }
} }
@ -453,16 +456,18 @@ const getfileList = () => {
} }
item['type'] = item?.filePath?.split('.')[1] item['type'] = item?.filePath?.split('.')[1]
fileData.value = res.data fileData.value = res.data
setTableDataFile(res.data)
}) })
if (res.data.length == 0) { if (res.data.length == 0) {
fileData.value = [] fileData.value = []
setTableDataFile([])
} }
}) })
.catch(() => {}) .catch(() => { })
} }
const checkFlag = ref(false) const checkFlag = ref(false)
// //
function sureCheckIn() { function sureCheckIn() {
const data = { const data = {
bookids: idList.value, bookids: idList.value,
checkDate: checkDate.value, checkDate: checkDate.value,
@ -511,18 +516,18 @@ const getfileList = () => {
loadingCheck.value = false loadingCheck.value = false
}) })
} }
} }
const checkType = ref(1) const checkType = ref(1)
import moment from 'moment' import moment from 'moment'
function openCheck(type) { function openCheck(type) {
if (checkClick()) { if (checkClick()) {
checkFlag.value = true checkFlag.value = true
checkType.value = type checkType.value = type
checkDate.value = moment().format('YYYY-MM-DD') checkDate.value = moment().format('YYYY-MM-DD')
notes.value = '' notes.value = ''
} }
} }
function checkIn(type) { function checkIn(type) {
if (checkClick()) { if (checkClick()) {
const data = { const data = {
bookids: idList.value, bookids: idList.value,
@ -534,12 +539,15 @@ const getfileList = () => {
} }
}) })
} }
} }
const idList = ref([]) const idList = ref([])
function checkClick() { function checkClick() {
let ids = [] as any let ids = [] as any
ids = getSelectRows().map((item) => { getSelectRows().forEach(item=>{
return item.bookingId ids.push({
bookid:item.bookingId,
MHBillType:item.masterHBill
})
}) })
idList.value = ids idList.value = ids
if (ids.length == 0) { if (ids.length == 0) {
@ -548,9 +556,9 @@ const getfileList = () => {
} else { } else {
return true return true
} }
} }
// //
function cancelCheckIn(type) { function cancelCheckIn(type) {
if (checkClick()) { if (checkClick()) {
const data = { const data = {
bookids: idList.value, bookids: idList.value,
@ -620,49 +628,54 @@ const getfileList = () => {
}) })
} }
} }
} }
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
/deep/ .ant-table-pagination.ant-pagination { /deep/ .ant-table-pagination.ant-pagination {
border-bottom: 1px solid #ebebeb; border-bottom: 1px solid #ebebeb;
margin-bottom: 0px; margin-bottom: 0px;
padding-bottom: 10px; padding-bottom: 10px;
} }
.main {
.left {
}
.left {
width: 29%; width: 29%;
padding-right: 10px; padding-right: 10px;
border-right: 1px solid #ebebeb; border-right: 1px solid #ebebeb;
} }
.middle { .middle {
width: 52%; width: 53%;
margin: 0 1%; margin: 0 10px;
padding-right: 10px; padding-right: 10px;
border-right: 1px solid #ebebeb; border-right: 1px solid #ebebeb;
display: flex; display: flex;
} }
.right { .right {
width: 15%; width: 14%;
padding-top: 5px;
font-size: 12px; font-size: 12px;
} }
.left-fee { .left-fee {
width: 78%; width: 78%;
margin-right: 1%; margin-right: 1%;
padding-right: 10px; padding-right: 10px;
border-right: 1px solid #ebebeb; border-right: 1px solid #ebebeb;
} }
.right-fee { .right-fee {
width: 21%; width: 21%;
padding-top: 5px; padding-top: 5px;
font-size: 12px; font-size: 12px;
} }
.row { .row {
margin-bottom: 10px; margin-bottom: 10px;
display: flex; display: flex;
@ -676,10 +689,10 @@ const getfileList = () => {
display: inline-block; display: inline-block;
width: 200px; width: 200px;
} }
} }
.receive-table, .receive-table,
.pay-table { .pay-table {
flex: 1; flex: 1;
th::before { th::before {
@ -702,31 +715,31 @@ const getfileList = () => {
} }
} }
} }
} }
.fee-table { .fee-table {
/deep/ .ant-table-body { /deep/ .ant-table-body {
min-height: calc(50vh - 210px); min-height: calc(50vh - 210px);
} }
} }
/deep/ .ant-divider-vertical { /deep/ .ant-divider-vertical {
height: 20px; height: 20px;
margin: 0 10px; margin: 0 10px;
background: #eeeeee; background: #eeeeee;
} }
/deep/ .vben-basic-table .ant-table-footer td { /deep/ .vben-basic-table .ant-table-footer td {
padding: 0px 10px !important; padding: 0px 10px !important;
} }
.SvgImg { .SvgImg {
width: 18px; width: 18px;
height: 18px; height: 18px;
margin: 6.8px; margin: 6.8px;
} }
.ds-h-aciton-btns-fee { .ds-h-aciton-btns-fee {
display: flex; display: flex;
align-items: center; align-items: center;
height: 38px; height: 38px;
@ -753,27 +766,26 @@ const getfileList = () => {
.vben-svg-icon { .vben-svg-icon {
margin: 6.8px; margin: 6.8px;
} }
} }
:deep(.ant-radio-group) { :deep(.ant-radio-group) {
display: flex; display: flex;
font-size: 12px; font-size: 12px;
span { span {
font-size: 12px; font-size: 12px;
} }
} }
.title-bold { .title-bold {
font-weight: bold; font-weight: bold;
font-size: 12px; font-size: 12px;
margin-bottom: 10px; margin-bottom: 10px;
} }
:deep(.active-row){
.ant-table-cell{ :deep(.active-row) {
.ant-table-cell {
background: #dfe8f6; background: #dfe8f6;
} }
} }
</style> </style>

@ -1636,8 +1636,21 @@ function handleClickTree(row, index) {
item.active = false item.active = false
}) })
taskType.value = '' taskType.value = ''
console.log(arr1) const arr = [] as any
setColumns(arr1) columsAll.value.forEach((item) => {
if (item.taskTypeCode === 'BASIC') {
JSON.parse(item.content).forEach((item) => {
if (item.checked) {
arr.push(item)
}
})
}
})
if (arr.length == 0) {
setColumns(columns)
} else {
setColumns(arr)
}
} }
reload() reload()
@ -1987,7 +2000,7 @@ function handleClickTree(row, index) {
width: 15px; width: 15px;
} }
:deep(.ant-table-tbody .ant-table-row td){ :deep(.ant-table-tbody .ant-table-row td) {
border-right: 1px solid #f0f0f0 !important; border-right: 1px solid #f0f0f0 !important;
text-align: center; text-align: center;
} }

Loading…
Cancel
Save