add 项目利润结算
parent
b90b6a1cb8
commit
e43b61da12
|
|
@ -127,18 +127,18 @@
|
||||||
@sort-change="handleSortChange"
|
@sort-change="handleSortChange"
|
||||||
>
|
>
|
||||||
|
|
||||||
<el-table-column label="项目名称" align="center" prop="projectName" min-width="150px"/>
|
<el-table-column label="项目名称" align="center" prop="projectName" fixed="left" min-width="200px"/>
|
||||||
<el-table-column label="枪数" align="center" prop="estimatedPiles" width="100px"/>
|
<el-table-column label="枪数" align="center" prop="estimatedPiles" width="100px"/>
|
||||||
<el-table-column label="统计月份" align="center" prop="statMonth" sortable="custom" />
|
<el-table-column label="统计月份" align="center" prop="statMonth" sortable="custom" width="160px"/>
|
||||||
<el-table-column label="总充电量(度)" align="center" prop="chargingQuantity" sortable="custom"/>
|
<el-table-column label="总充电量(度)" align="center" prop="chargingQuantity" sortable="custom" width="160px"/>
|
||||||
<el-table-column label="总营收(元)" align="center" prop="totalIncome" sortable="custom"/>
|
<el-table-column label="总营收(元)" align="center" prop="totalIncome" sortable="custom" width="160px"/>
|
||||||
<el-table-column label="总电费(元)" align="center" prop="totalElectricityCost" sortable="custom"/>
|
<el-table-column label="总电费(元)" align="center" prop="totalElectricityCost" sortable="custom" width="160px"/>
|
||||||
<el-table-column label="总服务费(元)" align="center" prop="grossProfit" sortable="custom"/>
|
<el-table-column label="总服务费(元)" align="center" prop="grossProfit" sortable="custom" width="160px"/>
|
||||||
<el-table-column label="毛利率(%)" align="center" prop="grossProfitRate" sortable="custom"/>
|
<el-table-column label="毛利率(%)" align="center" prop="grossProfitRate" sortable="custom" width="160px"/>
|
||||||
<el-table-column label="单枪充电量(度)" align="center" prop="perGunCharging" sortable="custom"/>
|
<el-table-column label="单枪充电量(度)" align="center" prop="perGunCharging" sortable="custom" width="160px"/>
|
||||||
<el-table-column label="单枪服务费(元)" align="center" prop="perGunProfit" sortable="custom"/>
|
<el-table-column label="单枪服务费(元)" align="center" prop="perGunProfit" sortable="custom" width="160px"/>
|
||||||
<el-table-column label="度电服务费(元)" align="center" prop="electricityServiceFee" sortable="custom"/>
|
<el-table-column label="度电服务费(元)" align="center" prop="electricityServiceFee" sortable="custom" width="160px"/>
|
||||||
<el-table-column label="操作" align="center" min-width="120px">
|
<el-table-column label="操作" align="center" fixed="right" min-width="120px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<!-- {{ scope.row }} -->
|
<!-- {{ scope.row }} -->
|
||||||
<el-button
|
<el-button
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<Dialog :title="dialogTitle" v-model="dialogVisible" width="40%">
|
<Dialog :title="dialogTitle" v-model="dialogVisible" width="60%">
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="formData"
|
:model="formData"
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
>
|
>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="项目" prop="projectId">
|
<el-form-item label="项目" prop="projectId" min-width="260px">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="formData.projectId"
|
v-model="formData.projectId"
|
||||||
filterable
|
filterable
|
||||||
|
|
@ -26,15 +26,6 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="结算周期" prop="settlementPeriod">
|
|
||||||
<el-quarter-picker v-model="formData.settlementPeriod" placeholder="选择季度" value-format="yyyy-q" clearable style="width: 100%"
|
|
||||||
popper-class="full-width-datepicker" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="结算日期" prop="settlementDate">
|
<el-form-item label="结算日期" prop="settlementDate">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.settlementDate"
|
v-model="formData.settlementDate"
|
||||||
|
|
@ -45,6 +36,20 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="结算周期" prop="settlementPeriod">
|
||||||
|
<el-quarter-picker
|
||||||
|
v-model="formData.settlementPeriod"
|
||||||
|
placeholder="选择季度"
|
||||||
|
value-format="yyyy-q"
|
||||||
|
clearable
|
||||||
|
style="width: 100%"
|
||||||
|
popper-class="full-width-datepicker"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="结算开始时间" prop="startDate">
|
<el-form-item label="结算开始时间" prop="startDate">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
|
|
@ -64,6 +69,7 @@
|
||||||
placeholder="选择结算结束时间"
|
placeholder="选择结算结束时间"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
popper-class="full-width-datepicker"
|
popper-class="full-width-datepicker"
|
||||||
|
:disabled="true"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
@ -91,6 +97,7 @@
|
||||||
import * as ProjectSettlementApi from '@/api/crm/project/settlement'
|
import * as ProjectSettlementApi from '@/api/crm/project/settlement'
|
||||||
import * as ProjectApi from '@/api/crm/project'
|
import * as ProjectApi from '@/api/crm/project'
|
||||||
import ElQuarterPicker from '@/components/ElQuarterPicker/index.vue'
|
import ElQuarterPicker from '@/components/ElQuarterPicker/index.vue'
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
/** 项目利润结算 表单 */
|
/** 项目利润结算 表单 */
|
||||||
defineOptions({ name: 'ProjectSettlementForm' })
|
defineOptions({ name: 'ProjectSettlementForm' })
|
||||||
|
|
@ -184,4 +191,33 @@ const resetForm = () => {
|
||||||
}
|
}
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 监听结算周期变化,自动设置开始和结束时间
|
||||||
|
watch(
|
||||||
|
() => formData.value.settlementPeriod,
|
||||||
|
(val) => {
|
||||||
|
if (!val) {
|
||||||
|
formData.value.startDate = undefined
|
||||||
|
formData.value.endDate = undefined
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 解析季度
|
||||||
|
// 期望格式: "2024-2"
|
||||||
|
const [yearStr, quarterStr] = val.split('-')
|
||||||
|
const year = Number(yearStr)
|
||||||
|
const quarter = Number(quarterStr)
|
||||||
|
let startMonth = 0
|
||||||
|
switch (quarter) {
|
||||||
|
case 1: startMonth = 0; break // 1月
|
||||||
|
case 2: startMonth = 3; break // 4月
|
||||||
|
case 3: startMonth = 6; break // 7月
|
||||||
|
case 4: startMonth = 9; break // 10月
|
||||||
|
default: startMonth = 0
|
||||||
|
}
|
||||||
|
const startDate = dayjs(new Date(year, startMonth, 1))
|
||||||
|
const endDate = startDate.add(2, 'month').endOf('month')
|
||||||
|
formData.value.startDate = startDate.format('YYYY-MM-DD')
|
||||||
|
formData.value.endDate = endDate.format('YYYY-MM-DD')
|
||||||
|
}
|
||||||
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
</ProjectSettlementDetailsHeader>
|
</ProjectSettlementDetailsHeader>
|
||||||
|
|
||||||
<div class="settlement-detail-section">
|
<div class="settlement-detail-section">
|
||||||
<h2>一、收入项</h2>
|
<h4>一、收入项</h4>
|
||||||
<el-table :data="incomeTable" border style="width: 100%; margin-bottom: 16px;">
|
<el-table :data="incomeTable" border style="width: 100%; margin-bottom: 16px;">
|
||||||
<el-table-column prop="name" label="科目名称" />
|
<el-table-column prop="name" label="科目名称" />
|
||||||
<el-table-column prop="amount" label="金额/元" />
|
<el-table-column prop="amount" label="金额/元" />
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
<div v-if="settlement.incomeRemark">备注:{{ settlement.incomeRemark }}</div>
|
<div v-if="settlement.incomeRemark">备注:{{ settlement.incomeRemark }}</div>
|
||||||
<div style="margin-bottom: 12px;">收入合计:<b>{{ settlement.totalIncome?.toFixed(2) ?? '--' }}</b></div>
|
<div style="margin-bottom: 12px;">收入合计:<b>{{ settlement.totalIncome?.toFixed(2) ?? '--' }}</b></div>
|
||||||
|
|
||||||
<h2 style="margin-top: 32px;">二、支出项</h2>
|
<h4 style="margin-top: 32px;">二、支出项</h4>
|
||||||
<el-table :data="expenseTable" border style="width: 100%; margin-bottom: 16px;">
|
<el-table :data="expenseTable" border style="width: 100%; margin-bottom: 16px;">
|
||||||
<el-table-column prop="name" label="科目名称" />
|
<el-table-column prop="name" label="科目名称" />
|
||||||
<el-table-column prop="amount" label="金额/元" />
|
<el-table-column prop="amount" label="金额/元" />
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
<div v-if="settlement.expenseRemark">备注:{{ settlement.expenseRemark }}</div>
|
<div v-if="settlement.expenseRemark">备注:{{ settlement.expenseRemark }}</div>
|
||||||
<div style="margin-bottom: 12px;">支出合计:<b>{{ settlement.totalExpenses?.toFixed(2) ?? '--' }}</b></div>
|
<div style="margin-bottom: 12px;">支出合计:<b>{{ settlement.totalExpenses?.toFixed(2) ?? '--' }}</b></div>
|
||||||
|
|
||||||
<h2 style="margin-top: 32px;">三、利润计算</h2>
|
<h4 style="margin-top: 32px;">三、利润计算</h4>
|
||||||
<el-table :data="profitTable" border style="width: 100%; margin-bottom: 16px;">
|
<el-table :data="profitTable" border style="width: 100%; margin-bottom: 16px;">
|
||||||
<el-table-column prop="name" label="科目名称" />
|
<el-table-column prop="name" label="科目名称" />
|
||||||
<el-table-column prop="amount" label="金额/元" />
|
<el-table-column prop="amount" label="金额/元" />
|
||||||
|
|
@ -120,8 +120,8 @@ const incomeRemarkTable = computed(() => [
|
||||||
// 支出项表格数据
|
// 支出项表格数据
|
||||||
const expenseTable = computed(() => [
|
const expenseTable = computed(() => [
|
||||||
{ name: '电费成本', amount: settlement.value.electricityCost, remark: '以电力公司账单为准' },
|
{ name: '电费成本', amount: settlement.value.electricityCost, remark: '以电力公司账单为准' },
|
||||||
{ name: '场地租金', amount: settlement.value.venueRent, remark: '按《场地租赁协议》约定' },
|
{ name: '场地租金', amount: settlement.value.venueRent, remark: '按《场地租赁协议》约定 (退回为负值)' },
|
||||||
{ name: '场地押金', amount: settlement.value.venueDeposit, remark: '按《场地租赁协议》约定' },
|
{ name: '场地押金', amount: settlement.value.venueDeposit, remark: '按《场地租赁协议》约定 (退回为负值)' },
|
||||||
{ name: '项目推介费', amount: settlement.value.projectPromotion, remark: '付给项目推荐人' },
|
{ name: '项目推介费', amount: settlement.value.projectPromotion, remark: '付给项目推荐人' },
|
||||||
{ name: '设备更新购置费', amount: settlement.value.equipmentUpgrade, remark: '同一场站设备更新' },
|
{ name: '设备更新购置费', amount: settlement.value.equipmentUpgrade, remark: '同一场站设备更新' },
|
||||||
{ name: '管理费用', amount: settlement.value.managementCost, remark: '按120元/抢/月计算(用于不可分割的公摊费用)' },
|
{ name: '管理费用', amount: settlement.value.managementCost, remark: '按120元/抢/月计算(用于不可分割的公摊费用)' },
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,11 @@
|
||||||
:inline="true"
|
:inline="true"
|
||||||
label-width="68px"
|
label-width="68px"
|
||||||
>
|
>
|
||||||
<el-form-item labssel="项目" prop="projectId">
|
<el-form-item label="项目" prop="projectId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.projectId"
|
v-model="queryParams.projectId"
|
||||||
clearable
|
clearable
|
||||||
|
filterable
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
>
|
>
|
||||||
|
|
@ -80,38 +81,38 @@
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||||
|
|
||||||
<el-table-column label="项目名称" align="center" prop="projectName">
|
<el-table-column label="项目名称" align="center" prop="projectName" fixed="left" min-width="200px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-link type="primary" @click="goDetail(scope.row)">{{ scope.row.projectName }}</el-link>
|
<el-link type="primary" @click="goDetail(scope.row)">{{ scope.row.projectName }}</el-link>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="枪数" align="center" prop="piles" />
|
<el-table-column label="枪数" align="center" prop="piles" width="200px"/>
|
||||||
<el-table-column label="结算周期" align="center" prop="settlementPeriod" >
|
<el-table-column label="结算周期" align="center" prop="settlementPeriod" width="200px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ formatQuarterPeriod(scope.row.settlementPeriod) }}
|
{{ formatQuarterPeriod(scope.row.settlementPeriod) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="结算开始时间" align="center" prop="startDate">
|
<el-table-column label="总期数" align="center" prop="period" width="200px"/>
|
||||||
|
<el-table-column label="结算开始时间" align="center" prop="startDate" width="200px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ scope.row.startDate ? formatDate(scope.row.startDate, 'YYYY-MM-DD') : '' }}
|
{{ scope.row.startDate ? formatDate(scope.row.startDate, 'YYYY-MM-DD') : '' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="结算结束时间" align="center" prop="endDate">
|
<el-table-column label="结算结束时间" align="center" prop="endDate" width="200px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ scope.row.endDate ? formatDate(scope.row.endDate, 'YYYY-MM-DD') : '' }}
|
{{ scope.row.endDate ? formatDate(scope.row.endDate, 'YYYY-MM-DD') : '' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="结算日期" align="center" prop="settlementDate">
|
<el-table-column label="毛利润" align="center" prop="grossProfit" width="200px"/>
|
||||||
|
<el-table-column label="上期亏损转结" align="center" prop="previousLossCarryover" width="200px" />
|
||||||
|
<el-table-column label="净利润" align="center" prop="netProfit" width="200px"/>
|
||||||
|
<!-- <el-table-column label="结算状态" align="center" prop="settlementStatus" /> -->
|
||||||
|
<el-table-column label="结算日期" align="center" prop="settlementDate" width="200px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ scope.row.settlementDate ? formatDate(scope.row.settlementDate, 'YYYY-MM-DD') : '' }}
|
{{ scope.row.settlementDate ? formatDate(scope.row.settlementDate, 'YYYY-MM-DD') : '' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="总期数" align="center" prop="period" />
|
<el-table-column label="操作" align="center" width="180px" fixed="right">
|
||||||
<el-table-column label="毛利润" align="center" prop="grossProfit" />
|
|
||||||
<el-table-column label="上期亏损转结" align="center" prop="previousLossCarryover" />
|
|
||||||
<el-table-column label="净利润" align="center" prop="netProfit" />
|
|
||||||
<el-table-column label="结算状态" align="center" prop="settlementStatus" />
|
|
||||||
<el-table-column label="操作" align="center" min-width="180px" fixed="right">
|
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue