|
|
@@ -0,0 +1,1017 @@
|
|
|
+<template>
|
|
|
+ <div class="share-money-page">
|
|
|
+ <div class="share-money-panel">
|
|
|
+ <el-tabs v-model="activeTab" class="promotion-tabs" @tab-click="handleTabChange">
|
|
|
+ <el-tab-pane label="推广会员列表" name="members" />
|
|
|
+ <el-tab-pane label="推广汇总" name="summary" />
|
|
|
+ <el-tab-pane label="推广设定" name="settings" />
|
|
|
+ <el-tab-pane label="禁止推广列表" name="blocked" />
|
|
|
+ </el-tabs>
|
|
|
+ <el-form
|
|
|
+ v-if="activeTab !== 'settings'"
|
|
|
+ ref="queryForm"
|
|
|
+ :model="query"
|
|
|
+ class="share-money-search"
|
|
|
+ inline
|
|
|
+ size="small"
|
|
|
+ >
|
|
|
+ <el-form-item v-if="activeTab !== 'blocked'" label="时间" prop="date_range">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="query.date_range"
|
|
|
+ type="daterange"
|
|
|
+ :default-value="[new Date(new Date().getFullYear(), new Date().getMonth() - 1, 1), new Date()]"
|
|
|
+ range-separator="-"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ :picker-options="disableFutureDate"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="activeTab === 'summary'" label="推广账号" prop="promoter_account">
|
|
|
+ <el-input v-model="query.promoter_account" placeholder="请输入推广账号" clearable />
|
|
|
+ </el-form-item>
|
|
|
+ <template v-if="activeTab === 'blocked'">
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" @click="handleBlockedCreate">新增</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item prop="blocked_account">
|
|
|
+ <el-input
|
|
|
+ v-model="query.blocked_account"
|
|
|
+ placeholder="搜索禁止推广账号"
|
|
|
+ clearable
|
|
|
+ @input="handleBlockedSearch"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <el-form-item v-if="activeTab !== 'blocked'" class="search-actions">
|
|
|
+ <el-button type="primary" :loading="loading" @click="onSubmit">查询</el-button>
|
|
|
+ <el-button @click="resetQuery">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <div v-if="activeTab === 'settings'" class="promotion-settings">
|
|
|
+ <el-form :model="settingsForm" label-width="190px" class="settings-form">
|
|
|
+ <el-form-item label="分享赚钱开关(含前台显示)">
|
|
|
+ <el-switch
|
|
|
+ v-model="settingsForm.share_enabled"
|
|
|
+ :active-value="1"
|
|
|
+ :inactive-value="0"
|
|
|
+ active-color="#13ce66"
|
|
|
+ inactive-color="#f56c6c"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="分享赚钱域名">
|
|
|
+ <el-input v-model="settingsForm.share_domain" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="有效会员最低存款">
|
|
|
+ <el-input v-model="settingsForm.minimum_deposit" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="佣金/手续费减免设置">
|
|
|
+ <el-switch
|
|
|
+ v-model="settingsForm.commission_enabled"
|
|
|
+ :active-value="1"
|
|
|
+ :inactive-value="0"
|
|
|
+ active-color="#13ce66"
|
|
|
+ inactive-color="#f56c6c"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <div class="commission-settings">
|
|
|
+ <el-form-item label="非卖家单笔阈值 >=">
|
|
|
+ <el-input v-model="settingsForm.non_seller_threshold" :disabled="!settingsForm.commission_enabled">
|
|
|
+ <template slot="append">元</template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="抽佣阶梯一">
|
|
|
+ <el-input v-model="settingsForm.commission_tier_one" :disabled="!settingsForm.commission_enabled">
|
|
|
+ <template slot="append">%</template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="抽佣阶梯二">
|
|
|
+ <el-input v-model="settingsForm.commission_tier_two" :disabled="!settingsForm.commission_enabled">
|
|
|
+ <template slot="append">%</template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ <div class="settings-actions">
|
|
|
+ <el-button type="primary" @click="submitSettings">提交</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="activeTab !== 'settings'" class="share-money-table">
|
|
|
+ <el-table
|
|
|
+ v-if="activeTab === 'summary'"
|
|
|
+ v-loading="loading"
|
|
|
+ :data="summaryTableData"
|
|
|
+ height="100%"
|
|
|
+ class="share-money-list summary-list"
|
|
|
+ >
|
|
|
+ <el-table-column type="index" label="序号" width="100" align="center" />
|
|
|
+ <el-table-column prop="date" label="日期" min-width="120" align="center" />
|
|
|
+ <el-table-column prop="promoter_account" label="推广账号" min-width="140" align="center" />
|
|
|
+ <el-table-column prop="promoter_name" label="推广昵称" min-width="140" align="center" />
|
|
|
+ <el-table-column prop="deposit" label="存款" min-width="120" align="center" />
|
|
|
+ <el-table-column prop="commission" label="佣金" min-width="120" align="center" />
|
|
|
+ <el-table-column prop="sales_amount" label="销售额" min-width="120" align="center" />
|
|
|
+ <el-table-column prop="fee_reduction" label="手续费减免" min-width="160" align="center" />
|
|
|
+ </el-table>
|
|
|
+ <div v-if="activeTab === 'summary'" class="summary-footer">
|
|
|
+ <span>总佣金:<strong>{{ summaryCommission }}</strong></span>
|
|
|
+ <span>当前最高手续费减免:<strong>{{ summaryMaxFeeReduction }}</strong></span>
|
|
|
+ </div>
|
|
|
+ <el-table
|
|
|
+ v-if="activeTab === 'blocked'"
|
|
|
+ v-loading="loading"
|
|
|
+ :data="blockedTableData"
|
|
|
+ height="100%"
|
|
|
+ class="share-money-list blocked-list"
|
|
|
+ >
|
|
|
+ <el-table-column type="index" label="序号" width="100" align="center" />
|
|
|
+ <el-table-column prop="member_account" label="会员账号" min-width="180" align="center" />
|
|
|
+ <el-table-column prop="prohibited_category" label="不能返佣的类目" min-width="260" align="center" />
|
|
|
+ <el-table-column label="状态" min-width="160" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-switch
|
|
|
+ :value="scope.row.status === 1"
|
|
|
+ active-color="#13ce66"
|
|
|
+ inactive-color="#f56c6c"
|
|
|
+ @change="handleBlockedToggle(scope.row, $event)"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" min-width="220" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-button type="text" size="small" class="ym-view-btn" @click="handleBlockedEdit(scope.row)">修改</el-button>
|
|
|
+ <el-button type="text" size="small" class="ym-view-btn" @click="handleBlockedDelete(scope.row)">删除</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-table
|
|
|
+ v-if="activeTab !== 'summary' && activeTab !== 'settings' && activeTab !== 'blocked'"
|
|
|
+ v-loading="loading"
|
|
|
+ :data="tableData"
|
|
|
+ height="100%"
|
|
|
+ class="share-money-list"
|
|
|
+ >
|
|
|
+ <el-table-column type="index" label="序号" width="100" align="center" />
|
|
|
+ <el-table-column prop="date" label="日期" min-width="130" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.date }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="promoter_count" label="推广人数" min-width="110" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.promoter_count }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="registered_members" label="注册会员" min-width="110" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.registered_members }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="h5_register" label="H5注册" min-width="110" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.h5_register }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="ios_register" label="ios注册" min-width="110" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.ios_register }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="android_register" label="安卓注册" min-width="110" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.android_register }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="deposit_total" label="存款总额" min-width="120" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.deposit_total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="consumption_total" label="消费金额" min-width="120" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.consumption_total }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="company_profit" label="公司盈利" min-width="120" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.company_profit }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" min-width="220" align="center" fixed="right">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-button type="text" size="small" class="ym-view-btn" @click="handleView(scope.row)">推广详情</el-button>
|
|
|
+ <el-button type="text" size="small" class="ym-view-btn" @click="handleRegisterView(scope.row)">注册详情</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-pagination
|
|
|
+ v-if="activeTab !== 'settings'"
|
|
|
+ background
|
|
|
+ class="share-money-pagination"
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
+ :current-page="page"
|
|
|
+ :page-size="limit"
|
|
|
+ :page-sizes="[10, 20, 50, 100]"
|
|
|
+ :total="activeTab === 'summary' ? summaryTotal : activeTab === 'blocked' ? blockedTotal : total"
|
|
|
+ @size-change="handleSizeChange"
|
|
|
+ @current-change="handleCurrentChange"
|
|
|
+ />
|
|
|
+
|
|
|
+ <Dialog
|
|
|
+ ref="viewDialog"
|
|
|
+ :dialog-actions="{
|
|
|
+ width: '960px',
|
|
|
+ title: '推广会员详情',
|
|
|
+ confirmButtom: false,
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <template slot="content">
|
|
|
+ <el-form :model="detailQuery" class="detail-search" inline size="small">
|
|
|
+ <el-form-item label="会员ID">
|
|
|
+ <el-input v-model="detailQuery.member_id" placeholder="请输入会员ID" clearable />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="会员账号">
|
|
|
+ <el-input v-model="detailQuery.member_account" placeholder="请输入会员账号" clearable />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item class="detail-search-actions">
|
|
|
+ <el-button type="primary" @click="handleDetailSearch">查询</el-button>
|
|
|
+ <el-button @click="resetDetailQuery">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div class="detail-table">
|
|
|
+ <el-table :data="detailTableData" height="360" style="width: 100%;">
|
|
|
+ <el-table-column prop="date" label="日期" width="120" align="center" />
|
|
|
+ <el-table-column prop="member_account" label="会员账号" width="120" align="center" />
|
|
|
+ <el-table-column prop="member_name" label="会员昵称" width="120" align="center" />
|
|
|
+ <el-table-column prop="deposit_total" label="存款总额" width="110" align="center" />
|
|
|
+ <el-table-column prop="register_count" label="注册人数" width="110" align="center" />
|
|
|
+ <el-table-column prop="commission" label="佣金" width="100" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.commission }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="current_fee" label="当前手续费" min-width="120" align="center">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.current_fee }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-pagination
|
|
|
+ background
|
|
|
+ class="detail-pagination"
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
+ :current-page="detailPage"
|
|
|
+ :page-size="detailLimit"
|
|
|
+ :page-sizes="[10, 20, 50]"
|
|
|
+ :total="detailTotal"
|
|
|
+ @size-change="handleDetailSizeChange"
|
|
|
+ @current-change="handleDetailCurrentChange"
|
|
|
+ />
|
|
|
+ <div class="detail-total">总人数:{{ detailTotal }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="promotion-description">
|
|
|
+ <p>佣金来源:</p>
|
|
|
+ <p>被邀请人单笔下注>={{ promotionRule.highBetAmount }}元,推广人可以抽取购买单价的{{ promotionRule.highCommissionRate }}%佣金。</p>
|
|
|
+ <p>被邀请人单笔下注{{ promotionRule.lessThan }}{{ promotionRule.lowBetAmount }}元,推广人可以抽取购买单价的{{ promotionRule.lowCommissionRate }}%佣金。</p>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </Dialog>
|
|
|
+ <Dialog
|
|
|
+ ref="registerDialog"
|
|
|
+ :dialog-actions="{
|
|
|
+ width: '960px',
|
|
|
+ title: '注册会员详情',
|
|
|
+ confirmButtom: false,
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <template slot="content">
|
|
|
+ <el-form :model="registerDetailQuery" class="detail-search" inline size="small">
|
|
|
+ <el-form-item label="会员ID">
|
|
|
+ <el-input v-model="registerDetailQuery.member_id" placeholder="请输入会员ID" clearable />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="会员账号">
|
|
|
+ <el-input v-model="registerDetailQuery.member_account" placeholder="请输入会员账号" clearable />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item class="detail-search-actions">
|
|
|
+ <el-button type="primary" @click="handleRegisterDetailSearch">查询</el-button>
|
|
|
+ <el-button @click="resetRegisterDetailQuery">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div class="register-detail-table">
|
|
|
+ <el-table :data="registerDetailTableData" height="440" style="width: 100%;">
|
|
|
+ <el-table-column prop="date" label="日期" min-width="120" align="center" />
|
|
|
+ <el-table-column prop="member_account" label="会员账号" min-width="130" align="center" />
|
|
|
+ <el-table-column prop="member_name" label="会员昵称" min-width="130" align="center" />
|
|
|
+ <el-table-column prop="deposit_total" label="存款总额" min-width="130" align="center" />
|
|
|
+ <el-table-column prop="consumption_total" label="下注总额" min-width="130" align="center" />
|
|
|
+ <el-table-column prop="withdrawal_total" label="提款总额" min-width="130" align="center" />
|
|
|
+ </el-table>
|
|
|
+ <div class="detail-total">总人数:{{ registerDetailTotal }}</div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </Dialog>
|
|
|
+ <Dialog
|
|
|
+ ref="blockedDialog"
|
|
|
+ :dialog-actions="{
|
|
|
+ width: '560px',
|
|
|
+ title: blockedDialogTitle,
|
|
|
+ buttom: false,
|
|
|
+ confirmButtom: false,
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <template slot="content">
|
|
|
+ <el-form :model="blockedForm" label-width="120px" class="blocked-form">
|
|
|
+ <el-form-item label="禁止推广账号">
|
|
|
+ <el-input v-model="blockedForm.member_account" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="不能返佣的类目">
|
|
|
+ <el-checkbox v-model="blockedForm.selectAll" @change="toggleBlockedCategories">全选</el-checkbox>
|
|
|
+ <div
|
|
|
+ v-for="(categoryGroup, groupIndex) in blockedCategoryGroups"
|
|
|
+ :key="groupIndex"
|
|
|
+ class="blocked-category-row"
|
|
|
+ >
|
|
|
+ <el-checkbox
|
|
|
+ v-for="category in categoryGroup"
|
|
|
+ :key="category"
|
|
|
+ v-model="blockedForm.categories"
|
|
|
+ :label="category"
|
|
|
+ @change="syncBlockedSelectAll"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ <div class="blocked-dialog-actions">
|
|
|
+ <el-button type="primary" @click="submitBlocked">提交</el-button>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </template>
|
|
|
+ </Dialog>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import Dialog from '@/components/Dialog/index.vue'
|
|
|
+import { disableFutureDate } from '@/utils/index'
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: 'ShareMoney',
|
|
|
+ components: {
|
|
|
+ Dialog
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ loading: false,
|
|
|
+ activeTab: 'members',
|
|
|
+ page: 1,
|
|
|
+ limit: 10,
|
|
|
+ total: 0,
|
|
|
+ summaryTotal: 0,
|
|
|
+ blockedTotal: 0,
|
|
|
+ summaryCommission: '534.9',
|
|
|
+ summaryMaxFeeReduction: '-4%',
|
|
|
+ settingsForm: {
|
|
|
+ share_enabled: 1,
|
|
|
+ share_domain: 'show888.com',
|
|
|
+ minimum_deposit: 20,
|
|
|
+ commission_enabled: 0,
|
|
|
+ non_seller_threshold: 200,
|
|
|
+ commission_tier_one: 4,
|
|
|
+ commission_tier_two: 6
|
|
|
+ },
|
|
|
+ viewRow: null,
|
|
|
+ detailPage: 1,
|
|
|
+ detailLimit: 10,
|
|
|
+ detailTableData: [],
|
|
|
+ detailTotal: 0,
|
|
|
+ detailQuery: {
|
|
|
+ member_id: '',
|
|
|
+ member_account: ''
|
|
|
+ },
|
|
|
+ registerDetailTableData: [],
|
|
|
+ registerDetailTotal: 223,
|
|
|
+ registerDetailAllTableData: [],
|
|
|
+ registerDetailViewDate: '',
|
|
|
+ registerDetailQuery: {
|
|
|
+ member_id: '',
|
|
|
+ member_account: ''
|
|
|
+ },
|
|
|
+ promotionRule: {
|
|
|
+ highBetAmount: 200,
|
|
|
+ lowBetAmount: 200,
|
|
|
+ highCommissionRate: 4,
|
|
|
+ lowCommissionRate: 6,
|
|
|
+ lessThan: '<'
|
|
|
+ },
|
|
|
+ detailMockData: [
|
|
|
+ { member_id: 10001, member_account: 'Monu2000', member_name: '原味小娥', deposit_total: 20, register_count: 3, is_seller: '否', commission: 8, current_fee: '-' },
|
|
|
+ { member_id: 10002, member_account: 'Kiwq1200', member_name: '奶酪', deposit_total: 23, register_count: 23, is_seller: '是', commission: '-', current_fee: '-4%' },
|
|
|
+ { member_id: 10003, member_account: 'Kiwq1200', member_name: '奶酪', deposit_total: 23, register_count: 6, is_seller: '是', commission: '-', current_fee: '-4%' },
|
|
|
+ { member_id: 10004, member_account: 'Kiwq1200', member_name: '奶酪', deposit_total: 23, register_count: 6, is_seller: '是', commission: '-', current_fee: '-4%' },
|
|
|
+ { member_id: 10005, member_account: 'Kiwq1200', member_name: '奶酪', deposit_total: 23, register_count: 6, is_seller: '是', commission: '-', current_fee: '-4%' },
|
|
|
+ { member_id: 10006, member_account: 'Kiwq1200', member_name: '奶酪', deposit_total: 23, register_count: 6, is_seller: '是', commission: '-', current_fee: '-4%' }
|
|
|
+ ],
|
|
|
+ detailAllTableData: [],
|
|
|
+ allTableData: [],
|
|
|
+ summaryAllTableData: [],
|
|
|
+ summaryTableData: [],
|
|
|
+ blockedAllTableData: [],
|
|
|
+ blockedTableData: [],
|
|
|
+ blockedCategoryGroups: [
|
|
|
+ ['体育', '彩票', '第三方游戏']
|
|
|
+ ],
|
|
|
+ blockedForm: {
|
|
|
+ member_account: '',
|
|
|
+ categories: [],
|
|
|
+ selectAll: false
|
|
|
+ },
|
|
|
+ blockedEditingRow: null,
|
|
|
+ blockedDialogTitle: '新增禁止推广账号',
|
|
|
+ query: {
|
|
|
+ date_range: [],
|
|
|
+ promoter_account: '',
|
|
|
+ blocked_account: ''
|
|
|
+ },
|
|
|
+ disableFutureDate,
|
|
|
+ tableData: []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.allTableData = this.getMockRows()
|
|
|
+ this.detailAllTableData = this.getDetailMockData()
|
|
|
+ this.registerDetailAllTableData = this.getRegisterDetailMockData()
|
|
|
+ this.summaryAllTableData = this.getSummaryMockData()
|
|
|
+ this.blockedAllTableData = this.getBlockedMockData()
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ getMockRows() {
|
|
|
+ const firstRows = [
|
|
|
+ {
|
|
|
+ date: '2025-03-10',
|
|
|
+ promoter_count: 20,
|
|
|
+ registered_members: 223,
|
|
|
+ h5_register: 23,
|
|
|
+ ios_register: 150,
|
|
|
+ android_register: 50,
|
|
|
+ deposit_total: 1200,
|
|
|
+ consumption_total: 1000,
|
|
|
+ company_profit: 150
|
|
|
+ },
|
|
|
+ {
|
|
|
+ date: '2025-03-10',
|
|
|
+ promoter_count: 150,
|
|
|
+ registered_members: 180,
|
|
|
+ h5_register: 30,
|
|
|
+ ios_register: 120,
|
|
|
+ android_register: 50,
|
|
|
+ deposit_total: 880,
|
|
|
+ consumption_total: 500,
|
|
|
+ company_profit: 75
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ const extraRows = Array.from({ length: 23 }, (_, index) => ({
|
|
|
+ date: `2025-03-${String(9 - (index % 9)).padStart(2, '0')}`,
|
|
|
+ promoter_count: 30 + index * 5,
|
|
|
+ registered_members: 100 + index * 8,
|
|
|
+ h5_register: 15 + index,
|
|
|
+ ios_register: 60 + index * 3,
|
|
|
+ android_register: 25 + index * 2,
|
|
|
+ deposit_total: 400 + index * 35,
|
|
|
+ consumption_total: 280 + index * 24,
|
|
|
+ company_profit: 35 + index * 5
|
|
|
+ }))
|
|
|
+ return firstRows.concat(extraRows)
|
|
|
+ },
|
|
|
+ getSummaryMockData() {
|
|
|
+ const firstRows = [
|
|
|
+ { date: '2025-03-11', promoter_account: 'qq900', promoter_name: '原味大哥', deposit: 20, commission: 12, sales_amount: '--', fee_reduction: '--' },
|
|
|
+ { date: '2025-03-10', promoter_account: 'tsa123', promoter_name: '七月玫瑰', deposit: '--', commission: '--', sales_amount: 100, fee_reduction: '-4%' },
|
|
|
+ { date: '2025-03-09', promoter_account: 'qq900', promoter_name: '原味大哥', deposit: 30, commission: 1.2, sales_amount: '--', fee_reduction: '--' },
|
|
|
+ { date: '2025-03-08', promoter_account: 'tsa123', promoter_name: '七月玫瑰', deposit: '--', commission: '--', sales_amount: 100, fee_reduction: '-2%' }
|
|
|
+ ]
|
|
|
+ const extraRows = Array.from({ length: 21 }, (_, index) => ({
|
|
|
+ date: `2025-03-${String(7 - (index % 7)).padStart(2, '0')}`,
|
|
|
+ promoter_account: index % 2 === 0 ? 'qq900' : 'tsa123',
|
|
|
+ promoter_name: index % 2 === 0 ? '原味大哥' : '七月玫瑰',
|
|
|
+ deposit: index % 2 === 0 ? 20 + index : '--',
|
|
|
+ commission: index % 2 === 0 ? 10 + index : '--',
|
|
|
+ sales_amount: index % 2 === 0 ? '--' : 100 + index,
|
|
|
+ fee_reduction: index % 2 === 0 ? '--' : index % 3 === 0 ? '-4%' : '-2%'
|
|
|
+ }))
|
|
|
+ return firstRows.concat(extraRows)
|
|
|
+ },
|
|
|
+ getDetailMockData() {
|
|
|
+ const extraRows = Array.from({ length: 19 }, (_, index) => ({
|
|
|
+ member_id: 10007 + index,
|
|
|
+ member_account: `Member${String(index + 3).padStart(4, '0')}`,
|
|
|
+ member_name: `推广会员${index + 3}`,
|
|
|
+ deposit_total: 25 + index * 3,
|
|
|
+ register_count: 2 + index,
|
|
|
+ is_seller: index % 2 === 0 ? '是' : '否',
|
|
|
+ commission: index % 3 === 0 ? 6 + index : '-',
|
|
|
+ current_fee: index % 2 === 0 ? '-4%' : '-'
|
|
|
+ }))
|
|
|
+ return this.detailMockData.concat(extraRows)
|
|
|
+ },
|
|
|
+ getRegisterDetailMockData() {
|
|
|
+ const firstRows = [
|
|
|
+ { member_id: 20001, member_account: 'Mo120', member_name: '原味大虾', deposit_total: 330, consumption_total: 134, is_seller: '否', sales_total: '--', withdrawal_total: '--' },
|
|
|
+ { member_id: 20002, member_account: 'saa120', member_name: '七月玫瑰', deposit_total: '--', consumption_total: '--', is_seller: '是', sales_total: 500, withdrawal_total: 50 },
|
|
|
+ { member_id: 20003, member_account: 'pe122', member_name: '原味小段', deposit_total: '--', consumption_total: '--', is_seller: '否', sales_total: '--', withdrawal_total: '--' },
|
|
|
+ { member_id: 20004, member_account: 'tt232', member_name: '牙鸟', deposit_total: 300, consumption_total: 344, is_seller: '否', sales_total: '--', withdrawal_total: '--' },
|
|
|
+ { member_id: 20005, member_account: 'ead3434', member_name: '卖原味', deposit_total: '--', consumption_total: '--', is_seller: '是', sales_total: '--', withdrawal_total: '--' }
|
|
|
+ ]
|
|
|
+ const extraRows = Array.from({ length: 10 }, (_, index) => ({
|
|
|
+ member_id: 20006 + index,
|
|
|
+ member_account: `register${String(index + 1).padStart(3, '0')}`,
|
|
|
+ member_name: index % 2 === 0 ? '原味会员' : '推广会员',
|
|
|
+ deposit_total: index % 2 === 0 ? 100 + index * 10 : '--',
|
|
|
+ consumption_total: index % 3 === 0 ? 80 + index * 4 : '--',
|
|
|
+ is_seller: index % 2 === 0 ? '否' : '是',
|
|
|
+ sales_total: index % 2 === 0 ? '--' : 200 + index * 10,
|
|
|
+ withdrawal_total: index % 4 === 0 ? 50 : '--'
|
|
|
+ }))
|
|
|
+ return firstRows.concat(extraRows)
|
|
|
+ },
|
|
|
+ getBlockedMockData() {
|
|
|
+ const firstRow = {
|
|
|
+ member_account: 'yad123',
|
|
|
+ prohibited_category: '体育',
|
|
|
+ status: 0
|
|
|
+ }
|
|
|
+ const categories = ['体育', '彩票', '第三方游戏']
|
|
|
+ const extraRows = Array.from({ length: 11 }, (_, index) => ({
|
|
|
+ member_account: `blocked${String(index + 1).padStart(3, '0')}`,
|
|
|
+ prohibited_category: categories[index % categories.length],
|
|
|
+ status: index % 3 === 0 ? 1 : 0
|
|
|
+ }))
|
|
|
+ return [firstRow].concat(extraRows)
|
|
|
+ },
|
|
|
+ getList() {
|
|
|
+ if (this.activeTab === 'summary') {
|
|
|
+ this.getSummaryList()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (this.activeTab === 'blocked') {
|
|
|
+ this.getBlockedList()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const [startDate, endDate] = this.query.date_range || []
|
|
|
+ const filteredRows = this.allTableData.filter(row => {
|
|
|
+ return (!startDate || row.date >= startDate) && (!endDate || row.date <= endDate)
|
|
|
+ })
|
|
|
+ this.total = filteredRows.length
|
|
|
+ this.tableData = filteredRows.slice((this.page - 1) * this.limit, this.page * this.limit)
|
|
|
+ },
|
|
|
+ getSummaryList() {
|
|
|
+ const [startDate, endDate] = this.query.date_range || []
|
|
|
+ const account = this.query.promoter_account || ''
|
|
|
+ const filteredRows = this.summaryAllTableData.filter(row => {
|
|
|
+ const dateMatched = (!startDate || row.date >= startDate) && (!endDate || row.date <= endDate)
|
|
|
+ const accountMatched = !account || row.promoter_account.indexOf(account) > -1
|
|
|
+ return dateMatched && accountMatched
|
|
|
+ })
|
|
|
+ this.summaryTotal = filteredRows.length
|
|
|
+ this.summaryTableData = filteredRows.slice((this.page - 1) * this.limit, this.page * this.limit)
|
|
|
+ },
|
|
|
+ getBlockedList() {
|
|
|
+ const keyword = this.query.blocked_account || ''
|
|
|
+ const filteredRows = this.blockedAllTableData.filter(row => {
|
|
|
+ return !keyword || row.member_account.indexOf(keyword) > -1
|
|
|
+ })
|
|
|
+ this.blockedTotal = filteredRows.length
|
|
|
+ this.blockedTableData = filteredRows.slice((this.page - 1) * this.limit, this.page * this.limit)
|
|
|
+ },
|
|
|
+ onSubmit() {
|
|
|
+ this.page = 1
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ resetQuery() {
|
|
|
+ this.$refs.queryForm.resetFields()
|
|
|
+ this.onSubmit()
|
|
|
+ },
|
|
|
+ handleTabChange() {
|
|
|
+ this.page = 1
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ handleBlockedSearch() {
|
|
|
+ this.page = 1
|
|
|
+ this.getBlockedList()
|
|
|
+ },
|
|
|
+ handleBlockedCreate() {
|
|
|
+ this.resetBlockedForm()
|
|
|
+ this.$refs.blockedDialog.open()
|
|
|
+ },
|
|
|
+ resetBlockedForm() {
|
|
|
+ this.blockedForm = {
|
|
|
+ member_account: '',
|
|
|
+ categories: [],
|
|
|
+ selectAll: false
|
|
|
+ }
|
|
|
+ this.blockedEditingRow = null
|
|
|
+ this.blockedDialogTitle = '新增禁止推广账号'
|
|
|
+ },
|
|
|
+ toggleBlockedCategories(value) {
|
|
|
+ const categories = this.blockedCategoryGroups.reduce((result, group) => result.concat(group), [])
|
|
|
+ this.blockedForm.categories = value ? categories : []
|
|
|
+ },
|
|
|
+ syncBlockedSelectAll() {
|
|
|
+ const categories = this.blockedCategoryGroups.reduce((result, group) => result.concat(group), [])
|
|
|
+ this.blockedForm.selectAll = this.blockedForm.categories.length === categories.length
|
|
|
+ },
|
|
|
+ submitBlocked() {
|
|
|
+ if (!this.blockedForm.member_account.trim()) {
|
|
|
+ this.$message.warning('请输入禁止推广账号')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!this.blockedForm.categories.length) {
|
|
|
+ this.$message.warning('请选择不能返佣的类目')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const blockedData = {
|
|
|
+ member_account: this.blockedForm.member_account,
|
|
|
+ prohibited_category: this.blockedForm.categories.join('、')
|
|
|
+ }
|
|
|
+ if (this.blockedEditingRow) {
|
|
|
+ Object.assign(this.blockedEditingRow, blockedData)
|
|
|
+ } else {
|
|
|
+ this.blockedAllTableData.unshift({
|
|
|
+ ...blockedData,
|
|
|
+ status: 0
|
|
|
+ })
|
|
|
+ }
|
|
|
+ this.$refs.blockedDialog.close()
|
|
|
+ this.getBlockedList()
|
|
|
+ this.resetBlockedForm()
|
|
|
+ this.$message.success('提交成功')
|
|
|
+ },
|
|
|
+ handleBlockedEdit(row) {
|
|
|
+ const categories = this.blockedCategoryGroups.reduce((result, group) => result.concat(group), [])
|
|
|
+ const selectedCategories = row.prohibited_category
|
|
|
+ .split('、')
|
|
|
+ .filter(category => categories.includes(category))
|
|
|
+ this.blockedEditingRow = row
|
|
|
+ this.blockedDialogTitle = '修改禁止推广账号'
|
|
|
+ this.blockedForm = {
|
|
|
+ member_account: row.member_account,
|
|
|
+ categories: selectedCategories,
|
|
|
+ selectAll: selectedCategories.length === categories.length
|
|
|
+ }
|
|
|
+ this.$refs.blockedDialog.open()
|
|
|
+ },
|
|
|
+ handleBlockedToggle(row, value) {
|
|
|
+ row.status = value ? 1 : 0
|
|
|
+ },
|
|
|
+ handleBlockedDelete(row) {
|
|
|
+ this.$confirm(`确定删除会员账号“${row.member_account}”吗?`, '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ const rowIndex = this.blockedAllTableData.indexOf(row)
|
|
|
+ if (rowIndex > -1) {
|
|
|
+ this.blockedAllTableData.splice(rowIndex, 1)
|
|
|
+ this.getBlockedList()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ submitSettings() {
|
|
|
+ this.$message.success('提交成功')
|
|
|
+ },
|
|
|
+ handleSizeChange(value) {
|
|
|
+ this.limit = value
|
|
|
+ this.page = 1
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ handleCurrentChange(value) {
|
|
|
+ this.page = value
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ handleView(row) {
|
|
|
+ this.viewRow = { ...row }
|
|
|
+ this.detailPage = 1
|
|
|
+ this.detailQuery = {
|
|
|
+ member_id: '',
|
|
|
+ member_account: ''
|
|
|
+ }
|
|
|
+ this.getDetailList()
|
|
|
+ this.$refs.viewDialog.open()
|
|
|
+ },
|
|
|
+ handleDetailSearch() {
|
|
|
+ this.detailPage = 1
|
|
|
+ this.getDetailList()
|
|
|
+ },
|
|
|
+ resetDetailQuery() {
|
|
|
+ this.detailQuery = {
|
|
|
+ member_id: '',
|
|
|
+ member_account: ''
|
|
|
+ }
|
|
|
+ this.detailPage = 1
|
|
|
+ this.getDetailList()
|
|
|
+ },
|
|
|
+ handleRegisterView(row) {
|
|
|
+ this.registerDetailViewDate = row.date
|
|
|
+ this.registerDetailQuery = {
|
|
|
+ member_id: '',
|
|
|
+ member_account: ''
|
|
|
+ }
|
|
|
+ this.getRegisterDetailList()
|
|
|
+ this.$refs.registerDialog.open()
|
|
|
+ },
|
|
|
+ handleRegisterDetailSearch() {
|
|
|
+ this.getRegisterDetailList()
|
|
|
+ },
|
|
|
+ resetRegisterDetailQuery() {
|
|
|
+ this.registerDetailQuery = {
|
|
|
+ member_id: '',
|
|
|
+ member_account: ''
|
|
|
+ }
|
|
|
+ this.getRegisterDetailList()
|
|
|
+ },
|
|
|
+ getDetailList() {
|
|
|
+ const memberId = this.detailQuery.member_id.trim()
|
|
|
+ const memberAccount = this.detailQuery.member_account.trim()
|
|
|
+ const filteredRows = this.detailAllTableData.filter(item => {
|
|
|
+ const idMatched = !memberId || String(item.member_id).indexOf(memberId) > -1
|
|
|
+ const accountMatched = !memberAccount || item.member_account.indexOf(memberAccount) > -1
|
|
|
+ return idMatched && accountMatched
|
|
|
+ })
|
|
|
+ const detailRows = filteredRows.slice(
|
|
|
+ (this.detailPage - 1) * this.detailLimit,
|
|
|
+ this.detailPage * this.detailLimit
|
|
|
+ )
|
|
|
+ this.detailTotal = filteredRows.length
|
|
|
+ this.detailTableData = detailRows.map(item => ({
|
|
|
+ ...item,
|
|
|
+ date: this.viewRow.date
|
|
|
+ }))
|
|
|
+ },
|
|
|
+ getRegisterDetailList() {
|
|
|
+ const memberId = this.registerDetailQuery.member_id.trim()
|
|
|
+ const memberAccount = this.registerDetailQuery.member_account.trim()
|
|
|
+ const filteredRows = this.registerDetailAllTableData.filter(item => {
|
|
|
+ const idMatched = !memberId || String(item.member_id).indexOf(memberId) > -1
|
|
|
+ const accountMatched = !memberAccount || item.member_account.indexOf(memberAccount) > -1
|
|
|
+ return idMatched && accountMatched
|
|
|
+ })
|
|
|
+ this.registerDetailTableData = filteredRows.map(item => ({
|
|
|
+ ...item,
|
|
|
+ date: this.registerDetailViewDate
|
|
|
+ }))
|
|
|
+ },
|
|
|
+ handleDetailSizeChange(value) {
|
|
|
+ this.detailLimit = value
|
|
|
+ this.detailPage = 1
|
|
|
+ this.getDetailList()
|
|
|
+ },
|
|
|
+ handleDetailCurrentChange(value) {
|
|
|
+ this.detailPage = value
|
|
|
+ this.getDetailList()
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.share-money-page {
|
|
|
+ display: flex;
|
|
|
+ height: 100%;
|
|
|
+ padding: 16px;
|
|
|
+ background: #f5f7fa;
|
|
|
+}
|
|
|
+
|
|
|
+.share-money-panel {
|
|
|
+ display: flex;
|
|
|
+ flex: 1;
|
|
|
+ flex-direction: column;
|
|
|
+ min-width: 0;
|
|
|
+ min-height: 0;
|
|
|
+ padding: 0 20px 12px;
|
|
|
+ overflow: hidden;
|
|
|
+ background: #fff;
|
|
|
+ box-shadow: 0 1px 8px rgba(0, 0, 0, 0.08);
|
|
|
+}
|
|
|
+
|
|
|
+.promotion-tabs {
|
|
|
+ flex-shrink: 0;
|
|
|
+
|
|
|
+ ::v-deep .el-tabs__header {
|
|
|
+ margin: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-tabs__item {
|
|
|
+ height: 52px;
|
|
|
+ line-height: 52px;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.share-money-search {
|
|
|
+ flex-shrink: 0;
|
|
|
+ padding: 16px 0 0;
|
|
|
+
|
|
|
+ ::v-deep .el-form-item {
|
|
|
+ margin-right: 22px;
|
|
|
+ margin-bottom: 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-form-item__label {
|
|
|
+ color: #303133;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-date-editor--daterange.el-input__inner {
|
|
|
+ width: 400px;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-input {
|
|
|
+ width: 236px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .search-actions {
|
|
|
+ margin-right: 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.promotion-settings {
|
|
|
+ flex: 1;
|
|
|
+ min-height: 0;
|
|
|
+ overflow: auto;
|
|
|
+ padding-top: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.settings-actions {
|
|
|
+ margin-top: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.settings-form {
|
|
|
+ ::v-deep .el-form-item {
|
|
|
+ margin-bottom: 16px;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-form-item__label {
|
|
|
+ color: #303133;
|
|
|
+ font-weight: 500;
|
|
|
+ white-space: nowrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-input {
|
|
|
+ width: 236px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.commission-settings {
|
|
|
+ ::v-deep .el-form-item {
|
|
|
+ margin-bottom: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-form-item__label {
|
|
|
+ color: #909399;
|
|
|
+ font-size: 14px;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-input {
|
|
|
+ width: 150px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.share-money-table {
|
|
|
+ display: flex;
|
|
|
+ flex: 1;
|
|
|
+ flex-direction: column;
|
|
|
+ min-height: 0;
|
|
|
+
|
|
|
+ .el-table {
|
|
|
+ flex: 1;
|
|
|
+ border-radius: 4px;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-table__fixed-right {
|
|
|
+ height: 100% !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-table th {
|
|
|
+ height: 44px;
|
|
|
+ background: #f5f7fa;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-table th .cell {
|
|
|
+ color: #606266 !important;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-table td {
|
|
|
+ height: 49px;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-table td .cell {
|
|
|
+ overflow: hidden;
|
|
|
+ color: #606266;
|
|
|
+ font-size: 14px;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ white-space: nowrap;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.share-money-pagination {
|
|
|
+ flex-shrink: 0;
|
|
|
+ padding-top: 12px;
|
|
|
+ text-align: right;
|
|
|
+}
|
|
|
+
|
|
|
+.summary-footer {
|
|
|
+ flex-shrink: 0;
|
|
|
+ padding: 12px 16px 0;
|
|
|
+ color: #606266;
|
|
|
+ text-align: right;
|
|
|
+}
|
|
|
+
|
|
|
+.summary-footer span + span {
|
|
|
+ margin-left: 56px;
|
|
|
+}
|
|
|
+
|
|
|
+.summary-footer strong {
|
|
|
+ color: #606266;
|
|
|
+ font-weight: 600;
|
|
|
+}
|
|
|
+
|
|
|
+.blocked-form {
|
|
|
+ ::v-deep .el-form-item {
|
|
|
+ margin-bottom: 16px;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-form-item__label {
|
|
|
+ color: #303133;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-input {
|
|
|
+ width: 236px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.blocked-category-row {
|
|
|
+ display: flex;
|
|
|
+ margin-top: 12px;
|
|
|
+
|
|
|
+ ::v-deep .el-checkbox {
|
|
|
+ margin-right: 24px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.blocked-dialog-actions {
|
|
|
+ margin-top: 20px;
|
|
|
+ text-align: right;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-search {
|
|
|
+ margin-bottom: 12px;
|
|
|
+
|
|
|
+ ::v-deep .el-form-item {
|
|
|
+ margin-right: 18px;
|
|
|
+ margin-bottom: 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ ::v-deep .el-input {
|
|
|
+ width: 150px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .detail-search-actions {
|
|
|
+ margin-right: 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.detail-table {
|
|
|
+ padding: 10px 0 0;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-total {
|
|
|
+ padding: 12px 16px;
|
|
|
+ color: #303133;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-pagination {
|
|
|
+ padding-top: 12px;
|
|
|
+ text-align: right;
|
|
|
+}
|
|
|
+
|
|
|
+.promotion-description {
|
|
|
+ padding: 12px 16px 0;
|
|
|
+ color: #303133;
|
|
|
+ font-size: 14px;
|
|
|
+}
|
|
|
+
|
|
|
+.description-title {
|
|
|
+ margin-bottom: 8px;
|
|
|
+ font-weight: 600;
|
|
|
+}
|
|
|
+
|
|
|
+.promotion-description p {
|
|
|
+ margin: 6px 0;
|
|
|
+}
|
|
|
+</style>
|