|
@@ -11,12 +11,7 @@
|
|
|
<el-form-item label="名称" prop="groupName">
|
|
|
<el-input class="!w-[300px]" v-model="state.ruleForm.groupName" placeholder="请输入名称"></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item
|
|
|
- v-for="(item, index) in state.ruleForm.list"
|
|
|
- :key="item.id || item.val"
|
|
|
- :prop="'list.' + index + '.val'"
|
|
|
- :rules="dataRules.configs"
|
|
|
- >
|
|
|
+ <el-form-item v-for="(item, index) in state.ruleForm.list" :key="item.id || index" :prop="'list.' + index + '.val'" :rules="dataRules.configs">
|
|
|
<template #label>
|
|
|
<div v-if="index === 0" class="flex items-center">
|
|
|
<el-tooltip v-if="sign === 'ip'" effect="light" content="输入127.0.0.1/24格式代表网段" placement="top">
|
|
@@ -78,15 +73,15 @@
|
|
|
|
|
|
<script setup name="systemMenuDialog">
|
|
|
import { useI18n } from 'vue-i18n';
|
|
|
-import { saveDomains } from '/@/api/marketing/config';
|
|
|
+import { saveDomains ,saveIps } from '/@/api/marketing/config';
|
|
|
import { useMessage } from '/@/hooks/message';
|
|
|
import { rule } from '/@/utils/validate';
|
|
|
+import { parseIpRange } from '/@/utils/ipUpdate';
|
|
|
|
|
|
// 定义子组件向父组件传值/事件
|
|
|
const emit = defineEmits(['onsuccess']);
|
|
|
const { t } = useI18n();
|
|
|
|
|
|
-
|
|
|
const inputTip = computed(() => t('marketingConfig.inputIPTip'));
|
|
|
// 定义变量内容
|
|
|
const visible = ref(false);
|
|
@@ -99,7 +94,6 @@ const state = reactive({
|
|
|
list: [],
|
|
|
delList: [], //删除的ip或者域名的id
|
|
|
},
|
|
|
- appList: [], // 应用下拉框列表
|
|
|
});
|
|
|
|
|
|
//删除的id存入delList中
|
|
@@ -117,7 +111,7 @@ const onAddItem = () => {
|
|
|
const dataRules = computed(() => ({
|
|
|
configs: [
|
|
|
{ required: false, message: `${sign.value === 'domain' ? '域名' : 'IP'}不能为空`, trigger: 'blur' },
|
|
|
- { validator: sign.value === 'domain' ? rule.url : rule.ip, trigger: 'blur' },
|
|
|
+ { validator: sign.value === 'domain' ? rule.url : rule.ipRange, trigger: 'blur' },
|
|
|
],
|
|
|
}));
|
|
|
|
|
@@ -143,18 +137,34 @@ const resetForm = () => {
|
|
|
const onSubmit = async () => {
|
|
|
const valid = await menuDialogFormRef.value.validate().catch(() => {});
|
|
|
if (!valid) return false;
|
|
|
+ if (sign.value === 'ip') {
|
|
|
+ state.ruleForm.ips = state.ruleForm.list.map((item) => {
|
|
|
+ const { start, end } = parseIpRange(item.val);
|
|
|
+
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ ipMode:start === end ? 1 : 2,
|
|
|
+ startIp: start,
|
|
|
+ endIp: end,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ state.ruleForm.domains = state.ruleForm.list.map((item) => ({
|
|
|
+ ...item,
|
|
|
+ domain: item.val,
|
|
|
+ }));
|
|
|
+ }
|
|
|
console.log(state.ruleForm);
|
|
|
|
|
|
- sign.value === 'domain'
|
|
|
- ? (state.ruleForm.domains = state.ruleForm.list.map((item) => {
|
|
|
- return { ...item, domain: item.val };
|
|
|
- }))
|
|
|
- : (state.ruleForm.ips = state.ruleForm.list.map((e) => e.val));
|
|
|
// delete state.ruleForm.list;
|
|
|
// return;
|
|
|
try {
|
|
|
loading.value = true;
|
|
|
- await saveDomains(state.ruleForm);
|
|
|
+ if (sign.value === 'ip') {
|
|
|
+ await saveIps(state.ruleForm);
|
|
|
+ } else {
|
|
|
+ await saveDomains(state.ruleForm);
|
|
|
+ }
|
|
|
useMessage().success(t(state.ruleForm.id ? 'common.editSuccessText' : 'common.addSuccessText'));
|
|
|
visible.value = false;
|
|
|
emit('onsuccess');
|