保誠-保戶業務員媒合平台
PAMapp/pages/agentInfo/edit/_agentNo.vue
@@ -1,5 +1,6 @@
<template>
    <div class="edit-agent-info-page">
    <div class="edit-agent-info-page" v-if="!!agentInfo">
      <el-row
        type="flex"
        justify="center">
@@ -7,20 +8,42 @@
          :agentNo="agentInfo.agentNo"
          :photoBase64.sync="editInfoValue.photoBase64"/>
      </el-row>
      <el-row
      <!-- NOTE: 我認為編輯頁面不需要顯示 avgScore,先隱藏 [Tomas, 2022/2/10 13:55] -->
      <!-- <el-row
        type="flex"
        class="pt-10"
        justify="center"
        align="middle" v-if="!hideReviews">
          <i class="pam-icon icon--primary icon-star"></i>
          <h3 class="mdTxt">{{ agentInfo.avgScore }}</h3>
      </el-row>
      </el-row> -->
      <el-row
      <!-- <el-row
        type="flex"
        class="pam-paragraph"
        justify="center">
        <el-input class="mdTxt" v-model="editInfoValue.name"></el-input>
      </el-row> -->
       <el-row
        type="flex"
        class="pam-paragraph">
        <el-col :span="24" class="pam-field">
          <div class="pam-field__label pam-progress__label">
            <div>
              <div class="pam-field__title mb-10">
                <i class="pam-icon icon-avatar"
                  ></i>顯示名稱
                  <span class="hint text--bold" v-show="!editInfoValue.name">顯示名稱為必填</span>
              </div>
            </div>
            <el-input
              v-model="editInfoValue.name"
              :class="{'is-invalid': !nameValid}"
              maxlength="10"
              minlength="10"></el-input>
          </div>
        </el-col>
      </el-row>
      <el-row
@@ -45,12 +68,33 @@
        </el-col>
      </el-row>
      <el-row
        type="flex"
        class="pam-paragraph">
        <el-col :span="24" class="pam-field">
          <div class="pam-field__label pam-progress__label">
            <div>
              <div class="pam-field__title mb-10">
                <i class="pam-icon icon-comment"
                  ></i>信箱
                  <span class="hint text--bold" v-show="!emailValid">信箱格式有誤</span>
                  <span class="hint text--bold" v-show="editInfoValue.email.length === 0">信箱為必填</span>
              </div>
            </div>
            <el-input
            v-model="editInfoValue.email"
            :class="{'is-invalid': !emailValid}"
            ></el-input>
          </div>
        </el-col>
      </el-row>
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField :span="12" icon="agent" label="頭銜">
          <el-input  v-model="editInfoValue.title"></el-input>
        <UiField :span="24" icon="agent" label="頭銜">
          <el-input  v-model="editInfoValue.title" class="mt-10"></el-input>
        </UiField>
      </el-row>
@@ -71,7 +115,7 @@
        type="flex"
        class="pam-paragraph">
        <UiField icon="address" label="公司地址">
          <el-input  v-model="editInfoValue.companyAddress"></el-input>
          <el-input  v-model="editInfoValue.companyAddress" class="mt-10"></el-input>
        </UiField>
      </el-row>
@@ -81,20 +125,22 @@
        <UiField :span="12" icon="time" label="最後上線時間">
          {{ agentInfo.latestLoginTime | formatDate }}
        </UiField>
        <UiField :span="12" icon="calender" label="服務資歷" style="display:flex">
          <el-input  v-model="editInfoValue.seniorityYear" class="seniority-input"></el-input>年
          <el-select  style="width:60px" v-model="editInfoValue.seniorityMonth" class="seniority-input">
            <el-option
              v-for="(month) in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]"
              :value="month"
              :key="month">
              {{ month }}
            </el-option>
          </el-select>月
        <UiField :span="12" icon="calender" label="服務資歷">
          <div class="mt-10" style="display: flex; align-items: center">
            <el-input  v-model="editInfoValue.seniorityYear" class="seniority-input" ></el-input>年
            <el-select  style="width:60px" v-model="editInfoValue.seniorityMonth" class="seniority-input">
              <el-option
                v-for="(month) in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]"
                :value="month"
                :key="month">
                {{ month }}
              </el-option>
            </el-select>月
          </div>
        </UiField>
      </el-row>
      <el-row
      <!-- <el-row
        type="flex"
        class="pam-paragraph">
        <el-col :span="24" class="pam-field">
@@ -113,7 +159,7 @@
            <el-progress :show-text="false" :stroke-width="15" :percentage="agentInfo.evaluation * 2"></el-progress>
          </div>
        </el-col>
      </el-row>
      </el-row> -->
      <el-row
        type="flex"
@@ -127,9 +173,9 @@
              </div>
            </div>
            <MultiSelectBtn class="mt-30"
            :mutiSelect.sync="editInfoValue.communicationStyle"
            :options="agentCommunicationStyleList"
            :maxLength="2"
              :mutiSelect.sync="editInfoValue.communicationStyle"
              :options="agentCommunicationStyleList"
              :maxLength="2"
            >
            </MultiSelectBtn>
          </div>
@@ -148,8 +194,8 @@
              </div>
            </div>
            <MultiSelectBtn class="mt-30"
            :mutiSelect.sync="editInfoValue.expertise"
            :options="agentExpertList"
              :mutiSelect.sync="editInfoValue.expertise"
              :options="agentExpertList"
            >
            </MultiSelectBtn>
          </div>
@@ -160,7 +206,7 @@
        type="flex"
        class="pam-paragraph">
        <UiField icon="comment" label="個人理念">
          <el-input type="textarea" autosize v-model="editInfoValue.concept"></el-input>
          <el-input type="textarea" autosize v-model="editInfoValue.concept" class="mt-10"></el-input>
        </UiField>
      </el-row>
@@ -168,7 +214,12 @@
        type="flex"
        class="pam-paragraph">
        <UiField icon="school" label="個人背景">
            <el-input type="textarea" autosize v-model="editInfoValue.experiences"></el-input>
            <el-input
              autosize
              type="textarea"
              class="mt-10"
              v-model="editInfoValue.experiences">
            </el-input>
        </UiField>
      </el-row>
@@ -176,7 +227,7 @@
        type="flex"
        class="pam-paragraph">
        <UiField icon="trophy" label="得獎經歷">
          <el-input type="textarea" autosize style="height:70%" v-model="editInfoValue.awards"></el-input>
          <el-input type="textarea" autosize style="height:70%" v-model="editInfoValue.awards" class="mt-10"></el-input>
        </UiField>
      </el-row>
@@ -230,14 +281,18 @@
import { taiwanCities } from '~/shared/const/taiwan-cities';
const localStorageTest = namespace('localStorage');
const loginStore = namespace('login.store');
@Component
export default class AgentInfoComponent extends Vue {
export default class AgentInfoEditComponent extends Vue {
  @localStorageTest.State('current_role')
  currentRole!:string | null;
  @localStorageTest.State
  current_role: any;
  _agentInfoSetting!: AgentInfoSetting;
  @loginStore.Action
  updateConsultantDetail!: (agentNo: string) => Promise<AgentInfo>;
  defaultAgentInfoSetting!: AgentInfoSetting;
  agentInfo!      : AgentInfo
  fieldInfoDesc   : string = '';
  fieldInfoTitle  : string = '';
@@ -260,7 +315,8 @@
    awards            : '',
    communicationStyle: [] as string[],
    photoBase64       : '',
    phoneNumber       : ''
    phoneNumber       : '',
    email             : '',
  };
  communicationStyleList: string[] = agentCommunicationStyleList;
@@ -325,7 +381,7 @@
  private setAgentInfo(agentInfo: AgentInfo): void {
    const [agentYear, _yearUnit , agentMonth, _monthUnit] =  agentInfo.seniority.split(" ");
    this._agentInfoSetting = {
    this.defaultAgentInfoSetting = {
      agentNo           : agentInfo.agentNo||'',
      name              : agentInfo.name || '',
      expertise         : agentInfo.expertise || [],
@@ -341,27 +397,32 @@
      experiences       : agentInfo.experiences  || '',
      awards            : agentInfo.awards || '',
      communicationStyle: agentInfo.communicationStyle || '',
      photoBase64       : ''
      photoBase64       : '',
      email             : agentInfo.email || ''
    };
    this.editInfoValue = {
      ...this._agentInfoSetting,
      expertise          : _.cloneDeep(this._agentInfoSetting.expertise),
      ...this.defaultAgentInfoSetting,
      expertise          : _.cloneDeep(this.defaultAgentInfoSetting.expertise),
      // TODO: 確認後端此欄位後端應改為以" , "隔開 [Tomas, 2021/12/28]
      communicationStyle : this._agentInfoSetting.communicationStyle.split('、'),
      communicationStyle : this.defaultAgentInfoSetting.communicationStyle.split('、'),
    }
  }
  //////////////////////////////////////////////////////////////////////
  editAgentInfoSetting(): void {
    console.log('???', this.editInfoValue)
    const editSettingInfo: any = {
      ...this.editInfoValue,
      communicationStyle: this.editInfoValue.communicationStyle.join('、'),
      serveArea: this.editInfoValue.serveArea.join('、'),
    }
    };
    console.log('!!!', editSettingInfo);
    accountSettingService.editAgentInfoSetting(editSettingInfo).then((res: AgentInfoSetting) => {
      this.isInfoUpdate = true;
      this.updateConsultantDetail(editSettingInfo.agentNo);
    });
  }
@@ -383,19 +444,29 @@
        this.fieldInfoTitle = '匹配度';
        this.fieldInfoDesc = '匹配度是透過嚴選配對或快速篩選後,將每一位保險顧問資料進行比對後排序推薦給您的媒合數值,您可以作為選擇適合顧問的參考值。';
        break;
      case 'evaluation':
        this.fieldInfoTitle = '諮詢度表現';
        this.fieldInfoDesc = '諮詢度表現是將每一位保險顧問近一個月回覆諮詢數量進行比對後排序推薦給您的媒合數值。';
        break;
      // case 'evaluation':
      //   this.fieldInfoTitle = '諮詢度表現';
      //   this.fieldInfoDesc = '諮詢度表現是將每一位保險顧問近一個月回覆諮詢數量進行比對後排序推薦給您的媒合數值。';
      //   break;
    }
  }
  ////////////////////////////////////////////////////////////
  get nameValid(): boolean {
    return !!this.defaultAgentInfoSetting?.name;
  }
  get phoneValid(): boolean {
            const rule = /^09[0-9]{8}$/;
            return this.editInfoValue.phoneNumber
            ? rule.test(this.editInfoValue.phoneNumber) && _.isEqual(this.editInfoValue.phoneNumber.length,10)
            : true;
        }
  get emailValid() {
      const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
      return this.editInfoValue.email ? rule.test(this.editInfoValue.email) : true;
    }
  get isSubmitBtnDisabled(): boolean {
      const isFormValid =  this.editInfoValue.name
@@ -407,19 +478,16 @@
                        && this.editInfoValue.phoneNumber.length
                        && this.editInfoValue.seniorityYear
                        && this.editInfoValue.expertise.length
                        && this.editInfoValue.communicationStyle.length;
                        && this.editInfoValue.communicationStyle.length
                        && this.editInfoValue.email.length;
      return !isFormValid
  }
}
</script>
<style lang="scss" >
.edit-agent-info-page{
  .el-textarea__inner{
  font-size: 15px;
}
}
<style lang="scss">
.pam-icon {
  font-size    : 15px;
  padding-right: 8px;
@@ -474,14 +542,11 @@
}
.seniority-input{
  width       : 50px;
  width       : 60px;
  margin-right: 5px;
}
.el-input--suffix .el-input__inner {
  padding-right: 20px;
}
.el-textarea__inner{
  font-size: 18px;
}
</style>