保誠-保戶業務員媒合平台
Tomas
2021-12-21 1d787d91e9ef23794a6ec648123bb8bfeaa00d44
refactor: appointment model, role enum
刪除1個檔案
修改10個檔案
169 ■■■■ 已變更過的檔案
PAMapp/assets/ts/api/consultant.ts 21 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/models/AppointmentDetail.ts 18 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/models/appointment.model.ts 19 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/services/appointment.service.ts 11 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/BackActionBar.vue 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Consultant/ConsultantCard.vue 87 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Consultant/ConsultantList.vue 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/NavBar.vue 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/agentInfo/_agentNo.vue 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/consultantLogin/index.vue 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/login/index.vue 4 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/api/consultant.ts
@@ -1,5 +1,4 @@
import { AxiosResponse } from 'axios';
import { AppointmentDetail } from '../models/AppointmentDetail';
import { ConsultantLoginInfo } from '../models/ConsultantLoginInfo';
import _ from 'lodash';
import { UserSetting } from '../models/account.model';
@@ -53,14 +52,6 @@
    return http.delete('/consultant/favorite/'+agentId, {headers})
}
// å–得預約單細節
export function getAppointmentDetail(apointmentId: number):Promise<AxiosResponse<AppointmentDetail>> {
    const headers = {
        Authorization: 'Bearer ' + localStorage.getItem('id_token')
    }
    return http.get('/appointment/getDetail/'+apointmentId, {headers})
}
//取得使用者帳號資訊
export function getUserAccountSetting() : Promise<UserSetting> {
    const headers = {
@@ -87,12 +78,12 @@
}
// å–消預約
export function cancelAppointment(appointment: number) {
    const headers = {
        Authorization: 'Bearer ' + localStorage.getItem('id_token')
    }
    return http.delete('/appointment/'+appointment ,{headers});
}
// export function cancelAppointment(appointment: number) {
//     const headers = {
//         Authorization: 'Bearer ' + localStorage.getItem('id_token')
//     }
//     return http.delete('/appointment/'+appointment ,{headers});
// }
// ç·¨è¼¯é ç´„
export function editAppointment(editAppointmentParams: editAppointmentParams) {
PAMapp/assets/ts/models/AppointmentDetail.ts
Àɮפw§R°£
PAMapp/assets/ts/models/appointment.model.ts
@@ -37,3 +37,22 @@
  updateTime          : Date | string;
  contactStatus       : string;
}
export interface AppointmentDetail {
  id               : number;
  phone            : string;
  email            : string;
  contactType      : string;
  gender           : string;
  age              : string;
  job              : string;
  requirement      : string;
  communicateStatus: string;
  hopeContactTime  : string;
  otherRequirement : string;
  appointmentDate  : string;
  agentNo          : string;
  customerId       : number;
  name             : string;
}
PAMapp/assets/ts/services/appointment.service.ts
@@ -1,6 +1,7 @@
import { http } from "./httpClient";
import { ClientInfo } from "../models/client.model";
import { AppointmentDetail } from "../models/appointment.model";
class AppointmentService {
@@ -32,6 +33,16 @@
    return http.post(`/appointment/recordRead/${appointmentId}`);
  }
  // å–得預約單細節
  async getAppointmentDetail(appointmentId: number):Promise<AppointmentDetail> {
    return http.get(`/appointment/getDetail/${appointmentId}`).then((res) => res.data);
  }
  // å–消預約
  cancelAppointment(appointmentId: number): Promise<void> {
    return http.delete(`/appointment/${appointmentId}`);
  }
}
export default new AppointmentService();
PAMapp/components/BackActionBar.vue
@@ -10,8 +10,8 @@
<script lang="ts">
import { namespace } from 'nuxt-property-decorator';
import { Vue, Component,} from 'vue-property-decorator';
import { Role } from '~/assets/ts/models/enum/Role';
import * as _ from 'lodash';
import { Role } from '~/assets/ts/models/enum/role';
const roleStorage = namespace('localStorage');
@Component
PAMapp/components/Consultant/ConsultantCard.vue
@@ -127,15 +127,17 @@
</template>
<script lang="ts">
import { Vue, Component, Prop, Action, namespace } from 'nuxt-property-decorator';
import { getAppointmentDetail, UserReviewsConsultantsParams, userReviewsConsultants, cancelAppointment } from '~/assets/ts/api/consultant';
import { Vue, Component, Prop, Action, namespace, State } from 'nuxt-property-decorator';
import appointmentService from '~/assets/ts/services/appointment.service';
import { isMobileDevice } from '~/assets/ts/device';
import { hideReviews } from '~/assets/ts/const/hide-reviews';
import { UserReviewsConsultantsParams, userReviewsConsultants } from '~/assets/ts/api/consultant';
import { Consultant, ConsultantWithAppointmentId } from '~/assets/ts/models/consultant.model';
import { Appointment } from '~/assets/ts/models/appointment.model';
import { isMobileDevice } from '~/assets/ts/device';
import { Role } from '~/assets/ts/models/enum/Role';
import { hideReviews } from '~/assets/ts/const/hide-reviews';
import { Role } from '~/assets/ts/models/enum/role';
const roleStorage = namespace('localStorage');
const localStorage = namespace('localStorage');
@Component({
    filters: {
        formatNumber(index: number) {
@@ -157,16 +159,11 @@
})
export default class ConsultantCard extends Vue {
    @Action
    removeFromMyConsultantList!: (agentNo: string) => Promise<boolean>;
    @Action
    storeConsultantList!: any;
    @Prop()
    agentInfo!: Consultant | ConsultantWithAppointmentId;
    @roleStorage.Getter currentRole!:string;
    @localStorage.State('current_role')
    currentRole!: string;
    isVisibleDialog = false;
    reviewsBtn = false;
@@ -176,6 +173,30 @@
    isCancelPopup = false;
    hideReviews = hideReviews;
    isConfirmPopup = false;
    appointmentDetail: any = {
        age               : '',
        agentNo           : '',
        appointmentDate   : '',
        communicateStatus : '',
        consultantReadTime: null,
        consultantViewTime: null,
        contactTime       : '',
        contactType       : '',
        customerId        : 0,
        email             : '',
        gender            : '',
        hopeContactTime   : "",
        id                : 0,
        job               : "",
        lastModifiedDate  : '',
        name              : '',
        otherRequirement  : null,
        phone             : "",
        requirement       : '',
        satisfactionScore : 0,
    };
    get notScoreAppointmentYet(): boolean {
      const isAppointment = !!this.agentInfo['appointmentStatus'];
@@ -229,29 +250,6 @@
        return time as string;
    }
    appointmentDetail: any = {
        age               : '',
        agentNo           : '',
        appointmentDate   : '',
        communicateStatus : '',
        consultantReadTime: null,
        consultantViewTime: null,
        contactTime       : '',
        contactType       : '',
        customerId        : 0,
        email             : '',
        gender            : '',
        hopeContactTime   : "",
        id                : 0,
        job               : "",
        lastModifiedDate  : '',
        name              : '',
        otherRequirement  : null,
        phone             : "",
        requirement       : '',
        satisfactionScore : 0,
    };
    get avatarFileName() {
        return this.agentInfo.img;
    }
@@ -303,11 +301,17 @@
    get hopeContactTime() {
        const contactList = this.appointmentDetail.hopeContactTime
            .split("'").map(item => item.slice(0, item.length));
        return contactList.filter(item => !!item && item !== ",")
            .split("'").map((item: any) => item.slice(0, item.length));
        return contactList.filter((item: any) => !!item && item !== ",")
    }
    //////////////////////////////////////////////////////////////////////
    @Action
    removeFromMyConsultantList!: (agentNo: string) => Promise<boolean>;
    @Action
    storeConsultantList!: () => void;
    reserveCommunication() {
      const isAppointment = !!this.agentInfo['appointmentStatus'];
@@ -327,10 +331,9 @@
                          ? this.agentInfo['appointmentId']
                          : this.latestReservedAppointment.id;
        getAppointmentDetail(appointmentId!).then(res => {
        appointmentService.getAppointmentDetail(appointmentId!).then(res => {
            this.appointmentDetail = {
                ...this.appointmentDetail,
                ...res.data,
                ...res,
                satisfactionScore:  this.agentInfo['appointmentScore'],
            };
            this.width = isMobileDevice() ? '80%' : '';
@@ -361,7 +364,7 @@
    }
    cancel() {
        cancelAppointment(this.latestReservedAppointment.id).then(res => {
        appointmentService.cancelAppointment(this.latestReservedAppointment.id).then(res => {
            this.storeConsultantList();
            this.isVisibleDialog = false;
            this.isCancelPopup = false;
PAMapp/components/Consultant/ConsultantList.vue
@@ -25,7 +25,6 @@
<script lang="ts">
import { Vue, Component, Prop, namespace } from 'nuxt-property-decorator';
import { Consultant } from '~/assets/ts/models/consultant.model';
import { Role } from '~/assets/ts/models/enum/Role';
const roleStorage = namespace('localStorage');
PAMapp/components/NavBar.vue
@@ -34,7 +34,7 @@
<script lang="ts">
  import { Vue, Component } from 'vue-property-decorator';
  import { namespace } from 'nuxt-property-decorator';
  import { Role } from '~/assets/ts/models/enum/Role';
  import { Role } from '~/assets/ts/models/enum/role';
  import * as _ from 'lodash';
  const roleStorage = namespace('localStorage');
PAMapp/pages/agentInfo/_agentNo.vue
@@ -193,7 +193,7 @@
import myConsultantService from '~/assets/ts/services/my-consultant.service';
import { AgentInfo } from '~/assets/ts/models/agent-info.model';
import { hideReviews } from '~/assets/ts/const/hide-reviews';
import { Role } from '~/assets/ts//models/enum/Role';
import { Role } from '~/assets/ts/models/enum/role';
const roleStorage = namespace('localStorage');
PAMapp/pages/consultantLogin/index.vue
@@ -58,7 +58,7 @@
<script lang="ts">
  import { Vue, Component , namespace } from 'nuxt-property-decorator';
  import { AxiosError } from 'axios';
  import { Role } from '~/assets/ts/models/enum/Role';
  import { Role } from '~/assets/ts/models/enum/role';
  import ErrorMessageBox from '~/assets/ts/errorService';
  import loginService from '~/assets/ts/services/login.service'
PAMapp/pages/login/index.vue
@@ -337,7 +337,7 @@
import { Vue, Component, Ref } from 'vue-property-decorator';
import ErrorMessageBox from '~/assets/ts/errorService';
import { OtpErrorCode } from '~/assets/ts/models/enum/otpErrorCode';
import { Role } from '~/assets/ts/models/enum/Role';
import { Role } from '~/assets/ts/models/enum/role';
import { LoginRequest } from '~/assets/ts/models/loginRequest.model';
import { LoginVerify } from '~/assets/ts/models/loginVerify.model';
import { OtpInfo } from '~/assets/ts/models/otpInfo.model';
@@ -415,8 +415,8 @@
    clearInterval(this.autoRedirectInterval);
  }
  //////////////////////////////////////////////////////////
  detectContractReadStatus(event: any): void {
    const scrollTop = Math.round(event.target.scrollTop);
    const height = event.target.scrollHeight - event.target.clientHeight;