|
|
@ -66,7 +66,7 @@ |
|
|
</div> |
|
|
</div> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
|
|
|
|
|
|
<a-form-item label="公益活动成本(万元)" name="publicWelfareCost"> |
|
|
<a-form-item label="预上报公益成本(万元)" name="publicWelfareCost"> |
|
|
<a-input-number |
|
|
<a-input-number |
|
|
style="width: 100%" |
|
|
style="width: 100%" |
|
|
v-model:value="form.publicWelfareCost" |
|
|
v-model:value="form.publicWelfareCost" |
|
|
@ -80,13 +80,27 @@ |
|
|
</div> |
|
|
</div> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
|
|
|
|
|
|
|
|
|
<a-form-item label="审核后实际公益成本(万元)" name="actualPublicWelfareCost"> |
|
|
|
|
|
<a-input-number |
|
|
|
|
|
style="width: 100%" |
|
|
|
|
|
v-model:value="form.actualPublicWelfareCost" |
|
|
|
|
|
:min="0" |
|
|
|
|
|
:precision="2" |
|
|
|
|
|
disabled |
|
|
|
|
|
addon-after="万元" |
|
|
|
|
|
/> |
|
|
|
|
|
<div style="font-size: 12px; color: #666; margin-top: 4px;"> |
|
|
|
|
|
律协审核后生成,不可修改 |
|
|
|
|
|
</div> |
|
|
|
|
|
</a-form-item> |
|
|
|
|
|
|
|
|
<!-- 成本比例警告信息 --> |
|
|
<!-- 成本比例警告信息 --> |
|
|
<a-form-item v-if="showCostWarning" :wrapper-col="{ offset: 8 }"> |
|
|
<a-form-item v-if="showCostWarning" :wrapper-col="{ offset: 8 }"> |
|
|
<div style="color: #ff4d4f; font-size: 12px;"> |
|
|
<div style="color: #ff4d4f; font-size: 12px;"> |
|
|
<span v-if="costRatio <= 25">⚠️ 系统计算的公益成本已经达到收入20%</span> |
|
|
<span v-if="costRatio <= 25">⚠️ 全年累计公益成本({{ annualActualCost }}万 + 本季度{{ publicWelfareCost }}万)已达到全年收入的20%</span> |
|
|
<span v-else>⚠️ 系统计算的公益成本超过收入25%上限,上限为25%,将按上限值:</span> |
|
|
<span v-else>⚠️ 全年累计公益成本超过全年收入的25%上限!当前季度最多可填报:</span> |
|
|
<span v-if="costRatio > 25" style="font-weight: bold;">{{ calculatedPublicWelfareCost }}万元</span> |
|
|
<span v-if="costRatio > 25" style="font-weight: bold;">{{ calculatedPublicWelfareCost }}万元</span> |
|
|
<span v-if="costRatio > 25">进行保存(按25%比例计算)</span> |
|
|
<span v-if="costRatio > 25">(按全年25%比例计算)</span> |
|
|
</div> |
|
|
</div> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
|
|
|
|
|
|
@ -103,7 +117,7 @@ |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
</a-col>--> |
|
|
</a-col>--> |
|
|
<a-col :span="12"> |
|
|
<a-col :span="12"> |
|
|
<a-form-item label="成本/收入比例" :label-col="{ span: 12 }" :wrapper-col="{ span: 12 }"> |
|
|
<a-form-item label="预上报成本收入比" :label-col="{ span: 12 }" :wrapper-col="{ span: 12 }"> |
|
|
<a-input |
|
|
<a-input |
|
|
style="width: 100%" |
|
|
style="width: 100%" |
|
|
v-model:value="form.costIncomeRatio" |
|
|
v-model:value="form.costIncomeRatio" |
|
|
@ -112,6 +126,16 @@ |
|
|
/> |
|
|
/> |
|
|
</a-form-item> |
|
|
</a-form-item> |
|
|
</a-col> |
|
|
</a-col> |
|
|
|
|
|
<a-col :span="12"> |
|
|
|
|
|
<a-form-item label="实际成本收入比" :label-col="{ span: 12 }" :wrapper-col="{ span: 12 }"> |
|
|
|
|
|
<a-input |
|
|
|
|
|
style="width: 100%" |
|
|
|
|
|
v-model:value="form.actualCostIncomeRatio" |
|
|
|
|
|
disabled |
|
|
|
|
|
addon-after="%" |
|
|
|
|
|
/> |
|
|
|
|
|
</a-form-item> |
|
|
|
|
|
</a-col> |
|
|
</a-row> |
|
|
</a-row> |
|
|
</a-form> |
|
|
</a-form> |
|
|
|
|
|
|
|
|
@ -126,7 +150,7 @@ |
|
|
<script setup> |
|
|
<script setup> |
|
|
import { reactive, ref, nextTick, computed, onMounted } from 'vue'; |
|
|
import { reactive, ref, nextTick, computed, onMounted } from 'vue'; |
|
|
import _ from 'lodash'; |
|
|
import _ from 'lodash'; |
|
|
import { message } from 'ant-design-vue'; |
|
|
import { message, Modal } from 'ant-design-vue'; |
|
|
import { SmartLoading } from '/@/components/framework/smart-loading'; |
|
|
import { SmartLoading } from '/@/components/framework/smart-loading'; |
|
|
import { firmReportsApi } from '/@/api/business/cost/firm-reports-api'; |
|
|
import { firmReportsApi } from '/@/api/business/cost/firm-reports-api'; |
|
|
import { serviceApplicationsApi } from '/@/api/business/service-applications/service-applications-api'; |
|
|
import { serviceApplicationsApi } from '/@/api/business/service-applications/service-applications-api'; |
|
|
@ -156,6 +180,9 @@ |
|
|
totalCost: 0 // 总成本支出 |
|
|
totalCost: 0 // 总成本支出 |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// 全年累计实际公益成本(万元) |
|
|
|
|
|
const annualActualCost = ref(0); |
|
|
|
|
|
|
|
|
// 季度选项(只能填报上一个季度) |
|
|
// 季度选项(只能填报上一个季度) |
|
|
const quarterOptions = ref([]); |
|
|
const quarterOptions = ref([]); |
|
|
|
|
|
|
|
|
@ -199,7 +226,8 @@ |
|
|
// 获取本年度已填报收入 |
|
|
// 获取本年度已填报收入 |
|
|
async function fetchAnnualIncome() { |
|
|
async function fetchAnnualIncome() { |
|
|
try { |
|
|
try { |
|
|
const result = await firmReportsApi.income(); |
|
|
const targetYear = form.declareYear || new Date().getFullYear(); |
|
|
|
|
|
const result = await firmReportsApi.income({ declareYear: targetYear }); |
|
|
if (result.data) { |
|
|
if (result.data) { |
|
|
annualIncomeInfo.value = { |
|
|
annualIncomeInfo.value = { |
|
|
revenue: parseFloat(result.data.revenue) || 0, |
|
|
revenue: parseFloat(result.data.revenue) || 0, |
|
|
@ -212,105 +240,67 @@ |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 获取系统计算的公益成本(季度累计) |
|
|
|
|
|
async function getPublicWelfareCost() { |
|
|
async function getPublicWelfareCost() { |
|
|
console.log('开始获取公益成本,部门ID:', departmentId.value, '年份:', form.declareYear, '季度:', form.declareQuarter); |
|
|
|
|
|
|
|
|
|
|
|
if (!departmentId.value) { |
|
|
if (!departmentId.value) { |
|
|
message.warning('无法获取机构信息,请重新登录'); |
|
|
message.warning('无法获取机构信息,请重新登录'); |
|
|
console.error('部门ID为空,无法获取公益成本'); |
|
|
|
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (!form.declareYear) { |
|
|
if (!form.declareYear) { |
|
|
console.log('年份未设置,跳过API调用'); |
|
|
|
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (!form.declareQuarter) { |
|
|
if (!form.declareQuarter) { |
|
|
console.log('季度未选择,跳过API调用'); |
|
|
|
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 处理季度值,可能是数字1-4或字符串"第一季度 (Q1)"等 |
|
|
|
|
|
let quarterNum = form.declareQuarter; |
|
|
let quarterNum = form.declareQuarter; |
|
|
if (typeof quarterNum === 'string') { |
|
|
if (typeof quarterNum === 'string') { |
|
|
// 从字符串中提取数字,如"第一季度 (Q1)"提取1 |
|
|
|
|
|
const match = quarterNum.match(/(\d+)/); |
|
|
const match = quarterNum.match(/(\d+)/); |
|
|
if (match) { |
|
|
if (match) { |
|
|
quarterNum = parseInt(match[1], 10); |
|
|
quarterNum = parseInt(match[1], 10); |
|
|
} else { |
|
|
} else { |
|
|
console.error('无法解析季度字符串:', quarterNum); |
|
|
|
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
try { |
|
|
try { |
|
|
// 计算季度对应的月份范围 |
|
|
// 直接按季度获取成本,不再按月份循环调用 |
|
|
const startMonth = (quarterNum - 1) * 3 + 1; |
|
|
const response = await serviceApplicationsApi.getServiceApplicationsCost({ |
|
|
const endMonth = startMonth + 2; |
|
|
firmId: departmentId.value, |
|
|
|
|
|
year: form.declareYear, |
|
|
|
|
|
quarter: quarterNum |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
// 获取季度内3个月的公益成本累计 |
|
|
form.publicWelfareCost = parseFloat(response.data) || 0; |
|
|
let totalCost = 0; |
|
|
|
|
|
|
|
|
|
|
|
for (let month = startMonth; month <= endMonth; month++) { |
|
|
|
|
|
const queryForm = { |
|
|
|
|
|
firmId: departmentId.value, |
|
|
|
|
|
year: form.declareYear, |
|
|
|
|
|
month: month |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
console.log('调用接口: /serviceApplications/statistics/cost, 参数:', queryForm); |
|
|
|
|
|
const response = await serviceApplicationsApi.getServiceApplicationsCost(queryForm); |
|
|
|
|
|
console.log(`第${month}月接口返回数据:`, response); |
|
|
|
|
|
|
|
|
|
|
|
totalCost += parseFloat(response.data) || 0; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
form.publicWelfareCost = totalCost; |
|
|
|
|
|
|
|
|
|
|
|
console.log('季度累计公益成本:', form.publicWelfareCost, '万元'); |
|
|
|
|
|
calculateCosts(); |
|
|
calculateCosts(); |
|
|
} catch (error) { |
|
|
} catch (error) { |
|
|
message.error('获取公益成本失败'); |
|
|
message.error('获取公益成本失败'); |
|
|
console.error('获取公益成本失败:', error); |
|
|
|
|
|
form.publicWelfareCost = 0; |
|
|
form.publicWelfareCost = 0; |
|
|
calculateCosts(); |
|
|
calculateCosts(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
async function show(rowData) { |
|
|
async function show(rowData) { |
|
|
console.log('表单show函数被调用,rowData:', rowData); |
|
|
|
|
|
|
|
|
|
|
|
Object.assign(form, formDefault); |
|
|
Object.assign(form, formDefault); |
|
|
|
|
|
|
|
|
// 设置律师事务所ID(部门ID) |
|
|
|
|
|
form.firmId = departmentId.value; |
|
|
form.firmId = departmentId.value; |
|
|
|
|
|
|
|
|
// 正确判断模式:只有当rowData是对象且有id字段时才认为是编辑模式 |
|
|
|
|
|
if (rowData && typeof rowData === 'object' && rowData.id) { |
|
|
if (rowData && typeof rowData === 'object' && rowData.id) { |
|
|
console.log('编辑模式,使用现有数据:', rowData); |
|
|
|
|
|
// 先设置表单数据 |
|
|
|
|
|
Object.assign(form, rowData); |
|
|
Object.assign(form, rowData); |
|
|
// 编辑模式下也需要重新获取公益成本(驳回后可能需要更新) |
|
|
|
|
|
// 确保表单数据已更新后再获取成本 |
|
|
|
|
|
await nextTick(); |
|
|
await nextTick(); |
|
|
console.log('编辑模式表单数据:', form.declareYear, form.declareQuarter); |
|
|
await fetchAnnualActualCost(); |
|
|
await getPublicWelfareCost(); |
|
|
await getPublicWelfareCost(); |
|
|
} else { |
|
|
} else { |
|
|
console.log('新建模式,等待用户选择季度后获取公益成本'); |
|
|
|
|
|
// 新建模式下初始化季度选项(只能选择上一个季度) |
|
|
|
|
|
await initQuarterOptions(); |
|
|
await initQuarterOptions(); |
|
|
// 新建模式下获取本年度已填报收入 |
|
|
|
|
|
await fetchAnnualIncome(); |
|
|
await fetchAnnualIncome(); |
|
|
// 获取公益成本数据 |
|
|
await fetchAnnualActualCost(); |
|
|
await getPublicWelfareCost(); |
|
|
await getPublicWelfareCost(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
visibleFlag.value = true; |
|
|
visibleFlag.value = true; |
|
|
nextTick(() => { |
|
|
nextTick(() => { |
|
|
formRef.value.clearValidate(); |
|
|
formRef.value.clearValidate(); |
|
|
// 初始化计算 |
|
|
|
|
|
calculateCosts(); |
|
|
calculateCosts(); |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
@ -331,9 +321,10 @@ |
|
|
declareYear: new Date().getFullYear(), // 报表年份 |
|
|
declareYear: new Date().getFullYear(), // 报表年份 |
|
|
declareQuarter: undefined, // 季度 (1,2,3,4) |
|
|
declareQuarter: undefined, // 季度 (1,2,3,4) |
|
|
revenue: undefined, // 营业收入(万元) |
|
|
revenue: undefined, // 营业收入(万元) |
|
|
//totalCost: 0, // 总成本支出(万元) |
|
|
publicWelfareCost: undefined, // 预上报公益成本支出(万元) |
|
|
publicWelfareCost: undefined, // 公益成本支出(万元) |
|
|
actualPublicWelfareCost: undefined, // 审核后实际公益成本支出(万元) |
|
|
costIncomeRatio: '0.00', // 成本收入比(%) |
|
|
costIncomeRatio: '0.00', // 预上报成本收入比(%) |
|
|
|
|
|
actualCostIncomeRatio: '0.00', // 实际成本收入比(%) |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
let form = reactive({ ...formDefault }); |
|
|
let form = reactive({ ...formDefault }); |
|
|
@ -345,10 +336,30 @@ |
|
|
publicWelfareCost: [{ required: true, message: '系统正在计算公益成本,请稍后' }], |
|
|
publicWelfareCost: [{ required: true, message: '系统正在计算公益成本,请稍后' }], |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
// 计算25%上限的公益成本 |
|
|
|
|
|
const calculatedPublicWelfareCost = ref(0); |
|
|
const calculatedPublicWelfareCost = ref(0); |
|
|
const showCostWarning = ref(false); |
|
|
const showCostWarning = ref(false); |
|
|
const costRatio = ref(0); // 当前成本比例 |
|
|
const costRatio = ref(0); |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 获取全年累计实际公益成本(万元) |
|
|
|
|
|
* 从后端接口获取,后端会计算四个季度通过审核的服务申请成本之和 |
|
|
|
|
|
*/ |
|
|
|
|
|
async function fetchAnnualActualCost() { |
|
|
|
|
|
try { |
|
|
|
|
|
const currentYear = form.declareYear || new Date().getFullYear(); |
|
|
|
|
|
|
|
|
|
|
|
const response = await serviceApplicationsApi.getServiceApplicationsCost({ |
|
|
|
|
|
firmId: departmentId.value, |
|
|
|
|
|
year: currentYear |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
annualActualCost.value = parseFloat(response.data) || 0; |
|
|
|
|
|
console.log('全年累计实际公益成本:', annualActualCost.value, '万元'); |
|
|
|
|
|
} catch (error) { |
|
|
|
|
|
console.error('获取全年累计实际公益成本失败:', error); |
|
|
|
|
|
annualActualCost.value = 0; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 季度选择变化时的处理 |
|
|
// 季度选择变化时的处理 |
|
|
function onQuarterChange() { |
|
|
function onQuarterChange() { |
|
|
@ -363,61 +374,49 @@ |
|
|
calculateCosts(); |
|
|
calculateCosts(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 自动计算总成本和成本/收入比例 |
|
|
|
|
|
function calculateCosts() { |
|
|
function calculateCosts() { |
|
|
// 安全转换数值,防止NaN |
|
|
|
|
|
const currentRevenue = safeParseFloat(form.revenue); |
|
|
const currentRevenue = safeParseFloat(form.revenue); |
|
|
const publicWelfareCost = safeParseFloat(form.publicWelfareCost); |
|
|
const publicWelfareCost = safeParseFloat(form.publicWelfareCost); |
|
|
const annualRevenue = safeParseFloat(annualIncomeInfo.value.revenue); |
|
|
const annualRevenue = safeParseFloat(annualIncomeInfo.value.revenue); |
|
|
const annualTotalCost = safeParseFloat(annualIncomeInfo.value.totalCost); |
|
|
|
|
|
|
|
|
|
|
|
// 计算总收入:当前填写的收入 + 本年度已填报收入 |
|
|
// 全年累计营业收入 = 当前季度收入 + 本年度已填报收入 |
|
|
const totalRevenue = currentRevenue + annualRevenue; |
|
|
const totalRevenue = currentRevenue + annualRevenue; |
|
|
|
|
|
|
|
|
// 计算年度累计成本:当前填报成本 + 本年度已填报成本 |
|
|
// 全年累计成本 = 全年累计实际公益成本 + 当前季度预上报公益成本 |
|
|
const totalCost = publicWelfareCost + annualTotalCost; |
|
|
const totalCostForRatio = annualActualCost.value + publicWelfareCost; |
|
|
|
|
|
|
|
|
// 计算年度成本比例 |
|
|
|
|
|
if (totalRevenue > 0) { |
|
|
if (totalRevenue > 0) { |
|
|
costRatio.value = (totalCost / totalRevenue) * 100; |
|
|
costRatio.value = (totalCostForRatio / totalRevenue) * 100; |
|
|
|
|
|
|
|
|
// 检查是否达到或超过20%阈值 |
|
|
|
|
|
if (costRatio.value >= 20) { |
|
|
if (costRatio.value >= 20) { |
|
|
showCostWarning.value = true; |
|
|
showCostWarning.value = true; |
|
|
|
|
|
|
|
|
// 如果超过25%上限,按25%计算 |
|
|
|
|
|
if (costRatio.value > 25) { |
|
|
if (costRatio.value > 25) { |
|
|
const maxAllowedAnnualCost = totalRevenue * 0.25; // 年度成本上限 |
|
|
// 计算允许的最大公益成本(全年营业收入 * 25%) |
|
|
const remainingAllowedCost = Math.max(0, maxAllowedAnnualCost - annualTotalCost); |
|
|
const maxAllowedCost = totalRevenue * 0.25; |
|
|
|
|
|
// 计算当前季度允许的最大公益成本(全年上限 - 全年已发生的实际成本) |
|
|
|
|
|
const remainingAllowedCost = Math.max(0, maxAllowedCost - annualActualCost.value); |
|
|
|
|
|
|
|
|
// 当前填报允许的最大成本 |
|
|
|
|
|
calculatedPublicWelfareCost.value = Math.min(publicWelfareCost, remainingAllowedCost).toFixed(2); |
|
|
calculatedPublicWelfareCost.value = Math.min(publicWelfareCost, remainingAllowedCost).toFixed(2); |
|
|
|
|
|
|
|
|
// 计算成本/收入比例(使用上限值) |
|
|
const actualTotalCost = annualActualCost.value + parseFloat(calculatedPublicWelfareCost.value); |
|
|
const actualAnnualCost = annualTotalCost + parseFloat(calculatedPublicWelfareCost.value); |
|
|
const ratio = (actualTotalCost / totalRevenue) * 100; |
|
|
const ratio = (actualAnnualCost / totalRevenue) * 100; |
|
|
|
|
|
form.costIncomeRatio = ratio.toFixed(2); |
|
|
form.costIncomeRatio = ratio.toFixed(2); |
|
|
} else { |
|
|
} else { |
|
|
// 达到20%但未超过25%,使用实际值 |
|
|
|
|
|
calculatedPublicWelfareCost.value = publicWelfareCost.toFixed(2); |
|
|
calculatedPublicWelfareCost.value = publicWelfareCost.toFixed(2); |
|
|
form.costIncomeRatio = costRatio.value.toFixed(2); |
|
|
form.costIncomeRatio = costRatio.value.toFixed(2); |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
// 未达到20%,隐藏警告 |
|
|
|
|
|
showCostWarning.value = false; |
|
|
showCostWarning.value = false; |
|
|
calculatedPublicWelfareCost.value = publicWelfareCost.toFixed(2); |
|
|
calculatedPublicWelfareCost.value = publicWelfareCost.toFixed(2); |
|
|
form.costIncomeRatio = costRatio.value.toFixed(2); |
|
|
form.costIncomeRatio = costRatio.value.toFixed(2); |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
// 收入为0时 |
|
|
|
|
|
showCostWarning.value = false; |
|
|
showCostWarning.value = false; |
|
|
costRatio.value = 0; |
|
|
costRatio.value = 0; |
|
|
form.costIncomeRatio = '0.00'; |
|
|
form.costIncomeRatio = '0.00'; |
|
|
calculatedPublicWelfareCost.value = publicWelfareCost.toFixed(2); |
|
|
calculatedPublicWelfareCost.value = publicWelfareCost.toFixed(2); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 设置总成本 |
|
|
|
|
|
form.totalCost = showCostWarning.value ? parseFloat(calculatedPublicWelfareCost.value) : publicWelfareCost; |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 安全的数值转换函数 |
|
|
// 安全的数值转换函数 |
|
|
@ -443,8 +442,18 @@ |
|
|
try { |
|
|
try { |
|
|
await formRef.value.validateFields(); |
|
|
await formRef.value.validateFields(); |
|
|
form.approvalStatus = '1'; // 待审核状态 |
|
|
form.approvalStatus = '1'; // 待审核状态 |
|
|
await save(); |
|
|
|
|
|
message.success('提交审核成功'); |
|
|
// 显示系统提醒 |
|
|
|
|
|
Modal.confirm({ |
|
|
|
|
|
title: '成本上报提醒', |
|
|
|
|
|
content: '当前核算的公益成本支出仅为律所预上报成本,最终以律协服务审核后实际公益成本为准。', |
|
|
|
|
|
okText: '确认提交', |
|
|
|
|
|
cancelText: '取消', |
|
|
|
|
|
onOk: async () => { |
|
|
|
|
|
await save(); |
|
|
|
|
|
message.success('提交审核成功'); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
} catch (err) { |
|
|
} catch (err) { |
|
|
message.error('参数验证错误,请仔细填写表单数据!'); |
|
|
message.error('参数验证错误,请仔细填写表单数据!'); |
|
|
} |
|
|
} |
|
|
@ -457,7 +466,7 @@ |
|
|
// 确保计算最新的数据 |
|
|
// 确保计算最新的数据 |
|
|
calculateCosts(); |
|
|
calculateCosts(); |
|
|
|
|
|
|
|
|
// 准备保存的数据,如果超过上限则使用计算值 |
|
|
// 准备保存的数据 |
|
|
const saveData = { ...form }; |
|
|
const saveData = { ...form }; |
|
|
|
|
|
|
|
|
// 确保季度是整数类型 |
|
|
// 确保季度是整数类型 |
|
|
@ -470,16 +479,21 @@ |
|
|
saveData.declareYear = parseInt(saveData.declareYear); |
|
|
saveData.declareYear = parseInt(saveData.declareYear); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (showCostWarning.value) { |
|
|
// 如果超过25%上限,使用计算出的最大允许值 |
|
|
// 使用计算后的公益成本值 |
|
|
if (showCostWarning.value && costRatio.value > 25) { |
|
|
|
|
|
// 修改当前季度的预上报公益成本为允许的最大值 |
|
|
saveData.publicWelfareCost = parseFloat(calculatedPublicWelfareCost.value); |
|
|
saveData.publicWelfareCost = parseFloat(calculatedPublicWelfareCost.value); |
|
|
saveData.totalCost = saveData.publicWelfareCost; |
|
|
|
|
|
|
|
|
|
|
|
// 重新计算比例 |
|
|
// 重新计算全年累计比例 |
|
|
const revenue = parseFloat(saveData.revenue) || 0; |
|
|
const totalRevenue = safeParseFloat(saveData.revenue) + safeParseFloat(annualIncomeInfo.value.revenue); |
|
|
if (revenue > 0) { |
|
|
const annualTotalCost = annualActualCost.value + safeParseFloat(saveData.publicWelfareCost); |
|
|
saveData.costIncomeRatio = ((saveData.publicWelfareCost / revenue) * 100).toFixed(2); |
|
|
let ratio = totalRevenue > 0 ? ((annualTotalCost / totalRevenue) * 100) : 0; |
|
|
|
|
|
|
|
|
|
|
|
// 上限25% |
|
|
|
|
|
if (ratio > 25) { |
|
|
|
|
|
ratio = 25; |
|
|
} |
|
|
} |
|
|
|
|
|
saveData.costIncomeRatio = ratio.toFixed(2); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (saveData.id) { |
|
|
if (saveData.id) { |
|
|
|