FollowUpDialog.vue 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <template>
  2. <el-dialog v-model="visible" title="新建跟进记录" width="600px" append-to-body>
  3. <el-form :model="form" :rules="rules" ref="formRef" label-width="100px">
  4. <el-form-item label="拜访方式" prop="callTypeCode">
  5. <el-select v-model="form.callTypeCode" placeholder="请选择">
  6. <el-option label="电话拜访" value="phone" />
  7. <el-option label="上门拜访" value="visit" />
  8. <el-option label="邮件" value="email" />
  9. </el-select>
  10. </el-form-item>
  11. <el-form-item label="拜访日期" prop="callDate">
  12. <el-date-picker v-model="form.callDate" type="date" value-format="YYYY-MM-DD" style="width:100%" />
  13. </el-form-item>
  14. <el-form-item label="跟进内容" prop="followUpCondition">
  15. <el-input v-model="form.followUpCondition" type="textarea" :rows="4" placeholder="请输入跟进内容" />
  16. </el-form-item>
  17. </el-form>
  18. <template #footer>
  19. <div class="dialog-footer">
  20. <el-button @click="visible = false">取消</el-button>
  21. <el-button type="primary" @click="handleSubmit">确定</el-button>
  22. </div>
  23. </template>
  24. </el-dialog>
  25. </template>
  26. <script setup>
  27. import { ref, computed } from 'vue';
  28. const props = defineProps({
  29. modelValue: Boolean,
  30. projectId: [String, Number],
  31. customName: String
  32. });
  33. const emit = defineEmits(['update:modelValue', 'success']);
  34. const visible = computed({
  35. get: () => props.modelValue,
  36. set: (val) => emit('update:modelValue', val)
  37. });
  38. const form = ref({
  39. callTypeCode: 'visit',
  40. callDate: new Date().toISOString().split('T')[0],
  41. followUpCondition: ''
  42. });
  43. const rules = {
  44. callTypeCode: [{ required: true, message: '拜访方式不能为空', trigger: 'change' }],
  45. followUpCondition: [{ required: true, message: '跟进内容不能为空', trigger: 'blur' }]
  46. };
  47. const formRef = ref(null);
  48. const handleSubmit = async () => {
  49. if (!formRef.value) return;
  50. await formRef.value.validate(async (valid) => {
  51. if (valid) {
  52. // 调用保存 API
  53. emit('success');
  54. visible.value = false;
  55. }
  56. });
  57. };
  58. </script>
  59. <style scoped>
  60. .dialog-footer {
  61. display: flex;
  62. justify-content: flex-end;
  63. gap: 12px;
  64. }
  65. </style>