|
@@ -2,15 +2,15 @@
|
|
|
<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="menuDialogFormRef" :model="state.ruleForm" class="demo-form-inline" v-loading="loading">
|
|
|
+ <el-form ref="appDialogFormRef" :model="state.ruleForm" class="demo-form-inline" v-loading="loading">
|
|
|
<el-form-item :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;">
|
|
|
<el-col :span="12">
|
|
|
- <el-form-item :label="'营销开关'" prop="isMarketing">
|
|
|
- <el-switch v-model="state.ruleForm.isMarketing" style="--el-switch-on-color: rgb(48, 185, 113);"
|
|
|
- inline-prompt :active-value="1" :inactive-value="0" />
|
|
|
+ <el-form-item :label="'营销开关'" prop="launch">
|
|
|
+ <el-switch v-model="state.ruleForm.launch" style="--el-switch-on-color: rgb(48, 185, 113);"
|
|
|
+ inline-prompt :active-value="true" :inactive-value="false" />
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
@@ -34,60 +34,88 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
- </el-form>
|
|
|
- <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: 30px;"
|
|
|
- :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" @click="getIpList(item)" effect="light" :closable="ipDeletable"
|
|
|
- @close="handleDelectIp(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="handleDelectIp(item)" color="#f4f4f4" round class="ml-1 cursor-pointer"
|
|
|
- style="margin-bottom: 4px;">
|
|
|
+ <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 }}
|
|
|
- </el-tag>
|
|
|
- </template>
|
|
|
- </el-popover>
|
|
|
- </template>
|
|
|
+ </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>
|
|
|
- <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" @click="getIpList(item)" effect="light" :closable="ipDeletable"
|
|
|
- @close="handleDelectIp(item)" color="#f4f4f4" round class="ml-1 cursor-pointer"
|
|
|
+ <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.startIp }}{{ item.ipMode == 2 ? (' / ' + item.endIp.split('.').pop()) : '' }}
|
|
|
+ {{ item.domain }}
|
|
|
</el-tag>
|
|
|
- <!-- 分组 -->
|
|
|
+ <!-- 分组域名 -->
|
|
|
<el-popover v-else width="200" trigger="hover" placement="top">
|
|
|
<div class="flex flex-wrap">
|
|
|
- <!-- <span v-for="ip in item.ips" :key="ip" class="ml-2">
|
|
|
- {{ ip }}
|
|
|
- </span> -->
|
|
|
{{ item.groupName }}
|
|
|
</div>
|
|
|
<template #reference>
|
|
|
- <el-tag @click="getIpList(item)" effect="light" :closable="ipDeletable"
|
|
|
- @close="handleDelectIp(item)" color="#f4f4f4" round class="ml-1 cursor-pointer"
|
|
|
+ <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>
|
|
@@ -95,30 +123,18 @@
|
|
|
</el-popover>
|
|
|
</template>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </JCollapse>
|
|
|
- <JCollapse :data="[
|
|
|
- { title: '域名集合', id: '1' },
|
|
|
- ]" @update="(item: any) => domainEditOpen = true" @delete="(item: any) => domainDeletable = !domainDeletable"
|
|
|
- :deleteText="domainDeletable ? '取消' : t('marketingConfig.deleteText')" :updateText="'新增'"
|
|
|
- style="margin-top: 30px;" :activeNames="['1']">
|
|
|
- <template #default>
|
|
|
- <div class="p-2 items-center flex flex-wrap">
|
|
|
- <el-tag v-for="item in domains" :key="item" @close="handleDelectDomain(item)" effect="light"
|
|
|
- :closable="domainDeletable" style="margin-bottom: 4px;" color="#f4f4f4" round class="ml-1 cursor-pointer">
|
|
|
- {{ item.sourceType == 2 ? item.domain : item.groupName }}
|
|
|
- </el-tag>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </JCollapse>
|
|
|
- <div class="title">备注</div>
|
|
|
- <el-input :rows="4" v-model="state.ruleForm.remark" type="textarea" placeholder="请输入备注"></el-input>
|
|
|
+ </template>
|
|
|
+ </JCollapse>
|
|
|
+ <div class="title">备注</div>
|
|
|
+ <el-form-item prop="triggerRule">
|
|
|
+ <el-input :rows="4" v-model="state.ruleForm.remark" type="textarea" placeholder="请输入备注"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
<template #footer>
|
|
|
<span class="dialog-footer">
|
|
|
<el-button @click="visible = false">{{ t('common.cancelButtonText') }}</el-button>
|
|
|
<el-button type="primary" @click="onSubmit" :disabled="loading">{{ t('common.confirmButtonText')
|
|
|
- }}</el-button>
|
|
|
+ }}</el-button>
|
|
|
</span>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
@@ -158,6 +174,23 @@ interface DomianItem {
|
|
|
groupName: String;
|
|
|
}
|
|
|
|
|
|
+interface Form {
|
|
|
+ id: String;
|
|
|
+ appId: String;
|
|
|
+ appName: String;
|
|
|
+ appImg: String;
|
|
|
+ appUrl: String;
|
|
|
+ backUpUrl: String;
|
|
|
+ domainType: String;
|
|
|
+ domainLimit: Boolean;
|
|
|
+ launch: Boolean;
|
|
|
+ triggerRule: Number;
|
|
|
+ triggerNum: Number;
|
|
|
+ remark: String;
|
|
|
+ ips: IpItem[];
|
|
|
+ domains: DomianItem[];
|
|
|
+}
|
|
|
+
|
|
|
// 定义子组件向父组件传值/事件
|
|
|
const emit = defineEmits(['refresh']);
|
|
|
const { t } = useI18n();
|
|
@@ -165,8 +198,7 @@ const { t } = useI18n();
|
|
|
// 定义变量内容
|
|
|
const visible = ref(false);
|
|
|
const loading = ref(false);
|
|
|
-const add = ref(false);
|
|
|
-const menuDialogFormRef = ref();
|
|
|
+const appDialogFormRef = ref();
|
|
|
const ips = ref<Ips>({
|
|
|
blacklist: [],
|
|
|
whitelist: []
|
|
@@ -174,8 +206,6 @@ const ips = ref<Ips>({
|
|
|
const domains = ref<DomianItem[]>([]);
|
|
|
const ipDeletable = ref(false);// 控制 IP 列表项是否可删除
|
|
|
const domainDeletable = ref(false);// 控制域名列表项是否可删除
|
|
|
-const ipAdd = ref(false);
|
|
|
-const domainAdd = ref(false);
|
|
|
const listEditOpen = ref(false);
|
|
|
const domainEditOpen = ref(false);
|
|
|
|
|
@@ -192,57 +222,34 @@ const triggerRules = [
|
|
|
|
|
|
// 定义需要的数据
|
|
|
const state = reactive({
|
|
|
- ruleForm: {
|
|
|
- marketingEnabled: false,
|
|
|
- domainRestriction: false,
|
|
|
- ipSets: [''], // ip集合
|
|
|
- domainSets: [''], // ip集合
|
|
|
- remark: '',
|
|
|
- },
|
|
|
- domainSets: [] as any[], // 应用下拉框列表
|
|
|
+ ruleForm: {} as Form,
|
|
|
});
|
|
|
|
|
|
-const handleDelect = () => {
|
|
|
- console.log('delect')
|
|
|
-}
|
|
|
-
|
|
|
-const getIpList = (detail) => {
|
|
|
+const getIpList = (detail: IpItem) => {
|
|
|
if (detail.sourceType == 1) {
|
|
|
// 获取ip组
|
|
|
console.log(detail.groupId);
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 删除ip
|
|
|
-const handleDelectIp = (deleteItem: IpItem) => {
|
|
|
+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 handleDelectDomain = (deleteItem: DomianItem) => {
|
|
|
- console.log('delectDomain')
|
|
|
+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') => {
|
|
|
- state.ruleForm = {
|
|
|
- marketingEnabled: false,
|
|
|
- domainRestriction: false,
|
|
|
- ipSets: [''],
|
|
|
- domainSets: [''],
|
|
|
- remark: '',
|
|
|
- };
|
|
|
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');
|
|
|
- console.log(ips.value);
|
|
|
-
|
|
|
domains.value = row.domains;
|
|
|
};
|
|
|
|
|
@@ -270,27 +277,6 @@ defineExpose({
|
|
|
});
|
|
|
</script>
|
|
|
<style lang="scss">
|
|
|
-.config-container {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- margin-bottom: 10px;
|
|
|
- font-size: 14px;
|
|
|
- font-weight: 400;
|
|
|
- width: 100%;
|
|
|
- justify-content: start;
|
|
|
-}
|
|
|
-
|
|
|
-.config-actions {
|
|
|
- width: 50px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: space-between;
|
|
|
-}
|
|
|
-
|
|
|
-.apps-loadmore.el-select-dropdown .el-scrollbar__wrap {
|
|
|
- height: 330px !important;
|
|
|
-}
|
|
|
-
|
|
|
.apps-form {
|
|
|
.collapse-group {
|
|
|
display: flex;
|
|
@@ -298,10 +284,6 @@ defineExpose({
|
|
|
align-items: first baseline;
|
|
|
}
|
|
|
|
|
|
- .collapse-group-name {
|
|
|
- // width: 100px;
|
|
|
- }
|
|
|
-
|
|
|
.tag-content {
|
|
|
flex: 1;
|
|
|
}
|
|
@@ -316,16 +298,12 @@ defineExpose({
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- .demo-form-inline .el-switch {
|
|
|
- margin-right: 50px;
|
|
|
- }
|
|
|
-
|
|
|
.title {
|
|
|
line-height: 20px;
|
|
|
font-family: Source Han Sans SC;
|
|
|
font-size: 14px;
|
|
|
color: rgba(18, 18, 18, 1);
|
|
|
- margin: 30px 0 12px;
|
|
|
+ margin: 25px 0 12px;
|
|
|
}
|
|
|
|
|
|
.el-collapse-item__content {
|