2025-04-03 16:41:54 +08:00
|
|
|
|
<template>
|
2025-04-14 21:52:19 +08:00
|
|
|
|
<div class="hostList">
|
2025-04-03 16:41:54 +08:00
|
|
|
|
<div>
|
2025-07-03 19:14:34 +08:00
|
|
|
|
<!-- -->
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<div style="display: flex">
|
2025-04-03 20:25:25 +08:00
|
|
|
|
<div></div>
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<el-input
|
|
|
|
|
|
v-model="queryFormData.coinMin"
|
|
|
|
|
|
placeholder="最小金币"
|
|
|
|
|
|
size="large"
|
2025-07-09 13:27:43 +08:00
|
|
|
|
style="width: 180px"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
type="number"
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
v-model="queryFormData.coinMax"
|
|
|
|
|
|
placeholder="最大金币"
|
|
|
|
|
|
size="large"
|
2025-07-09 13:27:43 +08:00
|
|
|
|
style="width: 180px;"
|
|
|
|
|
|
class="right-input"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
type="number"
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
v-model="queryFormData.levelMin"
|
|
|
|
|
|
placeholder="最小等级"
|
|
|
|
|
|
size="large"
|
2025-07-09 13:27:43 +08:00
|
|
|
|
style="width: 180px;"
|
|
|
|
|
|
class="right-input"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
type="number"
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
v-model="queryFormData.levelMax"
|
|
|
|
|
|
placeholder="最大等级"
|
|
|
|
|
|
size="large"
|
2025-07-09 13:27:43 +08:00
|
|
|
|
style="width: 180px;"
|
|
|
|
|
|
class="right-input"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
type="number"
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
2025-07-09 13:27:43 +08:00
|
|
|
|
<div class="right-input right-text" style="width: 250px; height: 50px; line-height: 50px">
|
2025-07-03 19:14:34 +08:00
|
|
|
|
当前网络:{{ countryData }}
|
|
|
|
|
|
</div>
|
2025-07-09 13:27:43 +08:00
|
|
|
|
<div class="right-input right-text" style="width: 160px; height: 50px; line-height: 50px">
|
2025-07-03 19:14:34 +08:00
|
|
|
|
总数:{{ getBrotherInfodata.total }}
|
|
|
|
|
|
</div>
|
2025-07-09 13:27:43 +08:00
|
|
|
|
<div class="right-input right-text" style="width: 160px;height: 50px; line-height: 50px">
|
2025-07-03 19:14:34 +08:00
|
|
|
|
有效数:{{ getBrotherInfodata.valid }}
|
|
|
|
|
|
</div>
|
2025-07-01 21:22:43 +08:00
|
|
|
|
|
|
|
|
|
|
<el-button
|
2025-07-09 13:27:43 +08:00
|
|
|
|
class="serch-button right-input"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
type="primary"
|
|
|
|
|
|
@click="Resetss"
|
|
|
|
|
|
>重置</el-button
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
<el-button
|
2025-07-09 13:27:43 +08:00
|
|
|
|
class="serch-button right-input"
|
|
|
|
|
|
style="width: 150px"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
type="primary"
|
|
|
|
|
|
@click="openTikTok"
|
|
|
|
|
|
>打开 TikTok 登录</el-button
|
|
|
|
|
|
>
|
|
|
|
|
|
<el-button
|
|
|
|
|
|
v-show="queryFormData.isRunning"
|
2025-07-09 13:27:43 +08:00
|
|
|
|
class="serch-button right-input"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
type="primary"
|
|
|
|
|
|
@click="getBigBrother"
|
|
|
|
|
|
>开始</el-button
|
|
|
|
|
|
>
|
|
|
|
|
|
<el-button
|
|
|
|
|
|
v-show="!queryFormData.isRunning"
|
2025-07-09 13:27:43 +08:00
|
|
|
|
class="serch-button right-input"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
type="primary"
|
|
|
|
|
|
@click="BigBrotherstop"
|
|
|
|
|
|
>结束</el-button
|
|
|
|
|
|
>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<!-- `````````````````````````````````````````````````````````````````````````````````````````````````` -->
|
|
|
|
|
|
<div style="width: 100%; border-bottom: 1px solid #e9e9e9; margin-top: 30px"></div>
|
|
|
|
|
|
<!-- ···································································································· -->
|
2025-07-03 19:14:34 +08:00
|
|
|
|
<div style="display: flex; margin-top: 30px; flex-wrap: wrap">
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<el-select
|
|
|
|
|
|
v-model="searchForm.region"
|
|
|
|
|
|
filterable
|
|
|
|
|
|
placeholder="选择国家"
|
|
|
|
|
|
size="large"
|
2025-07-03 19:14:34 +08:00
|
|
|
|
style="width: 160px"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
>
|
|
|
|
|
|
<el-option
|
|
|
|
|
|
v-for="item in options"
|
|
|
|
|
|
:key="item.value"
|
|
|
|
|
|
:label="item.label"
|
|
|
|
|
|
:value="item.value"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</el-select>
|
2025-05-15 18:29:53 +08:00
|
|
|
|
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<el-input
|
|
|
|
|
|
v-model="searchForm.displayId"
|
|
|
|
|
|
placeholder="大哥id"
|
|
|
|
|
|
size="large"
|
2025-07-09 13:27:43 +08:00
|
|
|
|
style="width: 160px;"
|
|
|
|
|
|
class="right-input"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
clearable
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
<el-button
|
2025-07-09 13:27:43 +08:00
|
|
|
|
class="serch-button right-input"
|
2025-07-01 21:22:43 +08:00
|
|
|
|
type="primary"
|
|
|
|
|
|
@click="serch"
|
|
|
|
|
|
>查询</el-button
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
<el-button class="serch-button" type="primary" @click="reset"> 重置 </el-button>
|
|
|
|
|
|
|
|
|
|
|
|
<el-button
|
|
|
|
|
|
class="put-button"
|
|
|
|
|
|
:disabled="tableData.length == 0"
|
|
|
|
|
|
type="primary"
|
|
|
|
|
|
@click="exportList"
|
|
|
|
|
|
>导出Excel数据</el-button
|
|
|
|
|
|
>
|
2025-07-03 19:14:34 +08:00
|
|
|
|
<el-button
|
|
|
|
|
|
@click="filterdialogVisible = true"
|
2025-07-07 18:46:02 +08:00
|
|
|
|
class="put-button buttoMore-filters"
|
2025-07-03 19:14:34 +08:00
|
|
|
|
type="primary"
|
2025-07-07 18:46:02 +08:00
|
|
|
|
><img class="filters-img" src="@/assets/filter.png"
|
|
|
|
|
|
/><div style="margin-left: 10px">
|
|
|
|
|
|
更多筛选
|
|
|
|
|
|
</div></el-button>
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<!-- <el-button @click="filterdialogVisible = true" style="width: 50px;" class="put-button" type="primary"><img
|
|
|
|
|
|
style="height: 30px;" src="@/assets/filter.png"></el-button> -->
|
2025-04-03 16:41:54 +08:00
|
|
|
|
</div>
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<!-- ····················································································································· -->
|
2025-04-07 18:26:39 +08:00
|
|
|
|
<div class="hostTable center-justify">
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<el-table
|
|
|
|
|
|
ref="multipleTableRef"
|
|
|
|
|
|
:data="tableData"
|
|
|
|
|
|
stripe
|
|
|
|
|
|
v-loading="loading"
|
|
|
|
|
|
max-height="500"
|
|
|
|
|
|
@selection-change="handleSelectionChange"
|
|
|
|
|
|
>
|
|
|
|
|
|
<!-- <el-table-column type="selection" width="35" /> -->
|
|
|
|
|
|
|
|
|
|
|
|
<el-table-column fixed prop="displayId" label="Id" width="170">
|
2025-04-09 21:07:15 +08:00
|
|
|
|
<template #default="scope">
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<div class="hostIdText" @click="openHTML(scope.row.displayId)">
|
|
|
|
|
|
{{ scope.row.displayId }}
|
|
|
|
|
|
</div>
|
2025-04-10 18:11:03 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
</el-table-column>
|
2025-06-24 13:35:33 +08:00
|
|
|
|
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<el-table-column
|
|
|
|
|
|
v-for="label in labelList"
|
|
|
|
|
|
:key="label.paramCode"
|
|
|
|
|
|
:prop="label.paramCode"
|
|
|
|
|
|
:label="label.paramCodeMeaning"
|
|
|
|
|
|
width="170"
|
|
|
|
|
|
>
|
|
|
|
|
|
<template v-if="label.paramCode != 'createDt'" #default="scope"> </template>
|
2025-04-07 18:26:39 +08:00
|
|
|
|
</el-table-column>
|
|
|
|
|
|
</el-table>
|
|
|
|
|
|
</div>
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<!-- ······································································································································ -->
|
2025-06-24 13:35:33 +08:00
|
|
|
|
<!-- 分页 -->
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<div class="center-justify" style="margin-top: 30px">
|
|
|
|
|
|
<el-pagination
|
|
|
|
|
|
v-model:current-page="page"
|
|
|
|
|
|
v-model:page-size="pageSize"
|
|
|
|
|
|
background
|
|
|
|
|
|
layout="sizes, prev, pager, next"
|
|
|
|
|
|
:total="total"
|
|
|
|
|
|
:page-sizes="[10, 20, 50, 100, 500, 1000]"
|
|
|
|
|
|
@size-change="handleSizeChange"
|
|
|
|
|
|
@current-change="handleCurrentChange"
|
|
|
|
|
|
/>
|
2025-04-07 18:26:39 +08:00
|
|
|
|
</div>
|
2025-04-14 21:52:19 +08:00
|
|
|
|
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<!-- ·······································································弹窗······································································· -->
|
|
|
|
|
|
<el-dialog v-model="filterdialogVisible" width="800px" :before-close="handleClose">
|
2025-07-03 19:14:34 +08:00
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
|
<el-col :span="4">
|
|
|
|
|
|
<!-- <label>选择筛选条件</label> -->
|
|
|
|
|
|
<div style="height: 100%; padding-top: 10px" class="center-justify">时间</div>
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
<el-col :span="10">
|
|
|
|
|
|
<div><label>开始时间/结束时间</label></div>
|
|
|
|
|
|
|
|
|
|
|
|
<el-date-picker
|
|
|
|
|
|
v-model="createTimes"
|
|
|
|
|
|
type="datetimerange"
|
|
|
|
|
|
value-format="YYYY-MM-DD HH:mm:ss"
|
|
|
|
|
|
placeholder="选择查询时间"
|
|
|
|
|
|
size="large"
|
|
|
|
|
|
style="width: 600px; margin-top: 10px"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
</el-row>
|
|
|
|
|
|
|
|
|
|
|
|
<el-row
|
|
|
|
|
|
v-for="(field, index) in fields"
|
|
|
|
|
|
:key="index"
|
|
|
|
|
|
:gutter="20"
|
|
|
|
|
|
style="margin-bottom: 10px"
|
|
|
|
|
|
>
|
|
|
|
|
|
<el-col :span="4">
|
|
|
|
|
|
<div style="height: 100%" class="center-justify">
|
|
|
|
|
|
{{ field.label }}
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
<el-col :span="10">
|
|
|
|
|
|
<div><label>最小值</label></div>
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
type="number"
|
|
|
|
|
|
:oninput="'if(value.length>9)value=value.slice(0,9)'"
|
|
|
|
|
|
v-model.number="searchForm[field.minModel]"
|
|
|
|
|
|
placeholder="请输入最小值"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
<el-col :span="10">
|
|
|
|
|
|
<div><label>最大值</label></div>
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
type="number"
|
|
|
|
|
|
:oninput="'if(value.length>9)value=value.slice(0,9)'"
|
|
|
|
|
|
v-model.number="searchForm[field.maxModel]"
|
|
|
|
|
|
placeholder="请输入最大值"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
</el-row>
|
2025-04-14 21:52:19 +08:00
|
|
|
|
|
2025-07-01 21:22:43 +08:00
|
|
|
|
<el-row :gutter="20">
|
2025-07-03 19:14:34 +08:00
|
|
|
|
<el-col :span="4">
|
|
|
|
|
|
<!-- <label>选择筛选条件</label> -->
|
|
|
|
|
|
<div style="height: 100%; padding-top: 10px" class="center-justify">排序</div>
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
<el-col :span="10">
|
|
|
|
|
|
<div><label>排序类型</label></div>
|
|
|
|
|
|
|
|
|
|
|
|
<el-select
|
|
|
|
|
|
v-model="sortData.sortName"
|
|
|
|
|
|
filterable
|
|
|
|
|
|
placeholder="请选择"
|
|
|
|
|
|
style="width: 240px"
|
|
|
|
|
|
>
|
|
|
|
|
|
<el-option
|
|
|
|
|
|
v-for="item in sortNameOptions"
|
|
|
|
|
|
:key="item.type"
|
|
|
|
|
|
:label="item.label"
|
|
|
|
|
|
:value="item.type"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</el-select>
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
<el-col :span="10">
|
|
|
|
|
|
<div><label>升序/降序</label></div>
|
|
|
|
|
|
|
|
|
|
|
|
<el-select
|
|
|
|
|
|
v-model="sortData.sort"
|
|
|
|
|
|
filterable
|
|
|
|
|
|
placeholder="请选择"
|
|
|
|
|
|
style="width: 240px"
|
|
|
|
|
|
>
|
|
|
|
|
|
<el-option
|
|
|
|
|
|
v-for="item in [
|
|
|
|
|
|
{ label: '升序', value: 'asc' },
|
|
|
|
|
|
{ label: '降序', value: 'desc' },
|
|
|
|
|
|
]"
|
|
|
|
|
|
:key="item.value"
|
|
|
|
|
|
:label="item.label"
|
|
|
|
|
|
:value="item.value"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</el-select>
|
|
|
|
|
|
</el-col>
|
|
|
|
|
|
</el-row>
|
|
|
|
|
|
|
|
|
|
|
|
<template #footer>
|
|
|
|
|
|
<span class="dialog-footer">
|
|
|
|
|
|
<el-button type="primary" @click="reset"> 重置 </el-button>
|
|
|
|
|
|
<!-- <el-button @click="filterdialogVisible = false">取消</el-button> -->
|
|
|
|
|
|
<el-button type="primary" @click="handelClick"> 确认 </el-button>
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-dialog>
|
2025-07-01 21:22:43 +08:00
|
|
|
|
</div>
|
2025-04-03 16:41:54 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
2025-04-09 21:07:15 +08:00
|
|
|
|
// import { getToken, setToken, removeToken } from '@/utils/storage'
|
2025-07-01 21:22:43 +08:00
|
|
|
|
import {
|
|
|
|
|
|
tkhostdata,
|
|
|
|
|
|
dicts,
|
|
|
|
|
|
tkhostdetail,
|
|
|
|
|
|
downList,
|
|
|
|
|
|
getStaffList,
|
|
|
|
|
|
managerhosts,
|
|
|
|
|
|
upholdinfo,
|
|
|
|
|
|
getCountryinfo,
|
|
|
|
|
|
accountName,
|
|
|
|
|
|
} from "@/api/account";
|
2025-07-03 19:14:34 +08:00
|
|
|
|
import { usePythonBridge } from "@/utils/pythonBridge";
|
2025-07-01 21:22:43 +08:00
|
|
|
|
import { getUser, setSerch, getSerch } from "@/utils/storage";
|
|
|
|
|
|
import { ref, reactive, onMounted } from "vue";
|
|
|
|
|
|
import EChartsComponent from "@/components/EChartsComponent.vue";
|
|
|
|
|
|
import { ElMessage, ElMessageBox } from "element-plus";
|
|
|
|
|
|
import { color } from "echarts";
|
2025-07-03 19:14:34 +08:00
|
|
|
|
import { getCountryName } from "@/utils/countryUtil";
|
2025-07-09 13:27:43 +08:00
|
|
|
|
import { ElLoading } from "element-plus";
|
2025-07-01 21:22:43 +08:00
|
|
|
|
//ip国家
|
2025-07-03 19:14:34 +08:00
|
|
|
|
let countryData = ref("");
|
2025-07-01 21:22:43 +08:00
|
|
|
|
//获取国家
|
|
|
|
|
|
const getIpInfo = async () => {
|
2025-07-03 19:14:34 +08:00
|
|
|
|
try {
|
|
|
|
|
|
const response = await fetch("https://ipapi.co/json/");
|
|
|
|
|
|
if (!response.ok) {
|
|
|
|
|
|
throw new Error("请求失败");
|
2025-07-01 21:22:43 +08:00
|
|
|
|
}
|
2025-07-03 19:14:34 +08:00
|
|
|
|
const data = await response.json();
|
|
|
|
|
|
console.log("IP信息:", data.country);
|
|
|
|
|
|
|
|
|
|
|
|
countryData.value = getCountryName(data.country);
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
console.error("请求出错:", error);
|
|
|
|
|
|
ElMessageBox.prompt("请输入将要获取国家的中文名", "获取国家失败", {
|
|
|
|
|
|
confirmButtonText: "确认",
|
|
|
|
|
|
cancelButtonText: "取消",
|
|
|
|
|
|
showClose: false,
|
|
|
|
|
|
closeOnClickModal: false,
|
|
|
|
|
|
showCancelButton: false,
|
|
|
|
|
|
}).then(({ value }) => {
|
|
|
|
|
|
countryData.value = value;
|
|
|
|
|
|
});
|
|
|
|
|
|
// .catch(() => {
|
|
|
|
|
|
// ElMessage({
|
|
|
|
|
|
// type: 'info',
|
|
|
|
|
|
// message: 'Input canceled',
|
|
|
|
|
|
// })
|
|
|
|
|
|
// })
|
|
|
|
|
|
}
|
2025-07-01 21:22:43 +08:00
|
|
|
|
};
|
|
|
|
|
|
//打开TikTok登录
|
|
|
|
|
|
function openTikTok() {
|
|
|
|
|
|
loginTikTok();
|
|
|
|
|
|
}
|
|
|
|
|
|
//重置
|
|
|
|
|
|
function Resetss() {
|
2025-07-03 19:14:34 +08:00
|
|
|
|
queryFormData.value = {};
|
2025-07-01 21:22:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
//大哥climb
|
|
|
|
|
|
const queryFormData = ref({
|
|
|
|
|
|
coinMin: "",
|
|
|
|
|
|
coinMax: "",
|
|
|
|
|
|
levelMin: "",
|
|
|
|
|
|
levelMax: "",
|
|
|
|
|
|
isRunning: true,
|
|
|
|
|
|
});
|
|
|
|
|
|
//时间
|
2025-07-03 19:14:34 +08:00
|
|
|
|
const timerId = ref(null);
|
2025-07-01 21:22:43 +08:00
|
|
|
|
const getBrotherInfodata = ref({
|
|
|
|
|
|
total: 0,
|
|
|
|
|
|
valid: 0,
|
2025-07-03 19:14:34 +08:00
|
|
|
|
});
|
2025-07-01 21:22:43 +08:00
|
|
|
|
|
|
|
|
|
|
function BigBrotherstop() {
|
|
|
|
|
|
queryFormData.value.tenantId = userInfo.value.tenantId;
|
|
|
|
|
|
queryFormData.value.region = countryData.value;
|
2025-07-03 19:14:34 +08:00
|
|
|
|
controlTask(JSON.stringify(queryFormData.value)).then((res) => {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
queryFormData.value.isRunning = true;
|
2025-07-03 19:14:34 +08:00
|
|
|
|
clearInterval(timerId.value);
|
|
|
|
|
|
timerId.value = null;
|
|
|
|
|
|
});
|
2025-07-01 21:22:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
function getBigBrother() {
|
2025-07-09 13:27:43 +08:00
|
|
|
|
const loading = ElLoading.service({
|
|
|
|
|
|
lock: true,
|
|
|
|
|
|
text: "正在启动...",
|
|
|
|
|
|
background: "rgba(0, 0, 0, 0.7)",
|
|
|
|
|
|
});
|
2025-07-01 21:22:43 +08:00
|
|
|
|
queryFormData.value.tenantId = userInfo.value.tenantId;
|
|
|
|
|
|
queryFormData.value.region = countryData.value;
|
2025-07-03 19:14:34 +08:00
|
|
|
|
controlTask(JSON.stringify(queryFormData.value)).then((res) => {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
queryFormData.value.isRunning = false;
|
|
|
|
|
|
timerId.value = setInterval(() => {
|
2025-07-03 19:14:34 +08:00
|
|
|
|
getBrotherInfo().then((res) => {
|
2025-07-09 13:27:43 +08:00
|
|
|
|
loading.close();
|
2025-07-01 21:22:43 +08:00
|
|
|
|
getBrotherInfodata.value = res;
|
2025-07-03 19:14:34 +08:00
|
|
|
|
});
|
|
|
|
|
|
}, 1000);
|
|
|
|
|
|
});
|
2025-07-01 21:22:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const loading = ref(false);
|
2025-04-09 21:07:15 +08:00
|
|
|
|
//py方法
|
2025-07-03 19:14:34 +08:00
|
|
|
|
const {
|
|
|
|
|
|
givePyAnchorId,
|
|
|
|
|
|
exportToExcel,
|
|
|
|
|
|
loginTikTok,
|
|
|
|
|
|
controlTask,
|
|
|
|
|
|
getBrotherInfo,
|
|
|
|
|
|
} = usePythonBridge();
|
2025-04-14 21:52:19 +08:00
|
|
|
|
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let num = ref(0);
|
|
|
|
|
|
//账号信息
|
2025-07-03 19:14:34 +08:00
|
|
|
|
const userInfo = ref({});
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//主播列表DOM
|
2025-07-01 21:22:43 +08:00
|
|
|
|
const multipleTableRef = ref(null);
|
2025-06-24 13:35:33 +08:00
|
|
|
|
let labelList = ref([
|
2025-07-01 21:22:43 +08:00
|
|
|
|
{ paramCode: "userIdStr", paramCodeMeaning: "用户id" },
|
|
|
|
|
|
{ paramCode: "level", paramCodeMeaning: "等级" },
|
|
|
|
|
|
{ paramCode: "hostcoins", paramCodeMeaning: "打赏的金币" },
|
2025-07-09 13:27:43 +08:00
|
|
|
|
{ paramCode: "totalGiftCoins", paramCodeMeaning: "最低打赏金币数" },
|
2025-07-01 21:22:43 +08:00
|
|
|
|
{ paramCode: "hostDisplayId", paramCodeMeaning: "所在直播间主播id" },
|
|
|
|
|
|
{ paramCode: "region", paramCodeMeaning: "地区" },
|
|
|
|
|
|
{ paramCode: "followerCount", paramCodeMeaning: "粉丝数" },
|
|
|
|
|
|
{ paramCode: "followingCount", paramCodeMeaning: "关注数" },
|
|
|
|
|
|
{ paramCode: "createTime", paramCodeMeaning: "创建时间" },
|
2025-06-24 13:35:33 +08:00
|
|
|
|
]);
|
2025-07-01 21:22:43 +08:00
|
|
|
|
|
|
|
|
|
|
const tableData = ref([]);
|
2025-05-15 18:29:53 +08:00
|
|
|
|
//主播列表传参
|
2025-07-01 21:22:43 +08:00
|
|
|
|
const searchForm = ref({});
|
|
|
|
|
|
const createTimes = ref([]);
|
|
|
|
|
|
//分页
|
|
|
|
|
|
const page = ref(1);
|
|
|
|
|
|
const pageSize = ref(10);
|
2025-06-24 13:35:33 +08:00
|
|
|
|
const fields = [
|
2025-07-01 21:22:43 +08:00
|
|
|
|
{ label: "打赏的金币", minModel: "hostcoinsMin", maxModel: "hostcoinsMax" },
|
|
|
|
|
|
{ label: "打赏金币总和", minModel: "totalGiftCoinsMin", maxModel: "totalGiftCoinsMax" },
|
|
|
|
|
|
{ label: "等级", minModel: "levelMin", maxModel: "levelMax" },
|
|
|
|
|
|
];
|
2025-05-15 18:29:53 +08:00
|
|
|
|
//排序
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let sortData = ref({ sortName: "createTime", sort: "desc" });
|
2025-06-24 13:35:33 +08:00
|
|
|
|
|
|
|
|
|
|
//排序类型
|
|
|
|
|
|
let sortNameOptions = ref([
|
2025-07-01 21:22:43 +08:00
|
|
|
|
{ label: "创建时间", type: "createTime" },
|
|
|
|
|
|
{ label: "打赏的金币", type: "hostsCoins" },
|
|
|
|
|
|
{ label: "打赏金币总和", type: "totalGiftCoins" },
|
|
|
|
|
|
{ label: "等级", type: "level" },
|
|
|
|
|
|
]);
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//员工选择列表
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let staffOptions = ref([]);
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//筛选条件选择列表
|
2025-06-24 13:35:33 +08:00
|
|
|
|
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//选择的员工
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let staffValue = ref("");
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//选择的主播列表
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let selectHostList = ref([]);
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//分配弹窗是否弹出
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let dialogFormVisible = ref(false);
|
2025-05-15 18:29:53 +08:00
|
|
|
|
//分配情况弹窗是否弹出
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let hostNameVisible = ref(false);
|
2025-05-15 18:29:53 +08:00
|
|
|
|
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//备注弹窗是否弹出
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let commentVisible = ref(false);
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//筛选弹窗是否弹出
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let filterdialogVisible = ref(false);
|
2025-05-15 18:29:53 +08:00
|
|
|
|
//分配的员工
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let staffId = ref({});
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//备注信息
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let commentInfo = ref("");
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//备注信息主播
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let commentHost = ref("");
|
2025-04-03 16:41:54 +08:00
|
|
|
|
//分页
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let total = ref(0);
|
2025-04-07 13:14:56 +08:00
|
|
|
|
//是否渲染
|
2025-07-01 21:22:43 +08:00
|
|
|
|
const isPopoverVisible = reactive({});
|
2025-04-03 16:41:54 +08:00
|
|
|
|
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let options = ref([]);
|
2025-04-03 16:41:54 +08:00
|
|
|
|
|
2025-07-01 21:22:43 +08:00
|
|
|
|
let version = ref("0.0.0");
|
2025-05-06 15:38:23 +08:00
|
|
|
|
|
2025-04-03 16:41:54 +08:00
|
|
|
|
onMounted(() => {
|
2025-07-03 19:14:34 +08:00
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
getUserdata();
|
|
|
|
|
|
}, 500);
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
async function getUserdata() {
|
|
|
|
|
|
const User = await getUser();
|
|
|
|
|
|
userInfo.value = User;
|
2025-05-06 15:38:23 +08:00
|
|
|
|
getCountry(); //获取国家
|
2025-07-03 19:14:34 +08:00
|
|
|
|
getlist(); //获取主播列表
|
2025-07-01 21:22:43 +08:00
|
|
|
|
getIpInfo();
|
2025-07-03 19:14:34 +08:00
|
|
|
|
}
|
2025-04-03 16:41:54 +08:00
|
|
|
|
|
|
|
|
|
|
function serch() {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
page.value = 1;
|
2025-04-03 16:41:54 +08:00
|
|
|
|
getlist();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-07-01 21:22:43 +08:00
|
|
|
|
function exportList() {
|
|
|
|
|
|
// if (searchForm.value.dataType == "InvitationType") {
|
|
|
|
|
|
// searchForm.value.dataEnd = searchForm.value.dataStart;
|
|
|
|
|
|
// }
|
|
|
|
|
|
exportToExcel(requestParams.value);
|
2025-04-14 21:52:19 +08:00
|
|
|
|
|
|
|
|
|
|
// //浏览器导出方法
|
|
|
|
|
|
// downList('export/hostsinfo',
|
|
|
|
|
|
// {
|
|
|
|
|
|
// searchTime: searchForm.value.time,
|
|
|
|
|
|
// region: searchForm.value.country,
|
|
|
|
|
|
// pageSize: pageSize.value,
|
|
|
|
|
|
// page: page.value,
|
|
|
|
|
|
// userId: userInfo.value.userId,
|
|
|
|
|
|
// }
|
|
|
|
|
|
// );
|
2025-04-10 18:11:03 +08:00
|
|
|
|
}
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//分页每页条数
|
2025-04-10 18:11:03 +08:00
|
|
|
|
function handleSizeChange(val) {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
console.log(`${val} items per page`);
|
2025-04-10 18:11:03 +08:00
|
|
|
|
getlist();
|
|
|
|
|
|
}
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//分页页数
|
2025-04-10 18:11:03 +08:00
|
|
|
|
function handleCurrentChange(val) {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
console.log(`current page: ${val}`);
|
2025-04-10 18:11:03 +08:00
|
|
|
|
getlist();
|
2025-04-14 21:52:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
//选择行
|
|
|
|
|
|
function handleSelectionChange(data) {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
console.log(data);
|
|
|
|
|
|
selectHostList.value = [];
|
|
|
|
|
|
data.forEach((item) => {
|
|
|
|
|
|
selectHostList.value.push(item.hostId);
|
|
|
|
|
|
});
|
2025-04-14 21:52:19 +08:00
|
|
|
|
// multipleTableRef.value = data
|
|
|
|
|
|
// console.log(multipleTableRef.value)
|
2025-07-01 21:22:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
//时间格式化
|
|
|
|
|
|
function formatDate(date) {
|
|
|
|
|
|
const year = date.getFullYear();
|
2025-07-03 19:14:34 +08:00
|
|
|
|
const month = String(date.getMonth() + 1).padStart(2, "0"); // 月份从 0开始,需要+1
|
|
|
|
|
|
const day = String(date.getDate()).padStart(2, "0");
|
|
|
|
|
|
const hours = String(date.getHours()).padStart(2, "0");
|
|
|
|
|
|
const minutes = String(date.getMinutes()).padStart(2, "0");
|
|
|
|
|
|
const seconds = String(date.getSeconds()).padStart(2, "0");
|
2025-07-01 21:22:43 +08:00
|
|
|
|
|
|
|
|
|
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
2025-04-10 18:11:03 +08:00
|
|
|
|
}
|
2025-04-03 20:25:25 +08:00
|
|
|
|
//获取主播列表
|
2025-07-01 21:22:43 +08:00
|
|
|
|
//记录请求参数
|
|
|
|
|
|
let requestParams = ref({});
|
2025-04-03 16:41:54 +08:00
|
|
|
|
const getlist = () => {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
loading.value = true;
|
2025-04-03 16:41:54 +08:00
|
|
|
|
tkhostdata({
|
2025-06-24 13:35:33 +08:00
|
|
|
|
tenantId: Number(userInfo.value.tenantId),
|
2025-07-01 21:22:43 +08:00
|
|
|
|
sort: sortData.value.sort, //正序倒序
|
|
|
|
|
|
sortName: sortData.value.sortName, //排序类型
|
|
|
|
|
|
current: page.value,
|
|
|
|
|
|
pageSize: pageSize.value,
|
2025-07-03 19:14:34 +08:00
|
|
|
|
createTimeStart: createTimes.value[0],
|
|
|
|
|
|
createTimeEnd: createTimes.value[1],
|
2025-07-01 21:22:43 +08:00
|
|
|
|
...searchForm.value, //筛选条件
|
|
|
|
|
|
}).then((res) => {
|
|
|
|
|
|
loading.value = false;
|
|
|
|
|
|
console.log(res);
|
2025-06-24 13:35:33 +08:00
|
|
|
|
if (res) {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
requestParams.value = res.records;
|
|
|
|
|
|
console.log(res.records);
|
|
|
|
|
|
total.value = Number(res.total);
|
|
|
|
|
|
tableData.value = res.records.map((item) => ({
|
2025-07-03 19:14:34 +08:00
|
|
|
|
level: item.level, // 等级
|
|
|
|
|
|
createTime: formatDate(new Date(item.createTime)), // 创建时间
|
|
|
|
|
|
followerCount: item.followerCount, // 粉丝数
|
|
|
|
|
|
followingCount: item.followingCount, // 关注数
|
|
|
|
|
|
hostDisplayId: item.hostDisplayId, // 所在直播间主播id
|
|
|
|
|
|
hostcoins: item.hostcoins, // 打赏的金币
|
|
|
|
|
|
region: item.region, // 地区
|
|
|
|
|
|
totalGiftCoins: item.totalGiftCoins, // 打赏金币总和
|
|
|
|
|
|
userIdStr: item.userIdStr, // 用户id
|
2025-07-01 21:22:43 +08:00
|
|
|
|
displayId: item.displayId,
|
2025-06-24 13:35:33 +08:00
|
|
|
|
}));
|
|
|
|
|
|
}
|
2025-07-01 21:22:43 +08:00
|
|
|
|
});
|
|
|
|
|
|
};
|
2025-05-06 15:38:23 +08:00
|
|
|
|
function handelClick() {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
filterdialogVisible.value = false;
|
2025-05-06 15:38:23 +08:00
|
|
|
|
}
|
2025-06-24 13:35:33 +08:00
|
|
|
|
function reset() {
|
2025-07-03 19:14:34 +08:00
|
|
|
|
searchForm.value = {};
|
|
|
|
|
|
sortData.value = { sortName: "createTime", sort: "desc" };
|
|
|
|
|
|
createTimes.value = [];
|
2025-06-24 13:35:33 +08:00
|
|
|
|
}
|
2025-05-06 15:38:23 +08:00
|
|
|
|
function handleClose(done) {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
console.log("关闭");
|
|
|
|
|
|
done();
|
2025-05-06 15:38:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-14 21:52:19 +08:00
|
|
|
|
//修改主播维护状态
|
2025-06-24 13:35:33 +08:00
|
|
|
|
// function handleSelectChange(event, data) {
|
|
|
|
|
|
|
|
|
|
|
|
// upholdinfo({
|
|
|
|
|
|
// "hostId": data.hostId,
|
|
|
|
|
|
// "userId": userInfo.value.userId,
|
|
|
|
|
|
// "tenantId": userInfo.value.tenantId,
|
|
|
|
|
|
// // "comment": "我已经尽力维护,但是失败了",
|
|
|
|
|
|
// "useable": event.target.value
|
|
|
|
|
|
// }).then(res => {
|
|
|
|
|
|
// console.log(res)
|
|
|
|
|
|
// })
|
|
|
|
|
|
// }
|
2025-04-14 21:52:19 +08:00
|
|
|
|
|
|
|
|
|
|
//更改主播维护备注
|
|
|
|
|
|
|
2025-06-24 13:35:33 +08:00
|
|
|
|
// function uphostcomment() {
|
|
|
|
|
|
// upholdinfo({
|
|
|
|
|
|
// "hostId": commentHost.value,
|
|
|
|
|
|
// "userId": userInfo.value.userId,
|
|
|
|
|
|
// "tenantId": userInfo.value.tenantId,
|
|
|
|
|
|
// "comment": commentInfo.value,
|
|
|
|
|
|
// }).then(res => {
|
|
|
|
|
|
// console.log(res)
|
|
|
|
|
|
// serch()
|
|
|
|
|
|
// commentVisible.value = false
|
|
|
|
|
|
// })
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
function filterTag(value, row) {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
console.log(row.useable, value);
|
2025-06-24 13:35:33 +08:00
|
|
|
|
return row.useable === value;
|
2025-04-14 21:52:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//获取国家
|
|
|
|
|
|
function getCountry() {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
getCountryinfo({})
|
|
|
|
|
|
.then((res) => {
|
2025-07-03 19:14:34 +08:00
|
|
|
|
console.log("````````国家`````````", res);
|
2025-07-01 21:22:43 +08:00
|
|
|
|
res.forEach((item) => {
|
|
|
|
|
|
if (item.countryGroupName) {
|
|
|
|
|
|
options.value.push({
|
|
|
|
|
|
value: item.countryGroupName,
|
|
|
|
|
|
label: item.countryGroupName,
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
2025-07-03 19:14:34 +08:00
|
|
|
|
console.log("````````国家2`````````", options.value);
|
2025-04-14 21:52:19 +08:00
|
|
|
|
})
|
2025-07-01 21:22:43 +08:00
|
|
|
|
.catch((err) => {
|
|
|
|
|
|
console.log("getCountry", err);
|
|
|
|
|
|
});
|
2025-04-14 21:52:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//获取下级员工
|
2025-06-24 13:35:33 +08:00
|
|
|
|
// const getStaff = () => {
|
|
|
|
|
|
// getStaffList({
|
|
|
|
|
|
// userId: userInfo.value.userId,
|
|
|
|
|
|
// activeYn: userInfo.value.activeYn,
|
|
|
|
|
|
// tenantId: userInfo.value.tenantId,
|
|
|
|
|
|
// }).then(res => {
|
|
|
|
|
|
// console.log(res)
|
|
|
|
|
|
// res.forEach(item => {
|
|
|
|
|
|
// staffOptions.value.push({
|
|
|
|
|
|
// value: item.userId,
|
|
|
|
|
|
// label: item.userName
|
|
|
|
|
|
// })
|
|
|
|
|
|
// })
|
|
|
|
|
|
// })
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// //分配主播给员工
|
|
|
|
|
|
// function allocation() {
|
|
|
|
|
|
// managerhosts({
|
|
|
|
|
|
// "manaId": userInfo.value.userId,
|
|
|
|
|
|
// "userId": staffValue.value,
|
|
|
|
|
|
// "tenantId": userInfo.value.tenantId,
|
|
|
|
|
|
// "hostIds": selectHostList.value
|
|
|
|
|
|
// }).then(res => {
|
|
|
|
|
|
// if (res) {
|
|
|
|
|
|
// dialogFormVisible.value = false
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
// })
|
|
|
|
|
|
// }
|
2025-04-14 21:52:19 +08:00
|
|
|
|
|
2025-04-07 13:14:56 +08:00
|
|
|
|
//获取主播信息
|
2025-06-24 13:35:33 +08:00
|
|
|
|
// const getTkhostdetail = (id) => {
|
|
|
|
|
|
// tkhostdetail({
|
|
|
|
|
|
// hostId: id,
|
|
|
|
|
|
// // page: 1,
|
|
|
|
|
|
// searchTimeStart: '20250401',
|
|
|
|
|
|
// searchTimeEnd: '20250403'
|
|
|
|
|
|
// }).then(res => {
|
2025-04-07 13:14:56 +08:00
|
|
|
|
|
2025-06-24 13:35:33 +08:00
|
|
|
|
// console.log(labelList.value)
|
2025-04-07 13:14:56 +08:00
|
|
|
|
|
2025-06-24 13:35:33 +08:00
|
|
|
|
// })
|
2025-04-07 13:14:56 +08:00
|
|
|
|
|
2025-06-24 13:35:33 +08:00
|
|
|
|
// }
|
2025-04-07 13:14:56 +08:00
|
|
|
|
|
2025-04-09 21:07:15 +08:00
|
|
|
|
function openPopover(hostId, paramCode) {
|
|
|
|
|
|
isPopoverVisible[`${hostId}-${paramCode}`] = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function closePopover(hostId, paramCode) {
|
|
|
|
|
|
// isPopoverVisible[`${hostId}-${paramCode}`] = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function openHTML(id) {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
console.log(id);
|
2025-07-03 19:14:34 +08:00
|
|
|
|
|
2025-07-01 21:22:43 +08:00
|
|
|
|
givePyAnchorId(id);
|
2025-04-09 21:07:15 +08:00
|
|
|
|
|
2025-06-24 13:35:33 +08:00
|
|
|
|
// upholdinfo({
|
|
|
|
|
|
// "hostId": id,
|
|
|
|
|
|
// "userId": userInfo.value.userId,
|
|
|
|
|
|
// "tenantId": userInfo.value.tenantId,
|
|
|
|
|
|
// // "comment": "我已经尽力维护,但是失败了",
|
|
|
|
|
|
// "useable": "Y"
|
|
|
|
|
|
// }).then(res => {
|
2025-05-12 21:09:32 +08:00
|
|
|
|
|
2025-06-24 13:35:33 +08:00
|
|
|
|
// getlist();
|
|
|
|
|
|
// })
|
2025-04-09 21:07:15 +08:00
|
|
|
|
}
|
2025-05-15 18:29:53 +08:00
|
|
|
|
|
2025-06-24 13:35:33 +08:00
|
|
|
|
// function openAccountName(idStr) {
|
|
|
|
|
|
// if (idStr) {
|
|
|
|
|
|
// hostNameVisible.value = true
|
|
|
|
|
|
// accountName(idStr).then(res => {
|
|
|
|
|
|
// staffId.value = JSON.stringify(res).replace(/[{}"]/g, '') // 移除所有 {} 和 "
|
|
|
|
|
|
// .split(',') // 按逗号分割成数组
|
|
|
|
|
|
|
|
|
|
|
|
// console.log(res)
|
|
|
|
|
|
// })
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
2025-04-03 16:41:54 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="less">
|
2025-04-14 21:52:19 +08:00
|
|
|
|
.hostList {
|
2025-04-03 20:25:25 +08:00
|
|
|
|
box-sizing: border-box;
|
2025-04-10 18:11:03 +08:00
|
|
|
|
// height: 100vh;
|
2025-04-03 20:25:25 +08:00
|
|
|
|
padding: 40px;
|
|
|
|
|
|
|
2025-04-14 21:52:19 +08:00
|
|
|
|
/* 页面无法选中 */
|
|
|
|
|
|
// -webkit-user-select: none;
|
|
|
|
|
|
// -moz-user-select: none;
|
|
|
|
|
|
// -ms-user-select: none;
|
|
|
|
|
|
// user-select: none;
|
|
|
|
|
|
|
2025-04-03 20:25:25 +08:00
|
|
|
|
.hostTable {
|
|
|
|
|
|
width: 100%;
|
2025-07-01 21:22:43 +08:00
|
|
|
|
padding: 30px 0;
|
2025-04-09 21:07:15 +08:00
|
|
|
|
|
|
|
|
|
|
.hostIdText {
|
|
|
|
|
|
text-decoration: underline;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.serch-button {
|
|
|
|
|
|
width: 80px;
|
|
|
|
|
|
height: 47px;
|
2025-06-24 13:35:33 +08:00
|
|
|
|
background: @btn-bg-color;
|
2025-04-09 21:07:15 +08:00
|
|
|
|
border-radius: 10px;
|
2025-04-10 18:11:03 +08:00
|
|
|
|
border: none;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.put-button {
|
|
|
|
|
|
width: 132px;
|
|
|
|
|
|
height: 47px;
|
2025-06-24 13:35:33 +08:00
|
|
|
|
background: @btn-bg-color;
|
2025-04-10 18:11:03 +08:00
|
|
|
|
border-radius: 10px;
|
|
|
|
|
|
border: none;
|
2025-04-03 20:25:25 +08:00
|
|
|
|
}
|
2025-04-03 16:41:54 +08:00
|
|
|
|
}
|
2025-07-07 18:46:02 +08:00
|
|
|
|
.buttoMore-filters{
|
|
|
|
|
|
width: 150px;
|
|
|
|
|
|
}
|
|
|
|
|
|
.filters-img{
|
|
|
|
|
|
width: 30px;
|
|
|
|
|
|
}
|
2025-04-14 21:52:19 +08:00
|
|
|
|
.el-dialog {
|
|
|
|
|
|
--el-dialog-font-line-height: 50px;
|
|
|
|
|
|
--el-dialog-width: 600px;
|
|
|
|
|
|
--el-dialog-border-radius: 8px;
|
2025-06-24 13:35:33 +08:00
|
|
|
|
|
|
|
|
|
|
// border: 10px solid @bg-color-light;
|
2025-04-14 21:52:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-03 16:41:54 +08:00
|
|
|
|
.center-line {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
// justify-content: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.center-justify {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-around;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.center-align {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.center-flex {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
}
|
2025-04-09 21:07:15 +08:00
|
|
|
|
</style>
|
|
|
|
|
|
|
2025-06-24 13:35:33 +08:00
|
|
|
|
<style scoped lang="less">
|
2025-04-09 21:07:15 +08:00
|
|
|
|
::v-deep(.el-input__wrapper) {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
background-color: #f2faf9;
|
2025-06-24 13:35:33 +08:00
|
|
|
|
border: 1px solid @bg-color;
|
2025-04-14 21:52:19 +08:00
|
|
|
|
height: 44px;
|
2025-04-09 21:07:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
::v-deep(.el-select__wrapper) {
|
2025-07-01 21:22:43 +08:00
|
|
|
|
background-color: #f2faf9;
|
2025-06-24 13:35:33 +08:00
|
|
|
|
border: 1px solid @bg-color;
|
2025-04-09 21:07:15 +08:00
|
|
|
|
height: 48px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
::v-deep(.el-pagination.is-background .el-pager li.is-active) {
|
2025-06-24 13:35:33 +08:00
|
|
|
|
background-color: @bg-color;
|
2025-04-09 21:07:15 +08:00
|
|
|
|
}
|
2025-07-09 13:27:43 +08:00
|
|
|
|
.right-input {
|
|
|
|
|
|
margin-left: 20px;
|
|
|
|
|
|
}
|
|
|
|
|
|
.right-text{
|
|
|
|
|
|
color: #666;
|
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
|
}
|
2025-06-24 13:35:33 +08:00
|
|
|
|
</style>
|