Merge remote-tracking branch 'origin/master' into feature/bfi-api-rate
# Conflicts: # src/views/vehicle/customer-archive.vue
This commit is contained in:
@@ -212,8 +212,15 @@
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table v-show="!detailCollapsed" :data="filteredDetails" border>
|
||||
<el-table-column type="index" label="序号" width="64" fixed="left" align="center" />
|
||||
<el-table v-show="!detailCollapsed" :data="pagedDetails" border>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="64"
|
||||
fixed="left"
|
||||
align="center"
|
||||
:index="detailIndexMethod"
|
||||
/>
|
||||
<el-table-column
|
||||
v-for="column in detailTableColumns"
|
||||
:key="column.prop"
|
||||
@@ -246,6 +253,16 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div v-show="!detailCollapsed" class="formal-editor__pagination">
|
||||
<el-pagination
|
||||
v-model:current-page="detailPage.current"
|
||||
v-model:page-size="detailPage.size"
|
||||
:total="filteredDetails.length"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
@size-change="handleDetailPageSizeChange"
|
||||
/>
|
||||
</div>
|
||||
</section-card>
|
||||
|
||||
<section-card>
|
||||
@@ -573,7 +590,7 @@
|
||||
>提交</el-button
|
||||
>
|
||||
</template>
|
||||
<div v-if="pageMode" class="formal-editor__page-actions">
|
||||
<div v-if="pageMode && !publicMode" class="formal-editor__page-actions">
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button
|
||||
v-if="editable && !recordId"
|
||||
@@ -879,6 +896,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getMkPublicDetail } from '@/api/mk-process';
|
||||
import {
|
||||
adjustDetail,
|
||||
getCandidateDetails,
|
||||
@@ -930,6 +948,10 @@ export default {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
publicMode: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
emits: ['update:modelValue', 'success'],
|
||||
data() {
|
||||
@@ -1038,6 +1060,10 @@ export default {
|
||||
batchNo: '',
|
||||
cargoName: '',
|
||||
},
|
||||
detailPage: {
|
||||
current: 1,
|
||||
size: 10,
|
||||
},
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@@ -1085,6 +1111,13 @@ export default {
|
||||
})
|
||||
);
|
||||
},
|
||||
pagedDetails() {
|
||||
const list = this.filteredDetails;
|
||||
const size = Number(this.detailPage.size) || 10;
|
||||
const current = Math.max(Number(this.detailPage.current) || 1, 1);
|
||||
const start = (current - 1) * size;
|
||||
return list.slice(start, start + size);
|
||||
},
|
||||
missingAttachmentTypeText() {
|
||||
const missing = this.getMissingAttachmentTypes();
|
||||
return missing.length ? `未上传:${missing.join('、')}` : '';
|
||||
@@ -1104,6 +1137,16 @@ export default {
|
||||
if (value) this.initialize();
|
||||
},
|
||||
},
|
||||
filteredDetails: {
|
||||
handler(list) {
|
||||
const size = Number(this.detailPage.size) || 10;
|
||||
const maxPage = Math.max(1, Math.ceil((list?.length || 0) / size) || 1);
|
||||
if (this.detailPage.current > maxPage) {
|
||||
this.detailPage.current = maxPage;
|
||||
}
|
||||
},
|
||||
immediate: true,
|
||||
},
|
||||
summaryTotal(value) {
|
||||
this.form.settlementAmount = Number(value || 0).toFixed(2);
|
||||
this.form.localSettlementAmount = (
|
||||
@@ -1118,7 +1161,9 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
async loadFormalDetail(id) {
|
||||
const response = await getDetail(id);
|
||||
const response = this.publicMode
|
||||
? await getMkPublicDetail('formal-settlement', id)
|
||||
: await getDetail(id);
|
||||
const data = this.unwrapData(response);
|
||||
this.form = {
|
||||
...createFormalSettlementForm(),
|
||||
@@ -1130,12 +1175,13 @@ export default {
|
||||
};
|
||||
this.sources = data.sources || [];
|
||||
this.details = data.details || [];
|
||||
this.detailPage.current = 1;
|
||||
this.summaryFees = data.summaryFees || [];
|
||||
// 服务端数据已刷新,费用快照与暂存调整全部作废。
|
||||
this.detailFeeSnapshots = {};
|
||||
this.pendingAdjustments = {};
|
||||
this.paymentApplications = data.paymentApplications || [];
|
||||
if (this.readonly && this.form.settlementType === 'receivable') {
|
||||
if (this.readonly && this.form.settlementType === 'receivable' && !this.publicMode) {
|
||||
this.receiptClaims = this.unwrapData(await getReceiptClaims(id)) || [];
|
||||
}
|
||||
this.adjustments = data.adjustments || [];
|
||||
@@ -1181,14 +1227,17 @@ export default {
|
||||
rule: null,
|
||||
};
|
||||
this.detailCollapsed = false;
|
||||
this.detailPage = { current: 1, size: 10 };
|
||||
this.resetDetailQuery(false);
|
||||
await Promise.all([
|
||||
this.loadAllContracts(),
|
||||
this.loadFeeOptions(),
|
||||
this.loadFeeCategoryOptions(),
|
||||
this.loadAttachmentTypeOptions(),
|
||||
this.loadTransportTypeOptions(),
|
||||
]);
|
||||
if (!this.publicMode) {
|
||||
await Promise.all([
|
||||
this.loadAllContracts(),
|
||||
this.loadFeeOptions(),
|
||||
this.loadFeeCategoryOptions(),
|
||||
this.loadAttachmentTypeOptions(),
|
||||
this.loadTransportTypeOptions(),
|
||||
]);
|
||||
}
|
||||
if (!this.recordId) {
|
||||
this.form.exchangeRateDate = this.$dayjs().format('YYYY-MM-DD');
|
||||
if (this.initialData) await this.applyInitialData();
|
||||
@@ -1273,6 +1322,7 @@ export default {
|
||||
settlementAmountTax:
|
||||
row.settlementAmountTax ?? row.totalAmount ?? row.afterAmount ?? row.settlementAmount,
|
||||
}));
|
||||
this.detailPage.current = 1;
|
||||
this.form.sourceDetailIds = this.details.map(item => item.sourceDetailId);
|
||||
await this.refreshSummaryFees();
|
||||
},
|
||||
@@ -1318,6 +1368,7 @@ export default {
|
||||
sourcePreSettlementId: settlement.id,
|
||||
}))
|
||||
);
|
||||
this.detailPage.current = 1;
|
||||
const summaryMap = new Map();
|
||||
settlements
|
||||
.flatMap(settlement => settlement.summaryFees || [])
|
||||
@@ -1564,6 +1615,7 @@ export default {
|
||||
...this.details.filter(item => item.formalSettlementId),
|
||||
...existing.values(),
|
||||
];
|
||||
this.detailPage.current = 1;
|
||||
this.form.sourceDetailIds = [...existing.values()].map(item => item.sourceDetailId);
|
||||
this.detailCandidate.loading = true;
|
||||
try {
|
||||
@@ -1782,6 +1834,9 @@ export default {
|
||||
return sourceDetailId ? `src:${sourceDetailId}` : '';
|
||||
},
|
||||
async loadDetailFeeRows(detail) {
|
||||
if (this.publicMode) {
|
||||
return [this.normalizeAdjustRow(detail)];
|
||||
}
|
||||
if (detail.formalSettlementId && detail.id) {
|
||||
const rows = this.unwrapData(await getDetailFees(detail.id)) || [];
|
||||
return rows.map(item => this.normalizeAdjustRow(item));
|
||||
@@ -1883,12 +1938,19 @@ export default {
|
||||
},
|
||||
handleDetailQuery() {
|
||||
this.appliedDetailQuery = { ...this.detailQuery };
|
||||
this.detailPage.current = 1;
|
||||
},
|
||||
resetDetailQuery(apply = true) {
|
||||
this.detailQuery = { documentNo: '', waybillNo: '', batchNo: '', cargoName: '' };
|
||||
if (apply) this.handleDetailQuery();
|
||||
else this.appliedDetailQuery = { ...this.detailQuery };
|
||||
},
|
||||
handleDetailPageSizeChange() {
|
||||
this.detailPage.current = 1;
|
||||
},
|
||||
detailIndexMethod(index) {
|
||||
return (this.detailPage.current - 1) * this.detailPage.size + index + 1;
|
||||
},
|
||||
exportDetails() {
|
||||
if (!this.details.length) return this.$message.warning('暂无可导出的结算明细');
|
||||
const rows = this.details.map((row, index) => {
|
||||
|
||||
Reference in New Issue
Block a user