Browse Source

商品定向

WanGxC 1 year ago
parent
commit
03bc6aa469

+ 293 - 34
src/views/adManage/sp/campaigns/CreateCampaigns/index.vue

@@ -98,7 +98,7 @@
           <el-form-item label="商品" prop="commodity" style="width: 100%; margin-top: 20px">
             <div style="width: 100%; height: 620px; display: flex; border: 1px solid #c2c7cf; border-radius: 6px">
               <div style="width: 50%; border-right: 1px solid #c2c7cf">
-                <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleGoodsTabs">
+                <el-tabs v-model="activeName" class="demo-tabs">
                   <el-tab-pane label="搜索" name="first">
                     <div style="margin-bottom: 10px">
                       <el-input v-model="searchInp" placeholder="Please input" class="input-with-select" @change="inpChange" clearable>
@@ -170,14 +170,14 @@
                   </el-tab-pane>
                   <el-tab-pane label="输入" name="second">
                     <el-input
-                      style="padding: 10px;"
-                      v-model="textarea"
+                      style="padding: 10px"
+                      v-model="goodsTextarea"
                       :rows="20"
                       type="textarea"
-                      placeholder="请输入ASIN,多个ASIN使用逗号、空格或换行符分隔。"
+                      placeholder="请输入ASIN,多个ASIN使用逗号、空格或换行符分隔。(未完成)"
                       maxlength="11000" />
                     <div style="display: flex; flex-direction: row-reverse; margin-top: 10px">
-                      <el-button v-for="button in buttons" :key="button.text" :type="button.type" link>{{ button.text }}</el-button>
+                      <el-button v-for="button in buttons" :key="button.text" :type="button.type" link @click="addGods">{{ button.text }}</el-button>
                     </div>
                     <!-- <el-row :gutter="12" style="margin-top: 50px">
                       <el-col :span="12">
@@ -261,7 +261,7 @@
             </div>
           </el-form-item>
           <!-- 自动定向 -->
-          <div class="column-item">
+          <div class="column-item" v-if="ruleForm.type == 'auto'">
             <p style="color: #606266; font-weight: 450"><span style="color: #e47470">*</span> 自动定向</p>
             <el-radio-group v-model="ruleForm.autoRedirect" @change="changeBid">
               <div style="display: flex">
@@ -278,7 +278,7 @@
             </el-radio-group>
           </div>
           <!-- 自动定向---按目标组设置出价 -->
-          <el-card v-if="showCard" class="box-card">
+          <el-card v-if="showCard && ruleForm.type == 'auto'" class="box-card">
             <div>
               <div style="color: #8e9095">
                 <span>目标群体</span>
@@ -338,14 +338,105 @@
             </div>
           </el-card>
 
-          <el-form-item label="手动" v-if="ruleForm.type === 'manual'">
-            <el-card>1233</el-card>
+          <!-- 投放类型 -->
+          <div class="column-item" v-if="ruleForm.type == 'manual'">
+            <p style="color: #606266; font-weight: 450"><span style="color: #e47470">*</span> 投放类型</p>
+            <el-radio-group v-model="ruleForm.targetType" @change="changeTargetType">
+              <div style="display: flex">
+                <el-radio label="keyWords" style="align-items: flex-start; margin-top: 5px">
+                  <div style="margin-top: -4px">关键词投放</div>
+                  <div>选择关键词以帮助您的商品出现在购物者搜索中</div>
+                </el-radio>
+              </div>
+              <div>
+                <el-radio label="Goods" style="align-items: flex-start; margin-top: 20px">
+                  <div style="margin-top: -4px">商品投放</div>
+                  <div>选择关键词以帮助您的商品出现在购物者搜索中</div>
+                </el-radio>
+              </div>
+            </el-radio-group>
+          </div>
+          <!-- 关键词定向 -->
+          <div style="font-size: 20px; font-weight: bold; margin-top: 30px" v-if="ruleForm.targetType == 'keyWords' && ruleForm.type == 'manual'">
+            关键词定向
+          </div>
+          <hr v-if="ruleForm.targetType == 'keyWords' && ruleForm.type == 'manual'" />
+          <el-form-item style="width: 100%; margin-top: 20px" v-if="ruleForm.targetType == 'keyWords' && ruleForm.type == 'manual'">
+            <div style="width: 100%; height: 520px; display: flex; border: 1px solid #c2c7cf; border-radius: 6px">
+              <div style="width: 50%; border-right: 1px solid #c2c7cf">
+                <el-tabs v-model="keyWordsTabs" class="demo-tabs" @tab-click="handleGoodsTabs">
+                  <div style="margin: 8px">
+                    <p style="margin-left: 8px; margin-bottom: -8px; font-weight: 500; color: #616266">竞价:</p>
+                    <div style="display: flex; align-items: center">
+                      <el-select v-model="bidType" class="m-2" placeholder="Select" style="width: 450px">
+                        <el-option v-for="item in bidTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
+                      </el-select>
+                      <el-input v-model="bidInput" placeholder="Please input">
+                        <template #prepend>$</template>
+                      </el-input>
+                    </div>
+                    <div style="display: flex">
+                      <span style="margin: 0 10px 0 8px; font-weight: 500; color: #616266">匹配类型: </span>
+                      <el-checkbox v-model="widelyType" label="广泛" />
+                      <el-checkbox v-model="phraseType" label="词组" />
+                      <el-checkbox v-model="exactType" label="精确" />
+                    </div>
+                  </div>
+                  <el-tab-pane label="建议" name="first">
+                    <el-table
+                      height="345"
+                      style="width: 100%; padding-left: 5px"
+                      v-loading="loading"
+                      :data="keyWordsTableData"
+                      :header-cell-style="headerCellStyle"
+                      :header-row-style="changeKeyWordsTableHeader">
+                      <el-table-column prop="asin" label="关键词"> </el-table-column>
+                      <el-table-column prop="name" label="匹配类型"> </el-table-column>
+                      <el-table-column prop="name" label="建议出价" width="120"> </el-table-column>
+                    </el-table>
+                  </el-tab-pane>
+                  <el-tab-pane label="输入" name="second">
+                    <el-input v-model="keyWordsTextarea" :rows="10" type="textarea" placeholder="未完成" style="padding-left: 5px" />
+                    <el-button type="primary" size="small" text bg @click="addKeyWords">添加</el-button>
+                  </el-tab-pane>
+                </el-tabs>
+              </div>
+              <div style="width: 50%">
+                <el-card class="box-card" shadow="never">
+                  <template #header>
+                    <div class="card-header">
+                      <span style="font-weight: 550; font-size: 15px; color: #1f2128">已添加: {{ addedData.length }}</span>
+                      <el-button class="button" text bg @click="delAllKeyWords">全部删除</el-button>
+                    </div>
+                  </template>
+                  <div class="card-body">
+                    <el-table
+                      :data="addedKeyWordsTableData"
+                      style="width: 100%"
+                      :header-row-style="changeKeyWordsTableHeader"
+                      :header-cell-style="headerCellStyle">
+                      <el-table-column prop="keyword" label="关键词" width="auto" />
+                      <el-table-column prop="bid" label="出价" />
+                      <el-table-column prop="suggestBid" label="建议出价" />
+                      <el-table-column prop="operate" label="操作" width="60" align="right" />
+                    </el-table>
+                  </div>
+                </el-card>
+                <div style="padding: 0 10px 0 10px; margin-top: -12px"></div>
+              </div>
+            </div>
           </el-form-item>
 
-          <div style="font-size: 20px; font-weight: bold; margin-top: 30px">否定词</div>
-          <hr />
+          <div
+            style="font-size: 20px; font-weight: bold; margin-top: 30px"
+            v-if="ruleForm.type === 'auto' || (ruleForm.targetType === 'keyWords' && ruleForm.type === 'manual')">
+            否定词
+          </div>
+          <hr v-if="ruleForm.type === 'auto' || (ruleForm.targetType === 'keyWords' && ruleForm.type === 'manual')" />
           <!-- 否定词表格 -->
-          <el-form-item prop="matchType" style="width: 100%; margin-top: 20px">
+          <el-form-item
+            style="width: 100%; margin-top: 20px"
+            v-if="ruleForm.type === 'auto' || (ruleForm.targetType === 'keyWords' && ruleForm.type === 'manual')">
             <div style="width: 100%; height: 520px; display: flex; border: 1px solid #c2c7cf; border-radius: 6px">
               <div style="width: 50%; border-right: 1px solid #c2c7cf">
                 <div style="margin: 10px 0">
@@ -388,11 +479,88 @@
               </div>
             </div>
           </el-form-item>
+          <!-- 商品定向 -->
+          <div style="font-size: 20px; font-weight: bold; margin-top: 30px" v-if="ruleForm.targetType == 'Goods'">商品定向</div>
+          <hr v-if="ruleForm.targetType == 'Goods'" />
+          <el-form-item style="width: 100%; margin-top: 20px" v-if="ruleForm.targetType == 'Goods'">
+            <div style="width: 100%; height: 520px; display: flex; border: 1px solid #c2c7cf; border-radius: 6px">
+              <div style="width: 50%; border-right: 1px solid #c2c7cf">
+                <el-tabs type="border-card" stretch class="goods-orientation-tabs">
+                  <el-tab-pane label="品类">
+                    <div style="display: flex; align-items: center">
+                      <span style="width: 40px">竞价:</span>
+                      <el-select v-model="categoryBiddingType" class="m-2" placeholder="Select">
+                        <el-option v-for="item in categoryBiddingTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
+                      </el-select>
+                      <el-input v-model="categoryBidInput" placeholder="Please input" style="width: 200px">
+                        <template #prepend>$</template>
+                      </el-input>
+                    </div>
+                    <el-tabs v-model="categoryTabs" class="category-tabs">
+                      <el-tab-pane label="建议" name="first">User</el-tab-pane>
+                      <el-tab-pane label="搜索" name="second">Config</el-tab-pane>
+                    </el-tabs>
+                  </el-tab-pane>
+                  <el-tab-pane label="单个商品">
+                    <div style="display: flex; align-items: center">
+                      <span style="width: 40px">竞价:</span>
+                      <el-select v-model="categoryBiddingType" class="m-2" placeholder="Select">
+                        <el-option v-for="item in categoryBiddingTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
+                      </el-select>
+                      <el-input v-model="categoryBidInput" placeholder="Please input" style="width: 200px">
+                        <template #prepend>$</template>
+                      </el-input>
+                      <div style="margin-left: 20px">
+                        <span style="margin-right: 10px">类型:</span>
+                        <el-checkbox v-model="expand" label="拓展" />
+                        <el-checkbox v-model="accurate" label="精准" />
+                      </div>
+                    </div>
+                    <el-tabs v-model="singleGoodsTabs" class="category-tabs">
+                      <el-tab-pane label="建议" name="first">User</el-tab-pane>
+                      <el-tab-pane label="搜索" name="second">Config</el-tab-pane>
+                      <el-tab-pane label="输入" name="third">Third</el-tab-pane>
+                    </el-tabs>
+                  </el-tab-pane>
+                </el-tabs>
+              </div>
+              <div style="width: 50%">
+                <el-card class="box-card" shadow="never">
+                  <template #header>
+                    <div class="card-header">
+                      <span style="font-weight: 550; font-size: 15px; color: #1f2128">已添加: {{ addedData.length }}</span>
+                      <el-button class="button" text bg @click="delAllKeyWords">全部删除</el-button>
+                    </div>
+                  </template>
+                  <div class="card-body">
+                    <el-table
+                      :data="addedKeyWordsTableData"
+                      style="width: 100%"
+                      :header-row-style="changeKeyWordsTableHeader"
+                      :header-cell-style="headerCellStyle">
+                      <el-table-column prop="keyword" label="关键词" width="auto" />
+                      <el-table-column prop="bid" label="出价" />
+                      <el-table-column prop="suggestBid" label="建议出价" />
+                      <el-table-column prop="operate" label="操作" width="60" align="right" />
+                    </el-table>
+                  </div>
+                </el-card>
+                <div style="padding: 0 10px 0 10px; margin-top: -12px"></div>
+              </div>
+            </div>
+          </el-form-item>
 
-          <div style="font-size: 20px; font-weight: bold; margin-top: 30px">否定商品</div>
-          <hr />          
+          <div
+            style="font-size: 20px; font-weight: bold; margin-top: 30px"
+            v-if="ruleForm.type == 'auto' || (ruleForm.targetType == 'Goods' && ruleForm.type === 'manual')">
+            否定商品
+          </div>
+          <hr v-if="ruleForm.type == 'auto' || (ruleForm.targetType == 'Goods' && ruleForm.type === 'manual')" />
           <!-- 否定商品表格 -->
-          <el-form-item prop="matchType" style="width: 100%; margin-top: 20px">
+          <el-form-item
+            prop="matchType"
+            style="width: 100%; margin-top: 20px"
+            v-if="ruleForm.type == 'auto' || (ruleForm.targetType == 'Goods' && ruleForm.type === 'manual')">
             <div style="width: 100%; height: 520px; display: flex; border: 1px solid #c2c7cf; border-radius: 6px">
               <div style="width: 50%; border-right: 1px solid #c2c7cf">
                 <el-tabs v-model="negativeTabs" class="demo-tabs" @tab-click="handleNegGoodsTabs">
@@ -437,7 +605,7 @@
                       v-model="ruleForm.negativeGoodsTextarea"
                       :rows="17"
                       type="textarea"
-                      placeholder="请输入关键词,多个关键词使用逗号或者换行符分隔。(最多添加1000个关键词)"
+                      placeholder="未完成"
                       maxlength="11000"
                       style="padding: 10px 10px" />
                     <div style="display: flex; flex-direction: row-reverse; margin-top: 10px">
@@ -530,12 +698,18 @@ const totalItems = ref() // 数据总量
 const showCard = ref(false)
 const activeName = ref('first')
 const negativeTabs = ref('first')
+const keyWordsTabs = ref('first')
+const productOrientationTabs = ref('first')
+const categoryTabs = ref('first')
+const singleGoodsTabs = ref('first')
 const searchInp = ref('')
 const select = ref('name')
 const select2 = ref('latest')
-const textarea = ref('')
 const buttons = [{ type: 'primary', text: '添加' }] as const
 const negativeInput = ref('')
+let widelyType = ref(true)
+let phraseType = ref(true)
+let exactType = ref(true)
 
 // 表单相关数据
 const formSize = ref('default')
@@ -569,6 +743,7 @@ interface RuleForm {
   preciseNegation: boolean
   negativeTextarea: string
   negativeGoodsTextarea: string
+  targetType: string
 }
 const ruleForm = reactive<RuleForm>({
   name: 'Hello',
@@ -598,6 +773,7 @@ const ruleForm = reactive<RuleForm>({
   preciseNegation: true,
   negativeTextarea: '',
   negativeGoodsTextarea: '',
+  targetType: 'keyWords',
 })
 const rules = computed(() => ({
   name: [{ required: true, message: 'Please input Activity name', trigger: 'blur' }],
@@ -630,6 +806,10 @@ function changeBid() {
   console.log(ruleForm.autoRedirect)
   showCard.value = ruleForm.autoRedirect === 'targetBid'
 }
+function changeTargetType() {
+  console.log(ruleForm.targetType)
+  showCard.value = ruleForm.targetType === 'keyWords'
+}
 // 切换投放类型
 function changeType() {}
 
@@ -645,8 +825,63 @@ function handleSizeChange(newSize) {
   currentPage.value = 1 // 重置到第一页
 }
 
+// ------------------------------------------商品定向模块------------------------------------------
+const categoryBiddingType = ref('customBid')
+const categoryBiddingTypeOptions = [
+  {
+    value: 'defaultBid',
+    label: '默认竞价',
+  },
+  {
+    value: 'customBid',
+    label: '自定义竞价',
+  },
+]
+const categoryBidInput = ref('0.75')
+const expand = ref(true)
+const accurate = ref(false)
+
+// ------------------------------------------关键词定向模块------------------------------------------
+const bidType = ref('customBid')
+const bidTypeOptions = [
+  // 竞价select下拉选项
+  {
+    value: 'suggestBid',
+    label: '建议出价',
+  },
+  {
+    value: 'customBid',
+    label: '自定义出价',
+  },
+  {
+    value: 'defaultBid',
+    label: '默认出价',
+  },
+]
+
+const bidInput = ref('0.75')
+const keyWordsTableData = ref([]) // 关键词定向左侧表格数据
+const addedKeyWordsTableData = ref([]) // 关键词定向右侧表格数据
+const keyWordsTextarea = ref('')
+
+function delAllKeyWords() {
+  // 删除已经添加的关键词
+  addedKeyWordsTableData.value = []
+}
+
+function addKeyWords() {
+  // 添加关键词
+  if (keyWordsTextarea.value) {
+    addedKeyWordsTableData.value.push({
+      keyWords: keyWordsTextarea.value,
+    })
+    keyWordsTextarea.value = ''
+  }
+}
+
+// ------------------------------------------广告组商品表格模块------------------------------------------
+const goodsTextarea = ref('')
 
-// ---------------------广告组商品表格模块---------------------
 function setTableData(asin = '', sku = '') {
   return request({
     url: '/api/sellers/listings/',
@@ -682,6 +917,24 @@ function addSingleGoods(scope) {
   }
 }
 
+function addGods() {
+  const inputData = goodsTextarea.value
+  const asins = inputData.split(/[\n,]+/)
+
+  asins.forEach((asin) => {
+    if (asin.trim()) {
+      setTableData(asin.trim())
+        .then((response) => {
+          // 假设你的数据是在 response.data 中
+          console.log(`Data for ASIN ${asin}:`, response) // 更新这里来正确地访问数据
+        })
+        .catch((error) => {
+          console.error(`Error fetching data for ASIN ${asin}:`, error)
+        })
+    }
+  })
+}
+
 function delSingleGoods(scope) {
   const index = addedData.value.findIndex((item) => item.sku === scope.row.sku)
 
@@ -750,8 +1003,7 @@ const handleGoodsTabs = (tab: TabsPaneContext, event: Event) => {
   console.log(tab, event)
 }
 
-
-// ---------------------否定词模块---------------------
+// ------------------------------------------否定词模块------------------------------------------
 function addNegative() {
   // 删除 negativeTextarea 前后的空格
   const trimmedText = ruleForm.negativeTextarea.trim()
@@ -795,13 +1047,12 @@ function delSingleNegative(scope) {
   }
 }
 
-
-//  ---------------------否定商品模块---------------------
+//  ------------------------------------------否定商品模块------------------------------------------
 let negativeList = reactive([])
 const tableData = negativeList
 let inputAddedNegGoods = ref([])
 
-function setNegativeTableData(asin = '',) {
+function setNegativeTableData(asin = '') {
   return request({
     url: '/api/sellers/listings/',
     method: 'GET',
@@ -840,8 +1091,6 @@ function addNegativeGoods() {
     })
 }
 
-
-
 function addSingleNegativeGoods(scope) {
   console.log('scope', scope.row)
 
@@ -885,9 +1134,7 @@ function handleNegGoodsTabs(tab: TabsPaneContext, event: Event) {
   // console.log(tab, event)
 }
 
-
-
-// ---------------------自定义校验模块---------------------
+// ------------------------------------------自定义校验模块------------------------------------------
 function checkBid(value, callback, bidField) {
   const bid = parseFloat(value)
   const budget = parseFloat(ruleForm.budget)
@@ -906,7 +1153,7 @@ function checkBid(value, callback, bidField) {
     callback()
   }
 }
-
+// 自定义校验规则---自动定价和按目标设置出价模块
 function getValidationRules(fieldName) {
   // 默认校验规则
   const commonRules = [
@@ -956,7 +1203,7 @@ function getValidationRules(fieldName) {
   // 如果不满足上述条件,则无需校验
   return []
 }
-
+// 监听表单字段变化,根据不同字段和状态返回特定的校验规则
 watch(
   [() => ruleForm.autoRedirect, () => ruleForm.closeMatch, () => ruleForm.broadMatch, () => ruleForm.similarProducts, () => ruleForm.relatedProducts],
   () => {
@@ -985,7 +1232,6 @@ function resetForm(formEl: FormInstance | undefined) {
   formEl.resetFields()
 }
 
-
 // 修改表头样式
 const headerCellStyle = (args) => {
   if (args.rowIndex === 0) {
@@ -1003,6 +1249,15 @@ function changeNegTableHeader(args) {
   }
 }
 
+function changeKeyWordsTableHeader(args) {
+  if (args.rowIndex === 0) {
+    return {
+      color: '#505968',
+      backgroundColor: 'rgba(245, 245, 245, 0.9)',
+    }
+  }
+}
+
 onMounted(() => {
   setTableData()
   // const myTest = route.query
@@ -1012,7 +1267,6 @@ onMounted(() => {
 defineOptions({
   name: 'SpCreateCampaigns',
 })
-
 </script>
 
 <style lang="scss" scoped>
@@ -1055,7 +1309,6 @@ defineOptions({
   margin-left: 30px;
   color: #0b0d0d;
 }
-
 .demo-tabs > .el-tabs__content {
   padding: 52px;
   color: #6b778c;
@@ -1098,7 +1351,6 @@ div {
   margin-right: 10px;
   border: none;
 }
-
 .single-line {
   color: rgb(30, 33, 41);
   overflow: hidden;
@@ -1129,4 +1381,11 @@ div {
   width: 200px;
   margin-left: 15px;
 }
+
+::v-deep(.goods-orientation-tabs .el-tabs__nav-scroll) {
+  margin-left: -20px !important;
+}
+::v-deep(.category-tabs .el-tabs__nav) {
+  margin-left: 20px;
+}
 </style>

+ 86 - 0
src/views/adManage/sp/campaigns/CreateCampaigns/ruler/index.ts

@@ -0,0 +1,86 @@
+import { reactive, computed } from 'vue'
+import type { FormInstance, FormRules, TabsPaneContext } from 'element-plus'
+
+export interface RuleForm {
+  name: string
+  adMix: string
+  count: string
+  date1: string
+  date2: string
+  budget: string
+  delivery: boolean
+  type: string
+  bidStrategy: string
+  placeBid: string
+  firstPage: string
+  other: string
+  adGroupName: string
+  autoRedirect: string
+  defaultBidInp: string
+  closeMatch: boolean
+  broadMatch: boolean
+  similarProducts: boolean
+  relatedProducts: boolean
+  closeMatchInp: string
+  broadMatchInp: string
+  similarProductsInp: string
+  relatedProductsInp: string
+  phraseNegation: boolean
+  preciseNegation: boolean
+  negativeTextarea: string
+  negativeGoodsTextarea: string
+  targetType: string
+}
+export const ruleForm = reactive<RuleForm>({
+  name: 'Hello',
+  adMix: '',
+  count: '',
+  date1: '',
+  date2: '',
+  budget: '',
+  delivery: false,
+  type: 'auto',
+  bidStrategy: 'dynamicBid_Low',
+  placeBid: '',
+  firstPage: '',
+  other: '',
+  adGroupName: '',
+  autoRedirect: 'defaultBid',
+  defaultBidInp: '',
+  closeMatch: true,
+  broadMatch: true,
+  similarProducts: true,
+  relatedProducts: true,
+  closeMatchInp: '666',
+  broadMatchInp: '666',
+  similarProductsInp: '666',
+  relatedProductsInp: '666',
+  phraseNegation: true,
+  preciseNegation: true,
+  negativeTextarea: '',
+  negativeGoodsTextarea: '',
+  targetType: 'keyWords',
+})
+export const rules = computed(() => ({
+  name: [{ required: true, message: 'Please input Activity name', trigger: 'blur' }],
+  adMix: [{ required: false, message: 'Please select Activity zone', trigger: 'change' }],
+  count: [{ required: true, message: 'Please select Activity count', trigger: 'change' }],
+  date1: [{ required: true, type: 'date', message: 'Please pick a date', trigger: 'change' }],
+  date2: [{ required: false, type: 'date', message: 'Please pick a time', trigger: 'change' }],
+  budget: [
+    { required: true, message: '请输入预算', trigger: 'blur' },
+    { pattern: /^(?:[1-9]\d{0,5}|1000000)(?:\.\d{1,2})?$/, message: '预算必须是1到1000000之间的数字,小数点后最多两位', trigger: 'blur' },
+  ],
+  type: [{ required: false, trigger: 'change' }],
+  bidStrategy: [{ required: true, message: 'Please select activity resource', trigger: 'change' }],
+  placeBid: [{ required: false, pattern: /^[0-9]{1,3}$/, message: '必须是0~900之间的整数百分比', trigger: 'change' }],
+  firstPage: [{ required: false, pattern: /^[0-9]{1,3}$/, message: '必须是0~900之间的整数百分比', trigger: 'change' }],
+  other: [{ required: false, pattern: /^[0-9]{1,3}$/, message: '必须是0~900之间的整数百分比', trigger: 'change' }],
+  adGroupName: [{ required: true, message: 'Please input Activity name', trigger: 'blur' }],
+  autoRedirect: [{ required: true, trigger: 'change' }],
+  defaultBidInp: getValidationRules('defaultBidInp'),
+  relatedProductsInp: getValidationRules('relatedProductsInp'),
+  similarProductsInp: getValidationRules('similarProductsInp'),
+  broadMatchInp: getValidationRules('broadMatchInp'),
+  closeMatchInp: getValidationRules('closeMatchInp'),
+}))