| | |
| | | <template> |
| | | <div class="edit-agent-info-page"> |
| | | |
| | | <el-row |
| | | type="flex" |
| | | justify="center"> |
| | |
| | | :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"> |
| | | <!-- TODO:隱藏滿意度 --> |
| | | <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 |
| | |
| | | <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> |
| | | |
| | |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="company" label="服務地區"> |
| | | <el-input v-model="editInfoValue.serveArea"></el-input> |
| | | <MultiSelectBtn class="mt-30" |
| | | :mutiSelect.sync="editInfoValue.serveArea" |
| | | :nameOfSelectAll="'全台'" |
| | | :options="serveAreaOptions" |
| | | > |
| | | </MultiSelectBtn> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | |
| | | 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> |
| | | |
| | |
| | | <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"> |
| | |
| | | <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" |
| | |
| | | </div> |
| | | </div> |
| | | <MultiSelectBtn class="mt-30" |
| | | :mutiSelect.sync="editInfoValue.communicationStyle" |
| | | :options="agentCommunicationStyleList" |
| | | :maxLength="2" |
| | | :mutiSelect.sync="editInfoValue.communicationStyle" |
| | | :options="agentCommunicationStyleList" |
| | | :maxLength="2" |
| | | > |
| | | </MultiSelectBtn> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | <MultiSelectBtn class="mt-30" |
| | | :mutiSelect.sync="editInfoValue.expertise" |
| | | :options="agentExpertList" |
| | | :mutiSelect.sync="editInfoValue.expertise" |
| | | :options="agentExpertList" |
| | | > |
| | | </MultiSelectBtn> |
| | | </div> |
| | |
| | | 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> |
| | | |
| | |
| | | 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> |
| | | |
| | |
| | | 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> |
| | | |
| | |
| | | import { AgentInfoSetting } from '~/shared/models/account.model'; |
| | | import { Role } from '~/shared/models/enum/Role'; |
| | | 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') |
| | | 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 = ''; |
| | | hideReviews : boolean = hideReviews ; |
| | | isAlertFieldInfo: boolean = false; |
| | | isInfoUpdate : boolean = false; |
| | | serveAreaOptions: any[] = taiwanCities.map((city) => ({ title: city, label: city })); |
| | | |
| | | editInfoValue = { |
| | | agentNo : '', |
| | | name : '', |
| | | expertise : [] as string[], |
| | | title : '', |
| | | serveArea : '', |
| | | serveArea : [] as string[], |
| | | companyAddress : '', |
| | | seniorityYear : 1, |
| | | seniorityMonth : 0, |
| | |
| | | |
| | | 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 || [], |
| | | title : agentInfo.title || '', |
| | | role : agentInfo.role||'', |
| | | serveArea : agentInfo.serveArea || '', |
| | | serveArea : agentInfo?.serveArea.split('、'), |
| | | gender : agentInfo.gender||'', |
| | | phoneNumber : agentInfo.phoneNumber||'', |
| | | companyAddress : agentInfo.companyAddress || '', |
| | |
| | | }; |
| | | |
| | | 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('、'), |
| | | } |
| | | } |
| | | |
| | |
| | | const editSettingInfo: any = { |
| | | ...this.editInfoValue, |
| | | communicationStyle: this.editInfoValue.communicationStyle.join('、'), |
| | | serveArea: this.editInfoValue.serveArea.join('、'), |
| | | } |
| | | accountSettingService.editAgentInfoSetting(editSettingInfo).then((res: AgentInfoSetting) => { |
| | | this.isInfoUpdate = true; |
| | | this.updateConsultantDetail(editSettingInfo.agentNo); |
| | | }); |
| | | } |
| | | |
| | |
| | | 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 |
| | |
| | | |
| | | </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; |
| | |
| | | } |
| | | |
| | | .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> |