| | |
| | | <template> |
| | | <div class="edit-agent-info-page"> |
| | | <div class="edit-agent-info-page" v-if="!!agentInfo"> |
| | | |
| | | <el-row |
| | | type="flex" |
| | |
| | | </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" |
| | |
| | | <UiField :span="12" icon="time" label="最後上線時間"> |
| | | {{ agentInfo.latestLoginTime | formatDate }} |
| | | </UiField> |
| | | <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 :span="12" icon="calender" label="到職日期" class="pam-editInfo-date-picker"> |
| | | <UiDatePicker |
| | | :isFutureDateDisabled = true |
| | | id="el-date-picker" |
| | | class="mt-10" |
| | | :defaultValue ="agentInfo.entryDate" |
| | | @changeDate="onChangeDate($event)" |
| | | ></UiDatePicker> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | |
| | | import { Context } from '@nuxt/types'; |
| | | import { namespace } from 'nuxt-property-decorator'; |
| | | import { Vue, Component, Prop } 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 { agentCommunicationStyleList } from '~/shared/const/agent-communication-style-list'; |
| | | 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') |
| | | @localStorageTest.State |
| | | current_role: any; |
| | | |
| | | @loginStore.Action |
| | | updateConsultantDetail!: (agentInfo: AgentInfo) => AgentInfo; |
| | | updateConsultantDetail!: (agentNo: string) => Promise<AgentInfo>; |
| | | |
| | | _agentInfoSetting!: AgentInfoSetting; |
| | | defaultAgentInfoSetting!: AgentInfoSetting; |
| | | agentInfo! : AgentInfo |
| | | fieldInfoDesc : string = ''; |
| | | fieldInfoTitle : string = ''; |
| | |
| | | title : '', |
| | | serveArea : [] as string[], |
| | | companyAddress : '', |
| | | seniorityYear : 1, |
| | | seniorityMonth : 0, |
| | | concept : '', |
| | | experiences : '', |
| | | awards : '', |
| | | communicationStyle: [] as string[], |
| | | photoBase64 : '', |
| | | phoneNumber : '' |
| | | phoneNumber : '', |
| | | email : '', |
| | | entryDate : '', |
| | | }; |
| | | |
| | | communicationStyleList: string[] = agentCommunicationStyleList; |
| | |
| | | |
| | | mounted(){ |
| | | this.setAgentInfo(this.agentInfo); |
| | | |
| | | const bodyEl = document.querySelector('body'); |
| | | |
| | | bodyEl?.addEventListener('scroll', function() { |
| | | const elDatePickerEl = document.querySelector('#el-date-picker'); |
| | | const elDatePickerPanelEl = document.querySelector('.el-picker-panel'); |
| | | if (elDatePickerPanelEl) { |
| | | elDatePickerPanelEl['style']['z-index'] = 5; |
| | | const elDatePickerOffsetTop = elDatePickerEl!.getBoundingClientRect().top; |
| | | elDatePickerPanelEl!['style'].top = elDatePickerOffsetTop + 30 + 'px'; |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | 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.split('、'), |
| | | gender : agentInfo.gender||'', |
| | | phoneNumber : agentInfo.phoneNumber||'', |
| | | companyAddress : agentInfo.companyAddress || '', |
| | | seniorityYear : agentYear? +agentYear : 0, |
| | | seniorityMonth : agentMonth ? +agentMonth : 0, |
| | | concept : agentInfo.concept || '', |
| | | experiences : agentInfo.experiences || '', |
| | | awards : agentInfo.awards || '', |
| | | communicationStyle: agentInfo.communicationStyle || '', |
| | | photoBase64 : '' |
| | | this.defaultAgentInfoSetting = { |
| | | agentNo: agentInfo?.agentNo || '', |
| | | name: agentInfo?.name || '', |
| | | expertise: agentInfo?.expertise || [], |
| | | title: agentInfo?.title || '', |
| | | role: agentInfo?.role || '', |
| | | serveArea: agentInfo?.serveArea?.split('、') || [], |
| | | gender: agentInfo?.gender || '', |
| | | phoneNumber: agentInfo?.phoneNumber || '', |
| | | companyAddress: agentInfo?.companyAddress || '', |
| | | concept: agentInfo?.concept || '', |
| | | experiences: agentInfo?.experiences || '', |
| | | awards: agentInfo?.awards || '', |
| | | communicationStyle: agentInfo?.communicationStyle || '', |
| | | photoBase64: '', |
| | | email: agentInfo?.email || '', |
| | | entryDate: agentInfo?.entryDate || '', |
| | | }; |
| | | |
| | | this.editInfoValue = { |
| | | ...this._agentInfoSetting, |
| | | expertise : _.cloneDeep(this._agentInfoSetting.expertise), |
| | | // TODO: 確認後端此欄位後端應改為以" , "隔開 [Tomas, 2021/12/28] |
| | | communicationStyle : this._agentInfoSetting.communicationStyle.split('、'), |
| | | } |
| | | ...this.defaultAgentInfoSetting, |
| | | expertise: JSON.parse(JSON.stringify(this.defaultAgentInfoSetting.expertise)), |
| | | communicationStyle: this.defaultAgentInfoSetting.communicationStyle?.split('、') || [], |
| | | }; |
| | | } |
| | | |
| | | |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | | |
| | |
| | | ...this.editInfoValue, |
| | | communicationStyle: this.editInfoValue.communicationStyle.join('、'), |
| | | serveArea: this.editInfoValue.serveArea.join('、'), |
| | | } |
| | | }; |
| | | |
| | | accountSettingService.editAgentInfoSetting(editSettingInfo).then((res: AgentInfoSetting) => { |
| | | this.updateConsultantDetail(editSettingInfo.agentNo); |
| | | this.isInfoUpdate = true; |
| | | this.updateConsultantDetail(editSettingInfo.agentNo); |
| | | }); |
| | | } |
| | | |
| | | onChangeDate(date: any): void { |
| | | this.editInfoValue.entryDate = date; |
| | | } |
| | | |
| | | backToInfo() { |
| | |
| | | |
| | | //////////////////////////////////////////////////////////// |
| | | get nameValid(): boolean { |
| | | return !!this.editAgentInfoSetting.name; |
| | | 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; |
| | | } |
| | | const rule = /^09[0-9]{8}$/; |
| | | return this.editInfoValue.phoneNumber |
| | | ? rule.test(this.editInfoValue.phoneNumber) && 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 |
| | |
| | | && this.editInfoValue.concept |
| | | && this.editInfoValue.experiences |
| | | && this.editInfoValue.phoneNumber.length |
| | | && this.editInfoValue.seniorityYear |
| | | && this.editInfoValue.entryDate |
| | | && this.editInfoValue.expertise.length |
| | | && this.editInfoValue.communicationStyle.length; |
| | | && this.editInfoValue.communicationStyle.length |
| | | && this.editInfoValue.email.length; |
| | | return !isFormValid |
| | | } |
| | | } |
| | |
| | | padding-right: 20px; |
| | | } |
| | | |
| | | .pam-editInfo-date-picker{ |
| | | .pam-date.el-input { |
| | | width: 100%; |
| | | } |
| | | } |
| | | |
| | | </style> |