index.vue 6.3 KB

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