From 22ee840d8c9a79e56609351fa67e6c2ac9f620bb Mon Sep 17 00:00:00 2001
From: Tomas <tomasysh@gmail.com>
Date: 星期三, 19 一月 2022 14:56:57 +0800
Subject: [PATCH] refactor: appointment store

---
 PAMapp/components/Interview/InterviewMsg.vue |   78 +++++++++++++++++++++++++++++++++++---
 1 files changed, 71 insertions(+), 7 deletions(-)

diff --git a/PAMapp/components/Interview/InterviewMsg.vue b/PAMapp/components/Interview/InterviewMsg.vue
index b9518c4..7d671ce 100644
--- a/PAMapp/components/Interview/InterviewMsg.vue
+++ b/PAMapp/components/Interview/InterviewMsg.vue
@@ -19,23 +19,52 @@
         resize="none"
         v-model="interviewTxt">
         </el-input>
+
       <div class="mdTxt mt-30 mb-10">����赤��挾</div>
       <DateTimePicker
         @changeDateTime="interviewTime = $event"
       ></DateTimePicker>
 
       <div class="msg-dialog-btn">
-        <el-button :disabled="!interviewTime">���</el-button>
+        <el-button @click="addInterview"  :disabled="!interviewTime">���</el-button>
       </div>
 
         </el-dialog>
+
+        <PopUpFrame
+        :isOpen.sync="isShowSuccessAlert">
+        <div class="text--middle invite-review">
+            <div class="mb-30 mt-10">撌脩��赤�</div>
+            <div class="text--primary text--middle cursor--pointer text--underline" @click="closeAllDialog " :size="'250px'">������</div>
+          </div>
+        </PopUpFrame>
   </div>
 </template>
 <script lang="ts">
-import { Vue, Component, Prop, PropSync, Emit, Action } from 'nuxt-property-decorator';
+import { Vue, Component, Prop, PropSync, Emit, namespace } from 'nuxt-property-decorator';
+
+import appointmentService from '~/shared/services/appointment.service';
+import { Appointment, ToInformAppointment } from '~/shared/models/appointment.model';
+import { ContactStatus } from '~/shared/models/enum/contact-status';
+
+const appointmentStore = namespace('appointment.store');
 
 @Component
-export default class InterviewAdd extends Vue {
+export default class InterviewMsg extends Vue {
+
+    @appointmentStore.Action
+    getMyAppointmentList!: () => Promise<Appointment[]>;
+
+
+    @appointmentStore.Action
+    updateMyAppointmentList!:(appointment: Appointment) => Appointment[];
+
+    @appointmentStore.Action
+    updateAppointmentDetail!: (appointmentId: number) => Promise<Appointment>;
+
+    @appointmentStore.State
+    appointmentDetail!: Appointment;
+
     @PropSync('isVisible')
     dialogVisible!: boolean;
 
@@ -43,15 +72,46 @@
     dialogWidth!:string;
 
     @Prop()
-    appointmentId!: number;
+    client!: Appointment;
 
     @Emit('closeDialog')
     closeDialog() {
         return;
     }
 
-    interviewTxt = "";
-    interviewTime = '';
+    interviewTime      = '';
+    interviewTxt       = '';
+    isShowSuccessAlert = false;
+
+    contactStatus = ContactStatus;
+
+    //////////////////////////////////////////////////////////////////////
+
+    addInterview() {
+      const appointmentInformation: ToInformAppointment = {
+        appointmentId: this.client.id,
+        email        : this.client?.email,
+        interviewDate: this.interviewTime,
+        message      : this.interviewTxt,
+        phone        : this.client?.phone,
+      };
+
+      appointmentService.informAppointment(appointmentInformation).then((_) => {
+        this.isShowSuccessAlert = true ;
+        const updatedAppointment = {
+          ...this.appointmentDetail,
+          communicateStatus: this.contactStatus.CONTACTED,
+        };
+        this.updateMyAppointmentList(updatedAppointment);
+        this.updateAppointmentDetail(updatedAppointment.id);
+      });
+    }
+
+    closeAllDialog() {
+      this.isShowSuccessAlert = false ;
+      this.dialogVisible = false;
+      this.getMyAppointmentList();
+    }
 
 }
 </script>
@@ -83,5 +143,9 @@
   display: flex;
   justify-content: center;
 }
-
+.invite-review{
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+  }
 </style>

--
Gitblit v1.8.0