search-term.vue 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <script lang="ts" setup>
  2. /**
  3. * @Name: search-term
  4. * @Description: 自动化-添加搜索词
  5. * @Author: Cheney
  6. */
  7. import { ref, computed } from 'vue';
  8. import SearchTermAdd from '../search-term-add.vue';
  9. import SearchTermBid from '../search-term-bid.vue';
  10. import SelectTmpl from './select-tmpl.vue';
  11. import FreqSetting from '../freq-setting.vue';
  12. import conditionBuilder from '/@/components/conditionBuilder/index.vue';
  13. import { userFormData } from './common';
  14. import XEUtils from 'xe-utils';
  15. import SaveRuleDialog from '/@/views/components/auto/auto-campaigns/save-rule-dialog.vue';
  16. interface Props {
  17. data: {
  18. campaignId: string;
  19. campaignType: string;
  20. profileId: string;
  21. ruleType: number;
  22. };
  23. RuleStatusButton?: { [key: string]: any };
  24. }
  25. const props = defineProps<Props>();
  26. const emits = defineEmits(['refresh']);
  27. const formRef = ref();
  28. const searchTermAddRef = ref();
  29. const searchTermBidRef = ref();
  30. const condiBuilderRef = ref();
  31. const { formData, submitFormData } = userFormData(props);
  32. const submitDialogVisible = ref(false);
  33. const submitForm = async () => {
  34. const valid2 = await searchTermAddRef.value.validate();
  35. const valid3 = searchTermBidRef.value.valid;
  36. const valid4 = !XEUtils.includes(await condiBuilderRef.value.validate(), false);
  37. formRef.value.validate(async (valid: boolean) => {
  38. if (valid && valid2 && valid3 && valid4) {
  39. await submitFormData();
  40. emits('refresh');
  41. } else {
  42. console.log('验证失败:', [valid, valid2, valid3, valid4]);
  43. }
  44. });
  45. };
  46. const cancel = () => {
  47. emits('refresh');
  48. };
  49. function handleSubmit() {
  50. if (formData.value.useTmpl) {
  51. submitForm();
  52. } else {
  53. submitDialogVisible.value = true;
  54. }
  55. }
  56. </script>
  57. <template>
  58. <div class="mx-5">
  59. <div class="asj-h2">添加搜索词</div>
  60. <SelectTmpl :data="formData" />
  61. <el-card class="mt-3">
  62. <FreqSetting :rule="formData.rule" :disabled="formData.useTmpl" />
  63. <el-divider />
  64. <el-form :model="formData" label-position="top" ref="formRef" :disabled="formData.useTmpl">
  65. <SearchTermAdd :rule="formData.rule" :disabled="formData.useTmpl" ref="searchTermAddRef" />
  66. <SearchTermBid :action="formData.rule.action" ref="searchTermBidRef" />
  67. </el-form>
  68. </el-card>
  69. <el-card class="mt-3">
  70. <conditionBuilder :data="formData.rule.conditions" ref="condiBuilderRef" :disabled="formData.useTmpl" />
  71. </el-card>
  72. <SaveRuleDialog
  73. v-model="submitDialogVisible"
  74. :formData="formData"
  75. :formRef="formRef"
  76. @submit="submitForm"
  77. />
  78. <div class="auto-page-foot">
  79. <el-button style="width: 200px" @click="cancel">取消</el-button>
  80. <el-button style="width: 200px" type="primary" @click="handleSubmit">提交</el-button>
  81. </div>
  82. </div>
  83. </template>
  84. <style scoped></style>