1.优化渠道管理中直属投注额度和总投注额度
2.管理员管理中三个菜单数据显示限制
This commit is contained in:
@@ -110,11 +110,12 @@ export default {
|
||||
settle_stats_pending_dividend: 'Channels pending dividend',
|
||||
settle_stats_pending_amount: 'Pending dividend amount',
|
||||
settle_stats_paid_dividend: 'Paid dividend amount',
|
||||
settle_stats_company_total_bet: 'Company total bet',
|
||||
direct_bet_amount: 'Direct bet amount',
|
||||
view_settlement_bet: 'View settlement bets',
|
||||
direct_bet_amount_tip: 'Total bets from all players under this channel (including unsettled)',
|
||||
company_bet_record_dialog_title: 'Company bet records',
|
||||
direct_bet_record_dialog_title: 'Direct player game bets',
|
||||
dividend_record_dialog_title: 'Paid dividend records',
|
||||
direct_bet_record_dialog_title: 'Direct player bet records',
|
||||
settlement_bet_record_dialog_title: 'Dividend-scope bet records',
|
||||
bet_record_period_no: 'Period No.',
|
||||
bet_record_user_username: 'Player',
|
||||
bet_record_total_amount: 'Bet amount',
|
||||
|
||||
@@ -109,11 +109,12 @@ export default {
|
||||
settle_stats_pending_dividend: '待分红渠道',
|
||||
settle_stats_pending_amount: '待分红总额',
|
||||
settle_stats_paid_dividend: '已分红金额',
|
||||
settle_stats_company_total_bet: '公司总投注额',
|
||||
direct_bet_amount: '直属投注额',
|
||||
view_settlement_bet: '查看总投注金额',
|
||||
direct_bet_amount_tip: '该渠道名下全部玩家的总投注额(含未结算)',
|
||||
company_bet_record_dialog_title: '公司总投注记录下注明细',
|
||||
direct_bet_record_dialog_title: '直属玩家游戏下注记录',
|
||||
dividend_record_dialog_title: '已分红记录',
|
||||
direct_bet_record_dialog_title: '直属玩家下注记录',
|
||||
settlement_bet_record_dialog_title: '分红口径下注记录',
|
||||
bet_record_period_no: '游戏期号',
|
||||
bet_record_user_username: '玩家名',
|
||||
bet_record_total_amount: '投注金额',
|
||||
|
||||
@@ -27,7 +27,16 @@
|
||||
<el-card
|
||||
shadow="never"
|
||||
class="channel-stat-card"
|
||||
:class="{ 'channel-stat-card-clickable': auth('viewDividendRecords') }"
|
||||
:class="{ 'channel-stat-card-clickable': auth('index') }"
|
||||
@click="onCompanyTotalBetCardClick"
|
||||
>
|
||||
<div class="label">{{ t('channel.settle_stats_company_total_bet') }}</div>
|
||||
<div class="value">{{ settleStats.company_total_bet_amount }}</div>
|
||||
</el-card>
|
||||
<el-card
|
||||
shadow="never"
|
||||
class="channel-stat-card"
|
||||
:class="{ 'channel-stat-card-clickable': auth('index') }"
|
||||
@click="onPaidDividendCardClick"
|
||||
>
|
||||
<div class="label">{{ t('channel.settle_stats_paid_dividend') }}</div>
|
||||
@@ -353,6 +362,7 @@
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
v-if="betRecordDialog.mode === 'company'"
|
||||
prop="channel_name"
|
||||
:label="t('channel.bet_record_channel_name')"
|
||||
min-width="100"
|
||||
@@ -518,20 +528,6 @@ const dismissFloatingTooltips = () => {
|
||||
}
|
||||
const tableRef = useTemplateRef('tableRef')
|
||||
let optButtons: OptButton[] = [
|
||||
{
|
||||
render: 'tipButton',
|
||||
name: 'viewSettlementBet',
|
||||
title: 'channel.view_settlement_bet',
|
||||
text: '',
|
||||
type: 'info',
|
||||
icon: 'fa fa-list-alt',
|
||||
class: 'table-row-view-settlement-bet',
|
||||
disabledTip: false,
|
||||
display: () => auth('viewSettlementBetRecords'),
|
||||
click: (row: TableRow) => {
|
||||
void openBetRecordDialog('settlement', row)
|
||||
},
|
||||
},
|
||||
{
|
||||
render: 'tipButton',
|
||||
name: 'manualSettle',
|
||||
@@ -658,6 +654,7 @@ const settleStats = reactive({
|
||||
carryover_total: '0.00',
|
||||
carryover_positive_total: '0.00',
|
||||
paid_dividend_total: '0.00',
|
||||
company_total_bet_amount: '0.00',
|
||||
})
|
||||
|
||||
const dividendDialog = reactive({
|
||||
@@ -680,7 +677,7 @@ const createBetRecordFilters = () => ({
|
||||
const betRecordDialog = reactive({
|
||||
visible: false,
|
||||
loading: false,
|
||||
mode: '' as '' | 'direct' | 'settlement',
|
||||
mode: '' as '' | 'direct' | 'company',
|
||||
channelId: 0,
|
||||
title: '',
|
||||
page: 1,
|
||||
@@ -952,6 +949,7 @@ const loadSettleStats = async () => {
|
||||
settleStats.carryover_total = String(res.data.carryover_total ?? '0.00')
|
||||
settleStats.carryover_positive_total = String(res.data.carryover_positive_total ?? '0.00')
|
||||
settleStats.paid_dividend_total = String(res.data.paid_dividend_total ?? '0.00')
|
||||
settleStats.company_total_bet_amount = String(res.data.company_total_bet_amount ?? '0.00')
|
||||
}
|
||||
|
||||
const loadDividendRecords = async () => {
|
||||
@@ -973,7 +971,7 @@ const loadDividendRecords = async () => {
|
||||
}
|
||||
|
||||
const onPaidDividendCardClick = () => {
|
||||
if (!auth('viewDividendRecords')) {
|
||||
if (!auth('index')) {
|
||||
return
|
||||
}
|
||||
dividendDialog.page = 1
|
||||
@@ -981,6 +979,18 @@ const onPaidDividendCardClick = () => {
|
||||
void loadDividendRecords()
|
||||
}
|
||||
|
||||
const onCompanyTotalBetCardClick = () => {
|
||||
if (!auth('index')) {
|
||||
return
|
||||
}
|
||||
resetBetRecordDialog()
|
||||
betRecordDialog.mode = 'company'
|
||||
betRecordDialog.channelId = 0
|
||||
betRecordDialog.title = t('channel.company_bet_record_dialog_title')
|
||||
betRecordDialog.visible = true
|
||||
void loadBetRecords()
|
||||
}
|
||||
|
||||
const closeDividendDialog = () => {
|
||||
dividendDialog.visible = false
|
||||
dividendDialog.list = []
|
||||
@@ -1030,22 +1040,30 @@ const buildBetRecordFilterParams = () => {
|
||||
}
|
||||
|
||||
const loadBetRecords = async () => {
|
||||
if (!betRecordDialog.channelId || !betRecordDialog.mode) {
|
||||
if (!betRecordDialog.mode) {
|
||||
return
|
||||
}
|
||||
if (betRecordDialog.mode === 'direct' && !betRecordDialog.channelId) {
|
||||
return
|
||||
}
|
||||
const url =
|
||||
betRecordDialog.mode === 'direct' ? '/admin/channel/directBetRecordList' : '/admin/channel/settlementBetRecordList'
|
||||
betRecordDialog.mode === 'direct'
|
||||
? '/admin/channel/directBetRecordList'
|
||||
: '/admin/channel/companyBetRecordList'
|
||||
betRecordDialog.loading = true
|
||||
try {
|
||||
const params: Record<string, string | number> = {
|
||||
page: betRecordDialog.page,
|
||||
limit: betRecordDialog.limit,
|
||||
...buildBetRecordFilterParams(),
|
||||
}
|
||||
if (betRecordDialog.mode === 'direct') {
|
||||
params.channel_id = betRecordDialog.channelId
|
||||
}
|
||||
const res = await createAxios({
|
||||
url,
|
||||
method: 'get',
|
||||
params: {
|
||||
channel_id: betRecordDialog.channelId,
|
||||
page: betRecordDialog.page,
|
||||
limit: betRecordDialog.limit,
|
||||
...buildBetRecordFilterParams(),
|
||||
},
|
||||
params,
|
||||
})
|
||||
if (res.code !== 1 || !res.data) {
|
||||
return
|
||||
@@ -1063,9 +1081,8 @@ const loadBetRecords = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
const openBetRecordDialog = (mode: 'direct' | 'settlement', row: TableRow) => {
|
||||
const permission = mode === 'direct' ? 'viewDirectBetRecords' : 'viewSettlementBetRecords'
|
||||
if (!auth(permission)) {
|
||||
const openBetRecordDialog = (mode: 'direct' | 'company', row: TableRow) => {
|
||||
if (!auth('index')) {
|
||||
return
|
||||
}
|
||||
resetBetRecordDialog()
|
||||
@@ -1074,7 +1091,7 @@ const openBetRecordDialog = (mode: 'direct' | 'settlement', row: TableRow) => {
|
||||
betRecordDialog.title =
|
||||
mode === 'direct'
|
||||
? `${t('channel.direct_bet_record_dialog_title')} - ${row.name ?? row.id}`
|
||||
: `${t('channel.settlement_bet_record_dialog_title')} - ${row.name ?? row.id}`
|
||||
: t('channel.company_bet_record_dialog_title')
|
||||
betRecordDialog.visible = true
|
||||
void loadBetRecords()
|
||||
}
|
||||
@@ -1234,8 +1251,8 @@ const baTable = new baTableClass(
|
||||
formatter: formatAmount2,
|
||||
customRenderAttr: {
|
||||
tag: ({ row }: { row: TableRow }) => ({
|
||||
class: auth('viewDirectBetRecords') ? 'channel-direct-bet-tag' : '',
|
||||
onClick: auth('viewDirectBetRecords') ? () => openDirectBetDialog(row) : undefined,
|
||||
class: auth('index') ? 'channel-direct-bet-tag' : '',
|
||||
onClick: auth('index') ? () => openDirectBetDialog(row) : undefined,
|
||||
}),
|
||||
},
|
||||
},
|
||||
@@ -1382,11 +1399,20 @@ onUnmounted(() => {
|
||||
|
||||
.channel-stats-cards {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, minmax(0, 1fr));
|
||||
gap: 10px;
|
||||
grid-template-columns: repeat(6, minmax(0, 1fr));
|
||||
gap: 8px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.channel-stats-cards :deep(.el-card__body) {
|
||||
padding: 10px 8px;
|
||||
}
|
||||
|
||||
.channel-stat-card {
|
||||
text-align: center;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.channel-stat-card-clickable {
|
||||
cursor: pointer;
|
||||
transition: box-shadow 0.2s ease;
|
||||
@@ -1468,15 +1494,18 @@ onUnmounted(() => {
|
||||
}
|
||||
|
||||
.channel-stat-card .label {
|
||||
font-size: 12px;
|
||||
font-size: 11px;
|
||||
color: var(--el-text-color-secondary);
|
||||
line-height: 1.3;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.channel-stat-card .value {
|
||||
margin-top: 6px;
|
||||
font-size: 20px;
|
||||
margin-top: 4px;
|
||||
font-size: 17px;
|
||||
font-weight: 600;
|
||||
color: var(--el-text-color-primary);
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.channel-action-row {
|
||||
|
||||
Reference in New Issue
Block a user