2025-08-14 10:33:48 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<div class="app-container">
|
|
|
|
|
|
<table-search-card :model="queryParams" @getList="getList" @handleQuery="handleQuery" @resetQuery="resetQuery">
|
|
|
|
|
|
<template #left>
|
|
|
|
|
|
<el-form-item :label="t('商户账号')" prop="tenantKey">
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
v-model="queryParams.tenantKey"
|
|
|
|
|
|
:placeholder="t('请输入商户账号')"
|
|
|
|
|
|
clearable
|
|
|
|
|
|
style="width: 200px"
|
|
|
|
|
|
@keyup.enter="handleQuery"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item :label="t('状态')" prop="tenantStatus">
|
|
|
|
|
|
<CustomSelect v-model="queryParams.tenantStatus" :options="tenantStatusArr" placeholder="请选择状态" style="width: 200px" />
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<template #right>
|
|
|
|
|
|
<el-form-item>
|
|
|
|
|
|
<el-button type="primary" icon="Plus" @click="handleAdd" v-hasPermi="['super:tenant:create']">{{ t('新增商户') }}</el-button>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</table-search-card>
|
|
|
|
|
|
<el-table v-loading="loading" :data="agentList" class="c-table-main" border>
|
|
|
|
|
|
<!-- <el-table-column type="selection" width="55" align="center" /> -->
|
2025-09-01 08:59:56 +08:00
|
|
|
|
<el-table-column :label="t('商户标识')" min-width="100" align="center" prop="tenantSn" >
|
2025-08-14 10:33:48 +08:00
|
|
|
|
<template #default="{row}">
|
|
|
|
|
|
{{ row.tenantSn }}<br/>
|
|
|
|
|
|
<span v-if="row.agentAccount">{{ t('代理') }}: {{ row.agentAccount }}</span>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
2025-09-01 08:59:56 +08:00
|
|
|
|
<el-table-column :label="t('商户账号')" align="center" prop="tenantKey" min-width="170px" >
|
2025-08-29 09:26:00 +08:00
|
|
|
|
<template #default="{row}">
|
|
|
|
|
|
<div style="width: 100%;text-align: left;">{{ t('账号') }}: {{ row.tenantKey }}</div>
|
|
|
|
|
|
<div style="width: 100%;text-align: left;">{{ t('谷歌') }}:
|
|
|
|
|
|
<span v-if="row.googleCode == null || row.googleCode == ''" style="color: #909399;">{{ t('未绑定') }}</span>
|
|
|
|
|
|
<span v-else style="color: #1ab394;">{{ t('已绑定') }} <el-button link type="primary" @click="handleUnbindGoogle(row)" v-hasPermi="['super:tenant:resetGoogleCode']">{{ t('解除') }}</el-button></span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
|
2025-09-01 08:59:56 +08:00
|
|
|
|
<el-table-column :label="t('余额')" min-width="160" align="center" >
|
2025-08-14 10:33:48 +08:00
|
|
|
|
<template #default="{row}">
|
2025-09-01 08:59:56 +08:00
|
|
|
|
<div style="display: flex;justify-content: space-between;">
|
|
|
|
|
|
<div>
|
|
|
|
|
|
{{ getcurrencySign(row.currencyCode) }} {{ (row.realBalance ?? 0) + (row.creditBalance ?? 0) }}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<el-button link type="primary" @click="handleAdjustment(row)" v-hasPermi="['super:tenant:quota:update']">{{ t('调额') }}</el-button>
|
|
|
|
|
|
</div>
|
2025-08-14 10:33:48 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
<!-- <el-table-column :label="t('商户Api平台配置')" width="100" align="center" >
|
|
|
|
|
|
<template #default="{row}">
|
|
|
|
|
|
<el-button link type="primary" @click="handleView(scope.row)" v-hasPermi="['agent:tenant:view']">{{ t('配置') }}</el-button>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column> -->
|
2025-09-01 08:59:56 +08:00
|
|
|
|
<el-table-column :label="t('注册时间')" align="center" prop="createTime" min-width="120">
|
2025-08-14 10:33:48 +08:00
|
|
|
|
<template #default="scope">{{ parseTime(scope.row.createTime)|| '--' }}</template>
|
|
|
|
|
|
|
|
|
|
|
|
</el-table-column>
|
2025-09-01 08:59:56 +08:00
|
|
|
|
<el-table-column :label="t('最后登录时间')" align="center" prop="loginData" min-width="120">
|
2025-08-14 10:33:48 +08:00
|
|
|
|
<template #default="scope">{{ parseTime(scope.row.loginData) || '--' }}</template>
|
|
|
|
|
|
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
<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"
|
|
|
|
|
|
:before-change="() => beforeSwitchChange(row, 'tenantStatus')" v-hasPermi="['super:tenant:switch']" />
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
2025-09-01 08:59:56 +08:00
|
|
|
|
<el-table-column :label="t('商户平台费率')" min-width="130" align="center">
|
|
|
|
|
|
<template #default="{row}">
|
|
|
|
|
|
<el-button type="primary" plain @click="handleView(row)">{{ t('商户平台费率') }}</el-button>
|
|
|
|
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
2025-08-14 10:33:48 +08:00
|
|
|
|
<el-table-column :label="t('操作')" align="center" width="260" class-name="small-padding fixed-width">
|
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
|
<el-popconfirm
|
|
|
|
|
|
class="box-item"
|
|
|
|
|
|
:title="t('确定重置该商户密码?')"
|
|
|
|
|
|
placement="top"
|
|
|
|
|
|
@confirm="resetPassword(scope.row)"
|
|
|
|
|
|
>
|
|
|
|
|
|
<template #reference>
|
|
|
|
|
|
<!-- @click="resetPassword(scope.row)" -->
|
|
|
|
|
|
<el-button link type="primary" v-hasPermi="['super:tenant:resetPwd']">{{ t('重置密码') }}</el-button>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-popconfirm>
|
|
|
|
|
|
|
|
|
|
|
|
<el-button link type="primary" @click="handleConnection(scope.row)" v-hasPermi="['super:tenant:list']">{{ t('对接信息') }}</el-button>
|
|
|
|
|
|
<el-button link type="primary" @click="edit(scope.row)" v-hasPermi="['super:tenant:detail']">{{ t('编辑') }}</el-button>
|
|
|
|
|
|
<el-button link type="primary" @click="whitelist(scope.row)" v-hasPermi="['super:white:list']">{{ t('白名单') }}</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"
|
|
|
|
|
|
/>
|
2025-09-01 08:59:56 +08:00
|
|
|
|
<!-- 商户平台费率 -->
|
|
|
|
|
|
<el-dialog v-if="openView" :title="t('商户平台费率')" v-model="openView" align-center width="820px" append-to-body>
|
|
|
|
|
|
<el-descriptions :column="2" border>
|
|
|
|
|
|
<el-descriptions-item label="商户标识">{{form.tenantSn}}</el-descriptions-item>
|
|
|
|
|
|
<el-descriptions-item label="商户账号">{{form.tenantKey}}</el-descriptions-item>
|
|
|
|
|
|
</el-descriptions>
|
|
|
|
|
|
<div style="height: 30px;"></div>
|
|
|
|
|
|
<el-form :model="form" ref="openViewRef" :rules="rules" label-width="120px">
|
|
|
|
|
|
<div class="label-scoreRatio">
|
|
|
|
|
|
<span>{{ t('平台比例') }}</span>
|
|
|
|
|
|
<div>
|
|
|
|
|
|
<el-button type="danger" @click="queryCode('del')" :disabled="!form.tenantSystemPlatforms.length">-0.5</el-button>
|
|
|
|
|
|
<el-button type="primary" @click="queryCode('add')" :disabled="!form.tenantSystemPlatforms.length">+0.5</el-button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div style="display: flex;margin-left: 120px;justify-content: space-between;margin-bottom: 10px;">
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
v-model="searchPlatformCode"
|
|
|
|
|
|
style="width: 100%"
|
|
|
|
|
|
:placeholder="t('请输入游戏平台')"
|
|
|
|
|
|
:suffix-icon="Search"
|
|
|
|
|
|
@input="searchSystemPlatforms"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<el-table :data="form.tenantSystemPlatforms" height="500" width="700px" class="scoreRatioTable">
|
2025-08-14 10:33:48 +08:00
|
|
|
|
<el-table-column :label="t('平台')" align="center" prop="platformCode" />
|
|
|
|
|
|
<el-table-column :label="t('币种')" align="center" prop="currencyCode" />
|
2025-09-01 08:59:56 +08:00
|
|
|
|
<el-table-column :label="t('成本比例(%)')" align="center" min-width="120" prop="cost">
|
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
|
{{ scope.row.cost }}%
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
<el-table-column :label="t('商户通用比例(%)')" align="center" min-width="130" prop="useCost">
|
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
|
<div style="display: flex;align-items: center;">
|
|
|
|
|
|
<el-input v-model="scope.row.useCost" @input="handleInput(scope.row)"
|
|
|
|
|
|
@blur="handleBlur(scope.row)" :placeholder="t('请输入')" >
|
|
|
|
|
|
<template #append>%</template>
|
|
|
|
|
|
</el-input>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
<el-table-column prop="maxAmount" label="带入金额" min-width="180">
|
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
|
<div style="display:flex;align-items: center;"><NumberInput v-model="scope.row.minAmount" @input="handleInput1(scope.row)"></NumberInput> ~ <NumberInput v-model="scope.row.maxAmount" @input="handleInput2(scope.row)"></NumberInput></div>
|
|
|
|
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
2025-08-14 10:33:48 +08:00
|
|
|
|
</el-table>
|
|
|
|
|
|
</el-form>
|
|
|
|
|
|
<template #footer>
|
2025-09-01 08:59:56 +08:00
|
|
|
|
<div class="dialog-footer">
|
|
|
|
|
|
<el-button type="primary" @click="submitForm" :loading="loadingButton" v-hasPermi="['super:tenant:edit']">{{ t('确 定') }}</el-button>
|
|
|
|
|
|
<el-button @click="closeDialog">{{ t('取 消') }}</el-button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
2025-08-14 10:33:48 +08:00
|
|
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
|
|
<el-dialog :title="t('对接信息')" align-center v-model="openReset" width="620px" append-to-body>
|
|
|
|
|
|
<template #header>
|
|
|
|
|
|
<div class="dialog-header">
|
|
|
|
|
|
<div class="dialog-title" style="width: 100%;text-align: center;">{{ openResetTiele }}</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<el-descriptions border :column="1" class="c-descriptions" >
|
|
|
|
|
|
<el-descriptions-item label-width="150" label-align="right" :label="t('商户后台')">
|
|
|
|
|
|
<div style="width: 300px;">{{ yueURL }} <CopyIcon :colors="'#409EFF'" v-if="yueURL" :text="String(yueURL)"></CopyIcon></div>
|
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
|
<el-descriptions-item label-width="150" label-align="right" :label="t('登录账号')">
|
|
|
|
|
|
<div style="width: 300px;">{{ ConnectionArr.tenantKey }}<CopyIcon :colors="'#409EFF'" v-if="ConnectionArr.tenantKey" :text="String(ConnectionArr.tenantKey)"></CopyIcon></div>
|
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
|
<el-descriptions-item label-width="150" label-align="right" :label="t('初始密码')">
|
|
|
|
|
|
<div style="width: 300px;"> {{ ConnectionArr.originalPassword }}<CopyIcon :colors="'#409EFF'" v-if="ConnectionArr.originalPassword" :text="String(ConnectionArr.originalPassword)"></CopyIcon></div>
|
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
|
<el-descriptions-item label-width="150" label-align="right" :label="t('系统说明')">
|
|
|
|
|
|
{{ t('为了账户安全,登录成功后请先修改密码,绑定谷歌验证码。') }}
|
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
|
<el-descriptions-item label-width="150" label-align="right" :label="t('商户KEY')">
|
|
|
|
|
|
<div style="width: 300px;">{{ ConnectionArr.tenantKey }}<CopyIcon :colors="'#409EFF'" v-if="ConnectionArr.tenantKey" :text="String(ConnectionArr.tenantKey)"></CopyIcon></div>
|
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
|
<el-descriptions-item label-width="150" label-align="right" :label="t('商户密钥')">
|
|
|
|
|
|
<div style="width: 300px;">{{ ConnectionArr.tenantSecret }}<CopyIcon :colors="'#409EFF'" v-if="ConnectionArr.tenantSecret" :text="String(ConnectionArr.tenantSecret)"></CopyIcon></div>
|
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
|
<el-descriptions-item label-width="150" label-align="right" :label="t('api请求地址')">
|
|
|
|
|
|
<div style="width: 300px;">{{ ConnectionArr.tenantApiUrl }}<CopyIcon :colors="'#409EFF'" v-if="ConnectionArr.tenantApiUrl" :text="String(ConnectionArr.tenantApiUrl)"></CopyIcon></div>
|
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
|
<el-descriptions-item label-width="150" label-align="right" :label="t('对接文档')">
|
|
|
|
|
|
<div style="width: 300px;"> {{ ConnectionArr.documentUrl }}<CopyIcon :colors="'#409EFF'" v-if="ConnectionArr.documentUrl" :text="String(ConnectionArr.documentUrl)"></CopyIcon></div>
|
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
|
<el-descriptions-item label-width="150" label-align="right" :label="t('文档密码')">
|
|
|
|
|
|
<div style="width: 300px;"> {{ ConnectionArr.documentPass }}<CopyIcon :colors="'#409EFF'" v-if="ConnectionArr.documentPass" :text="String(ConnectionArr.documentPass)"></CopyIcon></div>
|
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
|
|
|
|
|
|
|
</el-descriptions>
|
|
|
|
|
|
<div style="padding-left: 10px;margin-top: 10px;">
|
|
|
|
|
|
<el-button link type="primary" @click="copyAccountInfo(ConnectionArr)">{{ t('点我复制') }}</el-button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<template #footer>
|
|
|
|
|
|
<div class="dialog-footer" style="width: 100%;text-align: center;">
|
|
|
|
|
|
<el-button type="primary" v-if="openResetTiele == '账号信息'" @click="cancel">{{ t('知道了') }}</el-button>
|
|
|
|
|
|
<el-button @click="cancel" v-if="openResetTiele == '对接信息'">{{ t('关 闭') }}</el-button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
<add-merchants-dialog v-if="openShowDialog" :addEditStatus="addEditStatus" :modifyDate="modifyDate" @submit="submitOn"
|
|
|
|
|
|
v-model:show="openShowDialog"></add-merchants-dialog>
|
|
|
|
|
|
<adjustment-dialog v-if="openAdjustment" :addEditStatus="addEditStatus" :modifyDate="modifyDate" @submit="getList"
|
|
|
|
|
|
v-model:show="openAdjustment"></adjustment-dialog>
|
|
|
|
|
|
<whitelist-dialog v-if="whitelistShow" :addEditStatus="addEditStatus" :modifyDate="modifyDate" @submit="getList"
|
|
|
|
|
|
v-model:show="whitelistShow"></whitelist-dialog>
|
|
|
|
|
|
<renew-dialog v-if="renewShow" v-model:show="renewShow" :addEditStatus="addEditStatus" :modifyDate="modifyDate" @submit="submitOn"></renew-dialog>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup name="Agent">
|
2025-09-01 08:59:56 +08:00
|
|
|
|
import { superTenantList, updateSuperTenantEdit,updateSuperTenantResetPwd,updateSuperResetGoogleCode,getSuperTenant,superTenantQuotaList,updateSuperTenantQuotaUpdate,updateSuperTenantSwitch } from "@/api/super/tenant.js";
|
2025-08-14 10:33:48 +08:00
|
|
|
|
import { superPlatformSystem } from "@/api/agent";
|
2025-09-01 08:59:56 +08:00
|
|
|
|
import { getPlatformShowSelect } from "@/api/super/platform.js";
|
2025-08-14 10:33:48 +08:00
|
|
|
|
import { getLocalStorage } from "@/utils/auth";
|
|
|
|
|
|
import AddMerchantsDialog from './components/AddMerchantsDialog'
|
|
|
|
|
|
import AdjustmentDialog from './components/AdjustmentDialog';
|
|
|
|
|
|
import WhitelistDialog from './components/WhitelistDialog';
|
|
|
|
|
|
import RenewDialog from './components/RenewDialog';
|
|
|
|
|
|
import BaseSwitch from '@/components/BaseSwitch'
|
|
|
|
|
|
import CustomSelect from '@/components/CustomSelect'
|
|
|
|
|
|
import CopyIcon from '@/components/CopyIcon'
|
2025-09-01 08:59:56 +08:00
|
|
|
|
import NumberInput from '@/components/NumberInput';
|
2025-08-14 10:33:48 +08:00
|
|
|
|
import Crontab from '@/components/Crontab'
|
2025-09-01 08:59:56 +08:00
|
|
|
|
import { Search } from '@element-plus/icons-vue'
|
2025-08-14 10:33:48 +08:00
|
|
|
|
import { parseTime } from '@/utils/ruoyi'; // 时间格式化
|
2025-09-01 08:59:56 +08:00
|
|
|
|
import { get } from "@vueuse/core";
|
2025-08-14 10:33:48 +08:00
|
|
|
|
const router = useRouter();
|
|
|
|
|
|
const { proxy } = getCurrentInstance();
|
|
|
|
|
|
const { ff_tenant_type, ff_tenant_status } = proxy.useDict("ff_tenant_type", "ff_tenant_status");
|
|
|
|
|
|
|
|
|
|
|
|
const agentList = ref([]);
|
|
|
|
|
|
const openShowDialog = ref(false),addEditStatus = ref('add'),modifyDate = ref({});
|
|
|
|
|
|
const loading = ref(true);
|
|
|
|
|
|
const ids = ref([]);
|
|
|
|
|
|
const single = ref(true);
|
|
|
|
|
|
const multiple = ref(true);
|
|
|
|
|
|
const total = ref(0);
|
|
|
|
|
|
const title = ref("");
|
|
|
|
|
|
const openView = ref(false);
|
|
|
|
|
|
const tenantSystemPlatforms = ref([]);
|
|
|
|
|
|
const realBalance = ref([]);
|
|
|
|
|
|
const openResetTiele = ref("");
|
2025-09-01 08:59:56 +08:00
|
|
|
|
const loadingButton = ref(false);
|
|
|
|
|
|
const oldForm = shallowRef({ });
|
2025-08-14 10:33:48 +08:00
|
|
|
|
const tenantStatusArr = ref([
|
|
|
|
|
|
{ label: '正常', value: '1' },
|
|
|
|
|
|
{ label: '停用', value: '0' },
|
|
|
|
|
|
]);
|
2025-09-01 08:59:56 +08:00
|
|
|
|
const currencySelectArr = ref([]);
|
|
|
|
|
|
const PlatformRatioAll = ref([]);
|
|
|
|
|
|
let res = getLocalStorage('currencySelect');
|
|
|
|
|
|
currencySelectArr.value = res.map(item => {
|
|
|
|
|
|
return { label:`${item.currencyName}(${item.currencyCode})`, value: item.currencyCode }
|
|
|
|
|
|
})
|
2025-08-14 10:33:48 +08:00
|
|
|
|
const data = reactive({
|
|
|
|
|
|
form: {
|
|
|
|
|
|
proportion:0,
|
|
|
|
|
|
},
|
|
|
|
|
|
queryParams: {
|
|
|
|
|
|
pageNum: 1,
|
|
|
|
|
|
pageSize: 10,
|
|
|
|
|
|
tenantKey: "",
|
|
|
|
|
|
},
|
|
|
|
|
|
rules: {
|
|
|
|
|
|
account: [{ required: true, message: proxy.t('商户账号不能为空'), trigger: "blur" }],
|
|
|
|
|
|
password: [{ required: true, message: proxy.t('密码不能为空'), trigger: "blur" }],
|
|
|
|
|
|
scoreRatio: [{ required: true, message: proxy.t('买分比例不能为空'), trigger: "blur" }],
|
|
|
|
|
|
tenantType: [{ required: true, message: proxy.t('商户模式不能为空'), trigger: "change" }],
|
|
|
|
|
|
realBalanceNum: [{ required: true, message: proxy.t('信誉额度不能为空'), trigger: "change" }],
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
const { queryParams, form, rules } = toRefs(data);
|
|
|
|
|
|
const yueURL = ref(window.location.origin);
|
|
|
|
|
|
const rulesReset = reactive({
|
|
|
|
|
|
pwd: [{ required: true, message: proxy.t('密码不能为空'), trigger: "change" }],
|
|
|
|
|
|
});
|
|
|
|
|
|
const formReset = reactive({
|
|
|
|
|
|
pwd: "",
|
|
|
|
|
|
});
|
|
|
|
|
|
const openReset = ref(false);
|
|
|
|
|
|
/** 查询列表 */
|
|
|
|
|
|
function getList() {
|
|
|
|
|
|
loading.value = true;
|
|
|
|
|
|
superTenantList(queryParams.value).then(response => {
|
|
|
|
|
|
agentList.value = response.rows;
|
|
|
|
|
|
total.value = response.total;
|
|
|
|
|
|
loading.value = false;
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
// 列表开关事件
|
|
|
|
|
|
const beforeSwitchChange = async (row, undateKeys) => {
|
|
|
|
|
|
const _status = row[undateKeys] == 1 ? 0 : 1
|
|
|
|
|
|
const _data = {
|
|
|
|
|
|
id: row.id,
|
|
|
|
|
|
}
|
|
|
|
|
|
_data[undateKeys] = _status
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
|
|
await updateSuperTenantSwitch(_data).then(() => {
|
|
|
|
|
|
proxy.$modal.msgSuccess(_status === 1 ? proxy.t('开启成功') : proxy.t('关闭成功'))
|
|
|
|
|
|
getList()
|
|
|
|
|
|
})
|
|
|
|
|
|
return true;
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error(proxy.t('接口调用失败'), error);
|
|
|
|
|
|
return false; // 阻止开关状态改变
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/** 任务组名字典翻译 */
|
|
|
|
|
|
function jobGroupFormat(row, column) {
|
|
|
|
|
|
return proxy.selectDictLabel(sys_job_group.value, row.jobGroup);
|
|
|
|
|
|
}
|
|
|
|
|
|
const submitOn = (row) => {
|
|
|
|
|
|
openReset.value = true;
|
|
|
|
|
|
openResetTiele.value = "对接信息";
|
|
|
|
|
|
ConnectionArr.value = row;
|
|
|
|
|
|
getList();
|
|
|
|
|
|
};
|
|
|
|
|
|
/** 取消按钮 */
|
|
|
|
|
|
function cancel() {
|
|
|
|
|
|
openShowDialog.value = false;
|
|
|
|
|
|
openReset.value = false;
|
|
|
|
|
|
reset();
|
|
|
|
|
|
}
|
2025-09-01 08:59:56 +08:00
|
|
|
|
//
|
|
|
|
|
|
const getcurrencySign = (val) => {
|
|
|
|
|
|
let resData = getLocalStorage('currencySelect');
|
|
|
|
|
|
let currencySelectAlls = resData.map(item => ({
|
|
|
|
|
|
...item,
|
|
|
|
|
|
label: `${item.currencyName}(${item.currencyCode})`,
|
|
|
|
|
|
value: item.currencyCode
|
|
|
|
|
|
}));
|
|
|
|
|
|
let currencySignItem = currencySelectAlls?.find(item => item.value == val);
|
|
|
|
|
|
return currencySignItem?.currencySign
|
|
|
|
|
|
}
|
2025-08-14 10:33:48 +08:00
|
|
|
|
/** 表单重置 */
|
|
|
|
|
|
function reset() {
|
|
|
|
|
|
form.value = {
|
|
|
|
|
|
account: "",
|
|
|
|
|
|
password: "",
|
|
|
|
|
|
scoreRatio: 1,
|
|
|
|
|
|
tenantType: 1,
|
|
|
|
|
|
tenantSystemPlatforms: [],
|
|
|
|
|
|
realBalance: [],
|
|
|
|
|
|
};
|
|
|
|
|
|
proxy.resetForm("agentRef");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/** 搜索按钮操作 */
|
|
|
|
|
|
function handleQuery() {
|
|
|
|
|
|
queryParams.value.pageNum = 1;
|
|
|
|
|
|
getList();
|
|
|
|
|
|
}
|
|
|
|
|
|
const whitelistShow = ref(false);
|
|
|
|
|
|
const whitelist = (row) => {
|
|
|
|
|
|
whitelistShow.value = true;
|
|
|
|
|
|
modifyDate.value = row;
|
|
|
|
|
|
}
|
|
|
|
|
|
const ConnectionArr = ref({});
|
|
|
|
|
|
const handleConnection = (row) => {
|
|
|
|
|
|
openReset.value = true;
|
|
|
|
|
|
openResetTiele.value = "对接信息";
|
|
|
|
|
|
ConnectionArr.value = row;
|
|
|
|
|
|
}
|
2025-08-29 09:26:00 +08:00
|
|
|
|
|
|
|
|
|
|
//解除
|
|
|
|
|
|
const handleUnbindGoogle = (row) => {
|
|
|
|
|
|
proxy.$confirm('确定解除绑定吗?', '提示', {
|
|
|
|
|
|
confirmButtonText: '确定',
|
|
|
|
|
|
cancelButtonText: '取消',
|
|
|
|
|
|
type: 'warning'
|
|
|
|
|
|
}).then(() => {
|
|
|
|
|
|
|
|
|
|
|
|
updateSuperResetGoogleCode({
|
|
|
|
|
|
id: row.id,
|
|
|
|
|
|
}).then(res => {
|
|
|
|
|
|
proxy.$modal.msgSuccess(proxy.t('解除成功'));
|
|
|
|
|
|
getList();
|
|
|
|
|
|
})
|
|
|
|
|
|
}).catch(() => {});
|
|
|
|
|
|
}
|
2025-09-01 08:59:56 +08:00
|
|
|
|
const numbers = ref(0);
|
|
|
|
|
|
function queryCode(type) {
|
|
|
|
|
|
form.value.tenantSystemPlatforms = form.value.tenantSystemPlatforms.map((item, index) => {
|
|
|
|
|
|
if (type === 'del' && item.useCost > item.cost) {
|
|
|
|
|
|
item.useCost = Number(item.useCost);
|
|
|
|
|
|
item.useCost -= 0.5
|
|
|
|
|
|
} else if (type === 'add') {
|
|
|
|
|
|
item.useCost = Number(item.useCost);
|
|
|
|
|
|
item.useCost += 0.5;
|
|
|
|
|
|
}
|
|
|
|
|
|
return item
|
|
|
|
|
|
})
|
|
|
|
|
|
PlatformRatioAll.value = PlatformRatioAll.value.map((item, index) => {
|
|
|
|
|
|
if (type === 'del' && item.useCost > item.cost) {
|
|
|
|
|
|
item.useCost = Number(item.useCost);
|
|
|
|
|
|
item.useCost -= 0.5
|
|
|
|
|
|
} else if (type === 'add') {
|
|
|
|
|
|
item.useCost = Number(item.useCost);
|
|
|
|
|
|
item.useCost += 0.5;
|
|
|
|
|
|
}
|
|
|
|
|
|
return item
|
|
|
|
|
|
})
|
|
|
|
|
|
if (type === 'del' && numbers.value > 0) {
|
|
|
|
|
|
numbers.value= Number(numbers.value);
|
|
|
|
|
|
numbers.value -= 0.5;
|
|
|
|
|
|
} else if (type === 'add') {
|
|
|
|
|
|
numbers.value= Number(numbers.value);
|
|
|
|
|
|
numbers.value += 0.5;
|
|
|
|
|
|
}
|
2025-08-29 09:26:00 +08:00
|
|
|
|
|
2025-09-01 08:59:56 +08:00
|
|
|
|
}
|
2025-08-14 10:33:48 +08:00
|
|
|
|
const handleCopy = async(text) => {
|
|
|
|
|
|
// 支持现代 API:需 HTTPS 或 localhost
|
|
|
|
|
|
if (navigator.clipboard && window.isSecureContext) {
|
|
|
|
|
|
return navigator.clipboard.writeText(text);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// fallback:兼容 HTTP、老浏览器、iframe 等环境
|
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
|
try {
|
|
|
|
|
|
const textarea = document.createElement('textarea');
|
|
|
|
|
|
textarea.value = text;
|
|
|
|
|
|
|
|
|
|
|
|
// 设置样式防跳动
|
|
|
|
|
|
textarea.style.position = 'fixed';
|
|
|
|
|
|
textarea.style.top = '-9999px';
|
|
|
|
|
|
textarea.style.left = '-9999px';
|
|
|
|
|
|
textarea.setAttribute("readonly", true);
|
|
|
|
|
|
document.body.appendChild(textarea);
|
|
|
|
|
|
textarea.select();
|
|
|
|
|
|
|
|
|
|
|
|
const success = document.execCommand("copy");
|
|
|
|
|
|
// copyTextSuccess();
|
|
|
|
|
|
document.body.removeChild(textarea);
|
|
|
|
|
|
|
|
|
|
|
|
success ? resolve() : reject(new Error("execCommand copy failed"));
|
|
|
|
|
|
} catch (err) {
|
|
|
|
|
|
reject(err);
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
const resetPassword = (row) => {
|
|
|
|
|
|
let objItem = {
|
|
|
|
|
|
id: row.id,
|
|
|
|
|
|
}
|
|
|
|
|
|
updateSuperTenantResetPwd(objItem).then(res => {
|
|
|
|
|
|
handleCopy(res.data);
|
|
|
|
|
|
getList();
|
|
|
|
|
|
openResetTiele.value = "账号信息";
|
|
|
|
|
|
openReset.value = true;
|
|
|
|
|
|
ConnectionArr.value ={
|
|
|
|
|
|
...row,
|
|
|
|
|
|
originalPassword:res.data
|
|
|
|
|
|
};
|
|
|
|
|
|
// proxy.$modal.msgSuccess(proxy.t('密码已复制'));
|
|
|
|
|
|
})
|
|
|
|
|
|
// proxy.$prompt('请输入谷歌验证码', "提示", {
|
|
|
|
|
|
// confirmButtonText: "确定",
|
|
|
|
|
|
// cancelButtonText: "取消",
|
|
|
|
|
|
// closeOnClickModal: false,
|
|
|
|
|
|
// inputValidator: (value) => {
|
|
|
|
|
|
// if (!value) {
|
|
|
|
|
|
// return '验证码不能为空';
|
|
|
|
|
|
// }
|
|
|
|
|
|
// return true;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }).then(({ value }) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// }).catch(() => {});
|
|
|
|
|
|
}
|
|
|
|
|
|
/** 重置按钮操作 */
|
|
|
|
|
|
function resetQuery() {
|
|
|
|
|
|
proxy.resetForm("queryRef");
|
|
|
|
|
|
handleQuery();
|
|
|
|
|
|
}
|
|
|
|
|
|
const switchBeforeChange = () => {
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
// 多选框选中数据
|
|
|
|
|
|
function handleSelectionChange(selection) {
|
|
|
|
|
|
ids.value = selection.map(item => item.jobId);
|
|
|
|
|
|
single.value = selection.length != 1;
|
|
|
|
|
|
multiple.value = !selection.length;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-01 08:59:56 +08:00
|
|
|
|
/** 费率 */
|
2025-08-14 10:33:48 +08:00
|
|
|
|
function handleView(row) {
|
2025-09-01 08:59:56 +08:00
|
|
|
|
getSuperTenant(row.id).then(response => {
|
2025-08-14 10:33:48 +08:00
|
|
|
|
openView.value = true;
|
2025-09-01 08:59:56 +08:00
|
|
|
|
let fromItem = {
|
|
|
|
|
|
...row,
|
|
|
|
|
|
...response.data,
|
|
|
|
|
|
curType: response.data.curType,
|
|
|
|
|
|
account: response.data.tenantKey,
|
|
|
|
|
|
tenantType: response.data.tenantType,
|
|
|
|
|
|
googleCodeSwitch: response.data.googleCodeSwitch,
|
|
|
|
|
|
scoreRatio:response.data.scoreRatio,
|
|
|
|
|
|
tenantSystemPlatforms:response.data.tenantPlatforms
|
|
|
|
|
|
};
|
|
|
|
|
|
PlatformRatioAll.value = response.data.tenantPlatforms;
|
|
|
|
|
|
|
|
|
|
|
|
form.value = JSON.parse(JSON.stringify(fromItem));
|
|
|
|
|
|
oldForm.value = JSON.stringify(PlatformRatioAll.value);
|
|
|
|
|
|
})
|
|
|
|
|
|
|
2025-08-14 10:33:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
const openAdjustment = ref(false);
|
|
|
|
|
|
const handleAdjustment = (row) => {
|
2025-09-01 08:59:56 +08:00
|
|
|
|
|
|
|
|
|
|
getSuperTenant(row.id).then(response => {
|
|
|
|
|
|
openAdjustment.value = true;
|
|
|
|
|
|
modifyDate.value = {
|
|
|
|
|
|
...row,
|
|
|
|
|
|
...response.data,
|
|
|
|
|
|
curType: response.data.curType,
|
|
|
|
|
|
account: response.data.tenantKey,
|
|
|
|
|
|
tenantType: response.data.tenantType,
|
|
|
|
|
|
googleCodeSwitch: response.data.googleCodeSwitch,
|
|
|
|
|
|
scoreRatio:response.data.scoreRatio,
|
|
|
|
|
|
tenantSystemPlatforms:row.tenantPlatforms
|
|
|
|
|
|
};
|
|
|
|
|
|
})
|
2025-08-14 10:33:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const handleAdjustmentUpdate = (row) => {
|
|
|
|
|
|
let obj = {
|
|
|
|
|
|
id:row.id,
|
|
|
|
|
|
balance:row.balance,
|
|
|
|
|
|
isOut:true
|
|
|
|
|
|
}
|
|
|
|
|
|
updateSuperTenantQuotaUpdate(obj).then(response => {
|
|
|
|
|
|
proxy.$modal.msgSuccess(proxy.t('重置成功'));
|
|
|
|
|
|
openAdjustment.value = false;
|
|
|
|
|
|
handleAdjustment(row);
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
const renewShow = ref(false);
|
|
|
|
|
|
const edit = (row) => {
|
|
|
|
|
|
reset();
|
|
|
|
|
|
getSelectPlatform();
|
|
|
|
|
|
getSuperCommonCurrencySelect();
|
|
|
|
|
|
getSuperTenant(row.id).then(response => {
|
2025-08-26 11:18:24 +08:00
|
|
|
|
renewShow.value = true;
|
2025-08-14 10:33:48 +08:00
|
|
|
|
title.value = proxy.t('修改商户');
|
|
|
|
|
|
modifyDate.value = {
|
|
|
|
|
|
...row,
|
2025-09-01 08:59:56 +08:00
|
|
|
|
...response.data,
|
2025-08-14 10:33:48 +08:00
|
|
|
|
curType: response.data.curType,
|
|
|
|
|
|
account: response.data.tenantKey,
|
2025-08-26 11:18:24 +08:00
|
|
|
|
tenantType: response.data.tenantType,
|
|
|
|
|
|
googleCodeSwitch: response.data.googleCodeSwitch,
|
2025-08-14 10:33:48 +08:00
|
|
|
|
scoreRatio:response.data.scoreRatio,
|
|
|
|
|
|
tenantSystemPlatforms:row.tenantPlatforms
|
|
|
|
|
|
};
|
2025-08-26 11:18:24 +08:00
|
|
|
|
|
2025-08-14 10:33:48 +08:00
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
const platformSystem = ref({
|
|
|
|
|
|
pageNum:1,
|
|
|
|
|
|
pageSize:100,
|
|
|
|
|
|
orderByColumn:'platformCode',
|
|
|
|
|
|
isAsc:'desc'
|
|
|
|
|
|
});
|
|
|
|
|
|
const totalPlatform = ref(0);
|
|
|
|
|
|
/** 获取平台利润 */
|
|
|
|
|
|
function getSelectPlatform() {
|
|
|
|
|
|
superPlatformSystem(platformSystem.value).then(response => {
|
|
|
|
|
|
form.value.tenantSystemPlatforms = response.rows;
|
|
|
|
|
|
totalPlatform.value = response.total;
|
|
|
|
|
|
tenantSystemPlatforms.value = JSON.parse(JSON.stringify(response.rows));
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
/** 获取货币 */
|
|
|
|
|
|
function getSuperCommonCurrencySelect() {
|
|
|
|
|
|
let res = getLocalStorage('currencySelect');
|
|
|
|
|
|
let _data = res.map(item => {
|
|
|
|
|
|
return {
|
|
|
|
|
|
...item,
|
|
|
|
|
|
balance:'',
|
|
|
|
|
|
currencyCode:item.currencyCode,
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
form.value.realBalance = _data;
|
|
|
|
|
|
realBalance.value = JSON.parse(JSON.stringify(_data));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/** 新增按钮操作 */
|
|
|
|
|
|
function handleAdd() {
|
|
|
|
|
|
reset();
|
|
|
|
|
|
openShowDialog.value = true;
|
|
|
|
|
|
title.value = proxy.t('添加商户');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const copyAccountInfo = (row)=>{
|
|
|
|
|
|
const content = `
|
|
|
|
|
|
商户后台:${yueURL.value}
|
|
|
|
|
|
登录账号:${row.tenantKey}
|
|
|
|
|
|
初始密码:${row.originalPassword}
|
|
|
|
|
|
系统说明:为了账户安全,登录成功后请先修改密码,绑定谷歌验证。
|
|
|
|
|
|
商户KEY:${row.tenantKey}
|
|
|
|
|
|
商户密钥:${row.tenantSecret}
|
|
|
|
|
|
对接文档:${row.documentUrl}
|
|
|
|
|
|
文档密码:${row.documentPass}
|
|
|
|
|
|
`.trim();
|
|
|
|
|
|
handleCopy(content).then(() => {
|
|
|
|
|
|
proxy.$modal.msgSuccess(proxy.t('复制成功'));
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const submitFormReset = () => {
|
|
|
|
|
|
proxy.$refs["agentResetRef"].validate(valid => {
|
|
|
|
|
|
if (valid) {
|
|
|
|
|
|
updateSuperTenantResetPwd(formReset).then(response => {
|
|
|
|
|
|
proxy.$modal.msgSuccess(proxy.t('重置成功'));
|
|
|
|
|
|
openReset.value = false;
|
|
|
|
|
|
getList();
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
2025-09-01 08:59:56 +08:00
|
|
|
|
const closeDialog = () => {
|
|
|
|
|
|
openView.value = false;
|
|
|
|
|
|
form.value = {};
|
|
|
|
|
|
}
|
|
|
|
|
|
const sys_job_status = ref([]);
|
|
|
|
|
|
const getsuperCommonPlatformTypeSelect = async () => {
|
|
|
|
|
|
getPlatformShowSelect().then(response => {
|
|
|
|
|
|
sys_job_status.value = response.data.map(item => {
|
|
|
|
|
|
return { label: item.platformName, value: item.platformCode }
|
|
|
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
getsuperCommonPlatformTypeSelect();
|
|
|
|
|
|
const handleInput = (row) => {
|
|
|
|
|
|
let input = row.useCost.toString();
|
|
|
|
|
|
|
|
|
|
|
|
// 清除非法字符(只允许数字和一个小数点)
|
|
|
|
|
|
input = input.replace(/[^\d.]/g, '');
|
|
|
|
|
|
|
|
|
|
|
|
// 防止多个小数点
|
|
|
|
|
|
const parts = input.split('.');
|
|
|
|
|
|
if (parts.length > 2) {
|
|
|
|
|
|
input = parts[0] + '.' + parts[1];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 限制小数点后最多两位
|
|
|
|
|
|
if (parts[1]) {
|
|
|
|
|
|
input = parts[0] + '.' + parts[1].substring(0, 2);
|
|
|
|
|
|
}
|
|
|
|
|
|
row.useCost = input;
|
|
|
|
|
|
// 同步更新 PlatformRatioAll.value 对应项
|
|
|
|
|
|
const target = PlatformRatioAll.value.find(item => item.id == row.id);
|
|
|
|
|
|
if (target) {
|
|
|
|
|
|
target.useCost = input;
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
const handleInput1 = (row) => {
|
|
|
|
|
|
let input = row.minAmount.toString();
|
|
|
|
|
|
// 同步更新 PlatformRatioAll.value 对应项
|
|
|
|
|
|
const target = PlatformRatioAll.value.find(item => item.id == row.id);
|
|
|
|
|
|
if (target) {
|
|
|
|
|
|
target.minAmount = input;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-08-14 10:33:48 +08:00
|
|
|
|
|
2025-09-01 08:59:56 +08:00
|
|
|
|
const handleInput2 = (row) => {
|
|
|
|
|
|
let input = row.maxAmount.toString();
|
|
|
|
|
|
// 同步更新 PlatformRatioAll.value 对应项
|
|
|
|
|
|
const target = PlatformRatioAll.value.find(item => item.id == row.id);
|
|
|
|
|
|
if (target) {
|
|
|
|
|
|
target.maxAmount = input;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const handleBlur = (row) => {
|
|
|
|
|
|
const cost = parseFloat(row.cost);
|
|
|
|
|
|
const useCost = parseFloat(row.useCost);
|
|
|
|
|
|
|
|
|
|
|
|
if (isNaN(useCost)) {
|
|
|
|
|
|
row.useCost = '';
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (useCost < cost) {
|
|
|
|
|
|
row.useCost = Number(cost); // 保留两位小数
|
|
|
|
|
|
// 可选提示
|
|
|
|
|
|
// this.$message.warning(`不能小于最小成本:${cost}`);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
const searchPlatformCode = ref('');
|
|
|
|
|
|
const searchCurrencyCode = ref('');
|
|
|
|
|
|
// 搜索平台
|
|
|
|
|
|
const searchSystemPlatforms = (platformCode) => {
|
|
|
|
|
|
const keyword = platformCode?.trim();
|
|
|
|
|
|
if (!keyword) {
|
|
|
|
|
|
form.value.tenantSystemPlatforms = PlatformRatioAll.value;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 找出所有 platformCode 中包含关键字的项
|
|
|
|
|
|
const matchedCodes = PlatformRatioAll.value
|
|
|
|
|
|
.filter(item => item.platformCode?.includes(keyword))
|
|
|
|
|
|
.map(item => item.platformCode);
|
|
|
|
|
|
|
|
|
|
|
|
// 如果有匹配,就取出所有属于这些 platformCode 的数据
|
|
|
|
|
|
const result = PlatformRatioAll.value.filter(item =>
|
|
|
|
|
|
matchedCodes.includes(item.platformCode)
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
form.value.tenantSystemPlatforms = result; // 不再回退到 PlatformRatioAll
|
|
|
|
|
|
};
|
|
|
|
|
|
const openViewRef = ref(null);
|
|
|
|
|
|
|
|
|
|
|
|
// 提交表单
|
|
|
|
|
|
/** 提交按钮 */
|
|
|
|
|
|
function submitForm() {
|
|
|
|
|
|
proxy.$refs["openViewRef"].validate(valid => {
|
|
|
|
|
|
if (valid) {
|
|
|
|
|
|
loadingButton.value = true;
|
|
|
|
|
|
let dataObj = {
|
|
|
|
|
|
id: form.value.id,
|
|
|
|
|
|
scoreRatio: form.value.scoreRatio,
|
|
|
|
|
|
curType: 1,
|
|
|
|
|
|
googleCodeSwitch: form.value.googleCodeSwitch,
|
|
|
|
|
|
currencyCode: form.value.currencyCode,
|
|
|
|
|
|
// tenantType: formAll.tenantType,
|
|
|
|
|
|
// googleCode:formAll.googleCode,
|
|
|
|
|
|
tenantPlatforms: PlatformRatioAll.value,
|
|
|
|
|
|
}
|
|
|
|
|
|
if (JSON.stringify(PlatformRatioAll.value) != oldForm.value) {
|
|
|
|
|
|
updateSuperTenantEdit(dataObj).then(response => {
|
|
|
|
|
|
loadingButton.value = false;
|
|
|
|
|
|
proxy.$modal.msgSuccess(proxy.t('更新成功'));
|
|
|
|
|
|
closeDialog();
|
|
|
|
|
|
getList();
|
|
|
|
|
|
}).catch(() => {
|
|
|
|
|
|
loadingButton.value = false;
|
|
|
|
|
|
});
|
|
|
|
|
|
}else{
|
|
|
|
|
|
loadingButton.value = false;
|
|
|
|
|
|
closeDialog();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
2025-08-14 10:33:48 +08:00
|
|
|
|
|
|
|
|
|
|
getList();
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
|
.label-scoreRatio{
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
|
span{
|
|
|
|
|
|
width: 120px;
|
|
|
|
|
|
text-align: right;
|
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
|
padding-right: 12px;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.scoreRatioTable{
|
|
|
|
|
|
width: calc(100% - 120px);
|
|
|
|
|
|
margin-left: 120px;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|
|
|
|
|
|
|