From a7b45caf5b3784f65ba82793d87f5ffb202fca1e Mon Sep 17 00:00:00 2001
From: Tomas <tomasysh@gmail.com>
Date: 星期五, 21 一月 2022 11:42:07 +0800
Subject: [PATCH] update#134555: [顧問] 預約單結案/編輯結案功能串接

---
 PAMapp/pages/appointment/_appointmentId/close/index.vue |  108 ++++++++++++++++++++++++++---------------------------
 1 files changed, 53 insertions(+), 55 deletions(-)

diff --git a/PAMapp/pages/appointment/_appointmentId/close/index.vue b/PAMapp/pages/appointment/_appointmentId/close/index.vue
index 973e48a..956280e 100644
--- a/PAMapp/pages/appointment/_appointmentId/close/index.vue
+++ b/PAMapp/pages/appointment/_appointmentId/close/index.vue
@@ -11,7 +11,7 @@
         </UiField>
       </el-row>
 
-      <template v-if="appointmentCloseInfo.selectCloseOption === 'done'">
+      <template v-if="appointmentCloseInfo.selectCloseOption === contactStatus.DONE">
         <el-row
           type="flex"
           class="pam-paragraph" style="flex-direction: column">
@@ -43,18 +43,20 @@
         <el-row
           type="flex"
           class="pam-paragraph">
-          <UiField label="�脖辣����" :labelSize="20" class="required">
-            <DateTimePicker  @changeDateTime="appointmentCloseDate = $event"></DateTimePicker>
+          <UiField label="�脖辣����" :labelSize="20">
+            <DateTimePicker
+              :defaultValue="appointmentCloseInfo.policyEntryDate"
+              @changeDateTime="appointmentCloseInfo.policyEntryDate = $event"></DateTimePicker>
           </UiField>
         </el-row>
       </template>
 
-      <template v-if="appointmentCloseInfo.selectCloseOption === 'close'">
+      <template v-if="appointmentCloseInfo.selectCloseOption === contactStatus.CLOSE">
         <el-row
           class="pam-paragraph">
           <UiField label="���漱����" :labelSize="20" class="required">
           </UiField>
-            <div class="appointment-client-detail-close__selectbox">
+            <div class="appointment-client-detail-close__select-box">
               <select
                 class="appointment-client-detail-close__select"
                 name="closedReason" id="closedReason" v-model="appointmentCloseInfo.closedReason">
@@ -64,8 +66,7 @@
               </select>
               <i class="icon-down down-icon"></i>
             </div>
-            <div style="display: flex" class="mt-10">
-
+            <div class="mt-10">
               <input
                 v-if="appointmentCloseInfo.closedReason === 'other'
                     || appointmentCloseInfo.closedReason === 'no_suitable_commodity'"
@@ -88,16 +89,6 @@
             v-model="appointmentCloseInfo.remark"
             resize="none">
           </el-input>
-
-          <!-- <textarea
-            v-model="appointmentCloseInfo.archivedDate"
-            class="appointment-close__remark"
-            placeholder="隢撓�"
-            name="remark"
-            id="remark"
-            wrap="off"
-            rows="3">
-          </textarea> -->
         </UiField>
       </el-row>
 
@@ -123,9 +114,10 @@
 import { namespace } from 'nuxt-property-decorator';
 import { Vue, Component } from 'vue-property-decorator';
 import { Appointment, ToCloseAppointment, ToDoneAppointment } from '~/shared/models/appointment.model';
-import { ContactStatus } from '~/shared/models/enum/contact-status';
 
 import appointmentService from '~/shared/services/appointment.service';
+import { appointmentFailReasonList } from '~/shared/const/appointment-fail-reason-list';
+import { ContactStatus } from '~/shared/models/enum/contact-status';
 
 const appointmentStore = namespace('appointment.store');
 
@@ -133,7 +125,10 @@
 export default class AppointmentDetailCloseComponent extends Vue {
 
   @appointmentStore.Action
-  updateAppointmentDetail!: () => Appointment;
+  updateAppointmentDetail!: (appointmentId: number) => Appointment;
+
+  @appointmentStore.State('appointmentDetail')
+  appointmentDetail!: Appointment;
 
   contactStatus = ContactStatus;
 
@@ -147,58 +142,60 @@
     policyEntryDate       : this.appointmentCloseDate,
     policyholderIdentityId: '',
     remark                : '',
-    selectCloseOption     : 'done',
+    selectCloseOption     : this.contactStatus.DONE,
   };
 
   closeOptions = [
     {
       title:'��漱',
-      label: 'done',
+      label: this.contactStatus.DONE,
     },
     {
       title:'���漱',
-      label: 'close',
+      label: this.contactStatus.CLOSE,
     }
   ];
 
-  appointmentFailReason = [
-    {
-      key: '�瘜蝜怠恥�',
-      value: 'cannot_to_contact_customer'
-    },
-    {
-      key: '�蝝垣閰�',
-      value: 'only_consultation'
-    },
-    {
-      key: '�������',
-      value: 'no_suitable_commodity'
-    },
-    {
-      key: '�靽���- 擃��瓷���璆�',
-      value: 'prohibited_factors'
-    },
-    {
-      key: '蝬����',
-      value: 'economy'
-    },
-    {
-      key: '�隞�',
-      value: 'other'
-    },
-  ];
+  appointmentFailReason = appointmentFailReasonList;
+
+  //////////////////////////////////////////////////////////////////////
+
+  mounted() {
+    const appointmentId = +this.$route.params.appointmentId;
+    const closedInfo = this.appointmentDetail.appointmentClosedInfo;
+    if (this.appointmentDetail.id === appointmentId
+        && (this.appointmentDetail.communicateStatus === this.contactStatus.DONE
+        || this.appointmentDetail.communicateStatus === this.contactStatus.CLOSE
+        || this.appointmentDetail.communicateStatus === this.contactStatus.CANCEL)
+        ) {
+        this.appointmentCloseInfo = {
+        closedOtherReason     : closedInfo?.closedOtherReason,
+        closedReason          : closedInfo?.closedReason,
+        planCode              : closedInfo?.planCode,
+        policyEntryDate       : closedInfo?.policyEntryDate,
+        policyholderIdentityId: closedInfo?.policyholderIdentityId,
+        remark                : closedInfo?.remark,
+        selectCloseOption     : this.appointmentDetail.communicateStatus === this.contactStatus.DONE
+                                ? this.contactStatus.DONE
+                                : this.contactStatus.CLOSE
+      };
+    }
+  }
+
+  //////////////////////////////////////////////////////////////////////
 
   closeAppointment(): void {
     const appointmentId = +this.$route.params.appointmentId;
-    if (this.appointmentCloseInfo.selectCloseOption === 'done') {
+    if (this.appointmentCloseInfo.selectCloseOption === this.contactStatus.DONE) {
       const toDoneAppointment: ToDoneAppointment = {
         appointmentId         : appointmentId,
         contactStatus         : this.contactStatus.DONE,
         planCode              : this.appointmentCloseInfo.planCode,
         policyEntryDate       : this.appointmentCloseInfo.policyEntryDate,
         policyholderIdentityId: this.appointmentCloseInfo.policyholderIdentityId,
+        remark                : this.appointmentCloseInfo.remark,
       }
-      appointmentService.closeAppointment(toDoneAppointment).then((res) => res);
+      appointmentService.closeAppointment(toDoneAppointment).then((_) => this.updateAppointmentDetail(appointmentId));
       this.isShowSuccessAlert = true;
     } else {
       const toCloseAppointment: ToCloseAppointment = {
@@ -208,7 +205,7 @@
         contactStatus    : this.contactStatus.CLOSE,
         remark           : this.appointmentCloseInfo.remark,
       }
-      appointmentService.closeAppointment(toCloseAppointment).then((res) => res);
+      appointmentService.closeAppointment(toCloseAppointment).then((_) => this.updateAppointmentDetail(appointmentId));
       this.isShowSuccessAlert = true;
     }
   }
@@ -224,11 +221,12 @@
       policyholderIdentityId,
       planCode,
       closedReason,
-      closedOtherReason
+      closedOtherReason,
+      remark
     } = this.appointmentCloseInfo;
     // this.appointmentCloseInfo.policyEntryDate 銝行��齒瘜��澆 this.appointmentCloseDate
-    if (selectCloseOption === 'done') {
-      return !policyholderIdentityId || !this.identityIdValid || !planCode || !this.appointmentCloseDate
+    if (selectCloseOption === this.contactStatus.DONE) {
+      return !policyholderIdentityId || !this.identityIdValid || !planCode || !this.appointmentCloseInfo.policyEntryDate || !remark
     } else if (closedReason === 'other' || closedReason === 'no_suitable_commodity') {
       return !closedOtherReason
     }
@@ -261,7 +259,7 @@
     border-color: $PRIMARY_RED !important;
   }
 }
-.appointment-client-detail-close__selectbox {
+.appointment-client-detail-close__select-box {
   position: relative;
 
   & .appointment-client-detail-close__select{

--
Gitblit v1.8.0