index.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <script lang="ts" setup>
  2. import { nextTick, onMounted, ref } from 'vue';
  3. import TimerBid from '/@/views/components/auto/auto-campaigns/timer-bid.vue';
  4. import TimerBudget from '/@/views/components/auto/auto-campaigns/timer-budget.vue';
  5. import SwitchCampaign from '/@/views/components/auto/auto-campaigns/switch-campaign.vue';
  6. import TargetRule from '/@/views/components/auto/auto-campaigns/target-rule.vue';
  7. import SearchTermRule from '/@/views/components/auto/auto-campaigns/search-term.vue';
  8. import NegKeywordRule from '/@/views/components/auto/auto-campaigns/neg-keyword.vue';
  9. // import * as api from './api';
  10. interface Props {
  11. campaignId: string;
  12. profileId: string;
  13. }
  14. const props = defineProps<Props>();
  15. const campaignType = 'sd';
  16. const activeTab = ref(1);
  17. const RuleStatusButton = ref({
  18. '1': 0,
  19. '2': 0,
  20. '3': 0,
  21. '4': 0,
  22. '5': 0,
  23. '6': 0,
  24. })
  25. const baseData = ref({
  26. campaignId: props.campaignId,
  27. campaignType: campaignType,
  28. profileId: props.profileId,
  29. ruleType: activeTab,
  30. });
  31. async function changeStatus(newStatus: number, tabIndex: string) {
  32. const body = {
  33. ...baseData.value,
  34. ruleType: Number(tabIndex),
  35. status: newStatus
  36. };
  37. try {
  38. const response = await postCampaignStatus(body);
  39. if (response.code === 2000) {
  40. ElMessage.success('更新状态成功');
  41. // const resp = await getCampaignRuleInfo(baseData.value);
  42. // RuleStatusButton.value = resp.data[0].RuleStatusButton;
  43. } else if (response.code == 5000) {
  44. ElMessage.warning(`${ response.data.description }`);
  45. } else {
  46. ElMessage.error('状态更新失败');
  47. }
  48. } catch (error) {
  49. console.log('error:', error);
  50. }
  51. }
  52. function updateRuleStatusButton(newValue) {
  53. if (newValue !== undefined) {
  54. RuleStatusButton.value = { ...RuleStatusButton.value, ...newValue }
  55. } else {
  56. console.error('接收到的 newValue 是 undefined')
  57. }
  58. }
  59. async function refresh(tab: number) {
  60. activeTab.value = 0;
  61. nextTick(() => {
  62. activeTab.value = tab;
  63. });
  64. }
  65. onMounted(async () => {
  66. // await initData();
  67. });
  68. </script>
  69. <template>
  70. <el-tabs v-model="activeTab" tab-position="left" @tab-change="changeTab">
  71. <el-tab-pane :name="1" label="分时调价">
  72. <template #label>
  73. <div class="tab-label">
  74. <el-switch v-model="RuleStatusButton['1']" :active-value="1" :disabled="RuleStatusButton['1'] === '-'"
  75. :inactive-value="0" size="small" @change="(val) => changeStatus(val, '1')" @click.stop="">
  76. </el-switch>
  77. <span>分时调价</span>
  78. </div>
  79. </template>
  80. <TimerBid v-if="activeTab === 1" :RuleStatusButton="RuleStatusButton" :data="baseData" @refresh="refresh(1)" @updateRuleStatusButton="updateRuleStatusButton"/>
  81. </el-tab-pane>
  82. <el-tab-pane :name="2" label="分时预算" v-if="false">
  83. <!-- <template #label>-->
  84. <!-- <div class="tab-label">-->
  85. <!-- <el-switch v-model="RuleStatusButton['2']" :active-value="1" :disabled="RuleStatusButton['2'] === '-'"-->
  86. <!-- :inactive-value="0" size="small" @change="(val) => changeStatus(val, '2')" @click.stop="">-->
  87. <!-- </el-switch>-->
  88. <!-- <span>分时预算</span>-->
  89. <!-- </div>-->
  90. <!-- </template>-->
  91. <!-- <TimerBudget v-if="activeTab === 2" :RuleStatusButton="RuleStatusButton" :data="baseData" @refresh="refresh(2)" />-->
  92. </el-tab-pane>
  93. <el-tab-pane :name="3" label="开启/暂停广告活动">
  94. <template #label>
  95. <div class="tab-label">
  96. <el-switch v-model="RuleStatusButton['3']" :active-value="1" :disabled="RuleStatusButton['3'] === '-'"
  97. :inactive-value="0" size="small" @change="(val) => changeStatus(val, '3')" @click.stop="">
  98. </el-switch>
  99. <span>开启/暂停广告活动</span>
  100. </div>
  101. </template>
  102. <SwitchCampaign v-if="activeTab === 3" :RuleStatusButton="RuleStatusButton" :data="baseData"
  103. @refresh="refresh(3)" />
  104. </el-tab-pane>
  105. <el-tab-pane :name="4" label="定向规则">
  106. <template #label>
  107. <div class="tab-label">
  108. <el-switch v-model="RuleStatusButton['4']" :active-value="1" :disabled="RuleStatusButton['4'] === '-'"
  109. :inactive-value="0" size="small" @change="(val) => changeStatus(val, '4')" @click.stop="">
  110. </el-switch>
  111. <span>定向规则</span>
  112. </div>
  113. </template>
  114. <TargetRule v-if="activeTab === 4" :RuleStatusButton="RuleStatusButton" :data="baseData"
  115. @refresh="refresh(4)"></TargetRule>
  116. </el-tab-pane>
  117. <el-tab-pane :name="5" label="添加搜索词" v-if="false">
  118. <!--<template #label>-->
  119. <!-- <div class="tab-label">-->
  120. <!-- <el-switch v-model="RuleStatusButton['5']" :active-value="1" :disabled="RuleStatusButton['5'] === '-'"-->
  121. <!-- :inactive-value="0" size="small" @change="(val) => changeStatus(val, '5')" @click.stop="">-->
  122. <!-- </el-switch>-->
  123. <!-- <span>添加搜索词</span>-->
  124. <!-- </div>-->
  125. <!--</template>-->
  126. <!--<SearchTermRule v-if="activeTab === 5" :RuleStatusButton="RuleStatusButton" :data="baseData"-->
  127. <!-- @refresh="refresh(5)">-->
  128. <!--</SearchTermRule>-->
  129. </el-tab-pane>
  130. <el-tab-pane :name="6" label="添加否定词" v-if="false">
  131. <!--<template #label>-->
  132. <!-- <div class="tab-label">-->
  133. <!-- <el-switch v-model="RuleStatusButton['6']" :active-value="1" :disabled="RuleStatusButton['6'] === '-'"-->
  134. <!-- :inactive-value="0" size="small" @change="(val) => changeStatus(val, '6')" @click.stop="">-->
  135. <!-- </el-switch>-->
  136. <!-- <span>添加否定词</span>-->
  137. <!-- </div>-->
  138. <!--</template>-->
  139. <!--<NegKeywordRule v-if="activeTab === 6" :RuleStatusButton="RuleStatusButton" :data="baseData"-->
  140. <!-- @refresh="refresh(6)">-->
  141. <!--</NegKeywordRule>-->
  142. </el-tab-pane>
  143. </el-tabs>
  144. </template>
  145. <style lang="scss" scoped>
  146. .tab-label {
  147. display: flex;
  148. justify-content: space-between;
  149. align-items: center;
  150. width: 155px;
  151. }
  152. </style>