Browse Source

Merge branch 'dev-cmn' into dev-ly

# Conflicts:
#	src/views/marketing/config/i18n/zh-cn.ts
cmy 2 weeks ago
parent
commit
3cd78e99e6

+ 1 - 1
src/views/marketing/apps/components/domainEdit.vue

@@ -9,7 +9,7 @@
 		draggable
 	>
 		<el-form ref="menuDialogFormRef" :rules="dataRules" :model="state.ruleForm" v-loading="loading">
-			<el-segmented v-model="activeName" :options="[t('marketingConfig.grouping'), t('marketingConfig.domain')]" size="large" />
+			<el-segmented v-model="activeName" :options="[t('marketingConfig.grouping'), t('marketingConfig.domain')]" size="default" />
 			<el-form-item label="" prop="grouping" v-if="activeName === t('marketingConfig.grouping')">
 				<el-select v-model="state.ruleForm.groupingTip" :placeholder="t('marketingConfig.groupingTip')" clearable>
 					<el-option v-for="item in listSelect" :key="item.value" :label="item.label" :value="item.value" />

+ 25 - 3
src/views/marketing/apps/components/form.vue

@@ -1,11 +1,12 @@
 <template>
   <div class="apps-form">
-    <el-dialog :title="'修改'" width="880" v-model="visible" :close-on-click-modal="false" :destroy-on-close="true" draggable>
+    <el-dialog :title="'修改营销配置'" width="880" v-model="visible" :close-on-click-modal="false" :destroy-on-close="true" draggable>
+        <el-form-item :label="'应用名称'" prop="appName">
+          <el-input style="width: 200px;" v-model="state.ruleForm.appName" disabled />
+        </el-form-item>
         <el-form ref="menuDialogFormRef"
-          :inline="true"
           :model="state.ruleForm"
           class="demo-form-inline"
-          style="margin-bottom: -25px;"
           v-loading="loading">
         <el-form-item :label="'营销开关'" prop="isMarketing">
           <el-switch v-model="state.ruleForm.isMarketing" style="--el-switch-on-color: rgb(48, 185, 113);" 
@@ -15,6 +16,14 @@
           <el-switch v-model="state.ruleForm.domainLimit" style="--el-switch-on-color: rgb(48, 185, 113);" 
             inline-prompt :active-value="true" :inactive-value="false" />
         </el-form-item>
+        <el-form-item :label="'触发频率'" prop="triggerNum">
+          <el-input style="width: 200px;" v-model="state.ruleForm.triggerNum" :placeholder="'请输入触发频率'" clearable />
+        </el-form-item>
+        <el-form-item :label="'触发规则'" prop="triggerRule">
+          <el-select style="width: 200px;" v-model="state.ruleForm.triggerRule" placeholder="">
+            <el-option v-for="item in triggerRules" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+        </el-form-item>
       </el-form>
       <JCollapse
         :data="[
@@ -129,6 +138,7 @@
 </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'));
@@ -179,6 +189,17 @@ const domainAdd = ref(false);
 const listEditOpen = ref(false);
 const domainEditOpen = ref(false);
 
+const triggerRules = [
+  {
+    label: '仅一次',
+    value: 1,
+  },
+  {
+    label: '多次',
+    value: 2,
+  },
+]
+
 // 定义需要的数据
 const state = reactive({
   ruleForm: {
@@ -238,6 +259,7 @@ const openDialog = async (type: string, row: any, str: string = 'domain') => {
 // 保存数据
 const onSubmit = async () => {
   console.log(state.ruleForm)
+  ElMessage.success('提交成功!');
   visible.value = false;
   // try {
   //   loading.value = true;

+ 18 - 13
src/views/marketing/apps/components/listEdit.vue

@@ -1,23 +1,27 @@
 <template>
-	<el-dialog
-		:title="type === 'Edit' ? '修改IP' : '添加IP'"
-		width="600"
-		v-model="props.open"
-		:close-on-click-modal="false"
-		:destroy-on-close="true"
-		@close="onCancel"
-		draggable
-	>
+	<el-dialog :title="type === 'Edit' ? '修改IP' : '添加IP'" width="600" v-model="props.open" :close-on-click-modal="false"
+		:destroy-on-close="true" @close="onCancel" draggable>
 		<el-form ref="menuDialogFormRef" :rules="dataRules" :model="state.ruleForm" v-loading="loading">
-			<el-form-item label="" prop="listType" >
+			<el-form-item label="" prop="listType">
 				<el-radio-group v-model="state.ruleForm.listType">
 					<el-radio value="1">白名单</el-radio>
 					<el-radio value="2">黑名单</el-radio>
 				</el-radio-group>
 			</el-form-item>
-			<el-segmented v-model="activeName" :options="[t('marketingConfig.grouping'), t('marketingConfig.domain')]" size="large" />
+			<el-segmented v-model="activeName" :options="[t('marketingConfig.grouping'), t('marketingConfig.ipSegment')]"
+				size="default">
+				<template #default="scope">
+					<span>{{ scope.item }}</span>
+					<el-icon v-if="scope.item === t('marketingConfig.ipSegment')" size="12" style="margin-left: 5px;">
+						<el-tooltip effect="light" content="输入127.0.0.1/24格式代表网段" placement="top">
+							<Warning />
+						</el-tooltip>
+					</el-icon>
+				</template>
+			</el-segmented>
 			<el-form-item label="" prop="grouping" v-if="activeName === t('marketingConfig.grouping')">
-				<el-select v-model="state.ruleForm.groupingTip" :placeholder="t('marketingConfig.groupingTip')" clearable>
+				<el-select v-model="state.ruleForm.groupingTip" :placeholder="t('marketingConfig.groupingTip')"
+					clearable>
 					<el-option v-for="item in listSelect" :key="item.value" :label="item.label" :value="item.value" />
 				</el-select>
 			</el-form-item>
@@ -28,7 +32,8 @@
 		<template #footer>
 			<span class="dialog-footer">
 				<el-button @click="onCancel">{{ t('common.cancelButtonText') }}</el-button>
-				<el-button type="primary" @click="onSubmit" :disabled="loading">{{ t('common.confirmButtonText') }}</el-button>
+				<el-button type="primary" @click="onSubmit" :disabled="loading">{{ t('common.confirmButtonText')
+					}}</el-button>
 			</span>
 		</template>
 	</el-dialog>

+ 43 - 19
src/views/marketing/apps/index.vue

@@ -28,12 +28,12 @@
           </el-form-item>
         </el-form>
       </el-row>
-      <el-row>
+      <!-- <el-row>
         <div class="mb8" style="width: 100%">
           <right-toolbar v-model:showSearch="showSearch" class="ml10" style="float: right; margin-right: 20px"
             @queryTable="getDataList"></right-toolbar>
         </div>
-      </el-row>
+      </el-row> -->
 
       <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
           <el-tab-pane label="使用中" name="tab1"></el-tab-pane>
@@ -69,17 +69,27 @@
         </el-table-column>
         <el-table-column label="营销投放" prop="isMarketing" width="120">
           <template #default="{ row }">
-            <el-switch v-model="row.isMarketing" inline-prompt active-text="开启" inactive-text="关闭" :active-value="1"
+            <el-switch v-model="row.isMarketing" inline-prompt :active-value="1"
               :inactive-value="0" @change="handleChange(row)" />
+              <!--  active-text="开启" inactive-text="关闭" -->
           </template>
         </el-table-column>
         <el-table-column label="域名限制" prop="isHttp" width="120">
           <template #default="{ row }">
-            <el-switch v-model="row.isHttp" inline-prompt active-text="开启" inactive-text="关闭" :active-value="1"
+            <el-switch v-model="row.isHttp" inline-prompt :active-value="1"
               :inactive-value="0" @change="handleChange(row)" />
+              <!--  active-text="开启" inactive-text="关闭" -->
           </template>
         </el-table-column>
-        <el-table-column label="域名集合" prop="domains" width="240" show-overflow-tooltip>
+        <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>
           <template #default="{ row }">
             <div style="
                   padding: 0 20px;
@@ -102,8 +112,8 @@
         <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">
+              IP集合
+              <el-tooltip effect="light" content="鼠标悬浮查看ip分组详情" placement="top">
                 <el-icon><Warning /></el-icon>
               </el-tooltip>
             </span>
@@ -169,7 +179,7 @@
                 :type="activeName == 'tab1' ? 'danger' : 'success'"
                 style="margin-left: 0;"
                 :icon="activeName == 'tab1' ? 'delete' : 'refresh'"
-                @click="query()" text
+                @click="handleDelete(scope.row)" text
                 v-auth="'sys_menu_edit'">
                   {{ activeName == 'tab1' ? '拉黑' : '还原' }}
               </el-button>
@@ -194,7 +204,7 @@ import { ref } from 'vue'
 const MenuDialog = defineAsyncComponent(() => import('./components/form.vue'));
 const StatisticalDialog = defineAsyncComponent(() => import('./components/statistical.vue'));
 
-import type { TabsPaneContext } from 'element-plus'
+import { ElMessage, ElNotification, messageConfig, type TabsPaneContext } from 'element-plus'
 
 const activeName = ref('tab1')
 
@@ -235,21 +245,13 @@ getAppTypes();
 
 const triggerRules = [
   {
-    label: '仅一次 - URL',
+    label: '仅一次',
     value: 1,
   },
   {
-    label: '多次 - URL',
+    label: '多次',
     value: 2,
   },
-  {
-    label: '仅一次 - 视频',
-    value: 3,
-  },
-  {
-    label: '多次 - 视频',
-    value: 4,
-  },
 ]
 
 const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTable(state);
@@ -302,6 +304,28 @@ const onOpenStatistical = (row: any) => {
   statisticalDialogRef.value.openDialog(row);
 };
 
+// 删除操作
+const handleDelete = async (row: any) => {
+	try {
+    if(activeName.value == 'tab1'){
+      await useMessageBox().confirm('是否确认拉黑该应用');
+    }else{
+      ElMessage.success('还原成功!');
+    }
+	} catch {
+		return;
+	}
+
+	// try {
+	// 	await delObj(ids);
+	// 	getDataList();
+	// 	useMessage().success(t('common.delSuccessText'));
+	// } catch (err: any) {
+	// 	useMessage().error(err.msg);
+	// }
+  query();
+};
+
 </script>
 <style scoped lang="scss">
 :deep(.el-link__inner) {

+ 1 - 1
src/views/marketing/config/i18n/zh-cn.ts

@@ -36,6 +36,6 @@ export default {
 		jumpLinkTip: '请输入跳转链接',
 		triggerFrequency: '触发频率',
 		triggerFrequencyTip: '请输入触发频率',
-
+		ipSegment: 'IP/段',
 	},
 };