diff --git a/src/api/settlement/formalSettlement.js b/src/api/settlement/formalSettlement.js index 92830f8..ea4cb14 100644 --- a/src/api/settlement/formalSettlement.js +++ b/src/api/settlement/formalSettlement.js @@ -31,8 +31,15 @@ export const approve = data => request({ url: `${baseUrl}/approve`, method: 'pos export const returnBill = data => request({ url: `${baseUrl}/return`, method: 'post', data }); export const voidBill = data => request({ url: `${baseUrl}/void`, method: 'post', data }); // 同步金蝶涉及多次金蝶远程接口调用(A102-4 预检 + A102-2 保存),可达 20s+,覆盖全局 10s 超时 -export const syncKingdee = id => - request({ url: `${baseUrl}/sync-kingdee`, method: 'post', timeout: 30000, params: { id } }); +// config.meta.suppressErrorMessage=true 时由页面弹框汇总结果,避免拦截器重复 toast +export const syncKingdee = (id, config = {}) => + request({ + url: `${baseUrl}/sync-kingdee`, + method: 'post', + timeout: 30000, + params: { id }, + ...config, + }); export const getDetailFees = detailId => request({ url: `${baseUrl}/detail-fees`, method: 'get', params: { detailId } }); export const getReceiptClaims = formalSettlementId => diff --git a/src/api/system/dept.js b/src/api/system/dept.js index 5a489e0..c7f22de 100644 --- a/src/api/system/dept.js +++ b/src/api/system/dept.js @@ -77,7 +77,8 @@ export const syncOaDepartment = ( size = 20, signal, incremental = false, - modifiedSince + modifiedSince, + companyOaId ) => { return request({ url: '/blade-system/dept/sync-oa-department', @@ -87,6 +88,7 @@ export const syncOaDepartment = ( size, incremental: !!incremental, modifiedSince: modifiedSince || undefined, + companyOaId: companyOaId || undefined, }, timeout: 60000, signal, diff --git a/src/axios.js b/src/axios.js index 1d23232..a3de4a3 100644 --- a/src/axios.js +++ b/src/axios.js @@ -74,12 +74,15 @@ const redirectToLogin = () => { * 统一弹出错误提示并返回带标记的 Error。 * `_notified` 标记用于让业务层(批量导入等)识别「拦截器已经提示过」, * 避免同一条错误被弹两次。 + * meta.suppressErrorMessage=true 时由业务层自行弹框汇总,拦截器不再 toast。 */ -const notifiedError = message => { - ElMessage({ - message: message, - type: 'error', - }); +const notifiedError = (message, config) => { + if (config?.meta?.suppressErrorMessage !== true) { + ElMessage({ + message: message, + type: 'error', + }); + } const error = new Error(message); error._notified = true; return error; @@ -260,12 +263,12 @@ axios.interceptors.response.use( // OAuth2 业务错误码提示 if (status > 2000 && !validatenull(res.data.error_description)) { - return Promise.reject(notifiedError(message)); + return Promise.reject(notifiedError(message, config)); } // 其余非 200 响应统一提示 if (status !== 200) { - return Promise.reject(notifiedError(message)); + return Promise.reject(notifiedError(message, config)); } return res; }, @@ -273,7 +276,11 @@ axios.interceptors.response.use( NProgress.done(); // 网络级失败(HTTP 状态 >500、网关错误、超时、断网等 validateStatus 放行之外的响应) // 原为静默 reject,接口报错页面无任何感知;统一补错误提示,取消请求与刷新令牌请求除外 - if (!axios.isCancel(error) && !isRefreshTokenRequest(error?.config)) { + if ( + !axios.isCancel(error) && + !isRefreshTokenRequest(error?.config) && + error?.config?.meta?.suppressErrorMessage !== true + ) { ElMessage({ message: error?.response?.data?.msg || '请求失败,请稍后重试', type: 'error', diff --git a/src/option/business/project-apply.js b/src/option/business/project-apply.js index 9a96ad6..502032e 100644 --- a/src/option/business/project-apply.js +++ b/src/option/business/project-apply.js @@ -97,7 +97,8 @@ export const config = { action: 'startChange', label: '变更', statusProp: 'approvalStatus', - status: ['approved'], + // 立项通过、变更通过后均可再次发起变更 + status: ['approved', 'change_approved'], permission: 'project_apply_change', }, ], diff --git a/src/option/payment/paymentApplication.js b/src/option/payment/paymentApplication.js index 9f3b688..65494a3 100644 --- a/src/option/payment/paymentApplication.js +++ b/src/option/payment/paymentApplication.js @@ -52,7 +52,8 @@ export const paymentApplicationOption = ({ searchShow: true, searchIcon: true, searchLabelWidth: 88, - searchMenuSpan: 24, + // 查询/重置紧跟首行 4 个条件(4×5 + 菜单 4 = 24),不再独占下一整行 + searchMenuSpan: 4, searchIndex: 4, searchMenuPosition: 'right', border: true, @@ -78,6 +79,7 @@ export const paymentApplicationOption = ({ prop: 'paymentNo', slot: true, search: true, + searchSpan: 5, searchOrder: 9, searchPlaceholder: '请输入', minWidth: 150, @@ -88,6 +90,7 @@ export const paymentApplicationOption = ({ type: 'daterange', searchType: 'daterange', search: true, + searchSpan: 5, searchOrder: 8, hide: true, showColumn: false, @@ -95,18 +98,24 @@ export const paymentApplicationOption = ({ editDisplay: false, viewDisplay: false, }, - searchOnlyColumn({ - label: '客户名称', - prop: 'payeeNameSearch', - searchOrder: 7, - searchProp: 'payeeName', - }), - searchOnlyColumn({ - label: '项目名称', - prop: 'projectNameSearch', - searchOrder: 6, - searchProp: 'projectName', - }), + { + ...searchOnlyColumn({ + label: '客户名称', + prop: 'payeeNameSearch', + searchOrder: 7, + searchProp: 'payeeName', + }), + searchSpan: 5, + }, + { + ...searchOnlyColumn({ + label: '项目名称', + prop: 'projectNameSearch', + searchOrder: 6, + searchProp: 'projectName', + }), + searchSpan: 5, + }, searchOnlyColumn({ label: '关联结算单', prop: 'settlementNo', diff --git a/src/option/settlement/formalSettlementSearch.js b/src/option/settlement/formalSettlementSearch.js index abe3520..cd4d811 100644 --- a/src/option/settlement/formalSettlementSearch.js +++ b/src/option/settlement/formalSettlementSearch.js @@ -36,7 +36,7 @@ export const kingdeeSyncStatusOptions = [ export const formalSettlementSearchFields = [ { label: '结算单号', prop: 'formalSettlementNo', type: 'input' }, - { label: '预结算单号', prop: 'preSettlementNo', type: 'input' }, + { label: '预付结算单号', prop: 'preSettlementNo', type: 'input' }, { label: '项目', prop: 'projectName', type: 'input' }, { label: '所属组织', prop: 'deptName', type: 'cascader' }, { label: '合同编号', prop: 'contractNo', type: 'input' }, diff --git a/src/option/settlement/formalSettlementTable.js b/src/option/settlement/formalSettlementTable.js index dececd2..92713ca 100644 --- a/src/option/settlement/formalSettlementTable.js +++ b/src/option/settlement/formalSettlementTable.js @@ -30,7 +30,7 @@ export const formalSettlementTableColumns = [ ]; export const sourceColumns = [ - { label: '预结算单号', prop: 'preSettlementNo', minWidth: 160 }, + { label: '预付结算单号', prop: 'preSettlementNo', minWidth: 160 }, { label: '结算金额', prop: 'settlementAmount', minWidth: 130, money: true }, { label: '申请预付金额', prop: 'advanceAppliedAmount', minWidth: 140, money: true }, { label: '已付款金额', prop: 'advancePaidAmount', minWidth: 130, money: true }, @@ -50,6 +50,7 @@ export const detailColumns = [ { label: '运输总量', prop: 'transportQuantity', minWidth: 120 }, { label: '里程(KM)', prop: 'mileage', minWidth: 120 }, { label: '批次号', prop: 'batchNo', minWidth: 120 }, + { label: '计费方式', prop: 'billingType', minWidth: 130 }, { label: '运输单价', prop: 'unitPrice', minWidth: 120, money: true }, { label: '运费', prop: 'freightAmount', minWidth: 120, money: true }, { label: '调整金额', prop: 'adjustAmount', minWidth: 120, money: true }, @@ -68,7 +69,7 @@ export const summaryColumns = [ ]; export const candidateColumns = [ - { label: '预结算单号', prop: 'preSettlementNo', minWidth: 170 }, + { label: '预付结算单号', prop: 'preSettlementNo', minWidth: 170 }, { label: '项目名称', prop: 'projectName', minWidth: 140 }, { label: '所属组织', prop: 'deptName', minWidth: 140 }, { label: '合同编号', prop: 'contractNo', minWidth: 150 }, @@ -88,7 +89,7 @@ export const candidateDetailColumns = [ { label: '合同编号', prop: 'contractNo', minWidth: 150 }, { label: '合同名称', prop: 'contractName', minWidth: 170 }, { label: '来源', prop: 'sourceType', minWidth: 110 }, - { label: '预结算单号', prop: 'preSettlementNo', minWidth: 160 }, + { label: '预付结算单号', prop: 'preSettlementNo', minWidth: 160 }, { label: '正式结算单号', prop: 'formalSettlementNo', minWidth: 160 }, { label: '运单号', prop: 'waybillNo', minWidth: 150 }, { label: '车号', prop: 'vehicleNo', minWidth: 130 }, @@ -96,6 +97,7 @@ export const candidateDetailColumns = [ { label: '货物名称', prop: 'cargoName', minWidth: 140 }, { label: '货物类型', prop: 'cargoType', minWidth: 130 }, { label: '批次号', prop: 'batchNo', minWidth: 120 }, + { label: '计费方式', prop: 'billingType', minWidth: 130 }, { label: '应收应付合计', prop: 'totalAmount', minWidth: 140, money: true }, { label: '状态', prop: 'settlementStatusName', minWidth: 110 }, ]; diff --git a/src/option/settlement/preSettlementForm.js b/src/option/settlement/preSettlementForm.js index cace25d..ef70be7 100644 --- a/src/option/settlement/preSettlementForm.js +++ b/src/option/settlement/preSettlementForm.js @@ -4,7 +4,7 @@ export const settlementTypeOptions = [ ]; export const preSettlementFormFields = [ - { label: '预结算单号', prop: 'preSettlementNo', readonly: true }, + { label: '预付结算单号', prop: 'preSettlementNo', readonly: true }, { label: '合同名称', prop: 'contractId', type: 'contract', required: true }, { label: '合同编号', prop: 'contractNo', readonly: true }, { label: '项目名称', prop: 'projectName', readonly: true }, diff --git a/src/option/settlement/preSettlementSearch.js b/src/option/settlement/preSettlementSearch.js index 1165ae9..c270345 100644 --- a/src/option/settlement/preSettlementSearch.js +++ b/src/option/settlement/preSettlementSearch.js @@ -7,7 +7,7 @@ export const approvalStatusOptions = [ ]; export const preSettlementSearchFields = [ - { label: '预结算单号', prop: 'preSettlementNo', type: 'input' }, + { label: '预付结算单号', prop: 'preSettlementNo', type: 'input' }, { label: '预付单号', prop: 'advanceNo', type: 'input' }, { label: '项目名称', prop: 'projectName', type: 'input' }, { label: '所属组织', prop: 'deptName', type: 'cascader' }, diff --git a/src/option/settlement/preSettlementTable.js b/src/option/settlement/preSettlementTable.js index 01ab798..26c06ed 100644 --- a/src/option/settlement/preSettlementTable.js +++ b/src/option/settlement/preSettlementTable.js @@ -1,5 +1,5 @@ export const preSettlementTableColumns = [ - { label: '预结算单号', prop: 'preSettlementNo', minWidth: 150, link: true, fixed: 'left' }, + { label: '预付结算单号', prop: 'preSettlementNo', minWidth: 150, link: true, fixed: 'left' }, { label: '来源', prop: 'sourceType', minWidth: 100 }, { label: '付款方', prop: 'payerName', minWidth: 160 }, { label: '收款方', prop: 'payeeName', minWidth: 160 }, diff --git a/src/option/settlement/receivable-payable-detail.js b/src/option/settlement/receivable-payable-detail.js index 29123d0..bdf976d 100644 --- a/src/option/settlement/receivable-payable-detail.js +++ b/src/option/settlement/receivable-payable-detail.js @@ -20,7 +20,7 @@ export const searchFields = [ { label: '货物名称', prop: 'cargoName', type: 'input' }, { label: '合同编号', prop: 'contractNo', type: 'input' }, { label: '合同名称', prop: 'contractName', type: 'input' }, - { label: '预结算单号', prop: 'preSettlementNo', type: 'input' }, + { label: '预付结算单号', prop: 'preSettlementNo', type: 'input' }, { label: '正式结算单号', prop: 'formalSettlementNo', type: 'input' }, { label: '批次号', prop: 'batchNo', type: 'input' }, { label: '车号', prop: 'vehicleNo', type: 'input' }, @@ -35,7 +35,7 @@ export const tableColumns = [ { label: '合同编号', prop: 'contractNo', minWidth: 140 }, { label: '合同名称', prop: 'contractName', minWidth: 140 }, { label: '来源', prop: 'sourceType', minWidth: 110 }, - { label: '预结算单号', prop: 'preSettlementNo', minWidth: 140, link: true }, + { label: '预付结算单号', prop: 'preSettlementNo', minWidth: 140, link: true }, { label: '正式结算单号', prop: 'formalSettlementNo', minWidth: 140, link: true }, { label: '运单号', prop: 'waybillNo', minWidth: 140, link: true }, { label: '车号', prop: 'vehicleNo', minWidth: 120 }, diff --git a/src/option/settlement/transportReconciliationSearch.js b/src/option/settlement/transportReconciliationSearch.js index 0f1ca83..9852557 100644 --- a/src/option/settlement/transportReconciliationSearch.js +++ b/src/option/settlement/transportReconciliationSearch.js @@ -13,7 +13,7 @@ export const reconciliationStatusOptions = [ export const transportReconciliationSearchFields = [ { prop: 'reconciliationNo', label: '对账单号', type: 'input' }, - { prop: 'preSettlementNos', label: '预结算单号', type: 'input' }, + { prop: 'preSettlementNos', label: '预付结算单号', type: 'input' }, { prop: 'projectName', label: '项目', type: 'input' }, { prop: 'deptName', label: '所属组织', type: 'cascader' }, { prop: 'contractNo', label: '合同编号', type: 'input' }, diff --git a/src/router/page/index.js b/src/router/page/index.js index e2a8ab1..11c3a57 100644 --- a/src/router/page/index.js +++ b/src/router/page/index.js @@ -108,7 +108,7 @@ export default [ }, { path: '/settlement/pre-settlement/public-view', - name: '查看预结算信息', + name: '查看预付结算单信息', component: () => import('@/views/settlement/pre-settlement-public-view.vue'), meta: { keepAlive: false, @@ -119,7 +119,7 @@ export default [ }, { path: '/settlement/formal-settlement/public-view', - name: '查看正式结算信息', + name: '查看结算单信息', component: () => import('@/views/settlement/formal-settlement-public-view.vue'), meta: { keepAlive: false, diff --git a/src/router/views/index.js b/src/router/views/index.js index 546ffb2..6d11ebd 100644 --- a/src/router/views/index.js +++ b/src/router/views/index.js @@ -95,7 +95,7 @@ export default [ children: [ { path: '', - name: '新增编辑预结算', + name: '新增编辑预付结算单', meta: { keepAlive: false, activeMenu: '/settlement/pre-settlement', @@ -110,10 +110,11 @@ export default [ children: [ { path: '', - name: '新增编辑正式结算', + name: '新增编辑结算单', meta: { keepAlive: false, - activeMenu: '/settlement/formal-settlement', + // 付款/收款结算单共用表单页,具体高亮菜单由页面按 settlementType 回写 + activeMenu: '/settlement/payment-settlement', }, component: loadView(() => import('@/views/settlement/formal-settlement-form.vue')), }, diff --git a/src/utils/mk-approval.js b/src/utils/mk-approval.js index 83806da..9e224b2 100644 --- a/src/utils/mk-approval.js +++ b/src/utils/mk-approval.js @@ -23,7 +23,7 @@ export const MK_BIZ = { }, 'pre-settlement': { dictName: '提交预结算审核流', - subjectPrefix: '预结算审批', + subjectPrefix: '预付结算审批', rejected: ['returned'], approved: ['approved'], }, diff --git a/src/utils/settlement-menu.js b/src/utils/settlement-menu.js new file mode 100644 index 0000000..86413c0 --- /dev/null +++ b/src/utils/settlement-menu.js @@ -0,0 +1,39 @@ +/** 结算菜单拆分后的展示名与权限前缀 */ + +export const SETTLEMENT_TYPE_PAYABLE = 'payable'; +export const SETTLEMENT_TYPE_RECEIVABLE = 'receivable'; + +export function settlementBillLabel(settlementType) { + return settlementType === SETTLEMENT_TYPE_RECEIVABLE ? '收款结算单' : '付款结算单'; +} + +export function settlementPermissionPrefix(settlementType) { + return settlementType === SETTLEMENT_TYPE_RECEIVABLE + ? 'receipt_settlement' + : 'payment_settlement'; +} + +export function settlementListPath(settlementType) { + return settlementType === SETTLEMENT_TYPE_RECEIVABLE + ? '/settlement/receipt-settlement' + : '/settlement/payment-settlement'; +} + +/** + * 权限判断:优先新菜单码,兼容旧 formal_settlement_*。 + * @param {Object} ctx 组件实例(需含 permission、isAdmin、validData) + * @param {string} settlementType payable|receivable + * @param {string} action add|edit|view... + */ +export function hasSettlementPermission(ctx, settlementType, action) { + if (ctx?.isAdmin) return true; + const prefix = settlementPermissionPrefix(settlementType); + const codes = [`${prefix}_${action}`, `formal_settlement_${action}`]; + return codes.some(code => { + const value = ctx?.permission?.[code]; + if (typeof ctx?.validData === 'function') { + return ctx.validData(value, false); + } + return value === true; + }); +} diff --git a/src/views/business/components/business-crud-page.vue b/src/views/business/components/business-crud-page.vue index 115eb11..484ead8 100644 --- a/src/views/business/components/business-crud-page.vue +++ b/src/views/business/components/business-crud-page.vue @@ -5897,7 +5897,7 @@ export default { '固定金额(整单一口价)': ['固定一口价'], 按数量: ['固定单价', '区间单价', '阶梯单价', '区间阶梯一口价'], }, - settlementTypeOptions: ['月结', '日结', '周结', '半月结', '固定天数周期结算'], + settlementTypeOptions: ['月结', '日结', '周结', '固定天数周期结算'], billCycleTypeOptions: ['固定截单日', '自然月', '自定义多周期'], reconciliationModeOptions: ['明细逐行核对', '按账单汇总核对', '跳过自动核对'], packageOptions, diff --git a/src/views/business/components/waybill-import-dialog.vue b/src/views/business/components/waybill-import-dialog.vue index 3645750..309467e 100644 --- a/src/views/business/components/waybill-import-dialog.vue +++ b/src/views/business/components/waybill-import-dialog.vue @@ -1266,9 +1266,27 @@ const fillEditForm = async row => { if (carrierValue) carrierChange(carrierValue); await loadBatchRows(snapshot.id); }; -const removeBatches = () => - api.removeImportBatches(selected.value.map(item => item.id).join(',')).then(loadBatches); -const removeBatch = row => api.removeImportBatches(row.id).then(loadBatches); +/** 与行操作一致:仅草稿可删除 */ +const canRemoveBatch = row => String(row?.importStatus || '') === 'draft'; +const removeBatches = () => { + if (!selected.value.length) { + ElMessage.warning('请选择至少一条数据'); + return; + } + // 选中含不可删条目时整批拦截(含已完成/进行中),不静默跳过 + if (selected.value.some(row => !canRemoveBatch(row))) { + ElMessage.warning('已完成运单不可删除'); + return; + } + return api.removeImportBatches(selected.value.map(item => item.id).join(',')).then(loadBatches); +}; +const removeBatch = row => { + if (!canRemoveBatch(row)) { + ElMessage.warning('已完成运单不可删除'); + return; + } + return api.removeImportBatches(row.id).then(loadBatches); +}; const projectChange = async id => { const requestId = ++projectRequestId; const item = projects.value.find(row => String(row.id) === String(id)); diff --git a/src/views/business/contract-manage-change.vue b/src/views/business/contract-manage-change.vue index 344a997..c745705 100644 --- a/src/views/business/contract-manage-change.vue +++ b/src/views/business/contract-manage-change.vue @@ -217,7 +217,12 @@ />
-
计费信息
添加
+
+
计费信息
+ 添加 +
系统生成账单导入生成
@@ -440,7 +445,7 @@ export default { }, preSettlementConfig: {}, formalSettlementConfig: {}, - settlementTypeOptions: ['月结', '日结', '周结', '半月结', '固定天数周期结算'], + settlementTypeOptions: ['月结', '日结', '周结', '固定天数周期结算'], billCycleTypeOptions: ['固定截单日', '自然月', '自定义多周期'], billCutoffDayOptions: Array.from({ length: 31 }, (_, index) => ({ label: `${index + 1}日`, diff --git a/src/views/business/contract-manage.vue b/src/views/business/contract-manage.vue index 3623a5e..8076697 100644 --- a/src/views/business/contract-manage.vue +++ b/src/views/business/contract-manage.vue @@ -647,7 +647,12 @@ 账单导入生成 - 添加 + 添加 diff --git a/src/views/business/project-apply.vue b/src/views/business/project-apply.vue index e05c03d..e4b41bb 100644 --- a/src/views/business/project-apply.vue +++ b/src/views/business/project-apply.vue @@ -224,7 +224,7 @@ placeholder="请选择" filterable clearable - :disabled="isBasicInfoReadonly" + :disabled="dialogReadonly" /> @@ -236,7 +236,7 @@ collapse-tags-tooltip clearable filterable - :disabled="isBasicInfoReadonly" + :disabled="dialogReadonly" @change="handleUndertakeDeptChange" > { const deptTree = res.data.data || []; - const businessDeptTree = ['add', 'edit', 'majorSupplement'].includes(this.dialogType) + // 新增/编辑/重大补录/项目变更均可选择业务部门,排除外部组织 + const businessDeptTree = ['add', 'edit', 'majorSupplement', 'change'].includes(this.dialogType) ? this.excludeExternalOrganization(deptTree) : deptTree; this.deptOptions = this.flattenDept(businessDeptTree); diff --git a/src/views/payment/invoice-application-form.vue b/src/views/payment/invoice-application-form.vue index 0c6f4cd..d4ed32a 100644 --- a/src/views/payment/invoice-application-form.vue +++ b/src/views/payment/invoice-application-form.vue @@ -774,7 +774,7 @@ export default { }, validateSettlements(rule, value, callback) { if (!this.form.settlements.length) { - callback(new Error('请选择正式结算单')); + callback(new Error('请选择付款结算单')); return; } callback(); @@ -1215,7 +1215,7 @@ export default { }, async syncReferenceData() { if (!this.settlementIds.length) { - this.$message.warning('请先选择正式结算单'); + this.$message.warning('请先选择付款结算单'); return; } await Promise.all([this.loadReceiverInformation(), this.loadSettlementDetails(false)]); diff --git a/src/views/payment/invoice-application.vue b/src/views/payment/invoice-application.vue index 0deb659..969c41a 100644 --- a/src/views/payment/invoice-application.vue +++ b/src/views/payment/invoice-application.vue @@ -359,7 +359,7 @@ export default { item => String(item.formalSettlementNo || '').trim() === normalizedNo ); if (!row?.id) { - this.$message.warning('未找到对应的正式结算单'); + this.$message.warning('未找到对应的付款结算单'); return; } this.$router.push({ diff --git a/src/views/payment/invoice-receipt-form.vue b/src/views/payment/invoice-receipt-form.vue index 1d06b34..200e758 100644 --- a/src/views/payment/invoice-receipt-form.vue +++ b/src/views/payment/invoice-receipt-form.vue @@ -76,7 +76,7 @@ diff --git a/src/views/payment/payment-application-form.vue b/src/views/payment/payment-application-form.vue index a3e337d..9c69366 100644 --- a/src/views/payment/payment-application-form.vue +++ b/src/views/payment/payment-application-form.vue @@ -140,7 +140,8 @@ :step="0.01" :controls="false" style="width: 100%" - value-on-clear="0" + :value-on-clear="null" + placeholder="请输入申请付款金额" /> {{ formatMoney(row.payableAmount) }} - + + + + @@ -409,7 +421,7 @@ 同步 - 保存 - + - - - - + + + + + + + diff --git a/src/views/settlement/pre-settlement-form.vue b/src/views/settlement/pre-settlement-form.vue index 9bd3549..18586de 100644 --- a/src/views/settlement/pre-settlement-form.vue +++ b/src/views/settlement/pre-settlement-form.vue @@ -1,7 +1,7 @@ + + + + + +