fix:1,修改商户管理bug
parent
3416e62a1b
commit
ae7f914b70
|
@ -5,4 +5,4 @@ VITE_APP_TITLE = 代理管理系统
|
|||
VITE_APP_ENV = 'development'
|
||||
|
||||
# 代理管理系统/开发环境
|
||||
VITE_APP_BASE_API = '/dev-api'
|
||||
VITE_APP_BASE_API = '/ff-api'
|
||||
|
|
|
@ -24,3 +24,13 @@ export function cleanOperlog() {
|
|||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
//用户转账日志
|
||||
export function superTransferList(query) {
|
||||
return request({
|
||||
url: '/super/transfer/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
<template>
|
||||
<el-input
|
||||
v-model="code"
|
||||
:maxlength="maxlength"
|
||||
:placeholder="placeholder"
|
||||
@input="onInput"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, watch } from "vue"
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: String,
|
||||
maxlength: { type: Number, default: 6 },
|
||||
placeholder: { type: String, default: "请输入验证码" }
|
||||
})
|
||||
const emit = defineEmits(["update:modelValue"])
|
||||
|
||||
const code = ref(props.modelValue || "")
|
||||
|
||||
// 外部值同步
|
||||
watch(() => props.modelValue, v => code.value = v || "")
|
||||
|
||||
// 输入过滤:只能数字,限制长度
|
||||
const onInput = (val) => {
|
||||
val = val.replace(/\D/g, "").slice(0, props.maxlength)
|
||||
code.value = val
|
||||
emit("update:modelValue", val)
|
||||
}
|
||||
</script>
|
||||
|
|
@ -94,7 +94,7 @@
|
|||
<el-input v-model="passwordFormData.confirmPassword" placeholder="请确认新密码" type="password" show-password/>
|
||||
</el-form-item>
|
||||
<el-form-item label="谷歌验证码" prop="codeGoogle">
|
||||
<el-input v-model="passwordFormData.codeGoogle" maxlength="6" placeholder="请输入谷歌验证码"/>
|
||||
<CodeInput v-model="passwordFormData.codeGoogle" maxlength="6" placeholder="请输入谷歌验证码"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-scrollbar>
|
||||
|
@ -117,6 +117,7 @@ import useAppStore from '@/store/modules/app'
|
|||
import useSettingsStore from '@/store/modules/settings'
|
||||
import usePermissionStore from '@/store/modules/permission'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import CodeInput from "@/components/CodeInput";
|
||||
import { getLocalStorage } from "@/utils/auth";
|
||||
import { updateUserProfile,getUserProfile,updateUserPwd } from "@/api/system/user";
|
||||
|
||||
|
@ -135,6 +136,9 @@ const nickName = ref(getLocalStorage('userInfo')?.nickName);
|
|||
|
||||
const dialogVisible = ref(false);
|
||||
const rules = ref({
|
||||
nickName:[
|
||||
{ required: true, message: '请输入昵称', trigger: 'change' },
|
||||
]
|
||||
});
|
||||
const formData = ref({
|
||||
});
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('谷歌验证码')" prop="googleCode">
|
||||
<el-input v-model="form.googleCode" :maxlength="6" style="width: 260px;" :placeholder="t('请输入谷歌验证码')" />
|
||||
<CodeInput v-model="form.googleCode" :maxlength="6" style="width: 260px;" :placeholder="t('请输入谷歌验证码')" />
|
||||
|
||||
</el-form-item>
|
||||
<!-- <div class="label-scoreRatio">
|
||||
|
@ -146,7 +146,7 @@
|
|||
</el-dialog>
|
||||
|
||||
<!-- 详情 -->
|
||||
<el-dialog :title="t('成本比例')" align-center v-model="openView" width="820px" append-to-body>
|
||||
<el-dialog :title="t('编辑代理')" align-center v-model="openView" width="820px" append-to-body>
|
||||
<el-scrollbar max-height="600px">
|
||||
<el-form :model="form" ref="agentEditRef" :rules="rules" label-width="120px">
|
||||
<el-form-item :label="t('代理账号')" prop="account">
|
||||
|
@ -163,7 +163,7 @@
|
|||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('谷歌验证码')" prop="googleCode">
|
||||
<el-input v-model="form.googleCode" :maxlength="6" style="width: 260px;" :placeholder="t('请输入谷歌验证码')" />
|
||||
<CodeInput v-model="form.googleCode" :maxlength="6" style="width: 260px;" :placeholder="t('请输入谷歌验证码')" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item :label="t('商户模式')" prop="tenantType">
|
||||
<el-radio-group v-model="form.tenantType" :disabled="openView">
|
||||
|
@ -210,6 +210,7 @@
|
|||
import { superAgentList, createSuperAgent,updateSuperAgentResetPwd,updateSuperAgentEdit } from "@/api/super/agent";
|
||||
import { selectPlatform,superPlatformSystem } from "@/api/agent";
|
||||
import CustomSelect from '@/components/CustomSelect';
|
||||
import CodeInput from '@/components/CodeInput';
|
||||
import BaseSwitch from '@/components/BaseSwitch'
|
||||
import CopyIcon from '@/components/CopyIcon'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
|
@ -455,6 +456,7 @@ function submitForm() {
|
|||
walletAddress: form.value.walletAddress,
|
||||
currencyAgreement: form.value.currencyAgreement,
|
||||
proportion: form.value.proportion||0,
|
||||
googleCode: form.value.googleCode,
|
||||
}
|
||||
createSuperAgent(dataObj).then(response => {
|
||||
loadingButton.value = false;
|
||||
|
@ -476,6 +478,7 @@ const submitFormEdit = () => {
|
|||
walletAddress: form.value.walletAddress,
|
||||
currencyAgreement: form.value.currencyAgreement,
|
||||
profitRatio: form.value.proportion||0,
|
||||
googleCode: form.value.googleCode,
|
||||
}
|
||||
updateSuperAgentEdit(dataObj).then(response => {
|
||||
loadingButton.value = false;
|
||||
|
|
|
@ -73,7 +73,7 @@
|
|||
{{ t(' (万法定货币=1万通用额度)') }}
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('谷歌验证码')" prop="googleCode">
|
||||
<el-input v-model="form.googleCode" :maxlength="6" style="width: 260px;" :placeholder="t('请输入谷歌验证码')" />
|
||||
<CodeInput v-model="form.googleCode" :maxlength="6" style="width: 260px;" :placeholder="t('请输入谷歌验证码')" />
|
||||
</el-form-item>
|
||||
<div class="label-scoreRatio">
|
||||
<span>{{ t('平台比例') }}</span>
|
||||
|
@ -159,6 +159,7 @@
|
|||
<script setup name="Agent">
|
||||
import { listAgent, createAgent, selectPlatform,superPlatformSystem } from "@/api/agent";
|
||||
import Crontab from '@/components/Crontab'
|
||||
import CodeInput from '@/components/CodeInput'
|
||||
import CustomSelect from '@/components/CustomSelect'
|
||||
import { superCommonTimeZone } from "@/api/super/tenant.js";
|
||||
import { parseTime } from '@/utils/ruoyi'; // 时间格式化
|
||||
|
|
|
@ -40,13 +40,13 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('币种')" prop="currencyCode">
|
||||
<CustomSelect v-if="showLoding1" v-model="queryParams.currencyCode" clearable filterable :options="sys_job_group" placeholder="请选择币种" style="width: 200px" />
|
||||
<CustomSelect v-if="showLoding1" v-model="queryParams.currencyCode" clearable filterable :options="sys_job_group" placeholder="请选择币种" style="width: 200px" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item :label="t('游戏类型')" prop="gameType">
|
||||
<CustomSelect v-model="queryParams.gameType" dictKey="ff_game_type" placeholder="请选择游戏类型" style="width: 200px" />
|
||||
</el-form-item> -->
|
||||
<el-form-item :label="t('平台类型')" prop="gameType">
|
||||
<CustomSelect v-if="showLoding2" v-model="queryParams.gameType" :options="sys_job_statusSelect" placeholder="请选择平台类型" style="width: 200px" />
|
||||
<CustomSelect v-if="showLoding2" v-model="queryParams.gameType" filterable :options="sys_job_statusSelect" placeholder="请选择平台类型" style="width: 200px" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('游戏平台')" prop="platformCode">
|
||||
<CustomSelect v-if="showLoding2" v-model="queryParams.platformCode" filterable :options="sys_job_status" placeholder="请选择平台类型" style="width: 200px" />
|
||||
|
@ -58,9 +58,9 @@
|
|||
<el-table v-loading="loading" class="c-table-main" :data="agentList" border>
|
||||
<!-- <el-table-column type="selection" width="55" align="center" /> -->
|
||||
<el-table-column :label="t('币种')" width="100" align="center" prop="currencyCode" />
|
||||
<el-table-column :label="t('商户账号')" align="center" min-width="150" prop="tenantKey" :show-overflow-tooltip="true" />
|
||||
<el-table-column :label="t('玩家账号')" align="center" min-width="120" prop="ourAccount" :show-overflow-tooltip="true" />
|
||||
<el-table-column :label="t('三方玩家账号')" align="center" min-width="150" prop="account" :show-overflow-tooltip="true" />
|
||||
<el-table-column :label="t('商户账号')" align="center" min-width="150" prop="tenantKey" />
|
||||
<el-table-column :label="t('玩家账号')" align="center" min-width="120" prop="ourAccount" />
|
||||
<el-table-column :label="t('三方玩家账号')" align="center" min-width="170" prop="account" />
|
||||
<el-table-column :label="t('游戏平台')" min-width="100" align="center" prop="platformCode" />
|
||||
<el-table-column :label="t('平台类型')" min-width="100" align="center" prop="gameType" >
|
||||
<template #default="{row}">
|
||||
|
@ -68,6 +68,7 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('游戏名称')" min-width="100" align="center" prop="gameName" />
|
||||
<el-table-column :label="t('游戏ID')" min-width="130" align="center" prop="gameId" />
|
||||
<el-table-column :label="t('投注额')" min-width="100" align="center" prop="betAmount" />
|
||||
<el-table-column :label="t('有效投注额')" min-width="100" align="center" prop="betAmount" />
|
||||
<el-table-column :label="t('输赢金额')" min-width="100" align="center" prop="payoffAmount" >
|
||||
|
@ -122,6 +123,7 @@
|
|||
import TableSearchDate from '@/components/TableSearchDate'
|
||||
import Crontab from '@/components/Crontab'
|
||||
import { parseTime } from '@/utils/ruoyi'; // 时间格式化
|
||||
import { onMounted } from "vue";
|
||||
const router = useRouter();
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { ff_tenant_type, ff_tenant_status } = proxy.useDict("ff_tenant_type", "ff_tenant_status");
|
||||
|
@ -311,9 +313,12 @@ const getsuperCommonPlatformTypeSelect = async () => {
|
|||
});
|
||||
}
|
||||
|
||||
getList();
|
||||
getsuperCommonCurrencySelect();
|
||||
getsuperCommonPlatformTypeSelect();
|
||||
//初始化
|
||||
onMounted(() => {
|
||||
getList();
|
||||
getsuperCommonCurrencySelect();
|
||||
getsuperCommonPlatformTypeSelect();
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
|
|
@ -4,7 +4,14 @@
|
|||
<template #left>
|
||||
<table-search-date ref="searchDateRef" v-model:dateRange="dateRange" @dateChange="handleQuery" v-model:operateTimeType="operateTimeType"></table-search-date>
|
||||
<select-input-form ref="selectInputFormRef" :queryParamsList="queryParamsList" :queryParams="queryParams"></select-input-form>
|
||||
<!-- <el-form-item :label="t('操作类型')" prop="operationType">
|
||||
<el-form-item prop="gameQuotaFlowId">
|
||||
<el-input v-model="queryParams.gameQuotaFlowId" style="width: 240px" :placeholder="t('流水ID')" />
|
||||
</el-form-item>
|
||||
<el-form-item prop="auditAndOrderId">
|
||||
<el-input v-model="queryParams.auditAndOrderId" style="width: 240px" :placeholder="t('请输入审计订单id或者系统订单id')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('操作类型')" prop="operationType">
|
||||
<el-select v-if="operationTypeOption.length > 0" v-model="queryParams.operationType" clearable style="width:220px;" :placeholder="t('请选择')">
|
||||
<el-option
|
||||
v-for="dict in operationTypeOption"
|
||||
|
@ -13,7 +20,7 @@
|
|||
:value="dict.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item> -->
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template #right>
|
||||
</template>
|
||||
|
@ -129,12 +136,6 @@
|
|||
const queryParamsList = reactive([{
|
||||
label: proxy.t('商户账号'),
|
||||
value: 'tenantKey',
|
||||
},{ //查询条件选择
|
||||
label: proxy.t('流水ID'),
|
||||
value: 'gameQuotaFlowId',
|
||||
},{ //查询条件选择
|
||||
label: proxy.t('审计订单ID'),
|
||||
value: 'auditAndOrderId',
|
||||
}])
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
const dateRange = ref([]),operateTimeType = ref("day");
|
||||
|
|
|
@ -83,7 +83,7 @@
|
|||
<el-input v-model="userInfos.walletAddress" disabled auto-complete="off" placeholder="请输入钱包地址" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('谷歌验证码')" prop="googleCode">
|
||||
<el-input v-model="form.googleCode" :maxlength="6" :placeholder="t('请输入谷歌验证码')" />
|
||||
<CodeInput v-model="form.googleCode" :maxlength="6" :placeholder="t('请输入谷歌验证码')" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
|
@ -98,7 +98,8 @@
|
|||
|
||||
<script setup name="Commission">
|
||||
import { listCommission,getCommissionInfo,updateAgentCommission,updateAgentWithdraw } from "@/api/commission";
|
||||
import Crontab from '@/components/Crontab'
|
||||
import Crontab from '@/components/Crontab';
|
||||
import CodeInput from '@/components/CodeInput';
|
||||
import { parseTime } from '@/utils/ruoyi'; // 时间格式化
|
||||
const router = useRouter();
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<div class="card-title">{{ card.title }}</div>
|
||||
|
||||
<div class="card-value">
|
||||
<span class="" :style="card.cardClass =='pink' ? 'cursor: pointer;':card.cardClass =='green'?'cursor: pointer;':'cursor: pointer;'" @click="goPage(card.cardClass)">{{ card.value }}</span>
|
||||
<span class="" :style="card.cardClass =='pink' ? 'cursor: pointer;border-bottom: 2px solid #fff;':card.cardClass =='green'?'cursor: pointer;border-bottom: 2px solid #fff;':'cursor: pointer;border-bottom: 2px solid #fff;'" @click="goPage(card.cardClass)">{{ card.value }}</span>
|
||||
</div>
|
||||
<div class="card-subtitle" v-html="card.subtitle" @click="handleClick"></div>
|
||||
</div>
|
||||
|
@ -239,7 +239,7 @@
|
|||
min-height: 40px;
|
||||
}
|
||||
:deep(.card-subtitle a){
|
||||
text-decoration: none !important;
|
||||
text-decoration: underline!important;
|
||||
}
|
||||
.percentage {
|
||||
font-size: 14px;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
<CheckboxSelect v-model="platformCodes" dataType="platformSelectList" collapse-tags collapse-tags-tooltip filterable :placeholder="t('请选择平台')" style="width: 220px;"
|
||||
@change="getHomeIndexs" @allSelect="getHomeIndexs"></CheckboxSelect>
|
||||
<CheckboxSelect v-model="tenantKeys" dataType="tenantSelectList" collapse-tags collapse-tags-tooltip :placeholder="t('请选择商户')" style="width: 220px;"
|
||||
<CheckboxSelect v-model="tenantKeys" dataType="tenantSelectList" filterable collapse-tags collapse-tags-tooltip :placeholder="t('请选择商户')" style="width: 220px;"
|
||||
@change="getHomeIndexs" @allSelect="getHomeIndexs"></CheckboxSelect>
|
||||
</div>
|
||||
<el-row v-hasPermi="['home:data:admin']">
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
<el-dialog v-model="goodDialogVisible" style="margin-top: 45vh !important;" :title="t('温馨提示')" width="418" :before-close="handleClose">
|
||||
<div style="width: 90%;margin-bottom: 20px;">{{ t('请用手机打开客服端Google身份验证器,输入验证码') }}</div>
|
||||
<div class="">
|
||||
<el-input v-model="gooleCode" :maxlength="6" style="width: 90%" :placeholder="t('验证码只能为数字')" />
|
||||
<CodeInput v-model="gooleCode" :maxlength="6" style="width: 90%" :placeholder="t('验证码只能为数字')" />
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
|
@ -111,7 +111,7 @@
|
|||
</div>
|
||||
<el-form ref="authenticatorRef" :model="authenticatorForm" :rules="authenticatorRules">
|
||||
<el-form-item label="谷歌验证码" prop="authenticatorCode">
|
||||
<el-input v-model="authenticatorForm.authenticatorCode" :maxlength="6" :digit="2" style="width: 100%;height: 36px;" :placeholder="t('验证码只能为数字')" />
|
||||
<CodeInput v-model="authenticatorForm.authenticatorCode" :maxlength="6" :digit="2" style="width: 100%;height: 36px;" :placeholder="t('验证码只能为数字')" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="" style="margin-top: 20px;margin-bottom: 20px;">
|
||||
|
@ -140,7 +140,7 @@ import Cookies from "js-cookie";
|
|||
import { encrypt, decrypt } from "@/utils/jsencrypt";
|
||||
import useUserStore from '@/store/modules/user';
|
||||
import { i18nScope } from "@/languages"
|
||||
import NumberInput from "@/components/NumberInput";
|
||||
import CodeInput from "@/components/CodeInput";
|
||||
import Vcode from "vue3-puzzle-vcode";
|
||||
import { setToken } from '@/utils/auth'
|
||||
import {selectListLang} from '@/api/super/agent'
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
{{ t('如需扣余额,则输入负数,例如:-10.50') }}
|
||||
</div>
|
||||
<el-form-item :label="t('谷歌验证码')" prop="googleCode">
|
||||
<el-input v-model="formAdjustment.googleCode" :maxlength="6" :placeholder="t('请输入谷歌验证码')" />
|
||||
<CodeInput v-model="formAdjustment.googleCode" :maxlength="6" :placeholder="t('请输入谷歌验证码')" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('备注')" prop="remark">
|
||||
<el-input type="textarea" rows="4" v-model="formAdjustment.remark" :placeholder="t('请输入备注')" />
|
||||
|
@ -131,6 +131,7 @@ import { nextTick, ref } from "vue";
|
|||
import { getLocalStorage } from "@/utils/auth";
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import CustomSelect from '@/components/CustomSelect'
|
||||
import CodeInput from '@/components/CodeInput';
|
||||
import NumberInput from '@/components/NumberInput'
|
||||
import { reactify } from "@vueuse/core";
|
||||
import { number } from "echarts";
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('谷歌验证码')" prop="googleCode">
|
||||
<el-input v-model="formAdjustment.googleCode" :maxlength="6" :placeholder="t('请输入谷歌验证码')" />
|
||||
<CodeInput v-model="formAdjustment.googleCode" :maxlength="6" :placeholder="t('请输入谷歌验证码')" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('备注')" prop="remark">
|
||||
<el-input type="textarea" rows="4" v-model="formAdjustment.remark" :placeholder="t('请输入备注')" />
|
||||
|
@ -48,6 +48,7 @@ import { getLocalStorage } from "@/utils/auth";
|
|||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import CustomSelect from '@/components/CustomSelect'
|
||||
import NumberInput from '@/components/NumberInput'
|
||||
import CodeInput from '@/components/CodeInput'
|
||||
import { reactify } from "@vueuse/core";
|
||||
import { number } from "echarts";
|
||||
const { proxy } = getCurrentInstance()
|
||||
|
|
|
@ -69,7 +69,8 @@
|
|||
<el-table-column :label="t('状态')" align="center">
|
||||
<template #default="{row}">
|
||||
<!-- <dict-tag :options="ff_tenant_status" :value="String(scope.row.tenantStatus)" /> -->
|
||||
<base-switch v-model="row.tenantStatus" :active-value="true" :inactive-value="false"
|
||||
<base-switch v-model="row.tenantStatus" :active-text="t('开启')"
|
||||
:inactive-text="t('关闭')" :active-value="true" :inactive-value="false"
|
||||
:before-change="() => beforeSwitchChange(row, 'tenantStatus')" v-hasPermi="['super:tenant:switch']" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -296,12 +297,12 @@ currencySelectArr.value = res.map(item => {
|
|||
/** 查询列表 */
|
||||
function getList() {
|
||||
loading.value = true;
|
||||
let queryParams={
|
||||
let query={
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
tenantKey: "",
|
||||
}
|
||||
superTenantList(queryParams).then(response => {
|
||||
superTenantList(queryParams.value).then(response => {
|
||||
agentList.value = response.rows;
|
||||
total.value = response.total;
|
||||
loading.value = false;
|
||||
|
|
|
@ -12,13 +12,13 @@
|
|||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item> -->
|
||||
<el-form-item :label="t('商户账号')" prop="tenantKey">
|
||||
<el-form-item :label="t('商户账号')" v-hasPermi="['super:tenant:list']" prop="tenantKey">
|
||||
<el-select
|
||||
v-model="queryParams.tenantKey"
|
||||
filterable
|
||||
clearable
|
||||
reserve-keyword
|
||||
placeholder="请输入租户Key搜索"
|
||||
placeholder="请输入商户账号搜索"
|
||||
:remote-method="loadOptions"
|
||||
:loading="loadingSelect"
|
||||
style="width: 240px"
|
||||
|
@ -116,12 +116,12 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column :label="t('前缀')" width="100" align="center" prop="tenantSn" /> -->
|
||||
<el-table-column :label="t('玩家账号')" align="center" prop="memberAccount" min-width="120px" :show-overflow-tooltip="true" >
|
||||
<el-table-column :label="t('玩家账号')" align="center" prop="memberAccount" min-width="180px" >
|
||||
<template #default="{row}">
|
||||
{{ row.memberAccount? row.memberAccount : '--' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('游戏账号')" align="center" prop="gameAccount" min-width="130px" :show-overflow-tooltip="true" >
|
||||
<el-table-column :label="t('游戏账号')" align="center" prop="gameAccount" min-width="180px" >
|
||||
<template #default="{row}">
|
||||
{{ row.gameAccount? row.gameAccount : '--' }}
|
||||
</template>
|
||||
|
@ -132,7 +132,6 @@
|
|||
{{ row.platformName? row.platformName : '--' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" prop="exchangeMoney" min-width="110px">
|
||||
<template #header>
|
||||
{{ t('转账金额') }}
|
||||
|
@ -279,6 +278,7 @@
|
|||
import IconTips from '@/components/IconTips'
|
||||
import { parseTime } from '@/utils/ruoyi'; // 时间格式化
|
||||
import { nextTick, onMounted } from "vue";
|
||||
import auth from '@/plugins/auth'
|
||||
import { get } from "@vueuse/core";
|
||||
const router = useRouter();
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
@ -552,7 +552,9 @@ const loadMore = async () => {
|
|||
//初始化
|
||||
onMounted(() => {
|
||||
getList();
|
||||
loadOptions('');
|
||||
if (auth.hasPermi('super:tenant:list') == true){
|
||||
loadOptions('');
|
||||
}
|
||||
getsuperCommonCurrencySelect();
|
||||
getSuperCommonOperationTypes();
|
||||
getsuperCommonPlatformTypeSelect();
|
||||
|
|
|
@ -0,0 +1,284 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="订单编号" prop="orderId">
|
||||
<el-input
|
||||
v-model="queryParams.orderId"
|
||||
placeholder="请输入订单编号"
|
||||
clearable
|
||||
style="width: 240px;"
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="交易ID" prop="transactionId">
|
||||
<el-input
|
||||
v-model="queryParams.transactionId"
|
||||
placeholder="请输入交易ID"
|
||||
clearable
|
||||
style="width: 240px;"
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="操作时间" style="width: 308px">
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table ref="operlogRef" v-loading="loading" :data="operlogList">
|
||||
<el-table-column label="订单编号" align="center" prop="orderId" min-width="150"/>
|
||||
<el-table-column label="交易ID" align="center" prop="transactionId" min-width="150"/>
|
||||
<el-table-column label="兑换货币" align="center" prop="exchangeMoney" min-width="200">
|
||||
<template #default="{row}">
|
||||
<el-popover :width="260" trigger="hover">
|
||||
{{ row.exchangeMoney }}
|
||||
<template #reference>
|
||||
<div class="two-line-clamp">{{ row.exchangeMoney }}</div>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="org请求" align="center" prop="orgRequest" min-width="200">
|
||||
<template #default="{row}">
|
||||
<el-popover :width="260" trigger="hover">
|
||||
{{ row.orgRequest }}
|
||||
<template #reference>
|
||||
<div class="two-line-clamp">{{ row.orgRequest }}</div>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="请求参数" align="center" prop="request" min-width="200">
|
||||
<template #default="{row}">
|
||||
<el-popover :width="260" trigger="hover">
|
||||
{{ row.request }}
|
||||
<template #reference>
|
||||
<div class="two-line-clamp">{{ row.request }}</div>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="返回参数" align="center" min-width="200" prop="response" >
|
||||
<template #default="{row}">
|
||||
<el-popover :width="260" trigger="hover">
|
||||
{{ row.response }}
|
||||
<template #reference>
|
||||
<div class="two-line-clamp">{{ row.response }}</div>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="交换类型" align="center" prop="exchangeType">
|
||||
<template #default="{row}">
|
||||
<span v-if="row.exchangeType == 1">{{ t('转出') }}</span>
|
||||
<span v-if="row.exchangeType == 2">{{ t('转入') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" align="center" prop="operTime" width="180" sortable="custom" :sort-orders="['descending', 'ascending']">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" icon="View" @click="handleView(scope.row, scope.index)" v-hasPermi="['monitor:operlog:query']">详细</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 用户转账日志详细 -->
|
||||
<el-dialog title="用户转账日志详细" align-center v-model="open" width="800px" append-to-body>
|
||||
<el-scrollbar max-height="700px">
|
||||
<el-form :model="form" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="订单编号:">{{ form.orderId }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item
|
||||
label="交易ID:"
|
||||
>{{ form.transactionId }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="交换类型:">
|
||||
<span v-if="form.exchangeType == 1">{{ t('转出') }}</span>
|
||||
<span v-if="form.exchangeType == 2">{{ t('转入') }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="创建时间">{{ parseTime(form.createTime) }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="兑换货币:">
|
||||
<div style="width: 100%;">
|
||||
{{ form.exchangeMoney }}
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="org请求:">
|
||||
<div style="width: 100%;">
|
||||
{{ form.orgRequest }}
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="请求参数:">
|
||||
<div style="width: 100%;">
|
||||
{{ form.request }}
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-scrollbar>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="open = false">关 闭</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="Operlog">
|
||||
import { superTransferList, delOperlog, cleanOperlog } from "@/api/monitor/operlog";
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { sys_oper_type, sys_common_status } = proxy.useDict("sys_oper_type","sys_common_status");
|
||||
|
||||
const operlogList = ref([]);
|
||||
const open = ref(false);
|
||||
const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
const title = ref("");
|
||||
const dateRange = ref([]);
|
||||
const defaultSort = ref({ prop: "operTime", order: "descending" });
|
||||
|
||||
const data = reactive({
|
||||
form: {},
|
||||
queryParams: {
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form } = toRefs(data);
|
||||
|
||||
/** 查询登录日志 */
|
||||
function getList() {
|
||||
loading.value = true;
|
||||
superTransferList(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => {
|
||||
operlogList.value = response.rows;
|
||||
total.value = response.total;
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
|
||||
/** 操作日志类型字典翻译 */
|
||||
function typeFormat(row, column) {
|
||||
return proxy.selectDictLabel(sys_oper_type.value, row.businessType);
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
function handleQuery() {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
function resetQuery() {
|
||||
dateRange.value = [];
|
||||
proxy.resetForm("queryRef");
|
||||
queryParams.value.pageNum = 1;
|
||||
proxy.$refs["operlogRef"].sort(defaultSort.value.prop, defaultSort.value.order);
|
||||
handleQuery();
|
||||
}
|
||||
|
||||
/** 多选框选中数据 */
|
||||
function handleSelectionChange(selection) {
|
||||
ids.value = selection.map(item => item.operId);
|
||||
multiple.value = !selection.length;
|
||||
}
|
||||
|
||||
/** 排序触发事件 */
|
||||
function handleSortChange(column, prop, order) {
|
||||
queryParams.value.orderByColumn = column.prop;
|
||||
queryParams.value.isAsc = column.order;
|
||||
getList();
|
||||
}
|
||||
|
||||
/** 详细按钮操作 */
|
||||
function handleView(row) {
|
||||
open.value = true;
|
||||
form.value = row;
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(row) {
|
||||
const operIds = row.operId || ids.value;
|
||||
proxy.$modal.confirm('是否确认删除日志编号为"' + operIds + '"的数据项?').then(function () {
|
||||
return delOperlog(operIds);
|
||||
}).then(() => {
|
||||
getList();
|
||||
proxy.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
}
|
||||
|
||||
/** 清空按钮操作 */
|
||||
function handleClean() {
|
||||
proxy.$modal.confirm("是否确认清空所有操作日志数据项?").then(function () {
|
||||
return cleanOperlog();
|
||||
}).then(() => {
|
||||
getList();
|
||||
proxy.$modal.msgSuccess("清空成功");
|
||||
}).catch(() => {});
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
function handleExport() {
|
||||
proxy.download("monitor/operlog/export",{
|
||||
...queryParams.value,
|
||||
}, `config_${new Date().getTime()}.xlsx`);
|
||||
}
|
||||
|
||||
getList();
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.two-line-clamp {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
flex-wrap: nowrap;
|
||||
line-height: 23px;
|
||||
|
||||
}
|
||||
</style>
|
|
@ -11,7 +11,10 @@
|
|||
<template #default="scope">{{ parseTime(scope.row.createTime) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('更新时间')" align="center" prop="updateTime" :show-overflow-tooltip="true">
|
||||
<template #default="scope">{{ parseTime(scope.row.updateTime) }}</template>
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.updateTime">{{ parseTime(scope.row.updateTime) }}</span>
|
||||
<span v-else>--</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('操作')" align="center">
|
||||
<template #default="scope">
|
||||
|
@ -58,7 +61,7 @@
|
|||
<el-form-item :label="t('创建时间')" prop="createTime">
|
||||
<el-input v-model="form.createTime" disabled :placeholder="t('请输入创建时间')" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('更新时间')" prop="updateTime">
|
||||
<el-form-item :label="t('更新时间')" v-if="form.updateTime" prop="updateTime">
|
||||
<el-input v-model="form.updateTime" disabled :placeholder="t('请输入更新时间')" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
|
|
@ -180,7 +180,7 @@
|
|||
<div style="margin-bottom: 10px;display: flex;justify-content: space-between;" v-if="rowOpenRevise.id != ''">
|
||||
<div>{{ t('禁用币种') }}</div>
|
||||
<div>
|
||||
<CustomSelect v-model="currencyCodes" :options="currencyCodesOptions" filterable placeholder="请选择币种" style="width: 200px;margin-right: 10px;" />
|
||||
<CheckboxSelect v-model="currencyCodes" collapse-tags collapse-tags-tooltip :options="currencyCodesOptions" filterable placeholder="请选择币种" style="width: 200px;margin-right: 10px;" />
|
||||
<el-button type="primary" @click="addCurrency">{{ t('新增') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -234,6 +234,7 @@
|
|||
import { parseTime } from '@/utils/ruoyi'; // 时间格式化
|
||||
import NumberInput from '@/components/NumberInput'
|
||||
import CustomSelect from '@/components/CustomSelect'
|
||||
import CheckboxSelect from '@/components/CheckboxSelect'
|
||||
import BaseSwitch from '@/components/BaseSwitch'
|
||||
import SelectInputForm from '@/components/SelectInputForm';
|
||||
import { id } from "element-plus/es/locales.mjs";
|
||||
|
@ -246,7 +247,7 @@ import { nextTick, ref } from "vue";
|
|||
currencyCodesOptions.value = resData.map(item => {
|
||||
return { label:`${item.currencyName}(${item.currencyCode})`, value: item.currencyCode }
|
||||
})
|
||||
const currencyCodes = ref('VND');
|
||||
const currencyCodes = ref(['VND']);
|
||||
const loadingButton = ref(false);
|
||||
const agentList = ref([]);
|
||||
const open = ref(false);
|
||||
|
@ -404,27 +405,28 @@ const handleDelete = (row) => {
|
|||
rowOpenRevise.gameCurrencies.splice(index, 1)
|
||||
}
|
||||
}
|
||||
//添加
|
||||
// 添加
|
||||
const addCurrency = () => {
|
||||
// 判断当前 gameId
|
||||
const gameId = rowOpenRevise.gameId
|
||||
|
||||
// 构造一条新记录
|
||||
const newItem = {
|
||||
gameId,
|
||||
currencyCode: currencyCodes.value
|
||||
}
|
||||
// 遍历 currencyCodes 数组
|
||||
currencyCodes.value.forEach(code => {
|
||||
const newItem = {
|
||||
gameId,
|
||||
currencyCode: code
|
||||
}
|
||||
|
||||
// 先检查是否已存在相同 gameId + currencyCode,避免重复
|
||||
const exists = rowOpenRevise.gameCurrencies.some(
|
||||
item => item.gameId == gameId && item.currencyCode == currencyCodes.value
|
||||
)
|
||||
// 检查是否已存在
|
||||
const exists = rowOpenRevise.gameCurrencies.some(
|
||||
item => item.gameId == gameId && item.currencyCode == code
|
||||
)
|
||||
|
||||
if (!exists) {
|
||||
rowOpenRevise.gameCurrencies.push(newItem)
|
||||
} else {
|
||||
proxy.$modal.msgSuccess(proxy.t('已存在相同的币种记录'));
|
||||
}
|
||||
if (!exists) {
|
||||
rowOpenRevise.gameCurrencies.push(newItem)
|
||||
} else {
|
||||
proxy.$modal.msgSuccess(proxy.t(`币种 ${code} 已存在`))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 列表开关事件
|
||||
|
@ -533,7 +535,7 @@ const switchBeforeChange = () => {
|
|||
const handleOpenRevise = (row) => {
|
||||
Object.assign(rowOpenRevise, row);
|
||||
openRevise.value = true;
|
||||
currencyCodes.value = 'VND';
|
||||
currencyCodes.value = ['VND'];
|
||||
oldForm.value = JSON.stringify(rowOpenRevise);
|
||||
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@
|
|||
</span>
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label-width="150" label-align="right" :label="t('币种')">
|
||||
<el-descriptions-item label-width="150" label-align="right" :label="t('支持的币种')">
|
||||
<div style="width: 100%;display: flex;flex-wrap: wrap;">
|
||||
<span v-for="(item,index) in Object.keys(formInterface.currencyInfo)">
|
||||
{{ item }}<span v-if="index != Object.keys(formInterface.currencyInfo).length - 1">,</span>
|
||||
|
|
|
@ -31,8 +31,7 @@
|
|||
<template #default="{ row }">
|
||||
<div v-if="row.sysUsers.length > 0">
|
||||
<span v-for="(item, index) in row.sysUsers.slice(0, 5)" :key="item.userId" @click="handleUserListClick(row)" style="color: rgb(64, 158, 255);cursor: pointer;">
|
||||
{{ item.userName }}
|
||||
<span v-if="index < Math.min(5, row.sysUsers.length) - 1">,</span>
|
||||
{{ item.userName }}<span v-if="index < Math.min(5, row.sysUsers.length) - 1">,</span>
|
||||
</span>
|
||||
<span v-if="row.sysUsers.length > 5"> ...</span>
|
||||
</div>
|
||||
|
@ -387,6 +386,8 @@ function getList() {
|
|||
roleList.value = response.rows;
|
||||
total.value = response.total;
|
||||
loading.value = false;
|
||||
}).catch(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
</template>
|
||||
<el-form :model="formGoogle" :rules="rulesGoogle" ref="googleRef" label-width="130px">
|
||||
<el-form-item label="Google验证码" prop="googleCode">
|
||||
<el-input v-model="formGoogle.googleCode" placeholder="请输入您的Google验证码" maxlength="6" />
|
||||
<CodeInput v-model="formGoogle.googleCode" placeholder="请输入您的Google验证码" maxlength="6" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
|
@ -22,6 +22,7 @@
|
|||
</template>
|
||||
<script setup>
|
||||
import { nextTick, ref } from "vue";
|
||||
import CodeInput from "@/components/CodeInput";
|
||||
const { proxy } = getCurrentInstance()
|
||||
const emits = defineEmits(['submit', 'update:show']) // 自定义事件
|
||||
const props = defineProps({ // 父组件向子组件传值
|
||||
|
|
|
@ -24,25 +24,25 @@ export default defineConfig(({ mode, command }) => {
|
|||
port: 80,
|
||||
host: true,
|
||||
open: true,
|
||||
// proxy: {
|
||||
// '/dev-api': {
|
||||
// target: 'http://192.168.50.234:9080',
|
||||
// // target: 'http://192.168.50.11:9080',
|
||||
// // target: 'http://192.168.50.178:8080',
|
||||
// // target: 'http://192.168.50.99:8080',
|
||||
// changeOrigin: true,
|
||||
// rewrite: (p) => p.replace(/^\/dev-api/, '')
|
||||
// }
|
||||
// },
|
||||
proxy: {
|
||||
'/dev-api': {
|
||||
target: 'http://192.168.50.233:9080',
|
||||
// target: 'http://192.168.50.11:9080',
|
||||
// target: 'http://192.168.50.178:8080',
|
||||
// target: 'http://192.168.50.99:8080',
|
||||
changeOrigin: true,
|
||||
rewrite: (p) => p.replace(/^\/dev-api/, '')
|
||||
'/ff-api': {
|
||||
target: 'https://apiadmin.tt-gaming.com', // 线上接口地址
|
||||
changeOrigin: true, // 是否允许跨域
|
||||
pathRewrite: {
|
||||
'^/ff-api': '' // 如果你需要去掉前缀,例如将 /api/xxx 替换为 /xxx
|
||||
}
|
||||
}
|
||||
},
|
||||
// proxy: {
|
||||
// '/ff-api': {
|
||||
// target: 'https://apiadmin.tt-gaming.com', // 线上接口地址
|
||||
// changeOrigin: true, // 是否允许跨域
|
||||
// pathRewrite: {
|
||||
// '^/ff-api': '' // 如果你需要去掉前缀,例如将 /api/xxx 替换为 /xxx
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
},
|
||||
css: {
|
||||
postcss: {
|
||||
|
|
Loading…
Reference in New Issue