TODO#129057 [個人帳號設定] 前端畫面刻版
| | |
| | | case 'notification': |
| | | featureLabel = 'éç¥'; |
| | | break; |
| | | case 'record': |
| | | featureLabel = 'æ¥çç´é'; |
| | | break; |
| | | case 'accountSetting': |
| | | featureLabel = 'å人帳èè¨å®' |
| | | break; |
| | | } |
| | | return featureLabel; |
| | | } else { |
| | |
| | | }, |
| | | { |
| | | needRole: [Role.ADMIN], |
| | | link: '/notFinish', |
| | | link: '/consultantAccountSetting', |
| | | title: 'æ¥ç帳èè³è¨', |
| | | }, |
| | | { |
| | | needRole: [Role.USER, Role.ADMIN], |
| | | link: '/record/reviews', |
| | | needRole: [Role.ADMIN], |
| | | link: '/record', |
| | | title: 'æ¥çç´é', |
| | | }, |
| | | { |
| | | needRole: [Role.USER], |
| | | link: '/userReviewsRecord', |
| | | title: 'æ¥çç´é', |
| | | }, |
| | | { |
| | |
| | | <template> |
| | | <div>å人帳èè¨å®</div> |
| | | <div class="account-page"> |
| | | <div class="account-page-title">å人帳èè¨å®</div> |
| | | <section class="user-name"> |
| | | <div class="setting-title">å§å</div> |
| | | <input |
| | | :disabled="userNameDisabled" |
| | | v-model="userNameValue" |
| | | ref="userName" |
| | | class="name-input input" |
| | | |
| | | > |
| | | <i class="icon-edit " @click="editField('userName')" :class="{'icon-color-change': !userNameDisabled }"></i> |
| | | </section> |
| | | |
| | | |
| | | |
| | | <section class="account-card"> |
| | | <div class="header"> |
| | | <div class="setting-title">ç¶å®</div> |
| | | <div class="contact-type">ææ©è碼</div> |
| | | <i class="icon-edit" @click="editField('userPhone')" :class="{'icon-color-change': !userPhoneDisabled}"></i> |
| | | </div> |
| | | <input |
| | | :disabled="userPhoneDisabled" |
| | | v-model="phoneValue" |
| | | ref="userPhone" |
| | | class="contact-input input" placeholder="0912345678" > |
| | | </section> |
| | | |
| | | <section class="account-card"> |
| | | <div class="header"> |
| | | <div class="setting-title">ç¶å®</div> |
| | | <div class="contact-type">Email</div> |
| | | <i class="icon-edit" @click="editField('userEmail')" |
| | | :class="{'icon-color-change': !userEmailDisabled}"></i> |
| | | </div> |
| | | <input |
| | | :disabled="userEmailDisabled" |
| | | v-model="emailValue" |
| | | ref="userEmail" |
| | | class="contact-input input" placeholder="abc@gmail"> |
| | | </section> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | <script lang="ts"> |
| | | import { Vue,Component } from 'vue-property-decorator' |
| | | |
| | | @Component |
| | | export default class AccountSetting extends Vue { |
| | | |
| | | userNameDisabled = true; |
| | | userPhoneDisabled = true; |
| | | userEmailDisabled = true ; |
| | | userNameValue = '' ; |
| | | phoneValue = '' ; |
| | | emailValue = '' ; |
| | | |
| | | editField(fieldName: string): void { |
| | | const enablePromise = new Promise((resolve, reject) => { |
| | | resolve(this[`${fieldName}Disabled`] = false); |
| | | }); |
| | | const targetInput = this.$refs[fieldName] as any; |
| | | enablePromise.then((enable) => { |
| | | targetInput.focus(); |
| | | }); |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | |
| | | <style lang=""> |
| | | <style lang="scss" scoped> |
| | | .account-page{ |
| | | .account-page-title{ |
| | | font-size: 20px; |
| | | margin-bottom: 34px; |
| | | } |
| | | .user-name{ |
| | | display: flex; |
| | | border-bottom: 1px solid gray; |
| | | justify-content: space-around; |
| | | margin-bottom: 24px; |
| | | align-items: baseline; |
| | | .name-input{ |
| | | width: 180px; |
| | | height:27px; |
| | | margin-bottom: 20px; |
| | | margin-left: -18px; |
| | | } |
| | | .icon{ |
| | | margin-top:10px; |
| | | } |
| | | } |
| | | .account-card{ |
| | | display: flex; |
| | | flex-direction: column; |
| | | border-bottom: 1px solid gray; |
| | | margin-bottom: 33px; |
| | | .contact-type{ |
| | | width: 184px; |
| | | margin-right: 16px; |
| | | padding-top: 10px; |
| | | font-size: 20px; |
| | | } |
| | | |
| | | } |
| | | } |
| | | .setting-title{ |
| | | margin-left: 28px; |
| | | margin-bottom:10px; |
| | | width: 58px; |
| | | font-size: 20px; |
| | | } |
| | | .header{ |
| | | display: flex; |
| | | align-items: baseline; |
| | | justify-content: space-evenly; |
| | | } |
| | | .contact-input{ |
| | | margin-left: 100px; |
| | | font-size: 20px; |
| | | margin-bottom: 10px; |
| | | text-overflow: ellipsis; |
| | | } |
| | | .input{ |
| | | border: 0; |
| | | background-color: rgba(0,0,0,0) ; |
| | | outline-color: gainsboro; |
| | | } |
| | | .input:focus{ |
| | | background-color: #fff; |
| | | } |
| | | .icon-color-change{ |
| | | color:$PRIMARY_RED; |
| | | } |
| | | </style> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <template> |
| | | <div> |
| | | <div>é¡§å帳èè¨å®</div> |
| | | |
| | | </div> |
| | | </template> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <template> |
| | | <div class="reviews-page"> |
| | | <section class="mdTxt"> |
| | | æ¥çç´é |
| | | </section> |
| | | |
| | | <section class="reviews-header"> |
| | | <div class="header-title mdTxt"> |
| | | 滿æåº¦ç´é |
| | | </div> |
| | | </section> |
| | | |
| | | <!-- TODO: æ ¹æç»å
¥è
ç role 顯示ä¸åçåè¡¨æ¸²ææ¹å¼ --> |
| | | |
| | | <!-- TODO: v-if curentUser Role is Consultant --> |
| | | |
| | | <section class="reviews-content"> |
| | | <div class="reviews-card" v-for="(item,index) in consultantReviewsList" :key="index"> |
| | | <div class="reviews-card-content" > |
| | | {{item.name + ' '}}å°æ¨åäº{{item.score}}è©å¹! |
| | | </div> |
| | | <div class="reviews-card-date"> |
| | | <div class="date"> |
| | | {{item.date}} |
| | | </div> |
| | | <div class="time"> |
| | | {{item.time}} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </section> |
| | | <!-- TODO: v-if curentUser Role is Client --> |
| | | <!-- <section class="reviews-content"> |
| | | <div class="reviews-card" v-for="(item,index) in userReviewsList" :key="index"> |
| | | <div class="reviews-card-content" > |
| | | æ¨å° <span class="mdTxt">{{item.name + ' '}}</span>åäº{{item.score}}è©å¹! |
| | | </div> |
| | | <div class="reviews-card-date"> |
| | | <div class="date"> |
| | | {{item.date}} |
| | | </div> |
| | | <div class="time"> |
| | | {{item.time}} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </section> --> |
| | | |
| | | |
| | | |
| | | |
| | | </div> |
| | | |
| | | </template> |
| | | <script lang="ts"> |
| | | import { Vue , Component} from 'vue-property-decorator'; |
| | | |
| | | |
| | | @Component |
| | | export default class Reviews extends Vue{ |
| | | |
| | | consultantReviewsList=[ |
| | | { |
| | | name:'çè°æ', |
| | | score:'â
â
â
â
â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'Arial', |
| | | score:'â
â
â
', |
| | | date:'æ¨å¤©', |
| | | time:'23:59' |
| | | }, |
| | | { |
| | | name:'Donna', |
| | | score:'â
â
', |
| | | date:'3天å', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'é³ç¸ç¸', |
| | | score:'â
â
â
â
â
â
', |
| | | date:'8/30', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'æä¼¯ä¼¯', |
| | | score:'â
â
â
â
â
â
', |
| | | date:'2020/12/21', |
| | | time:'10:00' |
| | | } |
| | | ] |
| | | |
| | | userReviewsList=[ |
| | | { |
| | | name:'è¡ç¾ç', |
| | | score:'â
â
â
â
â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'è³æ¯çº', |
| | | score:'â
â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'é³å®¶åº', |
| | | score:'â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'æé¡§å', |
| | | score:'â
â
â
â
â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'å¨é¡§å', |
| | | score:'â
â
â
â
â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | } |
| | | ] |
| | | |
| | | } |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .reviews-page{ |
| | | margin-bottom:155px; |
| | | .reviews-header{ |
| | | height: 43px; |
| | | margin-top: 28px; |
| | | display: flex; |
| | | justify-content: center; |
| | | border-bottom: 2px solid black; |
| | | } |
| | | .reviews-content{ |
| | | .reviews-card{ |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 26px; |
| | | border-bottom: 1px solid #707070; |
| | | height: 54px; |
| | | padding-bottom: 15px; |
| | | .reviews-card-content{ |
| | | width: 242px; |
| | | padding-right:50px; |
| | | line-height: 1.2; |
| | | font-size: 20px; |
| | | margin-left: 15px; |
| | | } |
| | | .reviews-card-date{ |
| | | font-size: 12px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: flex-end; |
| | | margin-right: 15px; |
| | | width:52px; |
| | | .date{ |
| | | margin-bottom: 2px; |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | @include desktop{ |
| | | .reviews-card-content{ |
| | | flex: 1; |
| | | } |
| | | } |
| | | </style> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <template> |
| | | |
| | | <!-- æéæªåç«é¢ä¸å³Otis æä»¥å
åå²åºä¾ä¸é , uä¹æå¨ NavBar æ¹ Roleçè¨å® => needRole: [Role.NOT_LOGIN, Role.USER] åé, |
| | | é è¨æè©²æä½¿ç¨è¾¨è ä¿æ¶/é¡§å ç»å
¥è顯示ä¸åæ¸²ææ¹å¼,å·²æå
©ç¨®ä¸åæ¹å¼é é¢åå¨åç¨±çº record/index 裡 Helen --> |
| | | <div class="user-reviews-page"> |
| | | <section class="mdTxt"> |
| | | æ¥çç´é |
| | | </section> |
| | | |
| | | <section class="user-reviews-header"> |
| | | <div class="header-title mdTxt"> |
| | | 滿æåº¦ç´é |
| | | </div> |
| | | </section> |
| | | |
| | | <!-- TODO: æ ¹æç»å
¥è
ç role 顯示ä¸åçåè¡¨æ¸²ææ¹å¼ --> |
| | | |
| | | |
| | | <!-- TODO: v-if curentUser Role is Client --> |
| | | <section class="user-reviews-content"> |
| | | <div class="user-reviews-card" v-for="(item,index) in userReviewsList" :key="index"> |
| | | <div class="user-reviews-card-content" > |
| | | æ¨å° <span class="mdTxt">{{item.name + ' '}}</span>åäº{{item.score}}è©å¹! |
| | | </div> |
| | | <div class="user-reviews-card-date"> |
| | | <div class="date"> |
| | | {{item.date}} |
| | | </div> |
| | | <div class="time"> |
| | | {{item.time}} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </section> |
| | | |
| | | <!-- TODO: v-if curentUser Role is Consultant --> |
| | | |
| | | |
| | | </div> |
| | | |
| | | </template> |
| | | <script lang="ts"> |
| | | import { Vue , Component} from 'vue-property-decorator'; |
| | | |
| | | |
| | | @Component |
| | | export default class UserReviewsRecord extends Vue{ |
| | | |
| | | userReviewsList=[ |
| | | { |
| | | name:'è¡ç¾ç', |
| | | score:'â
â
â
â
â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'è³æ¯çº', |
| | | score:'â
â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'é³å®¶åº', |
| | | score:'â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'æé¡§å', |
| | | score:'â
â
â
â
â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | }, |
| | | { |
| | | name:'å¨é¡§å', |
| | | score:'â
â
â
â
â
â
', |
| | | date:'ä»å¤©', |
| | | time:'10:00' |
| | | } |
| | | ]; |
| | | |
| | | } |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .user-reviews-page{ |
| | | margin-bottom:155px; |
| | | .user-reviews-header{ |
| | | height: 43px; |
| | | margin-top: 28px; |
| | | display: flex; |
| | | justify-content: center; |
| | | border-bottom: 2px solid black; |
| | | } |
| | | .user-reviews-content{ |
| | | .user-reviews-card{ |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 26px; |
| | | border-bottom: 1px solid #707070; |
| | | height: 54px; |
| | | padding-bottom: 15px; |
| | | .user-reviews-card-content{ |
| | | width: 242px; |
| | | padding-right:50px; |
| | | line-height: 1.2; |
| | | font-size: 20px; |
| | | margin-left: 15px; |
| | | } |
| | | .user-reviews-card-date{ |
| | | font-size: 12px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: flex-end; |
| | | margin-right: 15px; |
| | | width:52px; |
| | | .date{ |
| | | margin-bottom: 2px; |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | @include desktop{ |
| | | .user-reviews-card-content{ |
| | | flex: 1; |
| | | } |
| | | } |
| | | </style> |