From dc0e7366e96ce773ae1690f6db28e03a684bb45e Mon Sep 17 00:00:00 2001
From: Jack <jack.su@pollex.com.tw>
Date: 星期二, 18 一月 2022 19:50:12 +0800
Subject: [PATCH] Merge branch 'Phase3' of ssh://dev.pollex.com.tw:29418/pcalife/PAM into Phase3

---
 PAMapp/components/Interview/InterviewAdd.vue |  234 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 210 insertions(+), 24 deletions(-)

diff --git a/PAMapp/components/Interview/InterviewAdd.vue b/PAMapp/components/Interview/InterviewAdd.vue
index 6cac922..e1227bc 100644
--- a/PAMapp/components/Interview/InterviewAdd.vue
+++ b/PAMapp/components/Interview/InterviewAdd.vue
@@ -1,43 +1,229 @@
 <template>
   <div class="edit-appointment-record">
-      <div class="edit-appointment-record-date">
-          <span>隞予 11:00 撱箇��</span>
-          <span>隞予 11:00 ��</span>
+      <div class="edit-appointment-record-date" v-if="interviewId">
+          <span>{{interviewRecord.createdDate | formatDate}} 撱箇��</span>
+          <span>{{interviewRecord.lastModifiedDate | formatDate}} ��</span>
+      </div>
+      <el-row class="mdTxt mb-10">
+          <el-col :xs="16" :sm="20">蝝赤����</el-col>
+          <el-col :xs="8" :sm="4" class="text--right" v-if="interviewId">
+              <span
+                v-if="!isEdit"
+                class="mr-10 text--primary text--underline cursor--pointer"
+                @click="showCancelPopUp = true"
+              >��</span>
+              <span
+                v-if="!isEdit"
+                class="text--primary text--underline cursor--pointer"
+                @click="isEdit = !isEdit"
+              >蝺刻摩</span>
+          </el-col>
+      </el-row>
+      <template v-if="!interviewId || isEdit">
+          <DateTimePicker
+            @changeDateTime="interviewTime = $event"
+            :defaultValue="defaultValue"
+          ></DateTimePicker>
+      </template>
+      <template v-else>
+          <div class="mdTxt lighter mt-20">
+              {{formatInterviewDate}}
+          </div>
+      </template>
+
+      <div class="mdTxt mb-10 mt-30">蝝赤蝝����</div>
+      <template v-if="!interviewId || isEdit">
+          <el-input
+            type="textarea"
+            :rows="5"
+            placeholder="隢撓�蝝赤蝝����"
+            resize="none"
+            v-model="content"
+        >
+        </el-input>
+      </template>
+      <template v-else>
+          <div class="mdTxt lighter mt-20">
+              {{content}}
+          </div>
+      </template>
+      <div class="edit-appointment-record-btn" v-if="!interviewId || isEdit">
+          <el-button @click="cancel">����</el-button>
+          <el-button
+            :disabled="!interviewTime || !content"
+            @click="saveInterviewRecord"
+          >蝣箏��</el-button>
       </div>
 
-      <div class="mdTxt mb-10">蝝赤����</div>
-      <DateTimePicker
-        @changeDateTime="interviewTime = $event"
-      ></DateTimePicker>
+      <PopUpFrame :isOpen.sync="showCancelPopUp"
+         @closePopUp="showCancelPopUp = false"
+      >
+        <div class="text--center mdTxt">����甇斤��赤閮���</div>
+        <div class="text--center mt-30">
+            <el-button @click="showCancelPopUp = false">�</el-button>
+            <el-button @click="deleteInterviewRecord" type="primary">�</el-button>
+        </div>
+      </PopUpFrame>
 
-      <div class="mdTxt mb-10 mt-10">蝝赤蝝����</div>
-      <el-input type="textarea" :rows="5" placeholder="蝝赤�" resize="none">
-      </el-input>
+      <PopUpFrame :isOpen.sync="showConfirmPopup"
+        @closePopUp="closePopup">
+        <div class="text--center mdTxt">{{confirmTxt}}嚗�</div>
+        <div class="text--center mt-30">
+            <el-button @click="closePopup" type="primary">蝣箏��</el-button>
+        </div>
+      </PopUpFrame>
 
-      <div class="edit-appointment-record-btn">
-          <el-button>����</el-button>
-          <el-button :disabled="!interviewTime">蝣箏��</el-button>
-      </div>
+      <PopUpFrame :isOpen.sync="showFutureDateConfirmPopup"
+        @closePopUp="closePopup">
+        <div class="text--center mdTxt">{{confirmTxt}}嚗�</div>
+        <div class="text--center mdTxt">蝡���赤�嚗�</div>
+        <div class="text--center mt-30">
+            <el-button @click="closePopup">�����</el-button>
+            <el-button @click="showInterviewMsgPopup = true" type="primary">���赤�</el-button>
+        </div>
+      </PopUpFrame>
+
+      <InterviewMsg
+        :isVisible.sync="showInterviewMsgPopup"
+        @closeDialog="closePopup"
+      ></InterviewMsg>
   </div>
 </template>
 <script lang="ts">
-import { AppointmentLog } from '~/shared/models/appointment.model';
-import { Vue, Component, Prop } from 'nuxt-property-decorator';
-import authService from '~/shared/services/auth.service';
+import { InterviewRecord, InterviewRecordInfo } from '~/shared/models/appointment.model';
+import { Vue, Component, Prop, State, Mutation, Watch, Action } from 'nuxt-property-decorator';
+import appointmentService from '~/shared/services/appointment.service';
 
 @Component
 export default class InterviewAdd extends Vue {
+    @State
+    interviewRecord!: InterviewRecord;
+
+    @Mutation
+    updateInterviewRecord!: (data: InterviewRecord) => void;
+
+    @Mutation
+    clearInterviewRecord!: () => void;
+
     interviewTime = '';
+    content = '';
 
-    // @Prop()
-    // myAppointmentReviewLogList!: AppointmentLog[];
+    interviewId = '';
+    appointmentId = '';
+    confirmTxt: '�憓���' | '蝺刻摩����' | '������' = '�憓���';
 
-    // isUserLogin = false;
+    isEdit = false;
 
-    //////////////////////////////////////////////////////////////////////
-    // mounted() {
-    //   this.isUserLogin = authService.isUserLogin();
-    // }
+    showConfirmPopup = false;
+    showCancelPopUp = false;
+    showInterviewMsgPopup = false;
+    showFutureDateConfirmPopup = false;
+
+    defaultValue!: Date;
+
+    ////////////////////////////////////////////////////////////////////
+
+    mounted() {
+        this.interviewId = this.$route.params.interviewId;
+        this.appointmentId = this.$route.params.appointmentId;
+        const isEditPage = this.interviewId && this.interviewRecord;
+        if (isEditPage) {
+            this.checkInterviewRecord();
+        }
+    }
+
+    private checkInterviewRecord() {
+        if (this.interviewRecord.appointmentId !== +this.appointmentId
+                || this.interviewRecord.id !== +this.interviewId) {
+            appointmentService.getAppointmentDetail(+this.appointmentId).then((data) => {
+                const currentInterviewRecord = data.interviewRecordDTOs.filter(item => item.id === +this.interviewId)[0];
+                this.updateInterviewRecord(currentInterviewRecord);
+            })
+        }
+    }
+
+    destroyed() {
+        this.clearInterviewRecord();
+    }
+
+    ////////////////////////////////////////////////////////////////////
+
+    @Watch('interviewRecord', {immediate: true})
+    watchInterviewRecord() {
+        if (this.interviewRecord && this.interviewRecord.content) {
+            this.content = this.interviewRecord.content;
+            this.defaultValue = new Date(this.interviewRecord.interviewDate);
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////////
+
+    saveInterviewRecord() {
+        const interviewRecordInfo: InterviewRecordInfo = {
+            content: this.content,
+            interviewDate: this.interviewTime,
+            appointmentId: +this.appointmentId
+        };
+        if (!this.interviewId) {
+            this.createdRecord(interviewRecordInfo);
+        } else {
+            const updateInterviewRecord = {
+                ...interviewRecordInfo,
+                id: +this.interviewId
+            }
+            this.updateRecord(updateInterviewRecord);
+        }
+    }
+
+    private createdRecord(interviewRecordInfo) {
+        appointmentService.createInterviewRecord(interviewRecordInfo).then(res => {
+            this.confirmTxt = '�憓���'
+            this.showPopUp();
+        });
+    }
+
+    private updateRecord(updateInterviewRecord) {
+        appointmentService.updateInterviewRecord(updateInterviewRecord).then(res => {
+            this.confirmTxt = '蝺刻摩����';
+            this.showPopUp();
+        });
+    }
+
+    private showPopUp() {
+        if (new Date(this.interviewTime).getTime() >= new Date().getTime()) {
+            this.showFutureDateConfirmPopup = true;
+        } else {
+            this.showConfirmPopup = true;
+        }
+    }
+
+    closePopup() {
+        this.$router.push(`/appointment/${this.appointmentId}`);
+    }
+
+    deleteInterviewRecord() {
+        appointmentService.deleteInterviewRecord(this.interviewId).then(res => {
+            this.confirmTxt = '������';
+            this.showConfirmPopup = true;
+        });
+    }
+
+    cancel() {
+        if (this.interviewId) {
+           this.content = this.interviewRecord.content;
+           this.defaultValue = new Date(this.interviewRecord.interviewDate);
+           this.isEdit = false;
+        } else {
+           this.$router.push(`/appointment/${this.appointmentId}`);
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////////
+
+    get formatInterviewDate() {
+        const interviewDate = new Date(this.interviewRecord.interviewDate);
+        return `${interviewDate.getFullYear()}/${interviewDate.getMonth() + 1}/${interviewDate.getDate()} ${interviewDate.getHours()}:${interviewDate.getMinutes()}`;
+    }
 
 }
 </script>

--
Gitblit v1.8.0