保誠-保戶業務員媒合平台
Tomas
2023-07-28 ab9d102ce99644f73ff365a1e70afbda1e14276d
PAMapp/pages/index.vue
@@ -2,6 +2,7 @@
  <div>
    <Ui-Carousel></Ui-Carousel>
    <div class="page-container">
      <div>
        <h5 class="mdTxt">預約保險顧問</h5>
        <div class="mt-10 pam-reserveBtn--block">
@@ -15,6 +16,7 @@
          </el-button>
        </div>
      </div>
      <div class="pam-paragraph">
        <el-row class="rowStyle">
          <el-col :span="16">
@@ -29,6 +31,8 @@
        <ConsultantList class="mt-10"
          :agents="consultantList.slice(0, 3)"></ConsultantList>
      </div>
      <div class='pam-paragraph'>
        <div class="pam-recommend">
          <h5 class="mdTxt">推薦保險顧問</h5>
@@ -55,7 +59,8 @@
                  <p>性別:{{gender}}</p>
                  <p>年齡:{{appointmentDetail.age | toAgeLabel }}</p>
                  <p>職業:{{appointmentDetail.job}}</p>
                  <p>需求:{{appointmentDetail.requirement.split(',').join('、')}}</p>
                  <p>諮詢方式:{{appointmentDetail.consultantMode }}</p>
                  <p>需求:{{ appointmentDetail.requirement ? appointmentDetail.requirement.split(',').join('、') : '--'}}</p>
                  <p
                      v-for="(item, index) in hopeContactTime"
                      :key="index"
@@ -141,20 +146,21 @@
</template>
<script lang="ts">
  import { Vue, Component, State, Action, Watch, namespace } from 'nuxt-property-decorator';
import {Action, Component, Mutation, namespace, State, Vue, Watch} from 'nuxt-property-decorator';
  import appointmentService from '~/shared/services/appointment.service';
  import reviewsService from '~/shared/services/reviews.service';
  import UtilsService from '~/shared/services/utils.service';
  import myConsultantService from '~/shared/services/my-consultant.service';
  import { Appointment, AppointmentClosedInfo } from '~/shared/models/appointment.model';
  import { Consultant } from '~/shared/models/consultant.model';
  import { UserReviewsConsultantsParams } from '~/shared/models/reviews.model';
  import { StrictQueryParams } from '~/shared/models/strict-query.model';
  import { AgentInfo } from '~/shared/models/agent-info.model';
  import { ContactStatus } from '~/shared/models/enum/contact-status';
import appointmentService from '~/shared/services/appointment.service';
import utilService, {AccessFroms} from '~/shared/services/utils.service';
import reviewsService from '~/shared/services/reviews.service';
import myConsultantService from '~/shared/services/my-consultant.service';
import {Appointment, AppointmentClosedInfo} from '~/shared/models/appointment.model';
import {Consultant} from '~/shared/models/consultant.model';
import {UserReviewParams} from '~/shared/models/reviews.model';
import {StrictQueryParams} from '~/shared/models/strict-query.model';
import {AgentInfo} from '~/shared/models/agent-info.model';
import {ContactStatus} from '~/shared/models/enum/contact-status';
import {SatisfactionType} from '~/shared/models/enum/satisfaction-type';
  const localStorage = namespace('localStorage');
const localStorage = namespace('localStorage');
  const roleStorage = namespace('localStorage');
  @Component({
@@ -179,6 +185,9 @@
    @Action
    storeConsultantList!: any;
    @Mutation
    setAccessSource!: (accessSource: AccessFroms) => void;
    @localStorage.Mutation
    storageClearQuickFilter!: () => void;
@@ -218,7 +227,7 @@
      appointmentDate   : '',
      appointmentMemoList: [],
      appointmentNoticeLogs: [],
      communicateStatus : this.contactStatus.PICKED,
      communicateStatus: this.contactStatus.PICKED,
      consultantReadTime: '',
      consultantViewTime: '',
      contactTime       : '',
@@ -236,6 +245,7 @@
      phone             : '',
      requirement       : '',
      satisfactionScore : 0,
      consultantMode    : ''
    };
    agentInfo: Consultant = {
@@ -256,6 +266,11 @@
    //////////////////////////////////////////////////////////////////////
    mounted() {
      if (this.$route.query.from) {
        const fromSource = this.$route.query.from as AccessFroms;
        this.setAccessSource(fromSource);
        utilService.insertAccessFrom(fromSource);
      }
      if (this.isAdminLogin) {
        this.$router.push('/myAppointmentList/appointmentList');
      } else {
@@ -324,7 +339,7 @@
          const appointmentInfo = values[1] as Appointment;
          this.consultantName = agentInfo.name;
          this.appointmentDetail = appointmentInfo;
          this.appointmentDialogWidth = UtilsService.isMobileDevice() ? '80%' : '';
          this.appointmentDialogWidth = utilService.isMobileDevice() ? '80%' : '';
          this.isShowAppointmentDialog = true;
          switch (reason) {
            case 'inviteReviewConsultant':
@@ -357,7 +372,9 @@
    reAppointment(): void {
      appointmentService.cancelAppointment(this.appointmentDetail.id).then(() => {
        const requirements = this.appointmentDetail.requirement.split(',');
        const requirements = this.appointmentDetail && this.appointmentDetail.requirement
                            ? this.appointmentDetail.requirement.split(',')
                            : [];
        this.storeConsultantList();
        this.storageStrickQueryItem({ requirements: requirements });
        this.storageClearNotContactAppointmentIdFromMsg();
@@ -378,9 +395,10 @@
    }
    userReviewsConsultants() {
      const reviewParams: UserReviewsConsultantsParams = {
      const reviewParams: UserReviewParams = {
            appointmentId: this.appointmentDetail.id,
            score: this.inputScore,
            type: SatisfactionType.APPOINTMENT
        }
        this.appointmentDetail.satisfactionScore = this.inputScore;
@@ -484,6 +502,7 @@
    align-items: center;
  }
  @media (min-width: 576px) and (max-width: 767px) {
    .quickFilter.el-button--default {
      background-image: url('~/assets/images/quickFilter/banner_web.svg');
@@ -500,6 +519,15 @@
      margin: 0 auto;
    }
      .landing-container {
    border: 2px solid blue;
    border-radius: 10px;
    padding: 10px;
    display: flex;
    flex-direction: column;
    align-items: center;
  }
    .pam-reserveBtn--block {
      display: flex;
      justify-content: space-between;