index.vue 5.0 KB

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