123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533 |
- <template>
- <div class="divBox">
- <el-card
- v-hasPermi="['platform:finance:daily:statement:page:list', 'platform:finance:month:statement:page:list']"
- :bordered="false"
- shadow="never"
- class="ivu-mt"
- :body-style="{ padding: 0 }"
- >
- <div class="padding-add">
- <el-form size="small" inline label-width="80" @submit.native.prevent>
- <el-form-item label="时间选择:">
- <el-date-picker
- v-model="timeVal"
- align="right"
- unlink-panels
- value-format="yyyy-MM-dd"
- format="yyyy-MM-dd"
- type="daterange"
- placement="bottom-end"
- placeholder="自定义时间"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- class="selWidth"
- :picker-options="pickerOptions"
- @change="onchangeTime"
- v-if="activeName === 'day'"
- />
- <el-date-picker
- v-model="timeVal"
- type="monthrange"
- align="right"
- unlink-panels
- value-format="yyyy-MM"
- format="yyyy-MM"
- @change="onchangeTime"
- start-placeholder="开始月份"
- end-placeholder="结束月份"
- class="selWidth"
- :picker-options="pickerOptionsYear"
- v-else
- >
- </el-date-picker>
- </el-form-item>
- </el-form>
- </div>
- </el-card>
- <el-card class="box-card mt14" :body-style="{ padding: '0 20px 20px' }" shadow="never" :bordered="false">
- <div>
- <el-tabs class="list-tabs" v-model="activeName" @tab-click="handleClick">
- <el-tab-pane
- v-hasPermi="['platform:finance:daily:statement:page:list']"
- label="日账单"
- name="day"
- ></el-tab-pane>
- <el-tab-pane
- v-hasPermi="['platform:finance:month:statement:page:list']"
- label="月账单"
- name="month"
- ></el-tab-pane>
- </el-tabs>
- </div>
- <el-table v-loading="listLoading" :data="tableData.data" class="mt5" size="small" highlight-current-row>
- <el-table-column prop="id" label="ID" min-width="90" />
- <el-table-column prop="dataDate" :label="activeName === 'day' ? '日期' : '月份'" min-width="150" />
- <el-table-column
- prop="currentDayBalance"
- :label="activeName === 'day' ? '当日结余' : '当月结余'"
- min-width="100"
- />
- <el-table-column prop="brokerage" label="佣金" min-width="100" />
- <el-table-column prop="orderReceivable" label="订单应收金额" min-width="100" />
- <el-table-column prop="payNum" label="订单应收笔数" min-width="100" />
- <el-table-column prop="orderRefundable" label="订单应退金额" min-width="120" />
- <el-table-column prop="refundNum" label="订单应退笔数" min-width="120" />
- <el-table-column prop="merchantTransferAmount" label="商家分账" min-width="150" />
- <el-table-column
- label="操作"
- width="70"
- fixed="right"
- v-hasPermi="['platform:finance:daily:statement:page:list', 'platform:finance:month:statement:page:list']"
- >
- <template slot-scope="scope">
- <a @click="onDetails(scope.row)">详情</a>
- </template>
- </el-table-column>
- </el-table>
- <div class="block">
- <el-pagination
- background
- :page-sizes="[20, 40, 60, 80]"
- :page-size="tableFrom.limit"
- :current-page="tableFrom.page"
- layout="total, sizes, prev, pager, next, jumper"
- :total="tableData.total"
- @size-change="handleSizeChange"
- @current-change="pageChange"
- />
- </div>
- </el-card>
- <el-dialog
- :title="activeName === 'day' ? '日账单详情' : '月账单详情'"
- :visible.sync="dialogVisible"
- id="statement_detail_dialog"
- width="1200px"
- :before-close="handleClose"
- center
- >
- <el-row align="middle" class="ivu-mt mt20">
- <el-col :span="3">
- <el-menu default-active="0" class="el-menu-vertical-demo">
- <el-menu-item :name="accountDetails.dataDate">
- <span class="statement_date">{{ accountDetails.dataDate }}</span>
- </el-menu-item>
- </el-menu>
- </el-col>
- <el-col :span="21">
- <el-col :span="10">
- <div class="grid-content">
- <span class="card_title">实际收入</span>
- <span class="card_title_price">
- {{ Number(accountDetails.realIncome) >= 0 ? '' : '-' }}
- ¥{{ Math.abs(accountDetails.realIncome) }}</span
- >
- <!--<span class="count font-red">{{ accountDetails.totalOrderNum }}笔</span>-->
- <div class="list">
- <el-card
- class="mb10"
- body-style="background-color: #F9F9F9;padding: 20px 15px;"
- shadow="never"
- :bordered="false"
- >
- <div slot="header" class="acea-row row-between-wrapper">
- <span class="header_title">订单实收</span>
- <div class="card_title">¥{{ accountDetails.orderRealIncome }}</div>
- </div>
- <div class="text item">
- <el-row class="item mb20">
- <el-col :span="13" class="name">订单应收</el-col>
- <el-col :span="11" class="cost mb10">
- <span class="cost_price">¥{{ accountDetails.orderReceivable }}</span>
- </el-col>
- <el-col :span="13" class="name"> </el-col>
- <el-col :span="11" class="cost">
- <span class="cost_num">{{ accountDetails.payNum }}笔</span>
- </el-col>
- </el-row>
- <!-- <el-row class="item mb20">
- <el-col :span="13" class="name">打包费</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">¥{{ accountDetails.platCouponPrice }}</span>
- </el-col>
- </el-row> -->
- <el-row class="item mb20">
- <el-col :span="13" class="name">平台优惠券补贴</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">-¥{{ accountDetails.platCouponPrice }}</span>
- </el-col>
- </el-row>
- <el-row class="item">
- <el-col :span="13" class="name">平台积分补贴</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">-¥{{ accountDetails.integralPrice }}</span>
- </el-col>
- </el-row>
- </div>
- </el-card>
- <el-card body-style="background-color: #F9F9F9;padding: 20px 15px;" shadow="never" :bordered="false">
- <div slot="header" class="acea-row row-between-wrapper">
- <span class="header_title">订单实退</span>
- <div class="card_title">-¥{{ accountDetails.orderRealRefund }}</div>
- </div>
- <el-row class="item mb20">
- <el-col :span="13" class="name">订单应退</el-col>
- <el-col :span="11" class="cost mb10">
- <span class="cost_price">-¥{{ accountDetails.orderRefundable }}</span>
- </el-col>
- <el-col :span="13" class="name"> </el-col>
- <el-col :span="11" class="cost">
- <span class="cost_num">{{ accountDetails.refundNum }}笔</span>
- </el-col>
- </el-row>
- <el-row class="item mb20">
- <el-col :span="13" class="name">退还平台优惠券补贴</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">¥{{ accountDetails.refundPlatCouponPrice }}</span>
- </el-col>
- </el-row>
- <el-row class="item">
- <el-col :span="13" class="name">退还平台积分补贴</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">¥{{ accountDetails.refundIntegralPrice }}</span>
- </el-col>
- </el-row>
- </el-card>
-
- </div>
- </div>
- <el-divider direction="vertical" />
- </el-col>
- <el-col :span="10">
- <div class="grid-content">
- <span class="card_title">实际支出</span>
- <span class="card_title_price">
- {{ Number(accountDetails.actualExpenditure) >= 0 ? '' : '-' }}
- ¥{{ Math.abs(accountDetails.actualExpenditure) }}
- </span>
- <!--<span class="count font-red">{{ accountDetails.totalOrderNum }}笔</span>-->
- <div class="list">
- <el-card
- body-style="background-color: #F9F9F9;padding: 20px 15px;"
- class="mb10"
- shadow="never"
- :bordered="false"
- >
- <div slot="header" class="acea-row row-between-wrapper">
- <span class="header_title">商家分账</span>
- <div class="card_title">
- {{ Number(accountDetails.merchantTransferAmount) >= 0 ? '' : '-' }}
- ¥{{ Math.abs(accountDetails.merchantTransferAmount) }}
- </div>
- </div>
- <el-row class="item mb20">
- <el-col :span="13" class="name">支付分账</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">¥{{ accountDetails.payTransfer }}</span>
- </el-col>
- </el-row>
- <el-row class="item">
- <el-col :span="13" class="name">退款分账</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">-¥{{ accountDetails.refundTransfer }}</span>
- </el-col>
- </el-row>
- </el-card>
- <el-card
- body-style="background-color: #F9F9F9;padding: 20px 15px;"
- class="mb10"
- shadow="never"
- :bordered="false"
- >
- <div slot="header" class="acea-row row-between-wrapper">
- <span class="header_title">佣金</span>
- <div class="card_title">
- {{ Number(accountDetails.brokerage) >= 0 ? '' : '-' }}
- ¥{{ Math.abs(accountDetails.brokerage) }}
- </div>
- </div>
- <el-row class="item mb20">
- <el-col :span="13" class="name">支付佣金</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">¥{{ accountDetails.brokeragePrice }}</span>
- </el-col>
- </el-row>
- <el-row class="item mb20">
- <el-col :span="13" class="name">退还佣金</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">-¥{{ accountDetails.refundBrokeragePrice }}</span>
- </el-col>
- </el-row>
- <el-row class="item">
- <el-col :span="13" class="name">退款佣金代扣</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">¥{{ accountDetails.refundReplaceBrokerage }}</span>
- </el-col>
- </el-row>
- </el-card>
- <el-card body-style="background-color: #F9F9F9;padding: 20px 15px;" shadow="never" :bordered="false">
- <div slot="header" class="acea-row row-between-wrapper">
- <span class="header_title">骑手配送费</span>
- <div class="card_title">
- {{ Number(accountDetails.freight) >= 0 ? '' : '-' }}
- ¥{{ Math.abs(accountDetails.freight) }}
- </div>
- </div>
- <el-row class="item mb20">
- <el-col :span="13" class="name">支付配送费</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">¥{{ accountDetails.freightFee }}</span>
- </el-col>
- </el-row>
- <el-row class="item">
- <el-col :span="13" class="name">退还配送费</el-col>
- <el-col :span="11" class="cost">
- <span class="cost_price">-¥{{ accountDetails.refundFreightFee }}</span>
- </el-col>
- </el-row>
- </el-card>
- </div>
- </div>
- <el-divider direction="vertical" />
- </el-col>
- <el-col :span="4">
- <div class="grid-content center">
- <div class="title mb20">{{ activeName === 'day' ? '当日结余' : '当月结余' }}</div>
- <div class="color_gray">
- {{ Number(accountDetails.currentDayBalance) >= 0 ? '' : '-' }}
- ¥{{ Math.abs(accountDetails.currentDayBalance) }}
- </div>
- </div>
- </el-col>
- </el-col>
- </el-row>
- <span slot="footer">
- <el-button type="primary" size="small" @click="dialogVisible = false">我知道了</el-button>
- </span>
- </el-dialog>
- </div>
- </template>
- <script>
- // +----------------------------------------------------------------------
- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- // +----------------------------------------------------------------------
- // | Author: CRMEB Team <admin@crmeb.com>
- // +----------------------------------------------------------------------
- import { monthStatementApi, dayStatementApi } from '@/api/finance';
- import yearOptions from '@/libs/yearOptions';
- import { checkPermi } from '@/utils/permission'; // 权限判断函数
- export default {
- name: 'statement',
- data() {
- return {
- activeNames: [],
- timeVal: [],
- activeName: 'day',
- listLoading: true,
- tableData: {
- data: [],
- total: 0,
- },
- tableFrom: {
- page: 1,
- limit: 20,
- dateLimit: '',
- },
- dialogVisible: false,
- accountDetails: {},
- pickerOptions: this.$timeOptions,
- pickerOptionsYear: yearOptions,
- };
- },
- mounted() {
- if (checkPermi(['platform:finance:daily:statement:page:list', 'platform:finance:month:statement:page:list']))
- this.getList(1);
- },
- methods: {
- checkPermi,
- // 具体日期
- onchangeTime(e) {
- this.timeVal = e;
- this.tableFrom.dateLimit = e ? this.timeVal.join(',') : '';
- this.getList(1);
- },
- handleClick() {
- this.tableFrom.dateLimit = '';
- this.timeVal = [];
- this.getList(1);
- },
- onDetails(date) {
- this.dialogVisible = true;
- this.accountDetails = date;
- },
- seachList() {
- this.handleClose();
- this.getList(1);
- },
- // 列表
- getList(num) {
- this.listLoading = true;
- this.tableFrom.page = num ? num : this.tableFrom.page;
- this.activeName === 'day'
- ? dayStatementApi(this.tableFrom)
- .then((res) => {
- this.tableData.data = res.list;
- this.tableData.total = res.total;
- this.listLoading = false;
- })
- .catch(() => {
- this.listLoading = false;
- })
- : monthStatementApi(this.tableFrom)
- .then((res) => {
- this.tableData.data = res.list;
- this.tableData.total = res.total;
- this.listLoading = false;
- })
- .catch(() => {
- this.listLoading = false;
- });
- },
- pageChange(page) {
- this.tableFrom.page = page;
- this.getList();
- },
- handleSizeChange(val) {
- this.tableFrom.limit = val;
- this.getList(1);
- },
- handleClose() {
- this.dialogVisible = false;
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- ::v-deep.el-divider {
- background-color: #f5f5f5;
- }
- .center {
- text-align: center;
- .color_gray {
- color: #e93323 !important;
- line-height: 20px;
- font-weight: 600;
- font-size: 20px;
- }
- }
- .header_title {
- color: #606266;
- font-size: 14px;
- }
- .divBox #statement_detail_dialog {
- ::v-deep.el-card__header {
- padding: 15px 0;
- border-bottom: 0;
- }
- }
- .statement_date {
- font-size: 14px;
- font-weight: 400;
- color: #303133;
- line-height: 14px;
- }
- .card_title {
- padding: 3px 0;
- font-weight: 600;
- color: #606060;
- line-height: 15px;
- font-size: 15px;
- }
- .card_title_price {
- font-size: 20px;
- font-weight: 600;
- color: #303133;
- float: right;
- }
- .el-icon-arrow-down {
- font-size: 12px;
- }
- .tabBox_tit {
- width: 60%;
- font-size: 12px !important;
- margin: 0 2px 0 10px;
- letter-spacing: 1px;
- padding: 5px 0;
- box-sizing: border-box;
- }
- .el-menu-item {
- font-weight: bold;
- color: #333;
- }
- //::v-deep.el-dialog__header {
- // text-align: left;
- //}
- ::v-deep .el-tabs__item {
- height: 54px !important;
- line-height: 54px !important;
- }
- .el-col {
- position: relative;
- .el-divider--vertical {
- position: absolute;
- height: 100%;
- right: 0;
- top: 0;
- margin: 0;
- }
- }
- .grid-content {
- padding: 0 25px;
- display: block;
- height: 561px;
- .title {
- color: #606266;
- font-size: 16px;
- }
- .color_red {
- color: red;
- font-weight: bold;
- }
- .color_gray {
- color: #333;
- font-weight: bold;
- }
- .count {
- font-size: 12px;
- }
- .list {
- margin-top: 20px;
- .item {
- overflow: hidden;
- }
- .name {
- color: #909399;
- }
- .name,
- .cost {
- line-height: 20px;
- }
- .cost {
- text-align: right;
- span {
- display: block;
- }
- }
- .name,
- .cost_count {
- font-size: 14px;
- }
- .cost_price,
- .cost_num {
- font-size: 14px;
- color: #606266;
- }
- }
- }
- </style>
|