From e8241decc705f9db3e46aed7b3a3f8b3188cf820 Mon Sep 17 00:00:00 2001 From: wayne <wayne8692wayne8692@gmail.com> Date: 星期四, 10 三月 2022 15:46:46 +0800 Subject: [PATCH] Merge branch 'Phase3' into pollex-dev --- PAMapp/pages/agentInfo/edit/_agentNo.vue | 208 ++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 160 insertions(+), 48 deletions(-) diff --git a/PAMapp/pages/agentInfo/edit/_agentNo.vue b/PAMapp/pages/agentInfo/edit/_agentNo.vue index cbd0ce3..0d961b4 100644 --- a/PAMapp/pages/agentInfo/edit/_agentNo.vue +++ b/PAMapp/pages/agentInfo/edit/_agentNo.vue @@ -1,5 +1,6 @@ <template> - <div> + <div class="edit-agent-info-page" v-if="!!agentInfo"> + <el-row type="flex" justify="center"> @@ -7,28 +8,93 @@ :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 type="flex" class="pam-paragraph"> - <UiField :span="12" icon="agent" label="����"> - <el-input v-model="editInfoValue.title"></el-input> + <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-phone" + ></i>����Ⅳ + <span class="hint text--bold" v-show="!phoneValid">����Ⅳ�撘�炊</span> + <span class="hint text--bold" v-show="editInfoValue.phoneNumber.length === 0">����Ⅳ�敹‵</span> + </div> + </div> + <el-input + v-model="editInfoValue.phoneNumber" + :class="{'is-invalid': !phoneValid}" + maxlength="10" + minlength="10"></el-input> + </div> + </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="24" icon="agent" label="����"> + <el-input v-model="editInfoValue.title" class="mt-10"></el-input> </UiField> </el-row> @@ -36,7 +102,12 @@ 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> @@ -44,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> @@ -54,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"> @@ -86,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" @@ -100,9 +173,9 @@ </div> </div> <MultiSelectBtn class="mt-30" - :mutiSelect.sync="editInfoValue.communicationStyle" - :options="agentCommunicationStyleList" - @change="selectCommunicationStyles" + :mutiSelect.sync="editInfoValue.communicationStyle" + :options="agentCommunicationStyleList" + :maxLength="2" > </MultiSelectBtn> </div> @@ -121,8 +194,8 @@ </div> </div> <MultiSelectBtn class="mt-30" - :mutiSelect.sync="editInfoValue.expertise" - :options="agentExpertList" + :mutiSelect.sync="editInfoValue.expertise" + :options="agentExpertList" > </MultiSelectBtn> </div> @@ -133,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> @@ -141,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> @@ -149,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> @@ -200,29 +278,35 @@ 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, @@ -231,6 +315,8 @@ awards : '', communicationStyle: [] as string[], photoBase64 : '', + phoneNumber : '', + email : '', }; communicationStyleList: string[] = agentCommunicationStyleList; @@ -295,13 +381,13 @@ 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 || '', @@ -311,26 +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); }); } @@ -352,13 +444,30 @@ this.fieldInfoTitle = '���漲'; this.fieldInfoDesc = '���漲��������翰�祟�敺����雿�憿批����脰�������蝯行�����潘��隞乩������“������潦��'; break; - case 'evaluation': - this.fieldInfoTitle = '隢株岷摨西”�'; - this.fieldInfoDesc = '隢株岷摨西”��撠��雿�憿批�������垣閰X���脰�������蝯行�����潦��'; - break; + // case 'evaluation': + // this.fieldInfoTitle = '隢株岷摨西”�'; + // this.fieldInfoDesc = '隢株岷摨西”��撠��雿�憿批�������垣閰X���脰�������蝯行�����潦��'; + // 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 && this.editInfoValue.title @@ -366,10 +475,11 @@ && this.editInfoValue.serveArea && this.editInfoValue.concept && this.editInfoValue.experiences - && this.editInfoValue.awards + && 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 } } @@ -377,6 +487,7 @@ </script> <style lang="scss"> + .pam-icon { font-size : 15px; padding-right: 8px; @@ -431,10 +542,11 @@ } .seniority-input{ - width : 50px; + width : 60px; margin-right: 5px; } .el-input--suffix .el-input__inner { padding-right: 20px; } + </style> -- Gitblit v1.8.0