|
@@ -2,8 +2,8 @@
|
|
|
<div class="apps-form">
|
|
|
<el-dialog :title="'修改营销配置'" width="880" v-model="visible" :close-on-click-modal="false" :destroy-on-close="true"
|
|
|
draggable>
|
|
|
- <el-form ref="appDialogFormRef" :model="state.ruleForm" class="demo-form-inline" v-loading="loading">
|
|
|
- <el-form-item :label="'应用名称'" prop="appName">
|
|
|
+ <el-form ref="appDialogFormRef" :rules="dataRules" :model="state.ruleForm" class="demo-form-inline" v-loading="loading">
|
|
|
+ <el-form-item v-if="state.ruleForm.appName" :label="'应用名称'" prop="appName">
|
|
|
<el-input style="width: 200px;" v-model="state.ruleForm.appName" disabled />
|
|
|
</el-form-item>
|
|
|
<el-row :gutter="20" style="margin-bottom: 15px;">
|
|
@@ -34,99 +34,14 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
- <JCollapse :data="[
|
|
|
- { title: 'IP集合', id: '1' },
|
|
|
- ]" @update="(item: any) => listEditOpen = true" @delete="(item: any) => ipDeletable = !ipDeletable"
|
|
|
- :deleteText="ipDeletable ? '取消' : t('marketingConfig.deleteText')" :updateText="'新增'"
|
|
|
- style="margin-top: 25px;" :activeNames="['1']">
|
|
|
- <template #default>
|
|
|
- <div class="border-b p-2 items-center flex flex-wrap collapse-group">
|
|
|
- <div class="collapse-group-name">白名单:</div>
|
|
|
- <div class="tag-content">
|
|
|
- <template v-for="item in ips.whitelist" :key="item.id">
|
|
|
- <!-- 具体IP(段) -->
|
|
|
- <el-tag v-if="item.sourceType == 2" effect="light" :closable="ipDeletable"
|
|
|
- @close="handleDeleteIp(item)" color="#f4f4f4" round class="ml-1 cursor-pointer"
|
|
|
- style="margin-bottom: 4px;">
|
|
|
- {{ item.startIp }}{{ item.ipMode == 2 ? (' / ' + item.endIp.split('.').pop()) : '' }}
|
|
|
- </el-tag>
|
|
|
- <!-- 分组 -->
|
|
|
- <el-popover v-else width="200" trigger="hover" placement="top">
|
|
|
- <div class="flex flex-wrap">
|
|
|
- {{ item.groupName }}
|
|
|
- </div>
|
|
|
- <template #reference>
|
|
|
- <el-tag @click="getIpList(item)" effect="light" :closable="ipDeletable"
|
|
|
- @close="handleDeleteIp(item)" color="#f4f4f4" round class="ml-1 cursor-pointer"
|
|
|
- style="margin-bottom: 4px;">
|
|
|
- {{ item.groupName }}
|
|
|
- </el-tag>
|
|
|
- </template>
|
|
|
- </el-popover>
|
|
|
- </template>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="p-2 items-center flex flex-wrap collapse-group">
|
|
|
- <div class="collapse-group-name">黑名单:</div>
|
|
|
- <div class="tag-content">
|
|
|
- <template v-for="item in ips.blacklist" :key="item.id">
|
|
|
- <!-- 具体IP(段) -->
|
|
|
- <el-tag v-if="item.sourceType == 2" effect="light" :closable="ipDeletable"
|
|
|
- @close="handleDeleteIp(item)" color="#f4f4f4" round class="ml-1 cursor-pointer"
|
|
|
- style="margin-bottom: 4px;">
|
|
|
- {{ item.startIp }}{{ item.ipMode == 2 ? (' / ' + item.endIp.split('.').pop()) : '' }}
|
|
|
- </el-tag>
|
|
|
- <!-- 分组 -->
|
|
|
- <el-popover v-else width="200" trigger="hover" placement="top">
|
|
|
- <div class="flex flex-wrap">
|
|
|
- {{ item.groupName }}
|
|
|
- </div>
|
|
|
- <template #reference>
|
|
|
- <el-tag @click="getIpList(item)" effect="light" :closable="ipDeletable"
|
|
|
- @close="handleDeleteIp(item)" color="#f4f4f4" round class="ml-1 cursor-pointer"
|
|
|
- style="margin-bottom: 4px;">
|
|
|
- {{ item.groupName }}
|
|
|
- </el-tag>
|
|
|
- </template>
|
|
|
- </el-popover>
|
|
|
- </template>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </JCollapse>
|
|
|
- <JCollapse :data="[
|
|
|
- { title: '域名集合', id: '1' },
|
|
|
- ]" @update="(item) => domainEditOpen = true" @delete="(item) => domainDeletable = !domainDeletable"
|
|
|
- :deleteText="domainDeletable ? '取消' : t('marketingConfig.deleteText')" :updateText="'新增'"
|
|
|
- style="margin-top: 25px;" :activeNames="['1']">
|
|
|
- <template #default>
|
|
|
- <div class="p-2 items-center flex flex-wrap">
|
|
|
- <template v-for="item in domains" :key="item.id">
|
|
|
- <!-- 具体域名 -->
|
|
|
- <el-tag v-if="item.sourceType == 2" @click="getIpList(item)" effect="light" :closable="domainDeletable"
|
|
|
- @close="handleDeleteDomain(item)" color="#f4f4f4" round class="ml-1 cursor-pointer"
|
|
|
- style="margin-bottom: 4px;">
|
|
|
- {{ item.domain }}
|
|
|
- </el-tag>
|
|
|
- <!-- 分组域名 -->
|
|
|
- <el-popover v-else width="200" trigger="hover" placement="top">
|
|
|
- <div class="flex flex-wrap">
|
|
|
- {{ item.groupName }}
|
|
|
- </div>
|
|
|
- <template #reference>
|
|
|
- <el-tag @click="getIpList(item)" effect="light" :closable="domainDeletable"
|
|
|
- @close="handleDeleteDomain(item)" color="#f4f4f4" round class="ml-1 cursor-pointer"
|
|
|
- style="margin-bottom: 4px;">
|
|
|
- {{ item.groupName }}
|
|
|
- </el-tag>
|
|
|
- </template>
|
|
|
- </el-popover>
|
|
|
- </template>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </JCollapse>
|
|
|
+ <div class="mt-7">
|
|
|
+ <IpCollapse :data=state.ruleForm.ips></IpCollapse>
|
|
|
+ </div>
|
|
|
+ <div class="mt-7">
|
|
|
+ <DomainCollapse :data=state.ruleForm.domains></DomainCollapse>
|
|
|
+ </div>
|
|
|
<div class="title">备注</div>
|
|
|
- <el-form-item prop="triggerRule">
|
|
|
+ <el-form-item>
|
|
|
<el-input :rows="4" v-model="state.ruleForm.remark" type="textarea" placeholder="请输入备注"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
@@ -138,17 +53,14 @@
|
|
|
</span>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
- <ListEdit v-model:open="listEditOpen" />
|
|
|
- <DomainEdit v-model:open="domainEditOpen" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts" name="systemMenuDialog">
|
|
|
import { ElMessage } from 'element-plus';
|
|
|
import { useI18n } from 'vue-i18n';
|
|
|
-const JCollapse = defineAsyncComponent(() => import('/@/components/JCollapse/index.vue'));
|
|
|
-const ListEdit = defineAsyncComponent(() => import('./listEdit.vue'));
|
|
|
-const DomainEdit = defineAsyncComponent(() => import('./domainEdit.vue'));
|
|
|
+const DomainCollapse = defineAsyncComponent(() => import('./domainCollapse.vue'));
|
|
|
+const IpCollapse = defineAsyncComponent(() => import('./ipCollapse.vue'));
|
|
|
|
|
|
interface IpItem {
|
|
|
id: String;
|
|
@@ -161,11 +73,6 @@ interface IpItem {
|
|
|
groupName: String;
|
|
|
}
|
|
|
|
|
|
-interface Ips {
|
|
|
- blacklist: IpItem[];
|
|
|
- whitelist: IpItem[];
|
|
|
-}
|
|
|
-
|
|
|
interface DomianItem {
|
|
|
id: String;
|
|
|
domain: String;
|
|
@@ -199,15 +106,6 @@ const { t } = useI18n();
|
|
|
const visible = ref(false);
|
|
|
const loading = ref(false);
|
|
|
const appDialogFormRef = ref();
|
|
|
-const ips = ref<Ips>({
|
|
|
- blacklist: [],
|
|
|
- whitelist: []
|
|
|
-});
|
|
|
-const domains = ref<DomianItem[]>([]);
|
|
|
-const ipDeletable = ref(false);// 控制 IP 列表项是否可删除
|
|
|
-const domainDeletable = ref(false);// 控制域名列表项是否可删除
|
|
|
-const listEditOpen = ref(false);
|
|
|
-const domainEditOpen = ref(false);
|
|
|
|
|
|
const triggerRules = [
|
|
|
{
|
|
@@ -225,34 +123,25 @@ const state = reactive({
|
|
|
ruleForm: {} as Form,
|
|
|
});
|
|
|
|
|
|
-const getIpList = (detail: IpItem) => {
|
|
|
- if (detail.sourceType == 1) {
|
|
|
- // 获取ip组
|
|
|
- console.log(detail.groupId);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// 删除ip
|
|
|
-const handleDeleteIp = (deleteItem: IpItem) => {
|
|
|
- ips.value.whitelist = ips.value.whitelist.filter((item: any) => item.id != deleteItem.id);
|
|
|
- ips.value.blacklist = ips.value.blacklist.filter((item: any) => item.id != deleteItem.id);
|
|
|
-}
|
|
|
-
|
|
|
-// 删除域名
|
|
|
-const handleDeleteDomain = (deleteItem: DomianItem) => {
|
|
|
- domains.value = domains.value.filter((item: any) => item.id != deleteItem.id);
|
|
|
-}
|
|
|
-
|
|
|
// 打开弹窗
|
|
|
const openDialog = async (type: string, row: any, str: string = 'domain') => {
|
|
|
visible.value = true;
|
|
|
state.ruleForm = row;
|
|
|
console.log(row);
|
|
|
- ips.value.blacklist = row.ips.filter((item: any) => item.ipType == '1');
|
|
|
- ips.value.whitelist = row.ips.filter((item: any) => item.ipType == '2');
|
|
|
- domains.value = row.domains;
|
|
|
};
|
|
|
|
|
|
+// 表单校验规则
|
|
|
+const dataRules = reactive({
|
|
|
+ triggerNum: [
|
|
|
+ { 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 onSubmit = async () => {
|
|
|
console.log(state.ruleForm)
|
|
@@ -305,9 +194,5 @@ defineExpose({
|
|
|
color: rgba(18, 18, 18, 1);
|
|
|
margin: 25px 0 12px;
|
|
|
}
|
|
|
-
|
|
|
- .el-collapse-item__content {
|
|
|
- padding: 0;
|
|
|
- }
|
|
|
}
|
|
|
</style>
|