target-rule.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <script lang="ts" setup>
  2. /**
  3. * @Name: target-rule
  4. * @Description: 自动化-定向规则
  5. * @Author: Cheney
  6. */
  7. import { ref } from 'vue';
  8. import TargetSelect from '../target-select.vue';
  9. import SelectTmpl from './select-tmpl.vue';
  10. import FreqSetting from '../freq-setting.vue';
  11. import { userFormData } from './common';
  12. import TargetRuleSetting from '../target-rule-setting.vue';
  13. import SaveRuleDialog from '/@/views/components/auto/auto-campaigns/save-rule-dialog.vue';
  14. import { ElMessage } from 'element-plus';
  15. interface Props {
  16. data: {
  17. campaignId: string;
  18. campaignType: string;
  19. profileId: string;
  20. ruleType: number;
  21. };
  22. RuleStatusButton?: { [key: string]: any };
  23. }
  24. const props = defineProps<Props>();
  25. const emits = defineEmits(['refresh', 'updateRuleStatusButton']);
  26. const formRef = ref();
  27. const ruleSettingRef = ref();
  28. const { formData, submitFormData } = userFormData(props);
  29. const submitDialogVisible = ref(false);
  30. const submitForm = async () => {
  31. await submitFormData();
  32. ElMessage.success('保存成功');
  33. emits('refresh');
  34. };
  35. function cancel() {
  36. emits('refresh');
  37. }
  38. async function handleSubmit() {
  39. const valid2 = await ruleSettingRef.value.validateForm();
  40. formRef.value.validate(async (valid: boolean) => {
  41. if (!valid || !valid2) {
  42. return;
  43. } else {
  44. if (formData.value.useTmpl) {
  45. await submitForm();
  46. } else {
  47. submitDialogVisible.value = true;
  48. }
  49. }
  50. });
  51. }
  52. watch(() => formData.value, (newData) => {
  53. emits('updateRuleStatusButton', newData.RuleStatusButton);
  54. });
  55. </script>
  56. <template>
  57. <div class="mx-5">
  58. <div class="asj-h2">定向规则</div>
  59. <SelectTmpl :data="formData" />
  60. <el-card class="mt-3">
  61. <el-form ref="formRef" :model="formData" class="custom-card" label-position="top">
  62. <el-form-item>
  63. <!-- 频率设置 -->
  64. <FreqSetting :disabled="formData.useTmpl" :rule="formData.rule" />
  65. <el-divider />
  66. <!-- 生效对象 -->
  67. <TargetSelect
  68. :campaignInfo="data"
  69. :data="formData.rule"
  70. :useTmpl="formData.useTmpl"
  71. mode="auto"></TargetSelect>
  72. </el-form-item>
  73. </el-form>
  74. </el-card>
  75. <!--规则设置-->
  76. <el-card class="mt-3">
  77. <TargetRuleSetting ref="ruleSettingRef" :disabled="formData.useTmpl" :rule="formData.rule" />
  78. </el-card>
  79. <SaveRuleDialog
  80. v-model="submitDialogVisible"
  81. :formData="formData"
  82. :formRef="formRef"
  83. @submit="submitForm"
  84. />
  85. <div class="auto-page-foot">
  86. <el-button style="width: 200px" @click="cancel">取消</el-button>
  87. <el-button style="width: 200px" type="primary" @click="handleSubmit">提交</el-button>
  88. </div>
  89. </div>
  90. </template>
  91. <style lang="scss" scoped>
  92. :deep(.custom-card .el-form-item__content) {
  93. display: block;
  94. }
  95. </style>