|
@@ -1,87 +1,307 @@
|
|
<template>
|
|
<template>
|
|
<div v-loading="loading">
|
|
<div v-loading="loading">
|
|
<div class="search clear" style="align-items: center;;">
|
|
<div class="search clear" style="align-items: center;;">
|
|
- <div style="float:left;line-height:30px;font-size:16px">
|
|
|
|
- 月度完成情况
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
|
|
+ <el-tooltip placement="top" width="50px" trigger="hover" content="平台公司">
|
|
|
|
+ <i class="el-icon-warning-outline" style="font-size:16px;cursor:pointer;;display:inline-block;padding-right: 5px" ></i>
|
|
|
|
+ </el-tooltip>
|
|
|
|
+ <span style="font-size: 15px;">月度完成情况</span>
|
|
<div style="float:right">
|
|
<div style="float:right">
|
|
- <el-select size="small" style="margin-right:10px;width:140px" v-model="companyNo" @change="requestData"
|
|
|
|
- :disabled="isEmpty">
|
|
|
|
- <el-option v-for="company in cp_companies" :key="company.value" :value="company.value" :label="company.label" />
|
|
|
|
- </el-select>
|
|
|
|
-
|
|
|
|
- <el-date-picker class="fr picker no-padding" v-model="daytime" style=";width:95px" value-format="yyyy-MM-dd"
|
|
|
|
|
|
+ <el-date-picker class="fr picker no-padding" v-model="daytime" style="width:95px" value-format="yyyy-MM-dd"
|
|
:editable="false" :disabled="isEmpty" :clearable="false" :size="'small'" format="yyyy-MM-dd" type="date"
|
|
:editable="false" :disabled="isEmpty" :clearable="false" :size="'small'" format="yyyy-MM-dd" type="date"
|
|
align="right" placeholder="选择日期"
|
|
align="right" placeholder="选择日期"
|
|
:picker-options="{ disabledDate(time) { return time.getTime() > Date.now(); } }" @change="requestData" />
|
|
:picker-options="{ disabledDate(time) { return time.getTime() > Date.now(); } }" @change="requestData" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <el-row style="margin-top:10px;margin-top:10px" v-if="!isEmpty">
|
|
|
|
- <el-table border size="mini" :data="tableData" :header-cell-class-name="setHeaderClassName"
|
|
|
|
- :cell-class-name="setCellClassName" :span-method="spanMethod">
|
|
|
|
- <el-table-column fixed="left" label="公司" prop="companyName" align="center" width="65px">
|
|
|
|
|
|
+ <el-row style="margin-top:10px;margin-top:10px;margin-bottom:10px" v-if="!isEmpty">
|
|
|
|
+ <el-table border size="mini" :data="topTable" :header-cell-class-name="setHeaderClassName"
|
|
|
|
+ :cell-class-name="setCellClassName">
|
|
|
|
+ <el-table-column fixed="left" label="公司" prop="companyName" align="center" width="70px">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- <div v-if="scope.row.companyName.indexOf('普润') === -1">
|
|
|
|
- {{ mapCompany[scope.row.companyName] || scope.row.companyName }}
|
|
|
|
|
|
+ <div v-if="scope.row.companyName === '结算单E企购'">
|
|
|
|
+ 自营订单
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
<div v-else>
|
|
<div v-else>
|
|
- <el-popover placement="top" width="200" trigger="hover" content="普润&锦兴&知事">
|
|
|
|
- <template #reference>
|
|
|
|
- <i class="el-icon-warning-outline" style="font-size:14px;cursor:pointer"></i>
|
|
|
|
- 普润
|
|
|
|
- </template>
|
|
|
|
- </el-popover>
|
|
|
|
|
|
+ {{ scope.row.companyName }}
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
-
|
|
|
|
- <el-table-column label="业绩类型" prop="type" align="center" width="100px"></el-table-column>
|
|
|
|
-
|
|
|
|
- <el-table-column label="当月销售" prop="monthSale" align="center" min-width="100px">
|
|
|
|
|
|
+ <el-table-column label="当日营业收入" align="center" width="95px">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- {{unit2TenThousand(scope.row.monthSale,isTenThound)}}
|
|
|
|
|
|
+ {{ scope.row.companyName === '合计' ? unit2TenThousand(calcAmount('sale_total'), isTenThound) : unit2TenThousand(scope.row.sale_total, isTenThound) }}
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
|
|
|
- <el-table-column label="销售退货" prop="monthReturn" align="center" min-width="100px">
|
|
|
|
- <template slot-scope="scope">
|
|
|
|
- {{unit2TenThousand(scope.row.monthReturn,isTenThound)}}
|
|
|
|
|
|
+ <el-table-column label="营收目标" align="center" min-width="95px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ {{ scope.row.companyName === '合计' ? unit2TenThousand(calcAmount('total_tips'), isTenThound) : unit2TenThousand(scope.row.total_tips, isTenThound) }}
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+ <el-table-column label="营业收入(净)" align="center" min-width="115px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <div style="display:flex;justify-content:center" :style="`${scope.row.companyName === '合计' ? '' :getCurrentValueStyle(scope.row.msale_total, scope.row.total_tips)}`">
|
|
|
|
+ {{
|
|
|
|
+ scope.row.companyName === '合计'
|
|
|
|
+ ? unit2TenThousand(calcAmount('msale_total'), isTenThound)
|
|
|
|
+ : unit2TenThousand(scope.row.msale_total, isTenThound)
|
|
|
|
+ }}
|
|
|
|
+ <el-popover placement="right" :width="200" trigger="click">
|
|
|
|
+ <div class="table-size">
|
|
|
|
+ <p>直营/自营: {{
|
|
|
|
+ scope.row.companyName === '合计'
|
|
|
|
+ ? unit2TenThousand(calcAmount('0.0.monthinfo.msale_total', true), isTenThound)
|
|
|
|
+ : unit2TenThousand(scope.row.info[0][0].monthinfo.msale_total, isTenThound)
|
|
|
|
+ }}</p>
|
|
|
|
+ <p>支付渠道: {{
|
|
|
|
+ scope.row.companyName === '合计'
|
|
|
|
+ ? unit2TenThousand(calcAmount('0.1.monthinfo.msale_total', true), isTenThound)
|
|
|
|
+ : unit2TenThousand(scope.row.info[0][1].monthinfo.msale_total, isTenThound)
|
|
|
|
+ }}</p>
|
|
|
|
+ <p>供应商端: {{
|
|
|
|
+ scope.row.companyName === '合计'
|
|
|
|
+ ? unit2TenThousand(calcAmount('0.2.monthinfo.msale_total', true), isTenThound)
|
|
|
|
+ : unit2TenThousand(scope.row.info[0][2].monthinfo.msale_total, isTenThound) }}
|
|
|
|
+ </p>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <template #reference>
|
|
|
|
+ <div :style="`${getCurrentValueStyle(scope.row.msale_total, scope.row.total_tips)}`">
|
|
|
|
+ <i class="el-icon-warning-outline trigger-hover" style="font-size:16px;cursor:pointer;margin-left:5px"></i>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-popover>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+ <el-table-column label="营收完成%" align="center" min-width="85px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <div :style="`${scope.row.companyName === '合计' ? '' : getCurrentRateStyle(scope.row.completion_rate)}`">
|
|
|
|
+ {{ scope.row.companyName === '合计' ? calcAmountCompletionRate() : (String(scope.row.completion_rate) === 'NaN' ? 0 : scope.row.completion_rate) + "%" }}
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ <template v-if="costField">
|
|
|
|
+ <el-table-column label="毛利目标" align="center" min-width="90px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ {{
|
|
|
|
+ costField
|
|
|
|
+ ? scope.row.companyName === '合计' ? unit2TenThousand(calcAmount('cost_tips'), isTenThound) : unit2TenThousand(scope.row.cost_tips, isTenThound)
|
|
|
|
+ : '***'
|
|
|
|
+ }}
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+ <el-table-column label="毛利完成" align="center" min-width="90px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <div :style="`${scope.row.companyName === '合计' ? '' : getCurrentValueStyle(scope.row.gross_completion, scope.row.cost_tips)}`">
|
|
|
|
+ {{ costField
|
|
|
|
+ ? scope.row.companyName === '合计' ? unit2TenThousand(calcAmount('gross_completion'), isTenThound) : unit2TenThousand(scope.row.gross_completion, isTenThound)
|
|
|
|
+ : '***'
|
|
|
|
+ }}
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ </template>
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ <el-table-column label="毛利完成%" align="center" min-width="85px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <div :style="scope.row.companyName === '合计' ? '' : getCurrentRateStyle(scope.row.gross_completion_rate)">
|
|
|
|
+ {{ scope.row.companyName === '合计' ? calcAmountGrossCompletionRate() : scope.row.gross_completion_rate + '%' }}
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+ <template v-if="costField">
|
|
|
|
+ <el-table-column label="成本合计" align="center" min-width="125px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <div style="display:flex;justify-content:center" v-if="costField">
|
|
|
|
+ {{ scope.row.companyName === '合计'
|
|
|
|
+ ? unit2TenThousand(calcAmount('mcost_total'), isTenThound)
|
|
|
|
+ : unit2TenThousand(scope.row.mcost_total, isTenThound)
|
|
|
|
+ }}
|
|
|
|
+ <el-popover placement="right" :width="200" trigger="click">
|
|
|
|
+ <div class="table-size">
|
|
|
|
+ <p>直营/自营:
|
|
|
|
+ {{
|
|
|
|
+ scope.row.companyName === '合计'
|
|
|
|
+ ? unit2TenThousand(calcAmount('0.0.monthinfo.mcost_total',true),isTenThound)
|
|
|
|
+ : unit2TenThousand(scope.row.info[0][0].monthinfo.mcost_total, isTenThound)
|
|
|
|
+ }}
|
|
|
|
+ </p>
|
|
|
|
+ <p>支付渠道:
|
|
|
|
+ {{
|
|
|
|
+ scope.row.companyName === '合计'
|
|
|
|
+ ? unit2TenThousand(calcAmount('0.1.monthinfo.mcost_total', true), isTenThound)
|
|
|
|
+ : unit2TenThousand(scope.row.info[0][1].monthinfo.mcost_total, isTenThound)
|
|
|
|
+ }}</p>
|
|
|
|
+ <p>供应商端:
|
|
|
|
+ {{
|
|
|
|
+ scope.row.companyName === '合计'
|
|
|
|
+ ? unit2TenThousand(calcAmount('0.2.monthinfo.mcost_total', true),isTenThound)
|
|
|
|
+ : unit2TenThousand(scope.row.info[0][2].monthinfo.mcost_total, isTenThound)
|
|
|
|
+ }}</p>
|
|
|
|
+ <p>物流费用:
|
|
|
|
+ {{
|
|
|
|
+ scope.row.companyName === '合计'
|
|
|
|
+ ? unit2TenThousand(calcAmount('0.3.monthinfo.mcost_total', true), isTenThound)
|
|
|
|
+ : unit2TenThousand(scope.row.info[0][3].monthinfo.mcost_total, isTenThound)
|
|
|
|
+ }}
|
|
|
|
+ </p>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <template #reference>
|
|
|
|
+ <i class="el-icon-warning-outline trigger-hover" style="font-size:16px;cursor:pointer;margin-left:5px"></i>
|
|
|
|
+ </template>
|
|
|
|
+ </el-popover>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <p v-else>***</p>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+ <el-table-column label="实际毛利率" align="center" width="85px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ {{ costField
|
|
|
|
+ ? scope.row.companyName === '合计' ? calcAmountRealRate() : unit2TenThousand(scope.row.gross_sale_completion_rate) + "%"
|
|
|
|
+ : '***'
|
|
|
|
+ }}
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
</template>
|
|
</template>
|
|
- </el-table-column>
|
|
|
|
|
|
+ </el-table>
|
|
|
|
+ </el-row>
|
|
|
|
|
|
|
|
|
|
- <el-table-column label="销售合计" prop="monthSaleAmount" align="center" min-width="100px">
|
|
|
|
|
|
+ <el-row style="margin-top:10px;margin-top:10px" v-if="!isEmpty">
|
|
|
|
+ <el-table border size="mini" :data="tableData" :header-cell-class-name="setHeaderClassName"
|
|
|
|
+ :cell-class-name="setCellClassName">
|
|
|
|
+ <el-table-column fixed="left" label="公司" prop="companyName" align="center" width="60px">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- {{unit2TenThousand(scope.row.monthSaleAmount,isTenThound)}}
|
|
|
|
- </template>
|
|
|
|
- </el-table-column>
|
|
|
|
|
|
+ <div v-if="scope.row.companyName.indexOf('普润') === -1">
|
|
|
|
+ {{ mapCompany[scope.row.companyName] || scope.row.companyName }}
|
|
|
|
+ </div>
|
|
|
|
|
|
- <el-table-column label="当月成本" prop="monthCost" align="center" min-width="100px">
|
|
|
|
- <template slot-scope="scope">
|
|
|
|
- {{unit2TenThousand(scope.row.monthCost,isTenThound)}}
|
|
|
|
|
|
+ <div v-else>
|
|
|
|
+ <el-popover placement="right" width="200" trigger="hover" content="普润&锦兴&知事">
|
|
|
|
+ <template #reference>
|
|
|
|
+ <i class="el-icon-warning-outline" style="font-size:14px;cursor:pointer"></i>
|
|
|
|
+ 普润
|
|
|
|
+ </template>
|
|
|
|
+ </el-popover>
|
|
|
|
+ </div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
-
|
|
|
|
- <el-table-column label="当月成本退货" prop="monthCost" align="center" min-width="100px">
|
|
|
|
|
|
+ <el-table-column label="当日营业收入" align="center" width="95px">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- {{unit2TenThousand(scope.row.monthCostReturn,isTenThound)}}
|
|
|
|
|
|
+ {{ unit2TenThousand(scope.row.sale_total, isTenThound) }}
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
|
|
|
- <el-table-column label="成本合计" prop="monthCost" align="center" min-width="100px">
|
|
|
|
- <template slot-scope="scope">
|
|
|
|
- {{unit2TenThousand(scope.row.monthCostAmount,isTenThound)}}
|
|
|
|
|
|
+ <el-table-column label="营收目标" align="center" min-width="95px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ {{ unit2TenThousand(scope.row.total_tips, isTenThound) }}
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+ <el-table-column label="营业收入(净)" align="center" min-width="115px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <div style="display:flex;justify-content:center" :style="`${getCurrentValueStyle(scope.row.msale_total, scope.row.total_tips)}`">
|
|
|
|
+ {{ unit2TenThousand(scope.row.msale_total, isTenThound) }}
|
|
|
|
+ <el-popover placement="right" :width="200" trigger="click">
|
|
|
|
+ <div class="table-size">
|
|
|
|
+ <p>直营/自营: {{
|
|
|
|
+ unit2TenThousand(scope.row.info[0][0].monthinfo.msale_total, isTenThound)
|
|
|
|
+ }}</p>
|
|
|
|
+ <p>支付渠道: {{ unit2TenThousand(scope.row.info[0][1].monthinfo.msale_total, isTenThound) }}</p>
|
|
|
|
+ <p>供应商端: {{ unit2TenThousand(scope.row.info[0][2].monthinfo.msale_total, isTenThound) }}</p>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <template #reference>
|
|
|
|
+ <div :style="`${getCurrentValueStyle(scope.row.msale_total, scope.row.total_tips)}`">
|
|
|
|
+ <i class="el-icon-warning-outline trigger-hover" style="font-size:16px;cursor:pointer;margin-left:5px"></i>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-popover>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+ <el-table-column label="营收完成%" align="center" min-width="85px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <div :style="`${getCurrentRateStyle(scope.row.completion_rate)}`">{{ (String(scope.row.completion_rate) === 'NaN' ? 0 : scope.row.completion_rate) + "%" }}
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ <template v-if="costField">
|
|
|
|
+ <el-table-column label="毛利目标" align="center" min-width="90px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ {{ costField ? unit2TenThousand(scope.row.cost_tips, isTenThound) : '***' }}
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+ <el-table-column label="毛利完成" align="center" min-width="90px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <div :style="`${getCurrentValueStyle(scope.row.gross_completion, scope.row.cost_tips)}`">
|
|
|
|
+ {{ costField ? unit2TenThousand(scope.row.gross_completion, isTenThound) : '***' }}
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ </template>
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ <el-table-column label="毛利完成%" align="center" min-width="85px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <div :style="getCurrentRateStyle(scope.row.gross_completion_rate)">
|
|
|
|
+ {{ scope.row.gross_completion_rate + '%' }}
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+ <template v-if="costField">
|
|
|
|
+ <el-table-column label="成本合计" align="center" min-width="125px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <div style="display:flex;justify-content:center" v-if="costField">
|
|
|
|
+ {{ unit2TenThousand(scope.row.mcost_total, isTenThound) }}
|
|
|
|
+ <el-popover placement="right" :width="200" trigger="click">
|
|
|
|
+ <div class="table-size">
|
|
|
|
+ <p>直营/自营: {{ unit2TenThousand(scope.row.info[0][0].monthinfo.mcost_total, isTenThound) }}</p>
|
|
|
|
+ <p>支付渠道: {{ unit2TenThousand(scope.row.info[0][1].monthinfo.mcost_total, isTenThound) }}</p>
|
|
|
|
+ <p>供应商端: {{ unit2TenThousand(scope.row.info[0][2].monthinfo.mcost_total, isTenThound) }}</p>
|
|
|
|
+ <p>物流费用: {{ unit2TenThousand(scope.row.info[0][3].monthinfo.mcost_total, isTenThound) }}</p>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <template #reference>
|
|
|
|
+ <i class="el-icon-warning-outline trigger-hover" style="font-size:16px;cursor:pointer;margin-left:5px"></i>
|
|
|
|
+ </template>
|
|
|
|
+ </el-popover>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <p v-else>***</p>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+
|
|
|
|
+ <el-table-column label="实际毛利率" align="center" width="85px">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <!-- <div :style="`${getCurrentRateStyle(scope.row.gross_sale_completion_rate)}`"> -->
|
|
|
|
+ {{ costField ? unit2TenThousand(scope.row.gross_sale_completion_rate) + "%" : '***' }}
|
|
|
|
+ <!-- </div> -->
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
</template>
|
|
</template>
|
|
- </el-table-column>
|
|
|
|
</el-table>
|
|
</el-table>
|
|
</el-row>
|
|
</el-row>
|
|
|
|
|
|
<template v-else>
|
|
<template v-else>
|
|
<div style="text-align:center;line-height:60px;user-select:none">当前账号没有访问权限</div>
|
|
<div style="text-align:center;line-height:60px;user-select:none">当前账号没有访问权限</div>
|
|
</template>
|
|
</template>
|
|
|
|
+ <!-- -->
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
@@ -91,6 +311,7 @@ import { addition, unit2TenThousand, subtraction, multiplication, division } fro
|
|
import asyncRequest from "@/api/newResults";
|
|
import asyncRequest from "@/api/newResults";
|
|
import { mapCompany } from "./mapCompany";
|
|
import { mapCompany } from "./mapCompany";
|
|
import dayjs from "dayjs"
|
|
import dayjs from "dayjs"
|
|
|
|
+import { amountData } from "./calc"
|
|
|
|
|
|
export default {
|
|
export default {
|
|
props: ['companies', 'costField', 'isTenThound'],
|
|
props: ['companies', 'costField', 'isTenThound'],
|
|
@@ -99,7 +320,9 @@ export default {
|
|
daytime: "",
|
|
daytime: "",
|
|
loading: false,
|
|
loading: false,
|
|
tableData: [],
|
|
tableData: [],
|
|
|
|
+ topTable: [],
|
|
companyNo: "",
|
|
companyNo: "",
|
|
|
|
+ plat_cp_companies:[],
|
|
cp_companies: [],
|
|
cp_companies: [],
|
|
isEmpty: false,
|
|
isEmpty: false,
|
|
mapCompany
|
|
mapCompany
|
|
@@ -112,41 +335,96 @@ export default {
|
|
const zsIndex = this.companies.findIndex((item) => item.label === "北京知事文化产业发展有限公司");
|
|
const zsIndex = this.companies.findIndex((item) => item.label === "北京知事文化产业发展有限公司");
|
|
|
|
|
|
if (jxIndex !== -1 || prIndex !== -1 || zsIndex !== -1) hasCompose = true;
|
|
if (jxIndex !== -1 || prIndex !== -1 || zsIndex !== -1) hasCompose = true;
|
|
|
|
+
|
|
|
|
+ console.log(this.companies)
|
|
this.cp_companies = this.companies.filter((item) => item.label !== "北京锦兴弘昌科技有限公司" && item.label !== "北京普润心堂商贸有限公司" && item.label !== "北京知事文化产业发展有限公司")
|
|
this.cp_companies = this.companies.filter((item) => item.label !== "北京锦兴弘昌科技有限公司" && item.label !== "北京普润心堂商贸有限公司" && item.label !== "北京知事文化产业发展有限公司")
|
|
if (hasCompose) this.cp_companies = [...this.cp_companies, { value: "GS2302231124114965", label: "普润&锦兴&知事" }]
|
|
if (hasCompose) this.cp_companies = [...this.cp_companies, { value: "GS2302231124114965", label: "普润&锦兴&知事" }]
|
|
- if (this.cp_companies.length === 4) this.cp_companies = [{ value: "", label: "所有公司" }, ...this.cp_companies];
|
|
|
|
|
|
|
|
this.isEmpty = this.cp_companies.length === 0;
|
|
this.isEmpty = this.cp_companies.length === 0;
|
|
if (this.isEmpty) return;
|
|
if (this.isEmpty) return;
|
|
|
|
|
|
this.cp_companies = this.cp_companies.map((item, index) => {
|
|
this.cp_companies = this.cp_companies.map((item, index) => {
|
|
let label = '';
|
|
let label = '';
|
|
- if (item.label === '所有公司') {
|
|
|
|
- label = '所有公司'
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
if (item.label === '北京万宇恒通国际科贸有限公司') {
|
|
if (item.label === '北京万宇恒通国际科贸有限公司') {
|
|
label = '平台公司: 万宇'
|
|
label = '平台公司: 万宇'
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (item.label === '北京泰文创供应链管理有限公司') {
|
|
|
|
+ label = '平台公司: 泰文创'
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (item.label === '北京元隆雅图文化传播股份有限公司') {
|
|
|
|
+ label = '预订单E企购'
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (item.label === '自营订单') {
|
|
|
|
+ label = '结算单E企购'
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (item.label === '地推订单') {
|
|
|
|
+ label = '地推订单'
|
|
|
|
+ }
|
|
|
|
+
|
|
if (item.label === "普润&锦兴&知事") label = `业务公司: 普润&锦兴&知事`
|
|
if (item.label === "普润&锦兴&知事") label = `业务公司: 普润&锦兴&知事`
|
|
if (label === '') label = `业务公司: ${mapCompany[item.label]}`;
|
|
if (label === '') label = `业务公司: ${mapCompany[item.label]}`;
|
|
return ({ ...item, label })
|
|
return ({ ...item, label })
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
- let list = ['所有公司','平台公司: 万宇','业务公司: 百辰','业务公司: 泓源','业务公司: 普润&锦兴&知事']
|
|
|
|
- const cp_list = this.cp_companies.map((item) => item.label);
|
|
|
|
- list = list.filter(item => cp_list.includes(item));
|
|
|
|
- this.cp_companies = list.map((item) => this.cp_companies.find((cp_item) => cp_item.label === item));
|
|
|
|
- this.companyNo = this.cp_companies[0].value;
|
|
|
|
|
|
+ let plat_list = ['所有平台公司','平台公司: 万宇', '平台公司: 泰文创', '预订单E企购', '结算单E企购', '地推订单']
|
|
|
|
+
|
|
|
|
+ const plat_cp_list = this.cp_companies.map((item) => item.label);
|
|
|
|
+ plat_list = plat_list.filter(item => plat_cp_list.includes(item));
|
|
|
|
+ this.plat_cp_companies = plat_list.map((item) => this.cp_companies.find((cp_item) => cp_item.label === item));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if(this.plat_cp_companies.length === 4){
|
|
|
|
+ this.plat_cp_companies = [{ value: "", label: "所有平台公司" }, ...this.plat_cp_companies]
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ this.companyNo = this.plat_cp_companies[0].value;
|
|
this.daytime = this.transformTime();
|
|
this.daytime = this.transformTime();
|
|
this.requestData();
|
|
this.requestData();
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
|
|
+ isNaN(value){
|
|
|
|
+ return value === 'NaN' || Number.isNaN(value)
|
|
|
|
+ },
|
|
unit2TenThousand,
|
|
unit2TenThousand,
|
|
|
|
+ calcAmountRealRate(){
|
|
|
|
+ const msale_total = this.calcAmount('msale_total')
|
|
|
|
+ const gross_completion = this.calcAmount('gross_completion')
|
|
|
|
+ return Number(multiplication(Number(division(gross_completion, msale_total)).toFixed(2), 100)).toFixed(2) + '%'
|
|
|
|
+ },
|
|
|
|
+ calcAmountGrossCompletionRate(){
|
|
|
|
+ const gross_completion = this.calcAmount('gross_completion')
|
|
|
|
+ const cost_tips = this.calcAmount('cost_tips')
|
|
|
|
+ return Number(multiplication(Number(division(gross_completion, cost_tips)).toFixed(2), 100)).toFixed(2) + '%'
|
|
|
|
+ },
|
|
|
|
+ calcAmountCompletionRate(){
|
|
|
|
+ const msale_total = this.calcAmount('msale_total')
|
|
|
|
+ const total_tips = this.calcAmount('total_tips')
|
|
|
|
+ return Number(multiplication(Number(division(msale_total, total_tips)).toFixed(2), 100)).toFixed(2) + '%'
|
|
|
|
+ },
|
|
|
|
+ calcAmount(prop, isInfo = false){
|
|
|
|
+ const sourceData = this.topTable.filter(({companyName}) => companyName !== '合计')
|
|
|
|
+
|
|
|
|
+ if(!isInfo){
|
|
|
|
+ console.log(sourceData,prop)
|
|
|
|
+ return sourceData.reduce((prev,current) => {
|
|
|
|
+ const value = Number(addition(prev,isNaN(current[prop]) ? 0 : current[prop]))
|
|
|
|
+ return value === 0 ? 0 : value.toFixed(2)
|
|
|
|
+ }, 0)
|
|
|
|
+ } else {
|
|
|
|
+ const [i1, i2,i3, i4] = prop.split('.')
|
|
|
|
+ return sourceData.reduce((prev,current) => {
|
|
|
|
+ const value = Number(addition(prev, isNaN(current.info[i1][i2][i3][i4]) ? 0 : current.info[i1][i2][i3][i4]))
|
|
|
|
+ return value === 0 ? 0 : value.toFixed(2)
|
|
|
|
+ }, 0)
|
|
|
|
+ }
|
|
|
|
+ },
|
|
getCurrentRateStyle(current) {
|
|
getCurrentRateStyle(current) {
|
|
const days = dayjs(this.daytime).daysInMonth();
|
|
const days = dayjs(this.daytime).daysInMonth();
|
|
const oneDay = Number(division(100, days)).toFixed(2);
|
|
const oneDay = Number(division(100, days)).toFixed(2);
|
|
@@ -222,38 +500,6 @@ export default {
|
|
}
|
|
}
|
|
|
|
|
|
return base
|
|
return base
|
|
- },
|
|
|
|
- /* 表格合并列和行 */
|
|
|
|
- spanMethod({ rowIndex, columnIndex }) {
|
|
|
|
- if (columnIndex === 0) {
|
|
|
|
- const _row = this.flitterData(this.tableData).one[rowIndex];
|
|
|
|
- const _col = _row > 0 ? 1 : 0;
|
|
|
|
- return { rowspan: _row, colspan: _col };
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
- /**合并表格的第一列,处理表格数据 */
|
|
|
|
- flitterData(arr) {
|
|
|
|
- let spanOneArr = [];
|
|
|
|
- let concatOne = 0;
|
|
|
|
-
|
|
|
|
- arr.forEach((item, index) => {
|
|
|
|
- if (index === 0) {
|
|
|
|
- spanOneArr.push(1);
|
|
|
|
- } else {
|
|
|
|
- //注意这里的quarterly是表格绑定的字段,根据自己的需求来改
|
|
|
|
- if (
|
|
|
|
- (item.companyName === arr[index - 1].companyName)) {
|
|
|
|
- //第一列需合并相同内容的判断条件
|
|
|
|
- spanOneArr[concatOne] += 1;
|
|
|
|
- spanOneArr.push(0);
|
|
|
|
- } else {
|
|
|
|
- spanOneArr.push(1);
|
|
|
|
- concatOne = index;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- return { one: spanOneArr };
|
|
|
|
},
|
|
},
|
|
setHeaderClassName({ column }) {
|
|
setHeaderClassName({ column }) {
|
|
const { label } = column;
|
|
const { label } = column;
|
|
@@ -273,57 +519,124 @@ export default {
|
|
async requestData() {
|
|
async requestData() {
|
|
this.loading = true;
|
|
this.loading = true;
|
|
this.tableData = [];
|
|
this.tableData = [];
|
|
- const res = await asyncRequest.companyEveryMonth({ daytime: this.daytime, companyNo: this.companyNo });
|
|
|
|
- const mapResponseType = { '1':'自营', '2':'渠道', '3':'供应商端'}
|
|
|
|
|
|
|
|
- if (res.code === 0 && res.data && res.data.length > 0) {
|
|
|
|
- const list = [];
|
|
|
|
|
|
+ const res = await asyncRequest.companyEveryMonth({ daytime: this.daytime });
|
|
|
|
+
|
|
|
|
+ // const jxIndex = res.data.findIndex((item) => item.companyName === "北京锦兴弘昌科技有限公司");
|
|
|
|
+ // let prIndex = res.data.findIndex((item) => item.companyName === "北京普润心堂商贸有限公司");
|
|
|
|
+ // let zsIndex = res.data.findIndex((item) => item.companyName === "北京知事文化产业发展有限公司")
|
|
|
|
+ // if (jxIndex >= 0 && prIndex >= 0) {
|
|
|
|
+ // const jxItem = res.data[jxIndex];
|
|
|
|
+ // res.data[prIndex] = this.addDataToCompany(jxItem, res.data[prIndex]);
|
|
|
|
+ // res.data.splice(jxIndex, 1);
|
|
|
|
+ // }
|
|
|
|
+ // prIndex = res.data.findIndex((item) => item.companyName === "北京普润心堂商贸有限公司");
|
|
|
|
+ // zsIndex = res.data.findIndex((item) => item.companyName === "北京知事文化产业发展有限公司")
|
|
|
|
+ // if (zsIndex >= 0 && prIndex >= 0) {
|
|
|
|
+ // const zsItem = res.data[zsIndex];
|
|
|
|
+ // res.data[prIndex] = this.addDataToCompany(zsItem, res.data[prIndex]);
|
|
|
|
+ // res.data.splice(zsIndex, 1);
|
|
|
|
+ // }
|
|
|
|
+ // if (this.companyNo === "GS2302231124114965") {
|
|
|
|
+ // const jxResult = await asyncRequest.companyEveryMonth({ daytime: this.daytime, companyNo: "GS2304031312553746" });
|
|
|
|
+ // const zsResult = await asyncRequest.companyEveryMonth({ daytime: this.daytime, companyNo: "GS2401181650538135" });
|
|
|
|
+ // res.data[prIndex] = this.addDataToCompany(jxResult.data[0], res.data[prIndex]);
|
|
|
|
+ // if(zsResult.data.length !== 0) {
|
|
|
|
+ // res.data[prIndex] = this.addDataToCompany(zsResult.data[0], res.data[prIndex]);
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ // const isBeforeDate = this.getDiffDay() < 0 && this.companyNo === "GS2302231323386950"
|
|
|
|
|
|
- let i = ["北京万宇恒通国际科贸有限公司","北京百辰荣达国际科贸有限公司","北京泓源广诚国际商贸有限公司",'北京普润心堂商贸有限公司'];
|
|
|
|
- const l = res.data.map(item => item.companyName);
|
|
|
|
- i = i.filter(item => l.includes(item));
|
|
|
|
- res.data = i.map(item => res.data.find(l => l.companyName === item));
|
|
|
|
-
|
|
|
|
- res.data.forEach(i => {
|
|
|
|
- let totalItem = {
|
|
|
|
- companyName:i.companyName,
|
|
|
|
- type: '合计',
|
|
|
|
- monthSale:'--',
|
|
|
|
- monthReturn:'--',
|
|
|
|
- monthSaleAmount:0,
|
|
|
|
- monthCost:'--',
|
|
|
|
- monthCostReturn:'--',
|
|
|
|
- monthCostAmount:0
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- (i.monthinfo || []).forEach((month,index) => {
|
|
|
|
- const monthSaleAmount = Number(subtraction(month.msale_total,month.mth_total)).toFixed(2);
|
|
|
|
- const monthCostAmount = Number(subtraction(month.mcgd_total,month.mcgd_th_total)).toFixed(2);
|
|
|
|
-
|
|
|
|
- const item = {
|
|
|
|
- companyName:i.companyName,
|
|
|
|
- type: mapResponseType[month.type],
|
|
|
|
- monthSale:month.msale_total,
|
|
|
|
- monthReturn:month.mth_total,
|
|
|
|
- monthSaleAmount,
|
|
|
|
- monthCost:month.mcgd_total,
|
|
|
|
- monthCostReturn:month.mcgd_th_total,
|
|
|
|
- monthCostAmount
|
|
|
|
|
|
+ if (res.code === 0 && res.data && res.data.length > 0) {
|
|
|
|
+ res.data.forEach(({ companyName,companyNo ,monthinfo, dayinfo, total_tips, cost_tips }) => {
|
|
|
|
+ const mapResponseType = { '1': '自营', '2': '渠道', '3': '供应商端' ,'4' : '物流费用'}
|
|
|
|
+ const types = Object.keys(mapResponseType)
|
|
|
|
+ let prev_sale_total = 0;
|
|
|
|
+ let prev_msale_total = 0;
|
|
|
|
+ let prev_cost_total = 0;
|
|
|
|
+ let prev_mcost_total = 0;
|
|
|
|
+
|
|
|
|
+ const item = types.map(type => {
|
|
|
|
+ const _monthinfo = monthinfo.find(month => String(month.type) === type) || {}
|
|
|
|
+ const _dayinfo = dayinfo.find(day => String(day.type) === type) || {}
|
|
|
|
+ /** 月营业收入 = 月销售额 - 月退货额 */
|
|
|
|
+ let msale_total = 0;
|
|
|
|
+ if(Number(type) !== 4){ msale_total = subtraction(_monthinfo.msale_total, _monthinfo.mth_total) || 0 }
|
|
|
|
+ /** 日营业收入 = 日销售额 - 日退货额 */
|
|
|
|
+ const sale_total = subtraction(_dayinfo.sale_total, _dayinfo.th_total) || 0;
|
|
|
|
+ /** 日成本 = 日采购额 - 日退货额 */
|
|
|
|
+ const cost_total = subtraction(_dayinfo.cgd_total, _dayinfo.cgd_th_total) || 0;
|
|
|
|
+ /** 月成本 = 月采购额 - 月退货额 */
|
|
|
|
+ let mcost_total = 0;
|
|
|
|
+ if(Number(type) !== 4){
|
|
|
|
+ mcost_total = subtraction(_monthinfo.mcgd_total, _monthinfo.mcgd_th_total) || 0;
|
|
|
|
+ }else{
|
|
|
|
+ mcost_total = Number(_monthinfo.mcgd_total || 0).toFixed(2);
|
|
|
|
+ }
|
|
|
|
+ prev_sale_total = Number(addition(prev_sale_total, sale_total)).toFixed(2);
|
|
|
|
+ prev_msale_total = Number(addition(prev_msale_total, msale_total)).toFixed(2);
|
|
|
|
+ prev_cost_total = Number(addition(prev_cost_total, cost_total)).toFixed(2);
|
|
|
|
+ prev_mcost_total = Number(addition(prev_mcost_total, mcost_total)).toFixed(2);
|
|
|
|
+ return {
|
|
|
|
+ type: mapResponseType[type],
|
|
|
|
+ dayinfo: { ..._dayinfo, sale_total },
|
|
|
|
+ monthinfo: { ...monthinfo, msale_total, mcost_total }
|
|
}
|
|
}
|
|
-
|
|
|
|
- totalItem.monthSaleAmount = Number(addition(item.monthSaleAmount,totalItem.monthSaleAmount)).toFixed(2);
|
|
|
|
- totalItem.monthCostAmount = Number(addition(item.monthCostAmount,totalItem.monthCostAmount)).toFixed(2);
|
|
|
|
- list.push(item);
|
|
|
|
- if(index === 2){ list.push(totalItem);}
|
|
|
|
})
|
|
})
|
|
|
|
+
|
|
|
|
+ const gross_completion = Number(subtraction(prev_msale_total, prev_mcost_total)).toFixed(2) //当月毛利完成 = 月营收 - 月成本
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ this.tableData = [
|
|
|
|
+ ...this.tableData,
|
|
|
|
+ {
|
|
|
|
+ companyNo,
|
|
|
|
+ companyName, // 公司名称
|
|
|
|
+ cost_tips, // 当月成本指标
|
|
|
|
+ total_tips, // 当月营收目标
|
|
|
|
+ info: [{ ...item }], // 直营..渠道 销售
|
|
|
|
+ sale_total: prev_sale_total, // 当日营业收入
|
|
|
|
+ cost_total: prev_cost_total, // 当日成本总额
|
|
|
|
+ msale_total: prev_msale_total, // 当月营业收入
|
|
|
|
+ mcost_total: prev_mcost_total,// 当月成本总额
|
|
|
|
+ gross_completion, //当月毛利完成 = 月营收 - 月成本
|
|
|
|
+ completion_rate: multiplication(division(prev_msale_total, total_tips), 100).toFixed(2), // 当月应收完成率
|
|
|
|
+ gross_completion_rate: Number(cost_tips) === 0 ? 0 : multiplication(division(gross_completion, cost_tips) || 0, 100).toFixed(2), // 当月毛利完成率
|
|
|
|
+ gross_sale_completion_rate: Number(multiplication(division(gross_completion, prev_msale_total) || 0, 100)).toFixed(2), // 本月毛利率 = 当月毛利完成 / 当月营业收入
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
})
|
|
})
|
|
|
|
|
|
- this.tableData = list;
|
|
|
|
- // console.log(list);
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ let i = ["北京万宇恒通国际科贸有限公司", '北京泰文创供应链管理有限公司' ,"北京元隆雅图文化传播股份有限公司", "结算单E企购", "地推订单"];
|
|
|
|
+ const values = this.plat_cp_companies.map(({value}) => value)
|
|
|
|
+ const l = this.tableData.map(item => item.companyName);
|
|
|
|
+ i = i.filter(item => l.includes(item));
|
|
|
|
+
|
|
|
|
+ this.tableData = i.map(item => this.tableData.find(l => l.companyName === item));
|
|
|
|
+ this.tableData = this.tableData.filter(({companyNo}) => values.includes(companyNo));
|
|
|
|
+ this.tableData.forEach(item => { if(item.companyName === '结算单E企购'){ item.companyName = '自营订单' } })
|
|
|
|
+ console.log(this.tableData)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ const sourceData = JSON.parse(JSON.stringify(this.tableData))
|
|
|
|
+ this.tableData = sourceData.filter(item => item.companyName !== '自营订单' && item.companyName !== '地推订单')
|
|
|
|
+ const topTable = sourceData.filter((item) => item.companyName === '自营订单' || item.companyName === '地推订单')
|
|
|
|
+
|
|
|
|
+ if(topTable.length === 0 || topTable.length === 1){
|
|
|
|
+ this.topTable = [...topTable]
|
|
|
|
+ }else{
|
|
|
|
+ console.log(this.topTable)
|
|
|
|
+ this.topTable = [
|
|
|
|
+ amountData,
|
|
|
|
+ ...topTable
|
|
|
|
+ ]
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
this.tableData = [];
|
|
this.tableData = [];
|
|
|
|
+ this.topTable = [];
|
|
}
|
|
}
|
|
- // this.getHeight();
|
|
|
|
this.loading = false;
|
|
this.loading = false;
|
|
}
|
|
}
|
|
}
|
|
}
|