From f36e617e9e534a4b05f2029724d678bbd6c655b3 Mon Sep 17 00:00:00 2001 From: Tomas <tomasysh@gmail.com> Date: 星期三, 22 十二月 2021 11:38:54 +0800 Subject: [PATCH] refactor: separate api/consultant.ts into serveral services --- PAMapp/pages/accountSetting/index.vue | 301 +++++++++++++++++++++++++++++++++++-------------- 1 files changed, 215 insertions(+), 86 deletions(-) diff --git a/PAMapp/pages/accountSetting/index.vue b/PAMapp/pages/accountSetting/index.vue index 8c4a31e..33ecd55 100644 --- a/PAMapp/pages/accountSetting/index.vue +++ b/PAMapp/pages/accountSetting/index.vue @@ -1,94 +1,223 @@ <template> -<div class="account-page"> - <div class="account-page-title">�犖撣唾�身摰�</div> - <section class="account-card" :class="{'edit': !userNameDisabled }"> - <div class="header"> - <div class="block"> - <div class="setting-title">憪��</div> - <div class="contact-type"> - <input - :disabled="userNameDisabled" - v-model="userNameValue" - ref="userName" - class="input name-input" - > - <div class="error-txt"> - <span v-show="!nameValid" class="error">甇斗���‵</span> - </div> - </div> - - </div> - <i class="icon-edit icon" @click="editField('userName')" :class="{'icon-color-change': !userNameDisabled}"></i> + <div> + <div class="pam-paragraph text--middle">�犖撣唾�身摰�</div> + <div class="pam-paragraph account-info " > + <div class="account-info__title text--middle">憪��</div> + <div class="account-info__input" :class="{'edit': !userNameDisabled }"> + <input + :disabled="userNameDisabled" + v-model="userNameValue" + ref="userName" + class="account-info__input-text"> + <div class="account-info__input-error"> + <span v-show="!nameValid" class="error">甇斗���‵</span> </div> - - </section> - - <section class="account-card" :class="{'edit': !userPhoneDisabled }" v-if="phoneValue"> - <div class="header"> - <div class="block"> - <div class="setting-title">蝬��</div> - <div class="contact-type"> - ����Ⅳ - <input - :disabled="userPhoneDisabled" - v-model="phoneValue" - :class="{ - 'is-invalid': !phoneValid - }" - ref="userPhone" - class="contact-input input" - :placeholder="phoneValue || '撠������Ⅳ'" - > - <div class="error-txt"> - <span v-show="!phoneValid" class="error">����Ⅳ�撘�炊</span> - </div> - </div> - </div> - <!-- <i class="icon-edit icon" - @click="editField('userPhone')" - :class="{'icon-color-change': !userPhoneDisabled}"></i> --> - </div> - - </section> - - <section class="account-card" :class="{'edit': !userEmailDisabled }" v-if="emailValue"> - <div class="header"> - <div class="block"> - <div class="setting-title">蝬��</div> - <div class="contact-type">Email - <input - :disabled="userEmailDisabled" - v-model="emailValue" - :class="{ - 'is-invalid': !emailValid - }" - ref="userEmail" - class="contact-input input" - :placeholder="emailValue || '撠���� Email'" - > - <div class="error-txt"> - <span v-show="!emailValid" class="error">靽∠拳�撘�炊</span> - </div> - </div> - </div> - - <!-- <i class="icon-edit icon" @click="editField('userEmail')" - :class="{'icon-color-change': !userEmailDisabled}"></i> --> - </div> - - </section> - - <div class="account-setting-btn mb-30"> - <el-button - :disabled="isSubmitBtnDisabled" - @click.native="updateAccountSetting">�</el-button> + </div> + <div class="account-info__icon text--middle"> + <i class="icon-edit" @click="editField('userName')" :class="{'icon-color-change': !userNameDisabled}"></i> + </div> </div> - -</div> + <div class="pam-paragraph account-info" v-if="phoneValue"> + <div class="account-info__title text--middle">蝬��</div> + <div class="account-info__input " :class="{'edit': !userPhoneDisabled }"> + <div class="text--middle mb-10">����Ⅳ</div> + <input :disabled="userPhoneDisabled" + v-model="phoneValue" + :class="{'is-invalid': !phoneValid}" + ref="userPhone" + class="account-info__input-text" + :placeholder="phoneValue ||'撠������Ⅳ'"> + <div class="account-info__input-error"> + <span v-show="!phoneValid" class="error">����Ⅳ�撘�炊</span> + </div> + </div> + <div class="account-info__icon text--middle"> + <!-- <i class="icon-edit" + @click="editField('userPhone')" + :class="{'icon-color-change': !userPhoneDisabled}"> + </i> --> + </div> + </div> + <div class="pam-paragraph account-info" v-if="emailValue"> + <div class="account-info__title text--middle">蝬��</div> + <div class="account-info__input" :class="{'edit': !userEmailDisabled }"> + <div class="text--middle mb-10">Email</div> + <input :disabled="userEmailDisabled" + v-model="emailValue" + :class="{'is-invalid': !emailValid }" + ref="userEmail" + class="account-info__input-text" + :placeholder="emailValue || '撠���� Email'"> + <div class="account-info__input-error"> + <span v-show="!emailValue" class="error">靽∠拳�撘�炊</span> + </div> + </div> + <div class="account-info__icon text--middle"> + <!-- <i class="icon-edit" + @click="editField('userEmail')" + :class="{'icon-color-change': !userEmailDisabled}"> + </i> --> + </div> + </div> + <div class="pam-paragraph account-confirm"> + <el-button :disabled="isSubmitBtnDisabled" + @click.native="updateAccountSetting"> + � + </el-button> + </div> + </div> </template> -<script src="./account-setting.component.ts"></script> +<script lang="ts"> +import { Vue,Component } from 'vue-property-decorator' +import { UserSetting } from '~/shared/models/account.model'; + +import accountSettingService from '~/shared/services/account-setting.service'; + +@Component +export default class AccountSetting extends Vue { + _userSetting!: UserSetting; + userNameDisabled = true; + userPhoneDisabled = true; + userEmailDisabled = true ; + userNameValue = ''; + phoneValue = '' ; + emailValue = '' ; + + onEditMode = false; + formValidStatus = { + name: true, + phone: true, + email: true, + }; + + get nameValid(): boolean { + this.formValidStatus.name = this.userNameValue ? true : false; + return this.formValidStatus.name; + } + + get phoneValid(): boolean { + const rule = /^09[0-9]{8}$/; + this.formValidStatus.phone = this.phoneValue ? rule.test(this.phoneValue) : true; + return this.formValidStatus.phone; + } + + get emailValid(): boolean { + const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; + this.formValidStatus.email = this.emailValue ? rule.test(this.emailValue) : true;; + return this.formValidStatus.email; + } + + editField(fieldName: string): void { + this.onEditMode = true; + const enablePromise = new Promise((resolve, reject) => { // 甇斤promise隤�� + resolve((this as any)[`${fieldName}Disabled`] = false); + }); + const targetInput = this.$refs[fieldName] as any; + enablePromise.then((_) => { + targetInput.focus(); + }); + } + + get isSubmitBtnDisabled(): boolean { + const isFormValid = this.formValidStatus.name && this.formValidStatus.phone && this.formValidStatus.email; + return !isFormValid || !this.onEditMode + || (!this.phoneValue && !this.emailValue); + } + + updateAccountSetting(): void { + // const dataChanged = (): boolean => { + // return this._userSetting.name !== this.userNameValue + // || this._userSetting.phone !== this.phoneValue + // || this._userSetting.email !== this.emailValue; + // }; + // if (dataChanged) { + + // } + if (!this.onEditMode) return; + const editSettingInfo: UserSetting = { + name: this.userNameValue, + phone: this.phoneValue, + email: this.emailValue + } + accountSettingService.updateAccountSetting(editSettingInfo).then((res: any) => { + console.log('updateRes:', res); + this.resetSettingForm(); + }); + } + + private resetSettingForm(): void { + this.onEditMode = false; + this.userNameDisabled = true; + this.userPhoneDisabled = true; + this.userEmailDisabled = true ; + } + + mounted(){ + accountSettingService.getUserAccountSetting().then((userInfo: UserSetting)=>{ + this._userSetting = { + name: userInfo.name || '', + phone: userInfo.phone || '', + email: userInfo.email || '', + }; + + this.phoneValue = this._userSetting.phone!; + this.userNameValue = this._userSetting.name!; + this.emailValue = this._userSetting.email!; + }) + } + +} + + +</script> <style lang="scss" scoped> - @import "./account-setting.component.scss"; +.account-info{ + display: flex; + align-items: baseline; + border-bottom: 1px gray solid; + padding: 15px 15px 15px 30px; + .account-info__title{ + width: 58px; + } + .account-info__input{ + flex: 1; + + &.edit { + .account-info__input-text{ + border: 1px solid lightgray; + background-color: #fff; + } + } + .account-info__input-text{ + border: 0; + background-color: rgba(0,0,0,0) ; + outline-color: gainsboro; + box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + padding: 3px 10px; + width: 100%; + font-size: 20px; + &:disabled{ + padding: 0px; + } + } + .account-info__input-error{ + @extend .smTxt_bold,.text--primary; + margin-top: 10px; + } + } + .account-info__icon{ + margin-left: 20px; + .icon-color-change{ + color:$PRIMARY_RED; + } + } +} +.account-confirm{ + display: flex; + justify-content: center; +} </style> -- Gitblit v1.8.0