|
@@ -19,14 +19,17 @@
|
|
<Title class="ml-4" :title="t('marketingConfig.domainList')" />
|
|
<Title class="ml-4" :title="t('marketingConfig.domainList')" />
|
|
<div class="p-4 rounded">
|
|
<div class="p-4 rounded">
|
|
<el-button type="primary" @click="onClickAdd('domain')">{{ t('marketingConfig.addDomainList') }}</el-button>
|
|
<el-button type="primary" @click="onClickAdd('domain')">{{ t('marketingConfig.addDomainList') }}</el-button>
|
|
- <JCollapse
|
|
|
|
- @update="(item) => onClickEdit(item, 'domain')"
|
|
|
|
- :data="domainData"
|
|
|
|
- @delete="(item) => onOpenDelete(item, 'domain')"
|
|
|
|
- :activeNames="domainActiveId"
|
|
|
|
- :deleteText="t('marketingConfig.deleteListText')"
|
|
|
|
- :updateText="t('marketingConfig.updateText')"
|
|
|
|
- />
|
|
|
|
|
|
+ <div v-if="domainData.length > 0">
|
|
|
|
+ <JCollapse
|
|
|
|
+ @update="(item) => onClickEdit(item, 'domain')"
|
|
|
|
+ :data="domainData"
|
|
|
|
+ @delete="(item) => onOpenDelete(item, 'domain')"
|
|
|
|
+ :activeNames="domainActiveId"
|
|
|
|
+ :deleteText="t('marketingConfig.deleteListText')"
|
|
|
|
+ :updateText="t('marketingConfig.updateText')"
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+ <div v-else class="ml-2">暂无数据</div>
|
|
</div>
|
|
</div>
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
<el-tab-pane :label="t('marketingConfig.disposition')" name="全局配置" class="layout-padding-auto layout-padding-view">
|
|
<el-tab-pane :label="t('marketingConfig.disposition')" name="全局配置" class="layout-padding-auto layout-padding-view">
|
|
@@ -43,33 +46,76 @@
|
|
<template #default>
|
|
<template #default>
|
|
<div class="border-b p-2 items-center flex flex-wrap">
|
|
<div class="border-b p-2 items-center flex flex-wrap">
|
|
<span class="mr-2">白名单</span>
|
|
<span class="mr-2">白名单</span>
|
|
- <el-popover v-for="item in data" :key="item.id" width="200" trigger="hover" placement="top">
|
|
|
|
- <div class="flex flex-wrap">
|
|
|
|
- <span v-for="ip in item.list" :key="ip" class="ml-2">
|
|
|
|
- {{ ip }}
|
|
|
|
- </span>
|
|
|
|
- </div>
|
|
|
|
- <template #reference>
|
|
|
|
- <el-tag effect="light" color="#f4f4f4" :closable="closeIpTags" round class="ml-1 cursor-pointer">
|
|
|
|
- {{ item.title }}
|
|
|
|
- </el-tag>
|
|
|
|
- </template>
|
|
|
|
- </el-popover>
|
|
|
|
|
|
+ <span v-for="item in ipWhiteList" :key="item.id">
|
|
|
|
+ <el-popover v-if="item?.sourceType === 1" width="280" @show="onLoadDetail(item)" trigger="hover" placement="top">
|
|
|
|
+ <div v-if="item.list.length > 0" class="flex flex-wrap">
|
|
|
|
+ <span v-for="ip in item.list" :key="ip" class="ml-2">
|
|
|
|
+ {{ ip }}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-else>暂无数据</div>
|
|
|
|
+ <template #reference>
|
|
|
|
+ <el-tag
|
|
|
|
+ effect="light"
|
|
|
|
+ color="#f4f4f4"
|
|
|
|
+ :closable="closeIpTags"
|
|
|
|
+ @close="handleDelete(item, 'ip')"
|
|
|
|
+ round
|
|
|
|
+ class="ml-1 cursor-pointer"
|
|
|
|
+ >
|
|
|
|
+ {{ item.groupName }}
|
|
|
|
+ </el-tag>
|
|
|
|
+ </template>
|
|
|
|
+ </el-popover>
|
|
|
|
+ <el-tag
|
|
|
|
+ v-else
|
|
|
|
+ effect="light"
|
|
|
|
+ color="#f4f4f4"
|
|
|
|
+ :closable="closeIpTags"
|
|
|
|
+ @close="handleDelete(item, 'ip')"
|
|
|
|
+ round
|
|
|
|
+ class="ml-1 cursor-pointer"
|
|
|
|
+ >
|
|
|
|
+ {{ ipSplicing(item.startIp, item.endIp) }}
|
|
|
|
+ </el-tag>
|
|
|
|
+ </span>
|
|
</div>
|
|
</div>
|
|
<div class="p-2 items-center flex flex-wrap">
|
|
<div class="p-2 items-center flex flex-wrap">
|
|
<span class="mr-2">黑名单</span>
|
|
<span class="mr-2">黑名单</span>
|
|
- <el-popover v-for="item in data" :key="item.id" width="200" trigger="hover" placement="top">
|
|
|
|
- <div class="flex flex-wrap">
|
|
|
|
- <span v-for="ip in item.list" :key="ip" class="ml-2">
|
|
|
|
- {{ ip }}
|
|
|
|
- </span>
|
|
|
|
- </div>
|
|
|
|
- <template #reference>
|
|
|
|
- <el-tag effect="light" color="#f4f4f4" :closable="closeIpTags" round class="ml-1 cursor-pointer">
|
|
|
|
- {{ item.title }}
|
|
|
|
- </el-tag>
|
|
|
|
- </template>
|
|
|
|
- </el-popover>
|
|
|
|
|
|
+
|
|
|
|
+ <span v-for="item in ipBlackList" :key="item.id">
|
|
|
|
+ <el-popover v-if="item?.sourceType === 1" width="280" @show="onLoadDetail(item, ipList)" trigger="hover" placement="top">
|
|
|
|
+ <div v-if="item.list.length > 0" class="flex flex-wrap">
|
|
|
|
+ <span v-for="ip in item.list" :key="ip" class="ml-2">
|
|
|
|
+ {{ ip }}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-else>暂无数据</div>
|
|
|
|
+ <template #reference>
|
|
|
|
+ <el-tag
|
|
|
|
+ effect="light"
|
|
|
|
+ color="#f4f4f4"
|
|
|
|
+ :closable="closeIpTags"
|
|
|
|
+ @close="handleDelete(item, 'ip')"
|
|
|
|
+ round
|
|
|
|
+ class="ml-1 cursor-pointer"
|
|
|
|
+ >
|
|
|
|
+ {{ item.groupName }}
|
|
|
|
+ </el-tag>
|
|
|
|
+ </template>
|
|
|
|
+ </el-popover>
|
|
|
|
+ <el-tag
|
|
|
|
+ v-else
|
|
|
|
+ effect="light"
|
|
|
|
+ color="#f4f4f4"
|
|
|
|
+ :closable="closeIpTags"
|
|
|
|
+ @close="handleDelete(item, 'ip')"
|
|
|
|
+ round
|
|
|
|
+ class="ml-1 cursor-pointer"
|
|
|
|
+ >
|
|
|
|
+ {{ ipSplicing(item.startIp, item.endIp) }}
|
|
|
|
+ </el-tag>
|
|
|
|
+ </span>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</JCollapse>
|
|
</JCollapse>
|
|
@@ -85,42 +131,60 @@
|
|
>
|
|
>
|
|
<template #default>
|
|
<template #default>
|
|
<div class="p-2 items-center flex flex-wrap">
|
|
<div class="p-2 items-center flex flex-wrap">
|
|
- <el-tag
|
|
|
|
- v-for="item in whiteList"
|
|
|
|
- :key="item"
|
|
|
|
- effect="light"
|
|
|
|
- :closable="closeDomainTags"
|
|
|
|
- color="#f4f4f4"
|
|
|
|
- round
|
|
|
|
- class="ml-1 cursor-pointer"
|
|
|
|
- >
|
|
|
|
- {{ item.label }}
|
|
|
|
- </el-tag>
|
|
|
|
|
|
+ <span v-if="domainList.length > 0">
|
|
|
|
+ <span v-for="item in domainList" :key="item.id">
|
|
|
|
+ <el-popover v-if="item?.sourceType === 1" width="280" @show="onLoadDetail(item)" trigger="hover" placement="top">
|
|
|
|
+ <div v-if="item.list.length > 0" class="flex flex-wrap">
|
|
|
|
+ <span v-for="domain in item.list" :key="domain.id" class="ml-2">
|
|
|
|
+ {{ domain.domain }}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-else>暂无数据</div>
|
|
|
|
+ <template #reference>
|
|
|
|
+ <el-tag
|
|
|
|
+ effect="light"
|
|
|
|
+ color="#f4f4f4"
|
|
|
|
+ :closable="closeDomainTags"
|
|
|
|
+ @close="handleDelete(item, 'domain')"
|
|
|
|
+ round
|
|
|
|
+ class="ml-1 cursor-pointer"
|
|
|
|
+ >
|
|
|
|
+ {{ item.groupName }}
|
|
|
|
+ </el-tag>
|
|
|
|
+ </template>
|
|
|
|
+ </el-popover>
|
|
|
|
+ <el-tag
|
|
|
|
+ v-else
|
|
|
|
+ effect="light"
|
|
|
|
+ color="#f4f4f4"
|
|
|
|
+ :closable="closeDomainTags"
|
|
|
|
+ @close="handleDelete(item, 'domain')"
|
|
|
|
+ round
|
|
|
|
+ class="ml-1 cursor-pointer"
|
|
|
|
+ >
|
|
|
|
+ {{ item.domain }}
|
|
|
|
+ </el-tag>
|
|
|
|
+ </span>
|
|
|
|
+ </span>
|
|
|
|
+ <div class="text-gray-400 ml-2" v-else>--</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</JCollapse>
|
|
</JCollapse>
|
|
</div>
|
|
</div>
|
|
<div class="w-[66%] ml-[-8px] mt-5">
|
|
<div class="w-[66%] ml-[-8px] mt-5">
|
|
- <el-form ref="menuDialogFormRef" :model="formData" :rule="dataRules" label-width="90px" class="flex flex-wrap">
|
|
|
|
|
|
+ <el-form ref="menuDialogFormRef" :model="formData" :rules="dataRules" label-width="90px" class="flex flex-wrap">
|
|
<el-form-item :label="t('marketingConfig.jumpMode')" prop="jumpMode" class="w-1/3">
|
|
<el-form-item :label="t('marketingConfig.jumpMode')" prop="jumpMode" class="w-1/3">
|
|
- <el-select v-model="formData.jumpMode" :placeholder="t('marketingConfig.jumpModeTip')" clearable>
|
|
|
|
|
|
+ <el-select v-model="formData.jumpMode" :placeholder="t('marketingConfig.jumpModeTip')">
|
|
<el-option v-for="item in listSelect" :key="item.value" :label="item.label" :value="item.value" />
|
|
<el-option v-for="item in listSelect" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item :label="t('marketingConfig.triggerType')" prop="triggerType" class="w-1/3">
|
|
<el-form-item :label="t('marketingConfig.triggerType')" prop="triggerType" class="w-1/3">
|
|
- <el-select v-model="formData.triggerType" :placeholder="t('marketingConfig.triggerTypeTip')" clearable>
|
|
|
|
|
|
+ <el-select v-model="formData.triggerType" :placeholder="t('marketingConfig.triggerTypeTip')">
|
|
<el-option v-for="item in triggerSelect" :key="item.value" :label="item.label" :value="item.value" />
|
|
<el-option v-for="item in triggerSelect" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item :label="t('marketingConfig.triggerFrequency')" prop="triggerFrequency" class="w-1/3">
|
|
<el-form-item :label="t('marketingConfig.triggerFrequency')" prop="triggerFrequency" class="w-1/3">
|
|
- <el-input-number
|
|
|
|
- v-model="formData.triggerFrequency"
|
|
|
|
- class="!w-40"
|
|
|
|
- :min="1"
|
|
|
|
- :max="20"
|
|
|
|
- controls-position="right"
|
|
|
|
- :placeholder="t('marketingConfig.triggerFrequencyTip')"
|
|
|
|
- />
|
|
|
|
|
|
+ <el-input v-model="formData.triggerFrequency" type="text" :placeholder="t('marketingConfig.triggerFrequencyTip')" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
<div class="w-full mb-[18px]">
|
|
<div class="w-full mb-[18px]">
|
|
@@ -148,12 +212,12 @@
|
|
</div>
|
|
</div>
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
</el-tabs>
|
|
</el-tabs>
|
|
- <DomainEdit v-model:open="domainEditOpen" />
|
|
|
|
- <ListEdit v-model:open="listEditOpen" />
|
|
|
|
|
|
+ <DomainEdit :select-data="domainData" v-model:open="domainEditOpen" @onsuccess="getConfig" />
|
|
|
|
+ <ListEdit :select-data="ipData" v-model:open="listEditOpen" @onsuccess="getConfig" />
|
|
<GroupingEdit v-model:open="groupingEditOpen" :type="openType" @onsuccess="getData" />
|
|
<GroupingEdit v-model:open="groupingEditOpen" :type="openType" @onsuccess="getData" />
|
|
<IpListEdit :type="openType" ref="menuDialogRef" @onsuccess="getData" />
|
|
<IpListEdit :type="openType" ref="menuDialogRef" @onsuccess="getData" />
|
|
<el-dialog v-model="delOpen" title="提示" width="500" @close="delOpen = false">
|
|
<el-dialog v-model="delOpen" title="提示" width="500" @close="delOpen = false">
|
|
- <span>确认删除{{ delObj?.title }}分组吗?</span>
|
|
|
|
|
|
+ <span>确认删除{{ delObj?.title }}吗?</span>
|
|
<template #footer>
|
|
<template #footer>
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
<el-button @click="delOpen = false">取消</el-button>
|
|
<el-button @click="delOpen = false">取消</el-button>
|
|
@@ -165,7 +229,16 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script lang="ts" name="marketingConfig" setup>
|
|
<script lang="ts" name="marketingConfig" setup>
|
|
-import { delGroup, pageListDomain, pageListIp ,getConfigIpList } from '/@/api/marketing/config';
|
|
|
|
|
|
+import {
|
|
|
|
+ delGroup,
|
|
|
|
+ pageListDomain,
|
|
|
|
+ pageListIp,
|
|
|
|
+ getConfigIpList,
|
|
|
|
+ getConfigDomainList,
|
|
|
|
+ delIpList,
|
|
|
|
+ delDomainList,
|
|
|
|
+ getGroupDetail,
|
|
|
|
+} from '/@/api/marketing/config';
|
|
import { useI18n } from 'vue-i18n';
|
|
import { useI18n } from 'vue-i18n';
|
|
import { useMessage } from '/@/hooks/message';
|
|
import { useMessage } from '/@/hooks/message';
|
|
import { rule } from '/@/utils/validate';
|
|
import { rule } from '/@/utils/validate';
|
|
@@ -180,7 +253,7 @@ const GroupingEdit = defineAsyncComponent(() => import('./components/ipGroupingE
|
|
const IpListEdit = defineAsyncComponent(() => import('./components/ipListEdit.vue'));
|
|
const IpListEdit = defineAsyncComponent(() => import('./components/ipListEdit.vue'));
|
|
const { t } = useI18n();
|
|
const { t } = useI18n();
|
|
// 定义变量内容
|
|
// 定义变量内容
|
|
-const activeName = ref('IP分组');
|
|
|
|
|
|
+const activeName = ref('全局配置');
|
|
//关闭或打开tabs的关闭按钮
|
|
//关闭或打开tabs的关闭按钮
|
|
const closeDomainTags = ref(false);
|
|
const closeDomainTags = ref(false);
|
|
const closeIpTags = ref(false);
|
|
const closeIpTags = ref(false);
|
|
@@ -201,6 +274,9 @@ const domainData = ref([]);
|
|
const ipData = ref([]);
|
|
const ipData = ref([]);
|
|
const delObj = ref({});
|
|
const delObj = ref({});
|
|
const openType = ref('ip'); // 'ip' or 'domain'
|
|
const openType = ref('ip'); // 'ip' or 'domain'
|
|
|
|
+const ipWhiteList = ref([]); // ip白名单
|
|
|
|
+const ipBlackList = ref([]); // ip黑名单
|
|
|
|
+const domainList = ref([]);
|
|
|
|
|
|
const listSelect = ref([
|
|
const listSelect = ref([
|
|
{
|
|
{
|
|
@@ -227,7 +303,6 @@ const triggerSelect = ref([
|
|
},
|
|
},
|
|
]);
|
|
]);
|
|
|
|
|
|
-const menuDialogFormRef = ref();
|
|
|
|
const formData = ref({
|
|
const formData = ref({
|
|
jumpMode: '1',
|
|
jumpMode: '1',
|
|
triggerType: '',
|
|
triggerType: '',
|
|
@@ -245,33 +320,32 @@ const onOpenDelete = (item: any, type: any) => {
|
|
};
|
|
};
|
|
const getData = () => {
|
|
const getData = () => {
|
|
openType.value === 'ip' ? getIpData() : getDomainData();
|
|
openType.value === 'ip' ? getIpData() : getDomainData();
|
|
-
|
|
|
|
|
|
+};
|
|
|
|
+const onLoadDetail = async (item: any) => {
|
|
|
|
+ if(item.list.length !== 0) return;
|
|
|
|
+ await getGroupDetail({ id: item.groupId }).then((val) => {
|
|
|
|
+ item.list = val.data.ips.map((item)=>{
|
|
|
|
+ return ipSplicing(item.startIp, item.endIp)
|
|
|
|
+ });
|
|
|
|
+ });
|
|
};
|
|
};
|
|
|
|
|
|
// // 表单校验规则
|
|
// // 表单校验规则
|
|
const dataRules = reactive({
|
|
const dataRules = reactive({
|
|
- jumpLink: [{ validator: rule.url, trigger: 'blur' }],
|
|
|
|
|
|
+ jumpLink: [
|
|
|
|
+ { required: true, message: '跳转连接不能为空', trigger: 'blur' },
|
|
|
|
+ { validator: rule.url, trigger: 'blur' },
|
|
|
|
+ ],
|
|
|
|
+ triggerFrequency: [
|
|
|
|
+ { required: true, message: '域名不能为空', trigger: 'blur' },
|
|
|
|
+ {
|
|
|
|
+ pattern: /^(10000|[1-9]\d{0,3}|0)$|^(100%|[1-9]?\d%|0%)$/,
|
|
|
|
+ message: '请输入 0-10000 的正整数或 0%-100% 的百分比',
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
});
|
|
});
|
|
|
|
|
|
-const data = ref([
|
|
|
|
- {
|
|
|
|
- title: '分组1',
|
|
|
|
- id: '1',
|
|
|
|
- list: ['192.168.1.1', '192.168.1.2', '192.168.1.3', '192.168.1.4'],
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: '分组2',
|
|
|
|
- id: '2',
|
|
|
|
- list: ['192.168.1.1', '192.168.1.2', '192.168.1.3', '192.168.1.4'],
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- title: '分组3',
|
|
|
|
- id: '3',
|
|
|
|
- list: ['192.168.1.1', '192.168.1.2', '192.168.1.3', '192.168.1.4'],
|
|
|
|
- },
|
|
|
|
-]);
|
|
|
|
-const whiteList = ref([{ label: '站大' }, { label: '站而' }, { label: '站撒' }, { label: '站爱' }]);
|
|
|
|
-
|
|
|
|
const onSubmit = () => {
|
|
const onSubmit = () => {
|
|
useMessage().success(t(formData.value ? 'common.editSuccessText' : 'common.addSuccessText'));
|
|
useMessage().success(t(formData.value ? 'common.editSuccessText' : 'common.addSuccessText'));
|
|
};
|
|
};
|
|
@@ -281,15 +355,39 @@ const handleClick = (data: any) => {
|
|
} else if (data.props.label === '域名分组') {
|
|
} else if (data.props.label === '域名分组') {
|
|
getDomainData();
|
|
getDomainData();
|
|
} else {
|
|
} else {
|
|
- getConfig()
|
|
|
|
|
|
+ getConfig();
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
+const handleDelete = async (item: any, type: string) => {
|
|
|
|
+ console.log(item, type);
|
|
|
|
+ delObj.value = { ...item, delListType: type };
|
|
|
|
+ delOpen.value = true;
|
|
|
|
+};
|
|
const onDel = async (data: any) => {
|
|
const onDel = async (data: any) => {
|
|
|
|
+ if (data?.delListType) {
|
|
|
|
+ try {
|
|
|
|
+ if (data?.delListType === 'ip') {
|
|
|
|
+ await delIpList(data.id);
|
|
|
|
+ useMessage().success(t('common.delSuccessText'));
|
|
|
|
+ } else if (data?.delListType === 'domain') {
|
|
|
|
+ await delDomainList(data.id);
|
|
|
|
+ useMessage().success(t('common.delSuccessText'));
|
|
|
|
+ }
|
|
|
|
+ } catch (err: any) {
|
|
|
|
+ useMessage().error(err.msg);
|
|
|
|
+ } finally {
|
|
|
|
+ loading.value = false;
|
|
|
|
+ delOpen.value = false;
|
|
|
|
+ getConfig();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
try {
|
|
try {
|
|
loading.value = true;
|
|
loading.value = true;
|
|
await delGroup({
|
|
await delGroup({
|
|
- ids: [data.id],
|
|
|
|
groupType: data.type === 'ip' ? 1 : 2,
|
|
groupType: data.type === 'ip' ? 1 : 2,
|
|
|
|
+ ids: [data.id],
|
|
});
|
|
});
|
|
useMessage().success(t('common.delSuccessText'));
|
|
useMessage().success(t('common.delSuccessText'));
|
|
} catch (err: any) {
|
|
} catch (err: any) {
|
|
@@ -315,15 +413,34 @@ const onClickEdit = (item: any, type: string) => {
|
|
const onOpenEditMenu = (type: string, row: any) => {
|
|
const onOpenEditMenu = (type: string, row: any) => {
|
|
menuDialogRef.value.openDialog(type, row);
|
|
menuDialogRef.value.openDialog(type, row);
|
|
};
|
|
};
|
|
-const getConfig = () => {
|
|
|
|
- configIp()
|
|
|
|
|
|
+const getConfig = () => {
|
|
|
|
+ configIp();
|
|
|
|
+ configDomain();
|
|
};
|
|
};
|
|
-const configIp = async()=>{
|
|
|
|
- await getConfigIpList().then((val) => {
|
|
|
|
- console.log(val.data);
|
|
|
|
|
|
+const configDomain = async () => {
|
|
|
|
+ await getConfigDomainList().then((val) => {
|
|
|
|
+ domainList.value = val.data.map((item) => {
|
|
|
|
+ return {
|
|
|
|
+ ...item,
|
|
|
|
+ list: [],
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+};
|
|
|
|
+const configIp = async () => {
|
|
|
|
+ await getConfigIpList().then((val) => {
|
|
|
|
+ ipWhiteList.value = val.data
|
|
|
|
+ .filter((item) => item.ipType === 1)
|
|
|
|
+ .map((item) => {
|
|
|
|
+ return { ...item, list: [] };
|
|
|
|
+ });
|
|
|
|
+ ipBlackList.value = val.data.filter((item) => item.ipType === 2).map((item) => {
|
|
|
|
+ return { ...item, list: [] };
|
|
|
|
+ });;
|
|
|
|
+ console.log(ipBlackList.value);
|
|
|
|
|
|
});
|
|
});
|
|
-}
|
|
|
|
|
|
+};
|
|
const getDomainData = async () => {
|
|
const getDomainData = async () => {
|
|
await pageListDomain().then((val) => {
|
|
await pageListDomain().then((val) => {
|
|
domainActiveId.value = [];
|
|
domainActiveId.value = [];
|
|
@@ -368,6 +485,7 @@ const getIpData = async () => {
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
//获取IP列表
|
|
//获取IP列表
|
|
getIpData();
|
|
getIpData();
|
|
|
|
+ getConfig();
|
|
});
|
|
});
|
|
</script>
|
|
</script>
|
|
<style lang="scss">
|
|
<style lang="scss">
|