|
@@ -3,8 +3,8 @@
|
|
|
<div class="layout-padding-auto layout-padding-view">
|
|
|
<el-row shadow="hover" v-show="showSearch" class="ml10">
|
|
|
<el-form :inline="true" :model="state.queryForm" @keyup.enter="getDataList" ref="queryRef">
|
|
|
- <el-form-item :label="$t('marketingApps.name')" prop="domain">
|
|
|
- <el-input :placeholder="$t('marketingApps.inputNameTip')" clearable
|
|
|
+ <el-form-item :label="t('marketingApps.name')" prop="domain">
|
|
|
+ <el-input :placeholder="t('marketingApps.inputNameTip')" clearable
|
|
|
v-model="state.queryForm.domain" />
|
|
|
</el-form-item>
|
|
|
<el-form-item :label="'应用ID'" prop="appId">
|
|
@@ -21,10 +21,10 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item>
|
|
|
<el-button @click="query" class="ml10" icon="search" type="primary">
|
|
|
- {{ $t('common.queryBtn') }}
|
|
|
+ {{ t('common.queryBtn') }}
|
|
|
</el-button>
|
|
|
- <el-button @click="resetQuery" icon="Refresh">{{ $t('common.resetBtn') }}</el-button>
|
|
|
- <el-button @click="handleEdit" icon="EditPen">{{ $t('common.editBtn') }}</el-button>
|
|
|
+ <el-button @click="resetQuery" icon="Refresh">{{ t('common.resetBtn') }}</el-button>
|
|
|
+ <el-button @click="handleEdit" icon="EditPen" :disabled="activeName === 'tab2'">{{ t('common.editBtn') }}</el-button>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</el-row>
|
|
@@ -35,7 +35,7 @@
|
|
|
</div>
|
|
|
</el-row> -->
|
|
|
|
|
|
- <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
|
|
+ <el-tabs v-model="activeName" class="table-tabs" @tab-click="handleClick">
|
|
|
<el-tab-pane label="使用中" name="tab1"></el-tab-pane>
|
|
|
<el-tab-pane label="回收站" name="tab2"></el-tab-pane>
|
|
|
</el-tabs>
|
|
@@ -43,114 +43,50 @@
|
|
|
<el-table @selection-change="handleSelectionChange" ref="tableRef" :data="state.dataList" row-key="path"
|
|
|
style="width: 100%" v-loading="state.loading" border :cell-style="tableStyle.cellStyle"
|
|
|
:header-cell-style="tableStyle?.headerCellStyle">
|
|
|
- <el-table-column type="selection" fixed="left" width="55" />
|
|
|
- <el-table-column fixed="left" :label="$t('marketingApps.id')" prop="id" width="80" show-overflow-tooltip>
|
|
|
+ <el-table-column type="selection" fixed="left" width="55" v-if="activeName == 'tab1'" />
|
|
|
+ <el-table-column fixed="left" :label="t('marketingApps.id')" prop="id" width="80" show-overflow-tooltip>
|
|
|
<template #default="{ row }">{{ row.id }}</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column :label="$t('marketingApps.appId')" prop="appId" width="120" show-overflow-tooltip>
|
|
|
+ <el-table-column :label="t('marketingApps.appId')" prop="appId" width="120" show-overflow-tooltip>
|
|
|
<template #default="{ row }">{{ row.appId }}</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column :label="$t('marketingApps.appImg')" prop="appImg" width="150" show-overflow-tooltip>
|
|
|
+ <el-table-column :label="t('marketingApps.appImg')" prop="appImg" width="150" show-overflow-tooltip>
|
|
|
<template #default="{ row }" style="display: flex; align-self: center;">
|
|
|
- <el-image style="width: 100px; height: 100px" :src="row.appImg" :fit="fit" />
|
|
|
+ <el-image style="width: 80px; height: 80px" :src="row.appImg" :fit="fit" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column :label="$t('marketingApps.name')" prop="appName" width="150" show-overflow-tooltip>
|
|
|
+ <el-table-column :label="t('marketingApps.name')" prop="appName" width="150" show-overflow-tooltip>
|
|
|
<template #default="{ row }">
|
|
|
<el-link :href="row.url">{{ row.appName }}</el-link>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column :label="$t('marketingApps.appType')" prop="appType" width="110" show-overflow-tooltip>
|
|
|
+ <el-table-column :label="t('marketingApps.appType')" prop="domainType" width="110" show-overflow-tooltip>
|
|
|
<template #default="{ row }">
|
|
|
- <el-select v-model="row.appType" placeholder="" style="width: 80px">
|
|
|
+ <el-select :disabled="activeName === 'tab2'" v-model="row.domainType" placeholder="" style="width: 80px">
|
|
|
<el-option v-for="item in appTypes" :key="item.value" :label="item.description" :value="item.value" />
|
|
|
</el-select>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="营销投放" prop="isMarketing" width="120">
|
|
|
+ <el-table-column label="营销投放" prop="launch" width="120">
|
|
|
<template #default="{ row }">
|
|
|
- <el-switch v-model="row.isMarketing" inline-prompt :active-value="1"
|
|
|
- :inactive-value="0" @change="handleChange(row)" />
|
|
|
- <!-- active-text="开启" inactive-text="关闭" -->
|
|
|
+ <el-switch :disabled="activeName === 'tab2'" v-model="row.launch" inline-prompt :active-value="true"
|
|
|
+ :inactive-value="false" @change="handleChange(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="域名限制" prop="isHttp" width="120">
|
|
|
+ <el-table-column label="域名限制" prop="domainLimit" width="120">
|
|
|
<template #default="{ row }">
|
|
|
- <el-switch v-model="row.isHttp" inline-prompt :active-value="1"
|
|
|
- :inactive-value="0" @change="handleChange(row)" />
|
|
|
- <!-- active-text="开启" inactive-text="关闭" -->
|
|
|
+ <el-switch :disabled="activeName === 'tab2'" v-model="row.domainLimit" inline-prompt :active-value="true"
|
|
|
+ :inactive-value="false" @change="handleChange(row)" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="domains" width="240" show-overflow-tooltip>
|
|
|
- <template #header>
|
|
|
- <span style="display: inline-block; align-items: center;">
|
|
|
- 域名集合
|
|
|
- <el-tooltip effect="light" content="鼠标悬浮查看域名分组详情" placement="top">
|
|
|
- <el-icon><Warning /></el-icon>
|
|
|
- </el-tooltip>
|
|
|
- </span>
|
|
|
- </template>
|
|
|
+ <el-table-column :label="'域名集合'" prop="domains" width="280" show-overflow-tooltip>
|
|
|
<template #default="{ row }">
|
|
|
- <div style="
|
|
|
- padding: 0 20px;
|
|
|
- text-wrap: auto;
|
|
|
- text-align: left;
|
|
|
- ">
|
|
|
- <el-tooltip effect="light">
|
|
|
- <template #content>
|
|
|
- <div v-for="(item, index) in row.domains" :key="index">{{ item.domain }};</div>
|
|
|
- </template>
|
|
|
- <el-text line-clamp="6">
|
|
|
- <template v-for="(item, index) in row.domains" :key="index">
|
|
|
- <div>{{ item.domain }};</div>
|
|
|
- </template>
|
|
|
- </el-text>
|
|
|
- </el-tooltip>
|
|
|
- </div>
|
|
|
+ <DomainList :domainList="row.domains" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="ips" width="300">
|
|
|
- <template #header>
|
|
|
- <span style="display: inline-block; align-items: center;">
|
|
|
- IP集合
|
|
|
- <el-tooltip effect="light" content="鼠标悬浮查看ip分组详情" placement="top">
|
|
|
- <el-icon><Warning /></el-icon>
|
|
|
- </el-tooltip>
|
|
|
- </span>
|
|
|
- </template>
|
|
|
+ <el-table-column :label="'IP集合'" prop="ips" width="320">
|
|
|
<template #default="{ row }">
|
|
|
- <div style="
|
|
|
- padding: 0 20px;
|
|
|
- text-wrap: auto;
|
|
|
- text-align: left;
|
|
|
- ">
|
|
|
- <div style="text-align: left;">白名单:</div>
|
|
|
- <el-tooltip effect="light">
|
|
|
- <template #content>
|
|
|
- <div v-for="(item, index) in row.ips" :key="index">
|
|
|
- {{ item.ipType == 1 ? item.startIp + ';' : '' }}
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <el-text line-clamp="4">
|
|
|
- <template v-for="(item, index) in row.ips" :key="index">
|
|
|
- <div>{{ item.ipType == 1 ? item.startIp + ';' : '' }}</div>
|
|
|
- </template>
|
|
|
- </el-text>
|
|
|
- </el-tooltip>
|
|
|
- <div style="text-align: left;">黑名单:</div>
|
|
|
- <el-tooltip effect="light">
|
|
|
- <template #content>
|
|
|
- <div v-for="(item, index) in row.ips" :key="index">
|
|
|
- {{ item.ipType == 2 ? item.startIp + ';' : '' }}
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <el-text line-clamp="4">
|
|
|
- <template v-for="(item, index) in row.ips" :key="index">
|
|
|
- <div>{{ item.ipType == 2 ? item.startIp + ';' : '' }}</div>
|
|
|
- </template>
|
|
|
- </el-text>
|
|
|
- </el-tooltip>
|
|
|
- </div>
|
|
|
+ <IpList :ipList="row.ips" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column :label="'触发频率'" prop="triggerRule" width="150" show-overflow-tooltip>
|
|
@@ -159,37 +95,65 @@
|
|
|
{{ row.triggerNum }}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column :label="$t('marketingApps.triggerRule')" width="200" prop="triggerRule" show-overflow-tooltip>
|
|
|
+ <el-table-column :label="t('marketingApps.triggerRule')" width="140" prop="triggerRule" show-overflow-tooltip>
|
|
|
<template #default="{ row }">
|
|
|
- <el-select v-model="row.triggerRule" placeholder="" style="width: 160px">
|
|
|
+ <el-select :disabled="activeName === 'tab2'" v-model="row.triggerRule" placeholder="" style="width: 100px">
|
|
|
<el-option v-for="item in triggerRules" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
</el-select>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column fixed="right" :label="$t('common.action')" width="80">
|
|
|
+ <el-table-column fixed="right" :label="t('common.action')" width="200">
|
|
|
<template #default="scope">
|
|
|
<div class="action" style="text-align: left;">
|
|
|
- <el-button style="margin-left: 0;" icon="edit-pen" @click="onOpenEditMenu('edit', scope.row)" text type="primary"
|
|
|
- v-auth="'sys_menu_edit'">修改
|
|
|
- </el-button>
|
|
|
- <el-button style="margin-left: 0;" icon="TrendCharts" @click="onOpenStatistical(scope.row)" text type="primary"
|
|
|
- v-auth="'sys_menu_edit'">统计
|
|
|
- </el-button>
|
|
|
- <el-button
|
|
|
- :type="activeName == 'tab1' ? 'danger' : 'success'"
|
|
|
- style="margin-left: 0;"
|
|
|
- :icon="activeName == 'tab1' ? 'delete' : 'refresh'"
|
|
|
- @click="handleDelete(scope.row)" text
|
|
|
+ <el-button :disabled="activeName == 'tab2'" style="margin-right: 0px;" @click="onOpenEditMenu('edit', scope.row)" text type="primary"
|
|
|
+ v-auth="'sys_menu_edit'">
|
|
|
+ <svg style="margin-right: 5px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
|
|
|
+ <mask id="mask0_362_1714" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="16" height="16">
|
|
|
+ <rect width="16" height="16" fill="#D9D9D9"/>
|
|
|
+ </mask>
|
|
|
+ <g mask="url(#mask0_362_1714)">
|
|
|
+ <path d="M4.60017 12.2954L5.97782 12.2954C6.50827 12.2955 7.017 12.0847 7.39208 11.7097L13.7925 5.30925C14.4017 4.70003 14.4017 3.71229 13.7925 3.10308V3.10308C13.1833 2.49386 12.1955 2.49387 11.5863 3.10308L5.18591 9.5035C4.81082 9.87859 4.60011 10.3873 4.60012 10.9178L4.60017 12.2954Z" stroke="#167AF0" stroke-linejoin="round"/>
|
|
|
+ <path d="M10.4832 4.20593L12.6893 6.41211" stroke="#167AF0" stroke-linecap="round" stroke-linejoin="round"/>
|
|
|
+ <path d="M8.5 2H4C2.89543 2 2 2.89543 2 4V13C2 14.1046 2.89543 15 4 15H13C14.1046 15 15 14.1046 15 13V8.5" stroke="#167AF0" stroke-linecap="round"/>
|
|
|
+ </g>
|
|
|
+ </svg>
|
|
|
+ 修改</el-button>
|
|
|
+ <el-button style="margin-right: 0px;" @click="onOpenStatistical(scope.row)" text type="primary"
|
|
|
v-auth="'sys_menu_edit'">
|
|
|
- {{ activeName == 'tab1' ? '拉黑' : '还原' }}
|
|
|
- </el-button>
|
|
|
+ <svg style="margin-right: 5px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
|
|
|
+ <path d="M2 6V3C2 2.44772 2.44772 2 3 2H13C13.5523 2 14 2.44772 14 3V6" stroke="#167AF0" stroke-linecap="round" stroke-linejoin="round"/>
|
|
|
+ <path d="M10.6667 8V10.3333" stroke="#167AF0" stroke-linecap="round" stroke-linejoin="round"/>
|
|
|
+ <path d="M8 5V10.3333" stroke="#167AF0" stroke-linecap="round" stroke-linejoin="round"/>
|
|
|
+ <path d="M5.33325 6.33334V10.3333" stroke="#167AF0" stroke-linecap="round" stroke-linejoin="round"/>
|
|
|
+ <path d="M2 10V13C2 13.5523 2.44772 14 3 14H13C13.5523 14 14 13.5523 14 13V10" stroke="#167AF0" stroke-linecap="round" stroke-linejoin="round"/>
|
|
|
+ </svg>
|
|
|
+ 统计</el-button>
|
|
|
+ <el-button v-if="activeName == 'tab1'" style="margin-right: 0px;" @click="handleDelete(scope.row)" text type="danger"
|
|
|
+ v-auth="'sys_menu_edit'">
|
|
|
+ <svg style="margin-right: 5px;" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
|
|
|
+ <g clip-path="url(#clip0_35_722)">
|
|
|
+ <path d="M3 3.33334V12.6667C3 13.7712 3.89543 14.6667 5 14.6667H11C12.1046 14.6667 13 13.7712 13 12.6667V3.33334H3Z" stroke="#E64242" stroke-linejoin="round"/>
|
|
|
+ <path d="M6.66675 6.66666V11" stroke="#E64242" stroke-linecap="round" stroke-linejoin="round"/>
|
|
|
+ <path d="M9.33325 6.66666V11" stroke="#E64242" stroke-linecap="round" stroke-linejoin="round"/>
|
|
|
+ <path d="M1.33325 3.33334H14.6666" stroke="#E64242" stroke-linecap="round" stroke-linejoin="round"/>
|
|
|
+ <path d="M5.33325 3.33334L6.42959 1.33334H9.59229L10.6666 3.33334H5.33325Z" stroke="#E64242" stroke-linejoin="round"/>
|
|
|
+ </g>
|
|
|
+ <defs>
|
|
|
+ <clipPath id="clip0_35_722">
|
|
|
+ <rect width="16" height="16" fill="white"/>
|
|
|
+ </clipPath>
|
|
|
+ </defs>
|
|
|
+ </svg>
|
|
|
+ 拉黑</el-button>
|
|
|
+ <el-button v-if="activeName == 'tab2'" style="margin-right: 0px;" icon="refresh" @click="handleDelete(scope.row)" text type="success"
|
|
|
+ v-auth="'sys_menu_edit'">还原</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
|
|
|
</div>
|
|
|
- <MenuDialog @refresh="getDataList()" ref="menuDialogRef" />
|
|
|
+ <EditDialog @refresh="getDataList()" ref="EditDialogRef" />
|
|
|
<StatisticalDialog @refresh="getDataList()" ref="statisticalDialogRef" />
|
|
|
</div>
|
|
|
</template>
|
|
@@ -201,13 +165,14 @@ import { useMessage, useMessageBox } from '/@/hooks/message';
|
|
|
import { useI18n } from 'vue-i18n';
|
|
|
import { fetchItemList } from '/@/api/admin/dict';
|
|
|
import { ref } from 'vue'
|
|
|
-const MenuDialog = defineAsyncComponent(() => import('./components/form.vue'));
|
|
|
+const EditDialog = defineAsyncComponent(() => import('./components/form.vue'));
|
|
|
const StatisticalDialog = defineAsyncComponent(() => import('./components/statistical.vue'));
|
|
|
+const IpList = defineAsyncComponent(() => import('./components/ipList.vue'));
|
|
|
+const DomainList = defineAsyncComponent(() => import('./components/domainList.vue'));
|
|
|
|
|
|
-import { ElMessage, ElNotification, messageConfig, type TabsPaneContext } from 'element-plus'
|
|
|
+import { ElMessage, type TabsPaneContext } from 'element-plus'
|
|
|
|
|
|
const activeName = ref('tab1')
|
|
|
-
|
|
|
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
|
|
console.log(tab, event);
|
|
|
query();
|
|
@@ -216,7 +181,7 @@ const handleClick = (tab: TabsPaneContext, event: Event) => {
|
|
|
const { t } = useI18n();
|
|
|
// 定义变量内容
|
|
|
const tableRef = ref();
|
|
|
-const menuDialogRef = ref();
|
|
|
+const EditDialogRef = ref();
|
|
|
const statisticalDialogRef = ref();
|
|
|
const queryRef = ref();
|
|
|
const showSearch = ref(true);
|
|
@@ -225,7 +190,7 @@ const selectObjs = ref([]) as any;
|
|
|
// 是否可以多选
|
|
|
const multiple = ref(true);
|
|
|
const state: BasicTableProps = reactive<BasicTableProps>({
|
|
|
- pageList: pageList, // H
|
|
|
+ pageList: pageList,
|
|
|
queryForm: {
|
|
|
domain: '',
|
|
|
appType: '',
|
|
@@ -270,6 +235,7 @@ const handleChange = (row: any) => {
|
|
|
// }).catch((err: any) => {
|
|
|
// useMessage().error(err.msg);
|
|
|
// });
|
|
|
+ useMessage().success('修改成功');
|
|
|
};
|
|
|
|
|
|
// 清空搜索条件
|
|
@@ -285,8 +251,8 @@ const handleEdit = () => {
|
|
|
useMessage().warning('请选择要修改的项');
|
|
|
return;
|
|
|
}
|
|
|
- menuDialogRef.value.openDialog('', {});
|
|
|
- // menuDialogRef.value.openDialog('edit', selectObjs.value);
|
|
|
+ EditDialogRef.value.openDialog('', {});
|
|
|
+ // EditDialogRef.value.openDialog('edit', selectObjs.value);
|
|
|
};
|
|
|
|
|
|
// 多选
|
|
@@ -296,7 +262,7 @@ const handleSelectionChange = (selection: any) => {
|
|
|
|
|
|
// 打开编辑菜单弹窗
|
|
|
const onOpenEditMenu = (type: string, row: any) => {
|
|
|
- menuDialogRef.value.openDialog(type, row);
|
|
|
+ EditDialogRef.value.openDialog(type, row);
|
|
|
};
|
|
|
|
|
|
// 打开统计弹窗
|
|
@@ -337,4 +303,8 @@ const handleDelete = async (row: any) => {
|
|
|
:deep(.el-link.is-underline:hover:after) {
|
|
|
display: none;
|
|
|
}
|
|
|
+
|
|
|
+.table-tabs {
|
|
|
+ margin-bottom: 10px;
|
|
|
+}
|
|
|
</style>
|