index.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <el-tabs tab-position="left" v-model="activeTab" @tab-change="changeTab">
  3. <el-tab-pane label="分时调价" :name="1">
  4. <template #label>
  5. <div class="tab-label">
  6. <el-switch size="small" v-model="RuleStatusButton['1']" :disabled="RuleStatusButton['1'] === '-'"></el-switch>
  7. <span>分时调价</span>
  8. </div>
  9. </template>
  10. <TimerBid :data="baseData" :RuleStatusButton="RuleStatusButton" @refresh="refresh(1)" v-if="activeTab === 1" />
  11. </el-tab-pane>
  12. <el-tab-pane label="分时预算" :name="2">
  13. <template #label>
  14. <div class="tab-label">
  15. <el-switch size="small" v-model="RuleStatusButton['2']" :disabled="RuleStatusButton['2'] === '-'"></el-switch>
  16. <span>分时预算</span>
  17. </div>
  18. </template>
  19. <TimerBudget :data="baseData" :RuleStatusButton="RuleStatusButton" @refresh="refresh(2)" v-if="activeTab === 2" />
  20. </el-tab-pane>
  21. <el-tab-pane label="广告活动" :name="3">
  22. <template #label>
  23. <div class="tab-label">
  24. <el-switch size="small" v-model="RuleStatusButton['3']" :disabled="RuleStatusButton['3'] === '-'"></el-switch>
  25. <span>广告活动</span>
  26. </div>
  27. </template>
  28. <SwitchCampaign :data="baseData" :RuleStatusButton="RuleStatusButton" @refresh="refresh(3)" v-if="activeTab === 3" />
  29. </el-tab-pane>
  30. <el-tab-pane label="定向规则" :name="4">
  31. <template #label>
  32. <div class="tab-label">
  33. <el-switch size="small" v-model="RuleStatusButton['4']" :disabled="RuleStatusButton['4'] === '-'"></el-switch>
  34. <span>定向规则</span>
  35. </div>
  36. </template>
  37. <TargetRule :data="baseData" :RuleStatusButton="RuleStatusButton" @refresh="refresh(4)" v-if="activeTab === 4"></TargetRule>
  38. </el-tab-pane>
  39. <el-tab-pane label="添加搜索词" :name="5">
  40. <template #label>
  41. <div class="tab-label">
  42. <el-switch size="small" v-model="RuleStatusButton['5']" :disabled="RuleStatusButton['5'] === '-'"></el-switch>
  43. <span>添加搜索词</span>
  44. </div>
  45. </template>
  46. <SearchTermRule :data="baseData" :RuleStatusButton="RuleStatusButton" @refresh="refresh(5)" v-if="activeTab === 5"></SearchTermRule>
  47. </el-tab-pane>
  48. <el-tab-pane label="添加否定词" :name="6">
  49. <template #label>
  50. <div class="tab-label">
  51. <el-switch size="small" v-model="RuleStatusButton['6']" :disabled="RuleStatusButton['6'] === '-'"></el-switch>
  52. <span>添加否定词</span>
  53. </div>
  54. </template>
  55. <NegKeywordRule :data="baseData" :RuleStatusButton="RuleStatusButton" @refresh="refresh(6)" v-if="activeTab === 6"></NegKeywordRule>
  56. </el-tab-pane>
  57. </el-tabs>
  58. </template>
  59. <script lang="ts" setup>
  60. import { ref, Ref, computed, onMounted, nextTick } from 'vue'
  61. import TimerBid from '/@/views/components/auto/auto-campaigns/timer-bid.vue'
  62. import TimerBudget from '/@/views/components/auto/auto-campaigns/timer-budget.vue'
  63. import SwitchCampaign from '/@/views/components/auto/auto-campaigns/switch-campaign.vue'
  64. import TargetRule from '/@/views/components/auto/auto-campaigns/target-rule.vue'
  65. import SearchTermRule from '/@/views/components/auto/auto-campaigns/search-term.vue'
  66. import NegKeywordRule from '/@/views/components/auto/auto-campaigns/neg-keyword.vue'
  67. import * as api from './api'
  68. import XEUtils from 'xe-utils'
  69. interface Props {
  70. campaignId: string
  71. profileId: string
  72. }
  73. const props = defineProps<Props>()
  74. const campaignType = 'sp'
  75. const activeTab = ref(1)
  76. const RuleStatusButton = ref({
  77. '1': '-',
  78. '2': '-',
  79. '3': '-',
  80. '4': '-',
  81. '5': '-',
  82. '6': '-',
  83. })
  84. // const height = ref(800)
  85. // const campaignRuleStatus = ref({
  86. // campaignId: props.campaignId,
  87. // campaignType: campaignType,
  88. // profileId: props.profileId,
  89. // ruleType: activeTab.value,
  90. // templateName: '',
  91. // useTmpl: false,
  92. // template: null,
  93. // rule: {
  94. // type: activeTab.value,
  95. // campaignType: campaignType,
  96. // campaignAd: [],
  97. // action: {},
  98. // activeModel: '',
  99. // setTime: '',
  100. // weekdays: [],
  101. // conditions: [],
  102. // },
  103. // RuleStatusButton: RuleStatusButton,
  104. // })
  105. const baseData = ref({
  106. campaignId: props.campaignId,
  107. campaignType: campaignType,
  108. profileId: props.profileId,
  109. ruleType: activeTab,
  110. })
  111. const initData = async () => {
  112. const resp = await api.getCampaignRuleInfo(baseData.value)
  113. const info = resp.data[0]
  114. if (info) {
  115. for (const i of ['1', '2', '3', '4', '5', '6']) {
  116. RuleStatusButton.value[i] = info.RuleStatusButton[i]
  117. }
  118. }
  119. }
  120. const changeTab = async () => {
  121. // await initData()
  122. }
  123. const refresh = async (tab: number) => {
  124. activeTab.value = 0
  125. nextTick(() => {
  126. activeTab.value = tab
  127. })
  128. }
  129. onMounted(async () => {
  130. await initData()
  131. })
  132. </script>
  133. <style lang="scss" scoped>
  134. .tab-label {
  135. display: flex;
  136. justify-content: space-between;
  137. align-items: center;
  138. width: 120px;
  139. }
  140. </style>