¤ñ¹ï·sÀÉ®× |
| | |
| | | <template> |
| | | <div> |
| | | <el-row |
| | | type="flex" |
| | | justify="center"> |
| | | <UiAvatar :size="150" :fileName="agentInfo.img"></UiAvatar> |
| | | </el-row> |
| | | |
| | | <el-row |
| | | type="flex" |
| | | class="pt-10" |
| | | justify="center" |
| | | align="middle" v-if="!hideReviews"> |
| | | <!-- TODO:é±è滿æåº¦ --> |
| | | <i class="pam-icon icon--primary icon-star"></i> |
| | | <h3 class="mdTxt">{{ agentInfo.avgScore }}</h3> |
| | | </el-row> |
| | | |
| | | <el-row |
| | | type="flex" |
| | | class="pt-10" |
| | | justify="center"> |
| | | <el-input class="mdTxt" v-model="editInfoValue.name"></el-input> |
| | | </el-row> |
| | | |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField :span="12" icon="agent" label="é é"> |
| | | <el-input v-model="editInfoValue.title"></el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="company" label="æåå°å"> |
| | | <el-input v-model="editInfoValue.serveArea"></el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="address" label="å
¬å¸å°å"> |
| | | <el-input v-model="editInfoValue.companyAddress"></el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <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> |
| | | </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"> |
| | | <i class="pam-icon icon-thumbs-up" |
| | | ></i>è«®è©¢åº¦è¡¨ç¾ <i class="pl-5 text--primary icon-information" @click="alertFieldInfo('evaluation')"></i> |
| | | </div> |
| | | </div> |
| | | <div class="xsTxt"> |
| | | {{ agentInfo.evaluation }}/50 (è¿ä¸åæ/ç´¯è¨) |
| | | </div> |
| | | </div> |
| | | <div class="pam-field__content pam-field-evaluation pt-10"> |
| | | <el-progress :show-text="false" :stroke-width="15" :percentage="agentInfo.evaluation * 2"></el-progress> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <el-checkbox |
| | | v-model="editInfoValue.communicationStyle" |
| | | :label="communicateStyle" |
| | | :key="index" |
| | | v-for="(communicateStyle, index) in communicationStyleList"> |
| | | </el-checkbox> |
| | | |
| | | </el-row> |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="flag" label="å°é·é å"> |
| | | <el-checkbox |
| | | v-model="editInfoValue.expert" |
| | | :label="item.name" |
| | | :key="item.id" |
| | | v-for="item in expertList"> |
| | | </el-checkbox> |
| | | </UiField> |
| | | </el-row> |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="comment" label="å人ç念"> |
| | | <el-input type="textarea" autosize v-model="editInfoValue.concept"></el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="school" label="åäººèæ¯"> |
| | | <el-input type="textarea" autosize v-model="editInfoValue.experience"></el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="trophy" label="å¾çç¶æ·"> |
| | | <el-input type="textarea" autosize style="height:70%" v-model="editInfoValue.awards"></el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | | <PopUpFrame |
| | | :isOpen.sync="isAlertFieldInfo" |
| | | > |
| | | <div class="text--center mdTxt fs-18"> |
| | | <p>{{ fieldInfoTitle }}</p> |
| | | <p class="mt-20 text--left text--regular">{{ fieldInfoDesc }}</p> |
| | | <div class="text--center mt-30"> |
| | | <el-button |
| | | type="primary" |
| | | @click="isAlertFieldInfo = false" |
| | | >æç¥éäº</el-button> |
| | | </div> |
| | | </div> |
| | | </PopUpFrame> |
| | | |
| | | <div class="pam-paragraph account-confirm"> |
| | | <el-button :disabled="isSubmitBtnDisabled" |
| | | @click.native="editAgentInfoSetting"> |
| | | éåº |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts"> |
| | | import { Context } from '@nuxt/types'; |
| | | import { namespace } from 'nuxt-property-decorator'; |
| | | import { Vue, Component } from 'vue-property-decorator'; |
| | | import * as _ from "lodash"; |
| | | |
| | | import myConsultantService from '~/shared/services/my-consultant.service'; |
| | | import accountSettingService from '~/shared/services/account-setting.service'; |
| | | |
| | | import { AgentInfo } from '~/shared/models/agent-info.model'; |
| | | import { hideReviews } from '~/shared/const/hide-reviews'; |
| | | import { Role } from '~/shared/models/enum/Role'; |
| | | import { AgentInfoSetting } from '~/shared/models/account.model'; |
| | | |
| | | const localStorage = namespace('localStorage'); |
| | | |
| | | @Component |
| | | export default class AgentInfoComponent extends Vue { |
| | | |
| | | @localStorage.State('current_role') |
| | | currentRole!:string | null; |
| | | |
| | | _agentInfoSetting!: AgentInfoSetting; |
| | | agentInfo!:AgentInfo |
| | | role = Role; |
| | | isAlertFieldInfo = false; |
| | | fieldInfoTitle = ''; |
| | | fieldInfoDesc = ''; |
| | | hideReviews = hideReviews ; |
| | | |
| | | editInfoValue = { |
| | | name : '', |
| | | expert : [] as string[], |
| | | title : '', |
| | | serveArea : '', |
| | | companyAddress : '', |
| | | seniorityYear : 1, |
| | | seniorityMonth : 0, |
| | | concept : '', |
| | | experience : '', |
| | | awards : '', |
| | | communicationStyle: [] as string[], |
| | | } |
| | | |
| | | formValidStatus = { |
| | | name : true, |
| | | title : true, |
| | | companyAddress: true, |
| | | serveArea : true, |
| | | seniorityYear : true, |
| | | seniorityMonth: true, |
| | | expert : true, |
| | | concept : true, |
| | | experience : true, |
| | | awards : true, |
| | | communicationStyle:true |
| | | }; |
| | | |
| | | expertList=[ |
| | | { |
| | | name:'å¥åº·èä¿é' |
| | | }, |
| | | { |
| | | name:'å女æè²' |
| | | }, |
| | | { |
| | | name:'è³ç¢è¦å' |
| | | }, |
| | | { |
| | | name:'æ¨æ´»éä¼' |
| | | }, |
| | | { |
| | | name:'ä¿å®å¥æª¢/è¦å' |
| | | }, |
| | | { |
| | | name:'åç´
ä¿å®'} |
| | | ]; |
| | | |
| | | communicationStyleList: string[] = ['謹æ
å實', 'æå¿«ä¸»å', 'èå¿å¾è½', 'å¥è«é¢¨è¶£']; |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | | |
| | | async asyncData(context: Context) { |
| | | const agentNo = context.route.params.agentNo; |
| | | return { |
| | | agentInfo: await myConsultantService.getConsultantDetail(agentNo).then((res) => res) |
| | | } |
| | | } |
| | | |
| | | mounted(){ |
| | | this.setAgentInfo(this.agentInfo); |
| | | } |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | | |
| | | alertFieldInfo(field: string): void { |
| | | this.isAlertFieldInfo = true; |
| | | switch(field) { |
| | | case 'suitability': |
| | | this.fieldInfoTitle = 'å¹é
度'; |
| | | this.fieldInfoDesc = 'å¹é
度æ¯ééå´é¸é
å°æå¿«é篩é¸å¾ï¼å°æ¯ä¸ä½ä¿éªé¡§åè³æé²è¡æ¯å°å¾æåºæ¨è¦çµ¦æ¨çåªåæ¸å¼ï¼æ¨å¯ä»¥ä½çºé¸æé©åé¡§åçåèå¼ã'; |
| | | break; |
| | | case 'evaluation': |
| | | this.fieldInfoTitle = '諮詢度表ç¾'; |
| | | this.fieldInfoDesc = 'è«®è©¢åº¦è¡¨ç¾æ¯å°æ¯ä¸ä½ä¿éªé¡§åè¿ä¸åæåè¦è«®è©¢æ¸éé²è¡æ¯å°å¾æåºæ¨è¦çµ¦æ¨çåªåæ¸å¼ã'; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | //////////////////////////////////////////////////////////// |
| | | |
| | | private setAgentInfo(agentInfo: AgentInfo): void { |
| | | const [agentYear, _yearUnit , agentMonth, _monthUnit] = agentInfo.seniority.split(" "); |
| | | |
| | | this._agentInfoSetting = { |
| | | agentNo : agentInfo.agentNo||'', |
| | | name : agentInfo.name || '', |
| | | expertise : agentInfo.expertise || [], |
| | | title : agentInfo.title || '', |
| | | role : agentInfo.role||'', |
| | | serveArea : agentInfo.serveArea || '', |
| | | gender : agentInfo.gender||'', |
| | | phoneNumber : agentInfo.phoneNumber||'', |
| | | companyAddress : agentInfo.companyAddress || '', |
| | | seniorityYear : agentYear? +agentYear : 0, |
| | | seniorityMonth : agentMonth ? +agentMonth: 0, |
| | | concept : agentInfo.concept || '', |
| | | experience : agentInfo.experiences || '', |
| | | award : agentInfo.awards || '', |
| | | communicationStyle: agentInfo.communicationStyle || '', |
| | | photoBase64 : '123', |
| | | }; |
| | | |
| | | this.editInfoValue.name = this._agentInfoSetting.name!; |
| | | this.editInfoValue.title = this._agentInfoSetting.title!; |
| | | this.editInfoValue.serveArea = this._agentInfoSetting.serveArea |
| | | this.editInfoValue.companyAddress = this._agentInfoSetting.companyAddress; |
| | | this.editInfoValue.seniorityYear = this._agentInfoSetting.seniorityYear; |
| | | this.editInfoValue.seniorityMonth = this._agentInfoSetting.seniorityMonth; |
| | | this.editInfoValue.expert = _.cloneDeep(this._agentInfoSetting.expertise); |
| | | this.editInfoValue.concept = this._agentInfoSetting.concept; |
| | | this.editInfoValue.experience = this._agentInfoSetting.experience; |
| | | this.editInfoValue.awards = this._agentInfoSetting.award; |
| | | this.editInfoValue.communicationStyle = this._agentInfoSetting.communicationStyle.split(','); |
| | | |
| | | } |
| | | |
| | | get nameValid():boolean { |
| | | this.formValidStatus.name = this.editInfoValue.name ? true : false; |
| | | return this.formValidStatus.name; |
| | | } |
| | | |
| | | get titleValid():boolean{ |
| | | this.formValidStatus.title = this.editInfoValue.title ? true : false ; |
| | | return this.formValidStatus.title; |
| | | } |
| | | |
| | | get companyAddressValid() : boolean{ |
| | | this.formValidStatus.companyAddress = this.editInfoValue.companyAddress ? true : false; |
| | | return this.formValidStatus.companyAddress; |
| | | } |
| | | |
| | | get serveAreaValid():boolean{ |
| | | this.formValidStatus.serveArea = this.editInfoValue.serveArea ? true : false; |
| | | return this.formValidStatus.serveArea; |
| | | } |
| | | |
| | | get conceptValid():boolean{ |
| | | this.formValidStatus.concept = this.editInfoValue.concept ? true : false; |
| | | return this.formValidStatus.concept; |
| | | } |
| | | |
| | | get experienceValid():boolean{ |
| | | this.formValidStatus.experience = this.editInfoValue.experience ? true : false; |
| | | return this.formValidStatus.experience; |
| | | } |
| | | |
| | | get awardsValid():boolean{ |
| | | this.formValidStatus.awards = this.editInfoValue.awards ? true : false ; |
| | | return this.formValidStatus.awards; |
| | | } |
| | | |
| | | get seniorityYearValid():boolean{ |
| | | this.formValidStatus.seniorityYear = this.editInfoValue.seniorityYear ? true : false; |
| | | return this.formValidStatus.seniorityYear; |
| | | } |
| | | |
| | | get seniorityMonthValid():boolean{ |
| | | this.formValidStatus.seniorityMonth = this.editInfoValue.seniorityMonth ? true : false; |
| | | return this.formValidStatus.seniorityYear; |
| | | } |
| | | |
| | | get communicationStyleValid():boolean{ |
| | | this.formValidStatus.communicationStyle = this.editInfoValue.communicationStyle ? true : false; |
| | | return this.formValidStatus.seniorityMonth; |
| | | } |
| | | |
| | | get expertValid():boolean{ |
| | | this.formValidStatus.expert = this.editInfoValue.expert ? true : false; |
| | | return this.formValidStatus.expert; |
| | | } |
| | | |
| | | get isSubmitBtnDisabled(): boolean { |
| | | const isFormValid = this.formValidStatus.name |
| | | && this.formValidStatus.title |
| | | && this.formValidStatus.companyAddress |
| | | && this.formValidStatus.serveArea |
| | | && this.formValidStatus.concept |
| | | && this.formValidStatus.experience |
| | | && this.formValidStatus.awards |
| | | && this.formValidStatus.seniorityYear |
| | | && this.formValidStatus.seniorityMonth |
| | | && this.formValidStatus.expert |
| | | && this.formValidStatus.communicationStyle; |
| | | return !isFormValid |
| | | } |
| | | |
| | | |
| | | |
| | | editAgentInfoSetting(): void { |
| | | const editSettingInfo: any = { |
| | | name : this.editInfoValue.name, |
| | | expertise : this.editInfoValue.expert, |
| | | title : this.editInfoValue.title, |
| | | role : this.agentInfo.role, |
| | | serveArea : this.editInfoValue.serveArea, |
| | | gender : 'male', |
| | | phoneNumber : this.agentInfo.phoneNumber, |
| | | companyAddress : this.editInfoValue.companyAddress, |
| | | seniorityYear : this.editInfoValue.seniorityYear, |
| | | seniorityMonth : this.editInfoValue.seniorityMonth, |
| | | concept : this.editInfoValue.concept, |
| | | experience : this.editInfoValue.experience, |
| | | award : this.editInfoValue.awards, |
| | | communicationStyle: this.editInfoValue.communicationStyle.join(','), |
| | | photoBase64 : '123' |
| | | } |
| | | |
| | | accountSettingService.editAgentInfoSetting(editSettingInfo).then((res: AgentInfoSetting) => { |
| | | console.log(editSettingInfo) |
| | | }); |
| | | } |
| | | |
| | | } |
| | | |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .pam-icon { |
| | | font-size: 15px; |
| | | padding-right: 8px; |
| | | color: $PRUDENTIAL_GREY; |
| | | &.icon--primary { |
| | | color: $PRIMARY_RED; |
| | | } |
| | | } |
| | | .pam-field { |
| | | display: flex; |
| | | flex-direction: column; |
| | | .pam-field__label { |
| | | display: flex; |
| | | align-items: center; |
| | | .pam-icon { |
| | | font-size: 12px; |
| | | } |
| | | .pam-field__title { |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .pam-field-suitability { |
| | | .el-progress-bar__inner { |
| | | background-color: $LIGHT_BLUE !important; |
| | | } |
| | | } |
| | | |
| | | .pam-field-evaluation { |
| | | .el-progress-bar__inner { |
| | | background-color: $TEAL_GREEN!important; |
| | | } |
| | | } |
| | | |
| | | .pam-field-experts { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | .pam-progress__label { |
| | | justify-content: space-between; |
| | | flex-wrap: wrap; |
| | | line-height: 24px; |
| | | } |
| | | .account-confirm{ |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .seniority-input{ |
| | | width:50px; |
| | | margin-right: 5px; |
| | | } |
| | | |
| | | </style> |