保誠-保戶業務員媒合平台
wayne
2022-02-17 a3716f72066d25d745f4d5103ff23a553c3e102b
Merge branch 'sit' into uat

刪除16個檔案
修改123個檔案
新增186個檔案
修改20個檔案名稱
20434 ■■■■ 已變更過的檔案
PAMapp/assets/icon/demo.html 182 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/icon/fonts/icomoon.eot 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/icon/fonts/icomoon.svg 48 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/icon/fonts/icomoon.ttf 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/icon/fonts/icomoon.woff 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/icon/selection.json 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/icon/style.css 76 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/appointment/avatar_bg.svg 9 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/index_banner2_mob.svg 331 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/index_banner2_web.svg 362 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/index_banner_web.svg 194 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/logo.png 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/notification/banner_mob.svg 56 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/notification/banner_web.svg 60 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/quickFilter/btn_senior.svg 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/quickFilter/btn_unlimited.svg 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/quickFilter/btn_young.svg 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/satisfaction/satisfactionBtn_mob.svg 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/satisfaction/satisfactionBtn_s_mob.svg 222 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/satisfaction/satisfactionBtn_s_web.svg 274 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/satisfaction/satisfactionBtn_web.svg 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/images/taiwan-logo.png 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/_common.scss 48 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/_variable.scss 3 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/utilities/_heading.scss 43 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/utilities/_icon.scss 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/utilities/_utilities.scss 17 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/vendors/_elementUI.scss 5 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/vendors/elementUI/_dateTimePicker.scss 85 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/vendors/elementUI/_dialog.scss 35 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/vendors/elementUI/_input.scss 34 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/vendors/elementUI/_radio.scss 53 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/vendors/elementUI/_rate.scss 20 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/vendors/elementUI/_select.scss 42 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/vendors/elementUI/_textarea.scss 8 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/vendors/elementUI/_tree.scss 90 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/scss/vendors/elementUI/_upload.scss 16 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/api/appointment.ts 68 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/api/consultant.ts 262 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/api/share.ts 60 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/errorService.ts 25 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/models/AppointmentDetail.ts 18 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/models/account.model.ts 5 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/models/appointment.model.ts 11 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/models/consultant.model.ts 37 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/ts/models/enum/Role.ts 5 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/AddAndReservedBtns.vue 44 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/AddressPicker.vue 30 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Appointment/AppointmentClosedInfo.vue 74 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Appointment/AppointmentInterviewList.vue 76 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Appointment/AppointmentProgress.vue 119 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Appointment/AppointmentRecordList.vue 53 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/BackActionBar.vue 106 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Client/ClientCard.vue 505 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Client/ClientList.vue 30 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Consultant-ques.vue 117 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Consultant/ConsultantCard.vue 433 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Consultant/ConsultantList.vue 47 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Consultant/ConsultantSwiper.vue 35 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/DateTimePicker.vue 65 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Footer.vue 47 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Interview/InterviewAdd.vue 269 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Interview/InterviewCard.vue 176 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Interview/InterviewMsg.vue 176 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Interview/InterviewRecordCard.vue 98 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/NavBar.vue 132 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/QuickFilter/QuickFilterConsultantList.vue 34 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/QuickFilter/QuickFilterSelector.vue 132 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/ReviewRecords/ReviewRecords.vue 126 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiAvatar.vue 11 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiCarousel.vue 27 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiDateFormat.vue 29 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiDatePicker.vue 71 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiDialog.vue 12 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiDrawer.vue 12 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiField.vue 50 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiGoToTop.vue 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiPagination.vue 41 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiReviewScore.vue 5 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiScrollPicker.vue 12 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiSelect.vue 26 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiTags.vue 5 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/Ui/UiTimePicker.vue 118 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/careerSelect.vue 120 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/editConsultantAvatar.vue 133 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/loading.vue 9 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/multiSelectBtn.vue 86 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/phoneContactTimePicker.vue 273 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/popUpFrame.vue 53 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/components/singleSelectBtn.vue 25 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/layouts/default.vue 97 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/middleware/errorRoute.ts 15 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/middleware/errorRouteMiddleware.ts 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/middleware/getUrlQuery.ts 26 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/middleware/myAppointment.ts 19 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/middleware/myAppointmentMiddleware.ts 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/nuxt.config.js 4 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/accountSetting/index.vue 603 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/agentInfo/_agentNo.vue 108 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/agentInfo/edit/_agentNo.vue 520 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/appointment/_appointmentId/close/index.vue 313 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/appointment/_appointmentId/index.vue 304 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/appointment/_appointmentId/interview/_interviewId/index.vue 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/appointment/_appointmentId/interview/new/index.vue 55 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/appointment/_appointmentId/interviewList/index.vue 38 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/appointment/_appointmentId/recordList/index.vue 32 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/appointmentAgenda/index.vue 68 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/consultantLogin/index.vue 67 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/faq/index.vue 26 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/index.vue 418 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/login/index.vue 462 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myAppointmentList.vue 201 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myAppointmentList/appointmentList.vue 91 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myAppointmentList/closedList.vue 156 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myAppointmentList/contactedList.vue 129 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myConsultantList.vue 100 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myConsultantList/consultantList.vue 13 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/myConsultantList/contactedList.vue 13 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/notification/index.vue 125 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/questionnaire/_agentNo.vue 365 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/quickFilter/index.vue 459 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/recommendConsultant/index.vue 766 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/recommendConsultant/result.vue 95 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/record.vue 45 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/record/contactRecord.vue 3 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/record/index.vue 69 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/record/reviews.vue 3 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/satisfactionList.vue 185 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/userReviews/index.vue 171 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/pages/userReviewsRecord/index.vue 70 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/plugins/filters/appointment-fail-reason.filter.ts 16 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/plugins/filters/date.filter.ts 4 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/plugins/filters/serve-area.filter.ts 16 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/const/agent-communication-style-list.ts 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/const/agent-expert-list.ts 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/const/appointment-fail-reason-list.ts 26 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/const/consult-questions.ts 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/const/day-time-frames.ts 18 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/const/faqList.ts 43 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/const/hide-reviews.ts 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/const/quickFilter-questionList.ts 48 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/const/taiwan-cities.ts 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/const/week-days.ts 29 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/ConsultantLoginInfo.ts 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/account.model.ts 24 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/agent-info.model.ts 22 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/appointment.model.ts 187 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/consultant.model.ts 25 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/editAppointmentParams.model.ts 12 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/enum/ContactType.ts 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/enum/Gender.ts 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/enum/Role.ts 5 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/enum/contact-status.ts 8 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/enum/otpErrorCode.ts 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/enum/satisfaction-type.ts 5 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/enum/seniority.ts 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/loginRequest.model.ts 7 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/loginSuccessToken.model.ts 4 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/loginVerify.model.ts 9 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/optionBtnDto.model.ts 9 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/otpInfo.model.ts 9 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/quick-filter.model.ts 27 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/registerInfo.ts 10 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/reviews.model.ts 32 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/reviewsList.model.ts 5 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/strict-query.model.ts 27 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/models/strictQueryDto.model.ts 11 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/account-setting.service.ts 22 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/appointment.service.ts 95 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/auth.service.ts 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/httpClient.ts 83 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/login.service.ts 52 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/message-box.service.ts 30 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/my-consultant.service.ts 52 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/otp.service.ts 57 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/query-consultant.service.ts 37 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/reviews.service.ts 45 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/services/utils.service.ts 8 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/storageConsultant.ts 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/shared/storageRequests.ts 2 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/store/appointment.store.ts 84 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/store/index.ts 123 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/store/localStorage.service.ts 109 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/store/localStorage.ts 75 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/store/login.store.ts 33 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20211213_w.sql 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20211222_w.sql 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20211229_j.sql 10 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20211229_w.sql 2 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220103_w.sql 10 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220112_j.sql 66 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220114_j.sql 2 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220120_j.sql 13 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220121_j.sql 3 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220122_w.sql 7 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220126_w.sql 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220210_w.sql 10 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220215_w.sql 2 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/20220216_w.sql 22 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/sql/淨空整個系統資料(除顧問).sql 12 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/小鈴鐺通知API/取得登入者所有小鈴鐺通知API 38 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/小鈴鐺通知API/所有小鈴鐺通知設為已讀.txt 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/滿意度/客戶填寫滿意度.txt 24 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/滿意度/客戶填寫滿意度問卷.txt 56 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/滿意度/查詢登入者所有的滿意度問卷.txt 68 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/滿意度/顧問主動發送滿意度通知API.txt 1 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/約訪紀錄API/修改約訪紀錄.txt 31 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/約訪紀錄API/刪除約訪紀錄.txt 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/約訪紀錄API/新增約訪紀錄.txt 27 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/約訪通知API/發送約訪通知API.txt 17 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/預約單/刪除預約單備註.txt 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/預約單/取得預約單細節API.txt 76 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/預約單/客戶取得最新預約的未處理預約單.txt 61 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/預約單/新增預約單備註.txt 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/預約單/更新預約單備註.txt 12 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/預約單/標記為已聯絡API.txt 58 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/預約單/結案API.txt 32 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/預約單/預約前詢問.txt 27 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/預約單/顧問取得所有自己的預約單API.txt 177 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/預約單/顧問取得未處理預約單數量通知.txt 5 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/取得顧問頭像.txt 6 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/嚴選配對.txt 4 ●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/客戶的顧問清單.txt 16 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/快速篩選.txt 3 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/指定顧問詳細資訊.txt 40 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/紀錄客戶查看顧問清單的view_time API.txt 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/doc/顧問API/編輯修改顧問資料.txt 26 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java 57 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java 65 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java 64 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java 142 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/config/Constants.java 21 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java 3 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/Appointment.java 60 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java 112 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java 19 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/AppointmentExpiringNotifyRecord.java 46 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/AppointmentMemo.java 57 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/AppointmentNoticeLog.java 135 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/Consultant.java 18 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/CustomerFavoriteConsultant.java 78 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/InterviewRecord.java 87 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/PersonalNotification.java 123 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java 11 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/enums/InterviewRecordStatusEnum.java 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/enums/NotificationTypeEnum.java 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/enums/PersonalNotificationRoleEnum.java 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/enums/SendEmailMsgMethod.java 6 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java 15 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java 4 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/AppointmentExpiringNotifyRecordRepository.java 12 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/AppointmentMemoRepository.java 11 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/AppointmentNoticeLogRepository.java 15 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java 7 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/InterviewRecordRepository.java 18 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/PersonalNotificationRepository.java 16 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java 15 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java 9 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java 22 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/AppointmentMemoService.java 60 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/AppointmentNoticeLogService.java 33 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java 196 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/ConsultantQuerySpec.java 40 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java 237 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/InterviewRecordService.java 84 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/NoticeService.java 57 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java 159 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java 110 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java 165 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java 172 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java 37 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java 77 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java 37 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoCreateDTO.java 22 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoUpdateDTO.java 27 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentNoticeSendDTO.java 53 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java 29 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java 10 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java 47 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java 139 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java 23 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java 39 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java 10 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/InterviewRecordDTO.java 69 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java 26 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerCreateDTO.java 22 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerScoreDTO.java 29 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java 12 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/SendMailRequest.java 103 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/SendMailResponse.java 43 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java 99 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java 60 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java 6 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentCustomerViewMapper.java 32 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java 10 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMemoMapper.java 23 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentNoticeSendMapper.java 21 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java 29 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java 10 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/InterviewRecordMapper.java 37 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java 26 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionMapper.java 11 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/util/FileUtil.java 69 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java 114 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/service/util/StringUtils.java 18 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java 45 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java 82 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java 61 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java 36 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java 35 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/PersonalNotificationResource.java 55 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java 27 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java 60 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentClosedInfoNotFoundException.java 13 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentMemoNotFoundException.java 13 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/errors/InterviewRecordNotFoundException.java 14 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotFoundExpiringAppointmentException.java 8 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionAlreadyExistException.java 13 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionNotFoundException.java 13 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendEmailFailException.java 12 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendSMSFailException.java 12 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/config/application-dev.yml 33 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/config/application-pollex.yml 29 ●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/config/application-prod.yml 24 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/config/application-sit.yml 15 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/config/application-uat.yml 15 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/i18n/messages.properties 9 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/i18n/messages_zh_TW.properties 10 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/static/consultant/consultant_A183619275.jpg 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/static/consultant/consultant_AG0101234567.jpg 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/static/consultant/consultant_AG0109051204.jpg 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/static/consultant/consultant_AGAM11249699.jpg 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/static/consultant/consultant_B282677963.jpg 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/static/consultant/consultant_D265260662.jpg 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/static/consultant/consultant_J149388015.jpg 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/static/consultant/consultant_R221444250.jpg 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/static/consultant/consultant_X147309614.jpg 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/static/consultant/consultant_Z152717443.jpg 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/templates/mail/appointmentExpiringNotifyEmail.html 11 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/templates/mail/appointmentNotifyEmail.html 15 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html 11 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
pamapi/src/main/resources/templates/mail/writeSatisfactionNotice.html 10 ●●●●● 修補檔 | 檢視 | 原始 | 究查 | 歷程
PAMapp/assets/icon/demo.html
@@ -9,18 +9,18 @@
    <link rel="stylesheet" href="style.css"></head>
<body>
    <div class="bgc1 clearfix">
        <h1 class="mhmm mvm"><span class="fgc1">Font Name:</span> icomoon <small class="fgc1">(Glyphs:&nbsp;33)</small></h1>
        <h1 class="mhmm mvm"><span class="fgc1">Font Name:</span> icomoon <small class="fgc1">(Glyphs:&nbsp;39)</small></h1>
    </div>
    <div class="clearfix mhl ptl">
        <h1 class="mvm mtn fgc1">Grid Size: Unknown</h1>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-delet"></span>
                <span class="mls"> icon-delet</span>
                <span class="icon-sort-decrease"></span>
                <span class="mls"> icon-sort-decrease</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e920" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe920;" class="unitRight size1of2 talign-right" />
                <input type="text" readonly value="e922" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe922;" class="unitRight size1of2 talign-right" />
            </fieldset>
            <div class="fs0 bshadow0 clearfix hidden-true">
                <span class="unit pvs fgc1">liga: </span>
@@ -29,12 +29,12 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-top"></span>
                <span class="mls"> icon-top</span>
                <span class="icon-sort-add"></span>
                <span class="mls"> icon-sort-add</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e91f" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe91f;" class="unitRight size1of2 talign-right" />
                <input type="text" readonly value="e923" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe923;" class="unitRight size1of2 talign-right" />
            </fieldset>
            <div class="fs0 bshadow0 clearfix hidden-true">
                <span class="unit pvs fgc1">liga: </span>
@@ -43,12 +43,12 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-puzzle"></span>
                <span class="mls"> icon-puzzle</span>
                <span class="icon-expand"></span>
                <span class="mls"> icon-expand</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e91e" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe91e;" class="unitRight size1of2 talign-right" />
                <input type="text" readonly value="e924" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe924;" class="unitRight size1of2 talign-right" />
            </fieldset>
            <div class="fs0 bshadow0 clearfix hidden-true">
                <span class="unit pvs fgc1">liga: </span>
@@ -57,8 +57,36 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-down"></span>
                <span class="mls"> icon-down</span>
                <span class="icon-sex-female"></span>
                <span class="mls"> icon-sex-female</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e925" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe925;" class="unitRight size1of2 talign-right" />
            </fieldset>
            <div class="fs0 bshadow0 clearfix hidden-true">
                <span class="unit pvs fgc1">liga: </span>
                <input type="text" readonly value="" class="liga unitRight" />
            </div>
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-sex-male"></span>
                <span class="mls"> icon-sex-male</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e926" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe926;" class="unitRight size1of2 talign-right" />
            </fieldset>
            <div class="fs0 bshadow0 clearfix hidden-true">
                <span class="unit pvs fgc1">liga: </span>
                <input type="text" readonly value="" class="liga unitRight" />
            </div>
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-decrease"></span>
                <span class="mls"> icon-decrease</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e900" class="unit size1of2" />
@@ -169,8 +197,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-checkbox"></span>
                <span class="mls"> icon-checkbox</span>
                <span class="icon-checkbox-1"></span>
                <span class="mls"> icon-checkbox-1</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e908" class="unit size1of2" />
@@ -183,8 +211,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-checkbox-1"></span>
                <span class="mls"> icon-checkbox-1</span>
                <span class="icon-checkbox"></span>
                <span class="mls"> icon-checkbox</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e909" class="unit size1of2" />
@@ -267,8 +295,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-edit"></span>
                <span class="mls"> icon-edit</span>
                <span class="icon-delet"></span>
                <span class="mls"> icon-delet</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e90f" class="unit size1of2" />
@@ -281,8 +309,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-eye"></span>
                <span class="mls"> icon-eye</span>
                <span class="icon-down"></span>
                <span class="mls"> icon-down</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e910" class="unit size1of2" />
@@ -295,8 +323,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-eye-1"></span>
                <span class="mls"> icon-eye-1</span>
                <span class="icon-edit"></span>
                <span class="mls"> icon-edit</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e911" class="unit size1of2" />
@@ -309,8 +337,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-flag"></span>
                <span class="mls"> icon-flag</span>
                <span class="icon-eye-1"></span>
                <span class="mls"> icon-eye-1</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e912" class="unit size1of2" />
@@ -323,8 +351,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-information"></span>
                <span class="mls"> icon-information</span>
                <span class="icon-eye"></span>
                <span class="mls"> icon-eye</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e913" class="unit size1of2" />
@@ -337,8 +365,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-left"></span>
                <span class="mls"> icon-left</span>
                <span class="icon-flag"></span>
                <span class="mls"> icon-flag</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e914" class="unit size1of2" />
@@ -351,8 +379,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-phone"></span>
                <span class="mls"> icon-phone</span>
                <span class="icon-information"></span>
                <span class="mls"> icon-information</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e915" class="unit size1of2" />
@@ -365,8 +393,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-right"></span>
                <span class="mls"> icon-right</span>
                <span class="icon-left"></span>
                <span class="mls"> icon-left</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e916" class="unit size1of2" />
@@ -379,8 +407,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-school"></span>
                <span class="mls"> icon-school</span>
                <span class="icon-phone"></span>
                <span class="mls"> icon-phone</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e917" class="unit size1of2" />
@@ -393,8 +421,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-search"></span>
                <span class="mls"> icon-search</span>
                <span class="icon-puzzle"></span>
                <span class="mls"> icon-puzzle</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e918" class="unit size1of2" />
@@ -407,8 +435,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-star"></span>
                <span class="mls"> icon-star</span>
                <span class="icon-right"></span>
                <span class="mls"> icon-right</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e919" class="unit size1of2" />
@@ -421,8 +449,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-star-1"></span>
                <span class="mls"> icon-star-1</span>
                <span class="icon-school"></span>
                <span class="mls"> icon-school</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e91a" class="unit size1of2" />
@@ -435,8 +463,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-thumbs-up"></span>
                <span class="mls"> icon-thumbs-up</span>
                <span class="icon-search"></span>
                <span class="mls"> icon-search</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e91b" class="unit size1of2" />
@@ -449,8 +477,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-time"></span>
                <span class="mls"> icon-time</span>
                <span class="icon-star-1"></span>
                <span class="mls"> icon-star-1</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e91c" class="unit size1of2" />
@@ -463,8 +491,8 @@
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-trophy"></span>
                <span class="mls"> icon-trophy</span>
                <span class="icon-star"></span>
                <span class="mls"> icon-star</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e91d" class="unit size1of2" />
@@ -475,6 +503,62 @@
                <input type="text" readonly value="" class="liga unitRight" />
            </div>
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-thumbs-up"></span>
                <span class="mls"> icon-thumbs-up</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e91e" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe91e;" class="unitRight size1of2 talign-right" />
            </fieldset>
            <div class="fs0 bshadow0 clearfix hidden-true">
                <span class="unit pvs fgc1">liga: </span>
                <input type="text" readonly value="" class="liga unitRight" />
            </div>
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-time"></span>
                <span class="mls"> icon-time</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e91f" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe91f;" class="unitRight size1of2 talign-right" />
            </fieldset>
            <div class="fs0 bshadow0 clearfix hidden-true">
                <span class="unit pvs fgc1">liga: </span>
                <input type="text" readonly value="" class="liga unitRight" />
            </div>
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-top"></span>
                <span class="mls"> icon-top</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e920" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe920;" class="unitRight size1of2 talign-right" />
            </fieldset>
            <div class="fs0 bshadow0 clearfix hidden-true">
                <span class="unit pvs fgc1">liga: </span>
                <input type="text" readonly value="" class="liga unitRight" />
            </div>
        </div>
        <div class="glyph fs1">
            <div class="clearfix bshadow0 pbs">
                <span class="icon-trophy"></span>
                <span class="mls"> icon-trophy</span>
            </div>
            <fieldset class="fs0 size1of1 clearfix hidden-false">
                <input type="text" readonly value="e921" class="unit size1of2" />
                <input type="text" maxlength="1" readonly value="&#xe921;" class="unitRight size1of2 talign-right" />
            </fieldset>
            <div class="fs0 bshadow0 clearfix hidden-true">
                <span class="unit pvs fgc1">liga: </span>
                <input type="text" readonly value="" class="liga unitRight" />
            </div>
        </div>
    </div>
    <!--[if gt IE 8]><!-->
PAMapp/assets/icon/fonts/icomoon.eot
Binary files differ
PAMapp/assets/icon/fonts/icomoon.svg
@@ -7,7 +7,7 @@
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="down" d="M563.115 105.771l407.851 408.107c13.086 12.984 21.186 30.975 21.186 50.858 0 19.714-7.963 37.568-20.848 50.521l-68.136 68.136c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l-289.532-289.617-289.195 289.195c-13.008 13.118-31.038 21.24-50.965 21.24-19.778 0-37.688-8.001-50.669-20.943l-0.297-0.297-67.968-67.499c-13.075-12.989-21.168-30.978-21.168-50.859 0-19.71 7.956-37.563 20.831-50.521l408.231-408.316c13.040-13.276 31.18-21.503 51.243-21.503 19.596 0 37.358 7.849 50.315 20.575l-0.011-0.010z" />
<glyph unicode="&#xe900;" glyph-name="decrease" horiz-adv-x="1059" d="M947.023 536.276h-834.737c-42.513 0-76.977-34.464-76.977-76.977s34.464-76.977 76.977-76.977h834.737c42.513 0 76.977 34.464 76.977 76.977s-34.464 76.977-76.977 76.977v0z" />
<glyph unicode="&#xe901;" glyph-name="add" d="M944.305 527.805h-352.501v352.501c-0.083 44.019-35.777 79.674-79.803 79.695h-0.002c-43.994-0.083-79.632-35.735-79.695-79.725v-352.47h-352.537c-44.055 0-79.768-35.713-79.768-79.768s35.713-79.768 79.768-79.768v0h352.501v-352.574c0-44.055 35.713-79.768 79.768-79.768s79.768 35.713 79.768 79.768v0 352.574h352.501c44.055 0 79.768 35.713 79.768 79.768s-35.713 79.768-79.768 79.768v0z" />
<glyph unicode="&#xe902;" glyph-name="address" horiz-adv-x="717" d="M358.4 960c-0.076 0-0.166 0-0.256 0-197.797 0-358.144-160.347-358.144-358.144 0-0.090 0-0.18 0-0.27v0.014c0-268.8 358.4-665.6 358.4-665.6s358.4 396.8 358.4 665.6c0 0.076 0 0.166 0 0.256 0 197.797-160.347 358.144-358.144 358.144-0.090 0-0.18 0-0.27 0h0.014zM358.4 473.6c-70.692 0-128 57.308-128 128s57.308 128 128 128c70.692 0 128-57.308 128-128v0c0-70.692-57.308-128-128-128v0z" />
<glyph unicode="&#xe903;" glyph-name="agent" horiz-adv-x="896" d="M447.993 448.019c141.38 0 255.991 114.611 255.991 255.991s-114.611 255.991-255.991 255.991c-141.38 0-255.991-114.611-255.991-255.991v0c0-141.38 114.611-255.991 255.991-255.991v0zM639.585 382.836l-95.609-382.81-63.988 272.006 63.988 111.998h-191.965l63.988-111.998-63.988-272.006-95.609 382.773c-142.815-6.542-256.155-123.796-256.401-267.577v-179.221h895.986v179.197c-0.246 143.806-113.586 261.059-255.814 267.58l-0.587 0.021z" />
@@ -15,29 +15,35 @@
<glyph unicode="&#xe905;" glyph-name="avatar" horiz-adv-x="894" d="M448.963 456.819c138.95 0 251.59 112.641 251.59 251.59s-112.641 251.59-251.59 251.59v0c-138.95 0-251.59-112.641-251.59-251.59s112.641-251.59 251.59-251.59v0zM448.963 840.512v0c72.958 0 132.103-59.144 132.103-132.103s-59.144-132.103-132.103-132.103c-72.958 0-132.103 59.144-132.103 132.103 0 0.013 0 0.026 0 0.039v-0.002c0 72.938 59.128 132.065 132.065 132.065 0.013 0 0.026 0 0.039 0h-0.002zM448.963 393.931c-167.938 0-448.963-50.013-448.963-217.355v-240.576h893.721v240.576c0 167.305-276.82 217.355-444.758 217.355zM774.233 55.525h-654.931v121.051c0 40.263 142.671 97.83 329.475 97.83v0c186.804 0 325.27-57.567 325.27-97.83z" />
<glyph unicode="&#xe906;" glyph-name="bell" horiz-adv-x="932" d="M908.486 267.183c-1.1 0.834-112.139 84.872-112.139 362.886 0 182.216-147.715 329.931-329.931 329.931s-329.931-147.715-329.931-329.931v0c0-278.014-111.039-362.052-111.191-362.242-15.359-10.347-25.326-27.674-25.326-47.328 0-31.414 25.465-56.881 56.878-56.885h819.14c25.031 0.194 46.179 16.601 53.474 39.229l0.112 0.401c1.696 5.184 2.675 11.15 2.675 17.344 0 19.089-9.291 36.008-23.598 46.482l-0.162 0.113zM174.901 277.384c47.923 94.131 76 205.282 76 322.99 0 10.443-0.221 20.835-0.659 31.17l0.050-1.475c0 119.383 96.779 216.162 216.162 216.162s216.162-96.779 216.162-216.162v0c-0.387-8.856-0.608-19.244-0.608-29.684 0-117.708 28.062-228.862 77.862-327.136l-1.9 4.135zM573.853 87.541c-8.181 4.825-18.026 7.675-28.536 7.675-20.904 0-39.175-11.276-49.061-28.077l-0.145-0.266c-6.013-10.266-16.989-17.051-29.55-17.051-6.311 0-12.222 1.713-17.293 4.699l0.16-0.087c-5.181 3.025-9.376 7.22-12.314 12.241l-0.086 0.16c-10.022 17.142-28.338 28.474-49.3 28.474-31.434 0-56.916-25.482-56.916-56.916 0-10.472 2.828-20.283 7.762-28.711l-0.145 0.269c26.074-44.41 73.596-73.753 127.972-73.753s101.897 29.344 127.594 73.059l0.377 0.694c4.808 8.17 7.648 17.998 7.648 28.489 0 20.831-11.197 39.047-27.901 48.958l-0.263 0.144z" />
<glyph unicode="&#xe907;" glyph-name="calender" horiz-adv-x="922" d="M307.2 499.2h-102.4v-102.4h102.4zM512 499.2h-102.4v-102.4h102.4zM716.8 499.2h-102.4v-102.4h102.4zM819.2 857.6h-51.2v102.4h-102.4v-102.4h-409.6v102.4h-102.4v-102.4h-51.2c-56.277-0.024-101.889-45.651-101.889-101.931 0-0.165 0-0.33 0.001-0.495v0.025l-0.512-716.8c0-56.554 45.846-102.4 102.4-102.4v0h716.8c56.486 0.169 102.231 45.914 102.4 102.384v716.816c-0.169 56.486-45.914 102.231-102.384 102.4h-0.016zM819.2 38.4h-716.8v563.2h716.8z" />
<glyph unicode="&#xe908;" glyph-name="checkbox" d="M910.222 846.222v-796.444h-796.444v796.444h796.444zM910.222 960h-796.444c-62.76-0.193-113.584-51.018-113.778-113.759v-796.463c0.193-62.76 51.018-113.584 113.759-113.778h796.463c62.76 0.193 113.584 51.018 113.778 113.759v796.463c-0.193 62.76-51.018 113.584-113.759 113.778h-0.019z" />
<glyph unicode="&#xe909;" glyph-name="checkbox-1" d="M910.222 960h-796.444c-62.838 0-113.778-50.94-113.778-113.778v0-796.444c0-62.838 50.94-113.778 113.778-113.778v0h796.444c62.838 0 113.778 50.94 113.778 113.778v0 796.444c0 62.838-50.94 113.778-113.778 113.778v0zM398.222 163.556l-284.444 284.444 80.213 80.213 204.231-203.662 431.787 431.787 80.213-80.782z" />
<glyph unicode="&#xe908;" glyph-name="checkbox-1" d="M910.222 960h-796.444c-62.838 0-113.778-50.94-113.778-113.778v0-796.444c0-62.838 50.94-113.778 113.778-113.778v0h796.444c62.838 0 113.778 50.94 113.778 113.778v0 796.444c0 62.838-50.94 113.778-113.778 113.778v0zM398.222 163.556l-284.444 284.444 80.213 80.213 204.231-203.662 431.787 431.787 80.213-80.782z" />
<glyph unicode="&#xe909;" glyph-name="checkbox" d="M910.222 846.222v-796.444h-796.444v796.444h796.444zM910.222 960h-796.444c-62.76-0.193-113.584-51.018-113.778-113.759v-796.463c0.193-62.76 51.018-113.584 113.759-113.778h796.463c62.76 0.193 113.584 51.018 113.778 113.759v796.463c-0.193 62.76-51.018 113.584-113.759 113.778h-0.019z" />
<glyph unicode="&#xe90a;" glyph-name="circle-left" d="M512-64c-282.77 0-512 229.23-512 512s229.23 512 512 512c282.77 0 512-229.23 512-512v0c0-282.77-229.23-512-512-512v0zM276.821 412.928l279.723-279.723c8.937-8.992 21.312-14.557 34.987-14.557s26.050 5.565 34.984 14.554l35.117 35.117c8.992 8.937 14.557 21.312 14.557 34.987s-5.565 26.050-14.554 34.984l-209.751 209.751 209.749 209.749c8.992 8.937 14.557 21.312 14.557 34.987s-5.565 26.050-14.554 34.984l-35.117 35.117c-8.937 8.992-21.312 14.557-34.987 14.557s-26.050-5.565-34.984-14.554l-279.725-279.767c-8.993-8.976-14.557-21.385-14.557-35.093s5.564-26.118 14.556-35.093l0.001-0.001z" />
<glyph unicode="&#xe90b;" glyph-name="circle-right" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512c-282.77 0-512-229.23-512-512v0c0-282.77 229.23-512 512-512v0zM747.136 412.885l-279.723-279.723c-8.937-8.992-21.312-14.557-34.987-14.557s-26.050 5.565-34.984 14.554l-35.117 35.117c-8.992 8.937-14.557 21.312-14.557 34.987s5.565 26.050 14.554 34.984l209.751 209.751-209.792 209.792c-8.992 8.937-14.557 21.312-14.557 34.987s5.565 26.050 14.554 34.984l35.117 35.117c8.937 8.992 21.312 14.557 34.987 14.557s26.050-5.565 34.984-14.554l279.725-279.725c9.019-8.98 14.6-21.406 14.6-35.136 0-13.709-5.564-26.118-14.556-35.093l-0.001-0.001z" />
<glyph unicode="&#xe90c;" glyph-name="close" d="M843.123 929.004l-331.098-331.098-331.098 331.098c-19.185 19.146-45.668 30.985-74.916 30.985s-55.731-11.839-74.918-30.987l0.002 0.002c-19.117-19.18-30.937-45.643-30.937-74.868s11.82-55.687 30.94-74.87l331.047-331.095-331.050-331.244c-19.191-19.173-31.063-45.67-31.063-74.94 0-58.504 47.427-105.93 105.93-105.93 29.234 0 55.702 11.842 74.868 30.991l331.097 331.097 331.196-331.147c19.046-18.46 45.049-29.839 73.71-29.839 58.521 0 105.961 47.44 105.961 105.961 0 28.661-11.379 54.663-29.865 73.737l0.027-0.028-331.196 331.196 331.098 331.098c18.46 19.046 29.839 45.049 29.839 73.71 0 58.521-47.44 105.961-105.961 105.961-28.661 0-54.663-11.379-73.737-29.865l0.028 0.027z" />
<glyph unicode="&#xe90d;" glyph-name="comment" d="M895.851 960h-767.872c-70.681 0-127.979-57.298-127.979-127.979v0-575.904c0-70.681 57.298-127.979 127.979-127.979v0h191.968v-167.993c0-0.025 0-0.056 0-0.086 0-13.288 10.772-24.060 24.060-24.060 5.399 0 10.382 1.778 14.397 4.781l-0.063-0.045 249.558 187.403h287.952c70.681 0 127.979 57.298 127.979 127.979v0 575.904c0 70.681-57.298 127.979-127.979 127.979v0zM604.699 384.096h-371.821v127.979h371.821zM791.42 663.303h-558.84v127.979h558.84z" />
<glyph unicode="&#xe90e;" glyph-name="company" horiz-adv-x="970" d="M646.741 474.965v323.371l-161.707 161.664-161.664-161.664v-107.819h-323.371v-754.517h970.112v538.965zM215.595 43.776h-107.819v107.819h107.819zM215.595 259.371h-107.819v107.776h107.819zM215.595 474.965h-107.819v107.776h107.819zM538.965 43.819h-107.819v107.776h107.776zM538.965 259.413h-107.819v107.733h107.776zM538.965 475.008h-107.819v107.733h107.776zM538.965 690.603h-107.819v107.733h107.776zM862.336 43.861h-107.819v107.733h107.776zM862.336 259.456h-107.819v107.691h107.776z" />
<glyph unicode="&#xe90f;" glyph-name="edit" d="M864 960c88.366 0 160-71.634 160-160 0-36.2-12.022-69.593-32.292-96.402l0.292 0.402-64-64-224 224 64 64c26.324 19.976 59.637 32 95.758 32 0.085 0 0.17 0 0.255 0h-0.013zM64 224l-64-288 288 64 592.171 592-224.171 224.128zM715.563 596.437l-448-448-55.168 55.125 448 448z" />
<glyph unicode="&#xe910;" glyph-name="eye" horiz-adv-x="1352" d="M1343.806 481.543c-9.762 19.575-244.11 478.457-667.948 478.457s-658.136-458.883-667.948-478.457c-4.994-9.78-7.92-21.332-7.92-33.568s2.926-23.787 8.117-33.994l-0.197 0.427c10.013-19.575 244.11-478.407 667.948-478.407s658.186 458.832 667.948 478.407c4.994 9.78 7.92 21.332 7.92 33.568s-2.926 23.787-8.117 33.994l0.197-0.427zM675.858 86.040c-272.446 0-457.030 266.138-514.553 361.809 57.523 95.671 242.107 361.809 514.553 361.809s457.13-266.288 514.553-361.809c-57.523-95.521-242.157-361.659-514.553-361.659zM675.858 748.381c-165.896 0-300.381-134.485-300.381-300.381s134.485-300.381 300.381-300.381c165.896 0 300.381 134.485 300.381 300.381v0c-0.199 165.816-134.565 300.182-300.362 300.381h-0.020zM675.858 297.809c-82.948 0-150.191 67.243-150.191 150.191s67.243 150.191 150.191 150.191c82.948 0 150.191-67.243 150.191-150.191v0c0-82.948-67.243-150.191-150.191-150.191v0z" />
<glyph unicode="&#xe911;" glyph-name="eye-1" horiz-adv-x="1142" d="M1123.235 38.654l-217.634 208.847c5.132-1.805 11.050-2.848 17.211-2.848 15.851 0 30.089 6.902 39.875 17.864l0.046 0.052c37.481 38.161 71.036 80.412 99.866 125.951l1.835 3.103c5.666 8.976 9.029 19.899 9.029 31.606 0 11.056-2.999 21.412-8.227 30.299l0.153-0.28c-7.952 13.359-194.813 327.802-528.499 327.802h-1.312c-35.996-0.005-71.127-3.696-105.040-10.716l3.34 0.578c-18.092-3.787-32.895-15.391-40.954-31.036l-0.156-0.333-212.306 203.798c-10.7 10.287-25.264 16.622-41.308 16.622-32.938 0-59.64-26.702-59.64-59.64 0-16.894 7.024-32.148 18.312-42.999l0.020-0.019 162.768-156.208c-5.287-1.648-9.884-3.809-14.111-6.501l0.235 0.14c-95.97-62.868-175.328-142.911-235.543-236.445l-1.89-3.135c-5.835-9.056-9.303-20.115-9.303-31.985 0-11.035 2.997-21.371 8.222-30.236l-0.152 0.279c7.952-13.359 194.813-327.802 529.175-327.802 107.604 0.9 207.542 32.95 291.456 87.555l-2.1-1.281c1.312 0.835 2.385 1.908 3.618 2.863l210.398-201.929c10.7-10.287 25.264-16.622 41.308-16.622 32.938 0 59.64 26.702 59.64 59.64 0 16.894-7.024 32.148-18.312 42.999l-0.020 0.019zM536.729 661.777c210.716 0 354.679-168.573 405.529-238.546-20.464-28.603-41.631-53.756-64.584-77.15l0.097 0.1c-10.193-10.583-16.471-24.997-16.471-40.878 0-6.315 0.993-12.399 2.831-18.103l-0.116 0.417-385.213 369.747c17.213 2.809 37.053 4.414 57.267 4.414 0.232 0 0.464 0 0.696-0.001h-0.036zM480.591 454.242c6.937 5.309 12.58 11.943 16.621 19.556l0.156 0.323 89.972-86.354c-14.804-12.070-33.904-19.382-54.711-19.382-7.266 0-14.323 0.892-21.069 2.571l0.598-0.126c-21.583 3.776-39.081 18.284-47.003 37.713l-0.149 0.414c-0.942 3.344-1.484 7.185-1.484 11.153 0 13.911 6.658 26.266 16.961 34.054l0.107 0.078zM536.729 184.685c-210.716 0-354.4 168.215-405.211 238.546 49.32 68.027 109.037 125.034 177.432 169.904l2.551 1.571c11.947 7.883 20.761 19.68 24.668 33.535l0.101 0.418 78.482-75.301c-2.135-1.142-3.89-2.209-5.584-3.359l0.217 0.139c-39.593-30.204-64.883-77.409-64.883-130.521 0-16.497 2.44-32.424 6.979-47.441l-0.301 1.159c21.213-61.143 72.589-106.713 135.851-119.32l1.154-0.192c13.578-3.209 29.168-5.048 45.187-5.048 51.658 0 98.848 19.131 134.872 50.694l-0.235-0.202c1.923 1.788 3.692 3.67 5.327 5.665l0.080 0.1 67.389-64.686c-58.645-34.055-128.851-54.577-203.762-55.657l-0.314-0.004z" />
<glyph unicode="&#xe912;" glyph-name="flag" horiz-adv-x="1008" d="M470.315 580.139v-136.192c52.181-11.819 98.603-31.189 147.2-44.587v136.405c-52.011 11.605-98.773 30.976-147.2 44.416zM916.907 826.112c-67.939-35.792-147.729-58.874-232.376-63.923l-1.608-0.077c-107.008 0.213-195.584 69.76-330.368 69.76-0.457 0.002-0.998 0.003-1.539 0.003-48.265 0-94.476-8.794-137.118-24.867l2.678 0.885c4.705 11.905 7.433 25.695 7.433 40.122 0 61.856-50.144 112-112 112s-112-50.144-112-112c0-37.882 18.807-71.371 47.593-91.64l0.355-0.237v-772.267c0-0.038 0-0.083 0-0.128 0-26.439 21.433-47.872 47.872-47.872 0.045 0 0.090 0 0.135 0h31.993c0.038 0 0.083 0 0.128 0 26.439 0 47.872 21.433 47.872 47.872 0 0.045 0 0.090 0 0.135v-0.007 188.928c64.268 28.012 139.144 44.31 217.827 44.31 3.851 0 7.693-0.039 11.525-0.117l-0.573 0.009c107.179 0 195.584-69.589 330.368-69.589 92.324 0.765 177.356 31.352 246.099 82.581l-1.107-0.789c16.771 11.705 27.605 30.909 27.605 52.644 0 0.047 0 0.094 0 0.141v-0.007 486.144c-0.078 35.287-28.702 63.863-64 63.863-9.72 0-18.935-2.167-27.186-6.044l0.391 0.165zM323.157 308.992c-54.473-5.68-104.346-17.389-151.58-34.589l4.38 1.394v140.8c42.966 16.959 92.83 29.258 144.754 34.612l2.446 0.204zM911.957 577.792c-42.344-20.263-91.614-36.787-143.125-47.106l-4.075-0.681v-141.867c55.26 7.286 105.051 25.69 148.773 52.924l-1.573-0.913v-140.8c-41.573-28.653-91.64-48.031-145.739-54.055l-1.461-0.132v142.976c-14.605-2.234-31.455-3.51-48.603-3.51-35.177 0-69.1 5.37-100.994 15.334l2.396-0.645v-134.912c-39.685 15.094-88.92 29.775-139.395 41.183l-7.805 1.483v136.875c-28.906 6.694-62.098 10.532-96.186 10.532-17.976 0-35.702-1.067-53.12-3.141l2.106 0.204v140.032c-55.565-9.583-104.997-24.104-151.88-43.532l4.68 1.718v140.8c42.614 19.83 92.097 35.166 143.91 43.55l3.29 0.439v-142.976c14.417 2.165 31.054 3.401 47.98 3.401 35.4 0 69.537-5.408 101.63-15.442l-2.41 0.649v134.741c39.858-15.224 89.098-29.908 139.605-41.235l7.595-1.431v-136.704c26.239-6.45 56.363-10.149 87.35-10.149 21.13 0 41.859 1.72 62.054 5.028l-2.204-0.298v143.872c55.763 10.757 105.071 26.328 151.746 46.79l-4.546-1.777z" />
<glyph unicode="&#xe913;" glyph-name="information" d="M460.771 601.604h102.293v102.251h-102.293zM511.917 38.251c-0.012 0-0.027 0-0.041 0-226.23 0-409.625 183.395-409.625 409.625s183.395 409.625 409.625 409.625c226.215 0 409.601-183.372 409.625-409.581v-0.002c0-226.23-183.395-409.625-409.625-409.625v0zM511.876 960.207c-282.717-0.071-511.876-229.274-511.876-512 0-282.77 229.23-512 512-512 282.697 0 511.882 229.113 512 511.782v0.011c0 282.77-229.23 512-512 512v0zM460.854 191.979h102.21v307.25h-102.21z" />
<glyph unicode="&#xe914;" glyph-name="left" horiz-adv-x="661" d="M22.52 393.406l435.159-434.886c13.85-13.942 33.032-22.572 54.23-22.572s40.38 8.63 54.226 22.567l72.295 72.295c13.931 13.855 22.553 33.035 22.553 54.23s-8.622 40.375-22.549 54.227l-308.504 308.413 308.365 308.365c13.931 13.855 22.553 33.035 22.553 54.23s-8.622 40.375-22.549 54.227l-0.003 0.003-71.973 72.792c-13.85 13.942-33.032 22.572-54.23 22.572s-40.38-8.63-54.226-22.567l-435.027-434.936c-14.154-13.904-22.927-33.246-22.927-54.637 0-21.234 8.643-40.449 22.604-54.319l0.004-0.004z" />
<glyph unicode="&#xe915;" glyph-name="phone" horiz-adv-x="652" d="M558.549 959.531l-465.451 0.469c-51.358-0.145-92.954-41.74-93.099-93.085v-837.817c0.145-51.358 41.74-92.954 93.085-93.099h465.465c51.358 0.145 92.954 41.74 93.099 93.085v837.817c-0.194 51.199-41.744 92.629-92.97 92.629-0.045 0-0.090 0-0.136 0h0.007zM558.549 122.197h-465.451v651.605h465.451z" />
<glyph unicode="&#xe916;" glyph-name="right" horiz-adv-x="661" d="M638.368 393.381l-435.042-434.86c-13.855-13.932-33.037-22.554-54.232-22.554s-40.377 8.622-54.229 22.55l-72.298 72.298c-13.932 13.855-22.554 33.037-22.554 54.232s8.622 40.377 22.55 54.229l308.381 308.381-308.378 308.378c-13.932 13.855-22.554 33.037-22.554 54.232s8.622 40.377 22.55 54.229l0.003 0.003 71.976 72.795c13.855 13.932 33.037 22.554 54.232 22.554s40.377-8.622 54.229-22.55l435.045-434.726c14.1-13.896 22.836-33.203 22.836-54.549 0-21.189-8.607-40.368-22.515-54.232l-0.002-0.002z" />
<glyph unicode="&#xe917;" glyph-name="school" horiz-adv-x="1252" d="M227.579 380.884v-227.579l398.211-217.305 398.211 217.305v227.579l-398.211-217.358zM625.789 960l-625.789-341.316 625.789-341.316 512 279.311v-393.1h113.789v455.105z" />
<glyph unicode="&#xe918;" glyph-name="search" d="M1009.922 74.686l-199.391 199.391c-8.672 8.647-20.639 13.993-33.854 13.993-0.096 0-0.192 0-0.288-0.001h-32.577c54.858 69.783 87.982 158.908 87.982 255.769 0 229.618-186.142 415.76-415.76 415.76s-415.76-186.142-415.76-415.76c0-229.618 186.142-415.76 415.76-415.76 96.861 0 185.986 33.123 256.666 88.661l-0.897-0.679v-32.464c0-0.081-0.001-0.177-0.001-0.273 0-13.216 5.346-25.182 13.994-33.855l199.39-199.39c8.657-8.711 20.645-14.103 33.893-14.103s25.236 5.392 33.891 14.1l56.611 56.611c8.774 8.732 14.204 20.817 14.204 34.171 0 13.184-5.292 25.131-13.869 33.834l0.006-0.006zM415.973 287.984c-141.361 0-255.957 114.596-255.957 255.957s114.596 255.957 255.957 255.957c141.361 0 255.957-114.596 255.957-255.957v0c-0.049-141.325-114.626-255.872-255.957-255.872v0z" />
<glyph unicode="&#xe919;" glyph-name="star" horiz-adv-x="1103" d="M1060.923 605.515h-362.082l-110.034 328.386c-5.769 15.366-20.337 26.102-37.413 26.102s-31.644-10.737-37.322-25.828l-0.091-0.275-110.034-328.386h-364.574c-21.717-0.069-39.304-17.656-39.374-39.367v-0.007c0-0.051-0.001-0.111-0.001-0.172 0-2.3 0.268-4.537 0.775-6.682l-0.039 0.196c1.082-11.588 7.245-21.545 16.211-27.732l0.127-0.083 297.753-209.856-114.363-332.062c-1.356-3.823-2.14-8.232-2.14-12.824 0-12.816 6.104-24.206 15.563-31.422l0.096-0.070c5.913-5.322 13.556-8.829 21.991-9.588l0.147-0.011c9.263 0.701 17.658 3.918 24.649 8.961l-0.142-0.098 290.483 207.038 290.483-207.038c6.807-5.047 15.229-8.284 24.374-8.857l0.132-0.007c8.688 0.56 16.438 4.176 22.272 9.773l-0.012-0.012c9.602 7.187 15.75 18.533 15.75 31.315 0 4.66-0.817 9.13-2.316 13.273l0.086-0.272-114.159 331.898 295.139 211.694 7.148 6.167c7.108 6.72 11.823 15.905 12.772 26.182l0.012 0.163c-1.204 22.063-19.388 39.497-41.643 39.497-0.078 0-0.156 0-0.234-0.001h0.012z" />
<glyph unicode="&#xe91a;" glyph-name="star-1" horiz-adv-x="1095" d="M264.124-64l-3.988 0.315c-45.874 4.728-81.349 43.172-81.349 89.9 0 9.949 1.608 19.523 4.579 28.476l-0.183-0.638 89.58 260.661-235.092 165.554c-19.618 13.599-33.145 34.797-36.332 59.244l-0.046 0.43c-0.823 4.244-1.294 9.125-1.294 14.115 0 0.018 0 0.036 0 0.054v-0.003c0.197 48.36 39.308 87.52 87.63 87.796h289.579l86.747 258.842c12.356 34.779 44.982 59.235 83.32 59.235 37.789 0 70.029-23.761 82.593-57.157l0.201-0.608 87.272-260.311h287.525c0.011 0 0.025 0 0.038 0 47.863 0 86.99-37.407 89.741-84.58l0.011-0.243v-3.848l-0.315-3.883c-2.124-22.565-12.304-42.418-27.594-56.944l-0.039-0.036-11.963-10.074-233.098-167.233 89.755-261.011c3.161-8.633 4.99-18.602 4.99-28.997 0-27.516-12.812-52.041-32.795-67.933l-0.177-0.136c-13.364-11.803-30.658-19.438-49.692-20.728l-0.258-0.014-3.183-0.21-3.148 0.175c-18.973 1.079-36.226 7.647-50.416 18.125l0.256-0.181-229.565 163.77-230.369-164.12c-13.682-9.851-30.475-16.214-48.672-17.473l-0.298-0.017zM812.414 19.949v-0.28zM282.243 20.124v0zM838.403 39.502v0zM139.39 536.968l258.003-181.889-97.94-285.006 247.929 176.642 247.649-176.502-97.94 284.586 254.015 182.169h-309.246l-94.442 282.243-94.722-282.243zM1004.972 536.968v0zM97.346 566.595l0.56-0.42z" />
<glyph unicode="&#xe91b;" glyph-name="thumbs-up" horiz-adv-x="910" d="M662.613 598.059c-7.552 20.181 201.344 206.72 79.531 357.888-28.501 35.328-125.227-169.259-262.528-261.845-75.776-51.2-252.075-159.872-252.075-219.989v-389.461c0-72.32 279.552-148.864 491.989-148.864 77.867 0 190.677 487.851 190.677 565.333s-240.128 76.459-247.467 96.725zM170.624 592.64c-0.681 0.010-1.486 0.016-2.292 0.016-93.126 0-168.619-75.493-168.619-168.619 0-3.187 0.088-6.354 0.263-9.498l-0.019 0.437v-275.797c-0.161-2.71-0.252-5.878-0.252-9.068 0-90.015 72.972-162.987 162.987-162.987 2.79 0 5.564 0.070 8.32 0.209l-0.387-0.016c37.376 0-56.875 32.555-56.875 128.555v362.667c0 100.565 94.251 134.187 56.875 134.187z" />
<glyph unicode="&#xe91c;" glyph-name="time" d="M511.488 960c-282.55-0.292-511.488-229.41-511.488-512 0-282.77 229.23-512 512-512s512 229.23 512 512v0c0 0.076 0 0.166 0 0.257 0 282.628-229.116 511.744-511.744 511.744-0.27 0-0.54 0-0.81-0.001h0.042zM512 38.4c-226.216 0-409.6 183.384-409.6 409.6s183.384 409.6 409.6 409.6c226.216 0 409.6-183.384 409.6-409.6v0c0-226.216-183.384-409.6-409.6-409.6v0zM537.6 704h-76.8v-307.2l268.8-161.28 38.4 63.147-230.4 136.533z" />
<glyph unicode="&#xe91d;" glyph-name="trophy" horiz-adv-x="1152" d="M1104.017 831.982h-207.987v80.017c0 26.51-21.491 48.001-48.001 48.001v0h-544.040c-26.51 0-48.001-21.491-48.001-48.001v0-80.017h-207.987c-26.51 0-48.001-21.491-48.001-48.001v0-111.986c7.076-85.462 54.363-158.548 122.682-200.96l1.112-0.643c61.778-44.226 136.678-74.099 217.854-83.23l2.133-0.195c34.389-59.486 80.159-108.69 134.709-145.998l1.518-0.98v-144.002h-96.001c-3.854 0.457-8.318 0.718-12.843 0.718-62.746 0-113.776-50.163-115.172-112.574l-0.002-0.13v-24c0-13.255 10.745-24 24-24v0h592.041c13.255 0 24 10.745 24 24v0 24c-1.399 62.54-52.429 112.704-115.175 112.704-4.525 0-8.989-0.261-13.378-0.768l0.535 0.050h-96.001v144.002c56.068 38.356 101.826 87.64 135.041 145.086l1.137 2.132c83.314 9.166 158.252 38.973 221.451 84.147l-1.416-0.962c69.366 43.121 116.621 116.171 123.729 200.646l0.065 0.957v111.986c0 26.51-21.491 48.001-48.001 48.001v0zM198.627 574.41c-35.829 20.914-61.682 55.601-70.437 96.621l-0.172 0.964v32.016h128.402c1.638-61.997 10.873-121.145 26.808-177.479l-1.223 5.061c-31.815 11.002-59.407 25.499-84.329 43.47l0.951-0.653zM1024 671.995c-9.695-41.665-35.309-76.091-69.932-97.202l-0.677-0.383c-24.040-17.319-51.713-31.817-81.346-42.129l-2.271-0.688c14.711 51.273 23.946 110.421 25.564 171.467l0.020 0.952h128.594z" />
<glyph unicode="&#xe91e;" glyph-name="puzzle" d="M384 960c-0.789 0.017-1.719 0.027-2.651 0.027-34.738 0-66.285-13.665-89.558-35.914l0.049 0.046c-22.202-23.224-35.867-54.77-35.867-89.509 0-0.932 0.010-1.862 0.029-2.789l-0.002 0.138c5.836-34.821 18.412-65.879 36.393-93.049l-0.553 0.889c2.672-8.237 4.213-17.715 4.213-27.553 0-2.918-0.136-5.803-0.401-8.652l0.027 0.365h-295.68v-768h295.68c0.053 1.37 0.084 2.978 0.084 4.594 0 11.101-1.431 21.868-4.119 32.126l0.196-0.88c-17.428 26.281-30.005 57.34-35.644 90.756l-0.196 1.404c-0.017 0.789-0.027 1.719-0.027 2.651 0 34.738 13.665 66.285 35.914 89.558l-0.046-0.049c23.224 22.202 54.77 35.867 89.509 35.867 0.932 0 1.862-0.010 2.789-0.029l-0.138 0.002c0.789 0.017 1.719 0.027 2.651 0.027 34.738 0 66.285-13.665 89.558-35.914l-0.049 0.046c22.202-23.224 35.867-54.77 35.867-89.509 0-0.932-0.010-1.862-0.029-2.789l0.002 0.138c-5.836-34.821-18.412-65.879-36.393-93.049l0.553 0.889c-2.672-8.237-4.213-17.715-4.213-27.553 0-2.918 0.136-5.803 0.401-8.652l-0.027 0.365h295.68v295.68c1.37 0.053 2.978 0.084 4.594 0.084 11.101 0 21.868-1.431 32.126-4.119l-0.88 0.196c26.281-17.428 57.34-30.005 90.756-35.644l1.404-0.196c70.692 0 128 57.308 128 128s-57.308 128-128 128v0c-34.821-5.836-65.879-18.412-93.049-36.393l0.889 0.553c-8.237-2.672-17.715-4.213-27.553-4.213-2.918 0-5.803 0.136-8.652 0.401l0.365-0.027v295.68h-295.68c-0.053 1.37-0.084 2.978-0.084 4.594 0 11.101 1.431 21.868 4.119 32.126l-0.196-0.88c17.428 26.281 30.005 57.34 35.644 90.756l0.196 1.404c0.017 0.789 0.027 1.719 0.027 2.651 0 34.738-13.665 66.285-35.914 89.558l0.046-0.049c-23.224 22.202-54.77 35.867-89.509 35.867-0.932 0-1.862-0.010-2.789-0.029l0.138 0.002z" />
<glyph unicode="&#xe91f;" glyph-name="top" d="M563.115 736.768l407.851-408.107c13.137-12.992 21.272-31.018 21.272-50.943 0-19.756-7.997-37.645-20.932-50.605l-68.138-68.138c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l-289.532 289.788-289.195-289.195c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l0.004-0.004-0.213 0.299-68.267 67.499c-13.075 12.989-21.168 30.978-21.168 50.859 0 19.71 7.956 37.563 20.831 50.521l408.231 408.316c13.040 13.276 31.18 21.503 51.243 21.503 19.596 0 37.358-7.849 50.315-20.575l-0.011 0.010z" />
<glyph unicode="&#xe920;" glyph-name="delet" horiz-adv-x="783" d="M587.199 904.076l-55.924 55.924h-279.618l-55.924-55.924h-195.733v-111.847h782.932v111.847zM33.107 89.492c1.405-85.070 70.697-153.493 155.97-153.493 0.217 0 0.434 0 0.65 0.001h403.362c0.182-0.001 0.398-0.001 0.614-0.001 85.338 0 154.671 68.528 155.971 153.557l0.001 0.122v647.895h-716.569zM144.954 627.888h493.023v-538.023c-0.295-24.483-20.211-44.217-44.736-44.217-0.001 0-0.002 0-0.003 0h-403.21c-0.101-0.001-0.22-0.001-0.34-0.001-24.499 0-44.399 19.692-44.735 44.112v0.032zM288.939 125.097c30.886 0 55.924 25.038 55.924 55.924v0 316.901c0 30.886-25.038 55.924-55.924 55.924s-55.924-25.038-55.924-55.924v0-316.901c0-30.886 25.038-55.924 55.924-55.924v0zM493.993 125.097c30.886 0 55.924 25.038 55.924 55.924v0 316.901c0 30.886-25.038 55.924-55.924 55.924s-55.924-25.038-55.924-55.924v0-316.901c0-30.886 25.038-55.924 55.924-55.924v0z" />
<glyph unicode="&#xe90f;" glyph-name="delet" horiz-adv-x="783" d="M587.199 904.076l-55.924 55.924h-279.618l-55.924-55.924h-195.733v-111.847h782.932v111.847zM33.107 89.492c1.405-85.070 70.697-153.493 155.97-153.493 0.217 0 0.434 0 0.65 0.001h403.362c0.182-0.001 0.398-0.001 0.614-0.001 85.338 0 154.671 68.528 155.971 153.557l0.001 0.122v647.895h-716.569zM144.954 627.888h493.023v-538.023c-0.295-24.483-20.211-44.217-44.736-44.217-0.001 0-0.002 0-0.003 0h-403.21c-0.101-0.001-0.22-0.001-0.34-0.001-24.499 0-44.399 19.692-44.735 44.112v0.032zM288.939 125.097c30.886 0 55.924 25.038 55.924 55.924v0 316.901c0 30.886-25.038 55.924-55.924 55.924s-55.924-25.038-55.924-55.924v0-316.901c0-30.886 25.038-55.924 55.924-55.924v0zM493.993 125.097c30.886 0 55.924 25.038 55.924 55.924v0 316.901c0 30.886-25.038 55.924-55.924 55.924s-55.924-25.038-55.924-55.924v0-316.901c0-30.886 25.038-55.924 55.924-55.924v0z" />
<glyph unicode="&#xe910;" glyph-name="down" d="M563.115 105.771l407.851 408.107c13.086 12.984 21.186 30.975 21.186 50.858 0 19.714-7.963 37.568-20.848 50.521l-68.136 68.136c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l-289.532-289.617-289.195 289.195c-13.008 13.118-31.038 21.24-50.965 21.24-19.778 0-37.688-8.001-50.669-20.943l-0.297-0.297-67.968-67.499c-13.075-12.989-21.168-30.978-21.168-50.859 0-19.71 7.956-37.563 20.831-50.521l408.231-408.316c13.040-13.276 31.18-21.503 51.243-21.503 19.596 0 37.358 7.849 50.315 20.575l-0.011-0.010z" />
<glyph unicode="&#xe911;" glyph-name="edit" d="M864 960c88.366 0 160-71.634 160-160 0-36.2-12.022-69.593-32.292-96.402l0.292 0.402-64-64-224 224 64 64c26.324 19.976 59.637 32 95.758 32 0.085 0 0.17 0 0.255 0h-0.013zM64 224l-64-288 288 64 592.171 592-224.171 224.128zM715.563 596.437l-448-448-55.168 55.125 448 448z" />
<glyph unicode="&#xe912;" glyph-name="eye-1" horiz-adv-x="1142" d="M1123.235 38.654l-217.634 208.847c5.132-1.805 11.050-2.848 17.211-2.848 15.851 0 30.089 6.902 39.875 17.864l0.046 0.052c37.481 38.161 71.036 80.412 99.866 125.951l1.835 3.103c5.666 8.976 9.029 19.899 9.029 31.606 0 11.056-2.999 21.412-8.227 30.299l0.153-0.28c-7.952 13.359-194.813 327.802-528.499 327.802h-1.312c-35.996-0.005-71.127-3.696-105.040-10.716l3.34 0.578c-18.092-3.787-32.895-15.391-40.954-31.036l-0.156-0.333-212.306 203.798c-10.7 10.287-25.264 16.622-41.308 16.622-32.938 0-59.64-26.702-59.64-59.64 0-16.894 7.024-32.148 18.312-42.999l0.020-0.019 162.768-156.208c-5.287-1.648-9.884-3.809-14.111-6.501l0.235 0.14c-95.97-62.868-175.328-142.911-235.543-236.445l-1.89-3.135c-5.835-9.056-9.303-20.115-9.303-31.985 0-11.035 2.997-21.371 8.222-30.236l-0.152 0.279c7.952-13.359 194.813-327.802 529.175-327.802 107.604 0.9 207.542 32.95 291.456 87.555l-2.1-1.281c1.312 0.835 2.385 1.908 3.618 2.863l210.398-201.929c10.7-10.287 25.264-16.622 41.308-16.622 32.938 0 59.64 26.702 59.64 59.64 0 16.894-7.024 32.148-18.312 42.999l-0.020 0.019zM536.729 661.777c210.716 0 354.679-168.573 405.529-238.546-20.464-28.603-41.631-53.756-64.584-77.15l0.097 0.1c-10.193-10.583-16.471-24.997-16.471-40.878 0-6.315 0.993-12.399 2.831-18.103l-0.116 0.417-385.213 369.747c17.213 2.809 37.053 4.414 57.267 4.414 0.232 0 0.464 0 0.696-0.001h-0.036zM480.591 454.242c6.937 5.309 12.58 11.943 16.621 19.556l0.156 0.323 89.972-86.354c-14.804-12.070-33.904-19.382-54.711-19.382-7.266 0-14.323 0.892-21.069 2.571l0.598-0.126c-21.583 3.776-39.081 18.284-47.003 37.713l-0.149 0.414c-0.942 3.344-1.484 7.185-1.484 11.153 0 13.911 6.658 26.266 16.961 34.054l0.107 0.078zM536.729 184.685c-210.716 0-354.4 168.215-405.211 238.546 49.32 68.027 109.037 125.034 177.432 169.904l2.551 1.571c11.947 7.883 20.761 19.68 24.668 33.535l0.101 0.418 78.482-75.301c-2.135-1.142-3.89-2.209-5.584-3.359l0.217 0.139c-39.593-30.204-64.883-77.409-64.883-130.521 0-16.497 2.44-32.424 6.979-47.441l-0.301 1.159c21.213-61.143 72.589-106.713 135.851-119.32l1.154-0.192c13.578-3.209 29.168-5.048 45.187-5.048 51.658 0 98.848 19.131 134.872 50.694l-0.235-0.202c1.923 1.788 3.692 3.67 5.327 5.665l0.080 0.1 67.389-64.686c-58.645-34.055-128.851-54.577-203.762-55.657l-0.314-0.004z" />
<glyph unicode="&#xe913;" glyph-name="eye" horiz-adv-x="1352" d="M1343.806 481.543c-9.762 19.575-244.11 478.457-667.948 478.457s-658.136-458.883-667.948-478.457c-4.994-9.78-7.92-21.332-7.92-33.568s2.926-23.787 8.117-33.994l-0.197 0.427c10.013-19.575 244.11-478.407 667.948-478.407s658.186 458.832 667.948 478.407c4.994 9.78 7.92 21.332 7.92 33.568s-2.926 23.787-8.117 33.994l0.197-0.427zM675.858 86.040c-272.446 0-457.030 266.138-514.553 361.809 57.523 95.671 242.107 361.809 514.553 361.809s457.13-266.288 514.553-361.809c-57.523-95.521-242.157-361.659-514.553-361.659zM675.858 748.381c-165.896 0-300.381-134.485-300.381-300.381s134.485-300.381 300.381-300.381c165.896 0 300.381 134.485 300.381 300.381v0c-0.199 165.816-134.565 300.182-300.362 300.381h-0.020zM675.858 297.809c-82.948 0-150.191 67.243-150.191 150.191s67.243 150.191 150.191 150.191c82.948 0 150.191-67.243 150.191-150.191v0c0-82.948-67.243-150.191-150.191-150.191v0z" />
<glyph unicode="&#xe914;" glyph-name="flag" horiz-adv-x="1008" d="M470.315 580.139v-136.192c52.181-11.819 98.603-31.189 147.2-44.587v136.405c-52.011 11.605-98.773 30.976-147.2 44.416zM916.907 826.112c-67.939-35.792-147.729-58.874-232.376-63.923l-1.608-0.077c-107.008 0.213-195.584 69.76-330.368 69.76-0.457 0.002-0.998 0.003-1.539 0.003-48.265 0-94.476-8.794-137.118-24.867l2.678 0.885c4.705 11.905 7.433 25.695 7.433 40.122 0 61.856-50.144 112-112 112s-112-50.144-112-112c0-37.882 18.807-71.371 47.593-91.64l0.355-0.237v-772.267c0-0.038 0-0.083 0-0.128 0-26.439 21.433-47.872 47.872-47.872 0.045 0 0.090 0 0.135 0h31.993c0.038 0 0.083 0 0.128 0 26.439 0 47.872 21.433 47.872 47.872 0 0.045 0 0.090 0 0.135v-0.007 188.928c64.268 28.012 139.144 44.31 217.827 44.31 3.851 0 7.693-0.039 11.525-0.117l-0.573 0.009c107.179 0 195.584-69.589 330.368-69.589 92.324 0.765 177.356 31.352 246.099 82.581l-1.107-0.789c16.771 11.705 27.605 30.909 27.605 52.644 0 0.047 0 0.094 0 0.141v-0.007 486.144c-0.078 35.287-28.702 63.863-64 63.863-9.72 0-18.935-2.167-27.186-6.044l0.391 0.165zM323.157 308.992c-54.473-5.68-104.346-17.389-151.58-34.589l4.38 1.394v140.8c42.966 16.959 92.83 29.258 144.754 34.612l2.446 0.204zM911.957 577.792c-42.344-20.263-91.614-36.787-143.125-47.106l-4.075-0.681v-141.867c55.26 7.286 105.051 25.69 148.773 52.924l-1.573-0.913v-140.8c-41.573-28.653-91.64-48.031-145.739-54.055l-1.461-0.132v142.976c-14.605-2.234-31.455-3.51-48.603-3.51-35.177 0-69.1 5.37-100.994 15.334l2.396-0.645v-134.912c-39.685 15.094-88.92 29.775-139.395 41.183l-7.805 1.483v136.875c-28.906 6.694-62.098 10.532-96.186 10.532-17.976 0-35.702-1.067-53.12-3.141l2.106 0.204v140.032c-55.565-9.583-104.997-24.104-151.88-43.532l4.68 1.718v140.8c42.614 19.83 92.097 35.166 143.91 43.55l3.29 0.439v-142.976c14.417 2.165 31.054 3.401 47.98 3.401 35.4 0 69.537-5.408 101.63-15.442l-2.41 0.649v134.741c39.858-15.224 89.098-29.908 139.605-41.235l7.595-1.431v-136.704c26.239-6.45 56.363-10.149 87.35-10.149 21.13 0 41.859 1.72 62.054 5.028l-2.204-0.298v143.872c55.763 10.757 105.071 26.328 151.746 46.79l-4.546-1.777z" />
<glyph unicode="&#xe915;" glyph-name="information" d="M460.771 601.604h102.293v102.251h-102.293zM511.917 38.251c-0.012 0-0.027 0-0.041 0-226.23 0-409.625 183.395-409.625 409.625s183.395 409.625 409.625 409.625c226.215 0 409.601-183.372 409.625-409.581v-0.002c0-226.23-183.395-409.625-409.625-409.625v0zM511.876 960.207c-282.717-0.071-511.876-229.274-511.876-512 0-282.77 229.23-512 512-512 282.697 0 511.882 229.113 512 511.782v0.011c0 282.77-229.23 512-512 512v0zM460.854 191.979h102.21v307.25h-102.21z" />
<glyph unicode="&#xe916;" glyph-name="left" horiz-adv-x="661" d="M22.52 393.406l435.159-434.886c13.85-13.942 33.032-22.572 54.23-22.572s40.38 8.63 54.226 22.567l72.295 72.295c13.931 13.855 22.553 33.035 22.553 54.23s-8.622 40.375-22.549 54.227l-308.504 308.413 308.365 308.365c13.931 13.855 22.553 33.035 22.553 54.23s-8.622 40.375-22.549 54.227l-0.003 0.003-71.973 72.792c-13.85 13.942-33.032 22.572-54.23 22.572s-40.38-8.63-54.226-22.567l-435.027-434.936c-14.154-13.904-22.927-33.246-22.927-54.637 0-21.234 8.643-40.449 22.604-54.319l0.004-0.004z" />
<glyph unicode="&#xe917;" glyph-name="phone" horiz-adv-x="652" d="M558.549 959.531l-465.451 0.469c-51.358-0.145-92.954-41.74-93.099-93.085v-837.817c0.145-51.358 41.74-92.954 93.085-93.099h465.465c51.358 0.145 92.954 41.74 93.099 93.085v837.817c-0.194 51.199-41.744 92.629-92.97 92.629-0.045 0-0.090 0-0.136 0h0.007zM558.549 122.197h-465.451v651.605h465.451z" />
<glyph unicode="&#xe918;" glyph-name="puzzle" d="M384 960c-0.789 0.017-1.719 0.027-2.651 0.027-34.738 0-66.285-13.665-89.558-35.914l0.049 0.046c-22.202-23.224-35.867-54.77-35.867-89.509 0-0.932 0.010-1.862 0.029-2.789l-0.002 0.138c5.836-34.821 18.412-65.879 36.393-93.049l-0.553 0.889c2.672-8.237 4.213-17.715 4.213-27.553 0-2.918-0.136-5.803-0.401-8.652l0.027 0.365h-295.68v-768h295.68c0.053 1.37 0.084 2.978 0.084 4.594 0 11.101-1.431 21.868-4.119 32.126l0.196-0.88c-17.428 26.281-30.005 57.34-35.644 90.756l-0.196 1.404c-0.017 0.789-0.027 1.719-0.027 2.651 0 34.738 13.665 66.285 35.914 89.558l-0.046-0.049c23.224 22.202 54.77 35.867 89.509 35.867 0.932 0 1.862-0.010 2.789-0.029l-0.138 0.002c0.789 0.017 1.719 0.027 2.651 0.027 34.738 0 66.285-13.665 89.558-35.914l-0.049 0.046c22.202-23.224 35.867-54.77 35.867-89.509 0-0.932-0.010-1.862-0.029-2.789l0.002 0.138c-5.836-34.821-18.412-65.879-36.393-93.049l0.553 0.889c-2.672-8.237-4.213-17.715-4.213-27.553 0-2.918 0.136-5.803 0.401-8.652l-0.027 0.365h295.68v295.68c1.37 0.053 2.978 0.084 4.594 0.084 11.101 0 21.868-1.431 32.126-4.119l-0.88 0.196c26.281-17.428 57.34-30.005 90.756-35.644l1.404-0.196c70.692 0 128 57.308 128 128s-57.308 128-128 128v0c-34.821-5.836-65.879-18.412-93.049-36.393l0.889 0.553c-8.237-2.672-17.715-4.213-27.553-4.213-2.918 0-5.803 0.136-8.652 0.401l0.365-0.027v295.68h-295.68c-0.053 1.37-0.084 2.978-0.084 4.594 0 11.101 1.431 21.868 4.119 32.126l-0.196-0.88c17.428 26.281 30.005 57.34 35.644 90.756l0.196 1.404c0.017 0.789 0.027 1.719 0.027 2.651 0 34.738-13.665 66.285-35.914 89.558l0.046-0.049c-23.224 22.202-54.77 35.867-89.509 35.867-0.932 0-1.862-0.010-2.789-0.029l0.138 0.002z" />
<glyph unicode="&#xe919;" glyph-name="right" horiz-adv-x="661" d="M638.368 393.381l-435.042-434.86c-13.855-13.932-33.037-22.554-54.232-22.554s-40.377 8.622-54.229 22.55l-72.298 72.298c-13.932 13.855-22.554 33.037-22.554 54.232s8.622 40.377 22.55 54.229l308.381 308.381-308.378 308.378c-13.932 13.855-22.554 33.037-22.554 54.232s8.622 40.377 22.55 54.229l0.003 0.003 71.976 72.795c13.855 13.932 33.037 22.554 54.232 22.554s40.377-8.622 54.229-22.55l435.045-434.726c14.1-13.896 22.836-33.203 22.836-54.549 0-21.189-8.607-40.368-22.515-54.232l-0.002-0.002z" />
<glyph unicode="&#xe91a;" glyph-name="school" horiz-adv-x="1252" d="M227.579 380.884v-227.579l398.211-217.305 398.211 217.305v227.579l-398.211-217.358zM625.789 960l-625.789-341.316 625.789-341.316 512 279.311v-393.1h113.789v455.105z" />
<glyph unicode="&#xe91b;" glyph-name="search" d="M1009.922 74.686l-199.391 199.391c-8.672 8.647-20.639 13.993-33.854 13.993-0.096 0-0.192 0-0.288-0.001h-32.577c54.858 69.783 87.982 158.908 87.982 255.769 0 229.618-186.142 415.76-415.76 415.76s-415.76-186.142-415.76-415.76c0-229.618 186.142-415.76 415.76-415.76 96.861 0 185.986 33.123 256.666 88.661l-0.897-0.679v-32.464c0-0.081-0.001-0.177-0.001-0.273 0-13.216 5.346-25.182 13.994-33.855l199.39-199.39c8.657-8.711 20.645-14.103 33.893-14.103s25.236 5.392 33.891 14.1l56.611 56.611c8.774 8.732 14.204 20.817 14.204 34.171 0 13.184-5.292 25.131-13.869 33.834l0.006-0.006zM415.973 287.984c-141.361 0-255.957 114.596-255.957 255.957s114.596 255.957 255.957 255.957c141.361 0 255.957-114.596 255.957-255.957v0c-0.049-141.325-114.626-255.872-255.957-255.872v0z" />
<glyph unicode="&#xe91c;" glyph-name="star-1" horiz-adv-x="1095" d="M264.124-64l-3.988 0.315c-45.874 4.728-81.349 43.172-81.349 89.9 0 9.949 1.608 19.523 4.579 28.476l-0.183-0.638 89.58 260.661-235.092 165.554c-19.618 13.599-33.145 34.797-36.332 59.244l-0.046 0.43c-0.823 4.244-1.294 9.125-1.294 14.115 0 0.018 0 0.036 0 0.054v-0.003c0.197 48.36 39.308 87.52 87.63 87.796h289.579l86.747 258.842c12.356 34.779 44.982 59.235 83.32 59.235 37.789 0 70.029-23.761 82.593-57.157l0.201-0.608 87.272-260.311h287.525c0.011 0 0.025 0 0.038 0 47.863 0 86.99-37.407 89.741-84.58l0.011-0.243v-3.848l-0.315-3.883c-2.124-22.565-12.304-42.418-27.594-56.944l-0.039-0.036-11.963-10.074-233.098-167.233 89.755-261.011c3.161-8.633 4.99-18.602 4.99-28.997 0-27.516-12.812-52.041-32.795-67.933l-0.177-0.136c-13.364-11.803-30.658-19.438-49.692-20.728l-0.258-0.014-3.183-0.21-3.148 0.175c-18.973 1.079-36.226 7.647-50.416 18.125l0.256-0.181-229.565 163.77-230.369-164.12c-13.682-9.851-30.475-16.214-48.672-17.473l-0.298-0.017zM812.414 19.949v-0.28zM282.243 20.124v0zM838.403 39.502v0zM139.39 536.968l258.003-181.889-97.94-285.006 247.929 176.642 247.649-176.502-97.94 284.586 254.015 182.169h-309.246l-94.442 282.243-94.722-282.243zM1004.972 536.968v0zM97.346 566.595l0.56-0.42z" />
<glyph unicode="&#xe91d;" glyph-name="star" horiz-adv-x="1103" d="M1060.923 605.515h-362.082l-110.034 328.386c-5.769 15.366-20.337 26.102-37.413 26.102s-31.644-10.737-37.322-25.828l-0.091-0.275-110.034-328.386h-364.574c-21.717-0.069-39.304-17.656-39.374-39.367v-0.007c0-0.051-0.001-0.111-0.001-0.172 0-2.3 0.268-4.537 0.775-6.682l-0.039 0.196c1.082-11.588 7.245-21.545 16.211-27.732l0.127-0.083 297.753-209.856-114.363-332.062c-1.356-3.823-2.14-8.232-2.14-12.824 0-12.816 6.104-24.206 15.563-31.422l0.096-0.070c5.913-5.322 13.556-8.829 21.991-9.588l0.147-0.011c9.263 0.701 17.658 3.918 24.649 8.961l-0.142-0.098 290.483 207.038 290.483-207.038c6.807-5.047 15.229-8.284 24.374-8.857l0.132-0.007c8.688 0.56 16.438 4.176 22.272 9.773l-0.012-0.012c9.602 7.187 15.75 18.533 15.75 31.315 0 4.66-0.817 9.13-2.316 13.273l0.086-0.272-114.159 331.898 295.139 211.694 7.148 6.167c7.108 6.72 11.823 15.905 12.772 26.182l0.012 0.163c-1.204 22.063-19.388 39.497-41.643 39.497-0.078 0-0.156 0-0.234-0.001h0.012z" />
<glyph unicode="&#xe91e;" glyph-name="thumbs-up" horiz-adv-x="910" d="M662.613 598.059c-7.552 20.181 201.344 206.72 79.531 357.888-28.501 35.328-125.227-169.259-262.528-261.845-75.776-51.2-252.075-159.872-252.075-219.989v-389.461c0-72.32 279.552-148.864 491.989-148.864 77.867 0 190.677 487.851 190.677 565.333s-240.128 76.459-247.467 96.725zM170.624 592.64c-0.681 0.010-1.486 0.016-2.292 0.016-93.126 0-168.619-75.493-168.619-168.619 0-3.187 0.088-6.354 0.263-9.498l-0.019 0.437v-275.797c-0.161-2.71-0.252-5.878-0.252-9.068 0-90.015 72.972-162.987 162.987-162.987 2.79 0 5.564 0.070 8.32 0.209l-0.387-0.016c37.376 0-56.875 32.555-56.875 128.555v362.667c0 100.565 94.251 134.187 56.875 134.187z" />
<glyph unicode="&#xe91f;" glyph-name="time" d="M511.488 960c-282.55-0.292-511.488-229.41-511.488-512 0-282.77 229.23-512 512-512s512 229.23 512 512v0c0 0.076 0 0.166 0 0.257 0 282.628-229.116 511.744-511.744 511.744-0.27 0-0.54 0-0.81-0.001h0.042zM512 38.4c-226.216 0-409.6 183.384-409.6 409.6s183.384 409.6 409.6 409.6c226.216 0 409.6-183.384 409.6-409.6v0c0-226.216-183.384-409.6-409.6-409.6v0zM537.6 704h-76.8v-307.2l268.8-161.28 38.4 63.147-230.4 136.533z" />
<glyph unicode="&#xe920;" glyph-name="top" d="M563.115 736.768l407.851-408.107c13.137-12.992 21.272-31.018 21.272-50.943 0-19.756-7.997-37.645-20.932-50.605l-68.138-68.138c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l-289.532 289.788-289.195-289.195c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l0.004-0.004-0.213 0.299-68.267 67.499c-13.075 12.989-21.168 30.978-21.168 50.859 0 19.71 7.956 37.563 20.831 50.521l408.231 408.316c13.040 13.276 31.18 21.503 51.243 21.503 19.596 0 37.358-7.849 50.315-20.575l-0.011 0.010z" />
<glyph unicode="&#xe921;" glyph-name="trophy" horiz-adv-x="1152" d="M1104.017 831.982h-207.987v80.017c0 26.51-21.491 48.001-48.001 48.001v0h-544.040c-26.51 0-48.001-21.491-48.001-48.001v0-80.017h-207.987c-26.51 0-48.001-21.491-48.001-48.001v0-111.986c7.076-85.462 54.363-158.548 122.682-200.96l1.112-0.643c61.778-44.226 136.678-74.099 217.854-83.23l2.133-0.195c34.389-59.486 80.159-108.69 134.709-145.998l1.518-0.98v-144.002h-96.001c-3.854 0.457-8.318 0.718-12.843 0.718-62.746 0-113.776-50.163-115.172-112.574l-0.002-0.13v-24c0-13.255 10.745-24 24-24v0h592.041c13.255 0 24 10.745 24 24v0 24c-1.399 62.54-52.429 112.704-115.175 112.704-4.525 0-8.989-0.261-13.378-0.768l0.535 0.050h-96.001v144.002c56.068 38.356 101.826 87.64 135.041 145.086l1.137 2.132c83.314 9.166 158.252 38.973 221.451 84.147l-1.416-0.962c69.366 43.121 116.621 116.171 123.729 200.646l0.065 0.957v111.986c0 26.51-21.491 48.001-48.001 48.001v0zM198.627 574.41c-35.829 20.914-61.682 55.601-70.437 96.621l-0.172 0.964v32.016h128.402c1.638-61.997 10.873-121.145 26.808-177.479l-1.223 5.061c-31.815 11.002-59.407 25.499-84.329 43.47l0.951-0.653zM1024 671.995c-9.695-41.665-35.309-76.091-69.932-97.202l-0.677-0.383c-24.040-17.319-51.713-31.817-81.346-42.129l-2.271-0.688c14.711 51.273 23.946 110.421 25.564 171.467l0.020 0.952h128.594z" />
<glyph unicode="&#xe922;" glyph-name="sort-decrease" d="M482.987 159.915h115.371c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-115.371c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM244.395 842.923c-5.317 5.071-12.534 8.192-20.48 8.192s-15.163-3.121-20.492-8.203l0.012 0.011-143.701-173.056c-5.035-5.211-8.137-12.317-8.137-20.148 0-15.764 12.572-28.592 28.237-29.003l0.038-0.001h86.357v-548.181c0-0.001 0-0.001 0-0.002 0-15.835 12.837-28.672 28.672-28.672 0.12 0 0.24 0.001 0.36 0.002h57.326c0.101-0.001 0.221-0.002 0.341-0.002 15.835 0 28.672 12.837 28.672 28.672 0 0.001 0 0.001 0 0.002v0 546.133h86.357c0.001 0 0.001 0 0.002 0 15.835 0 28.672 12.837 28.672 28.672 0 0.12-0.001 0.24-0.002 0.36v-0.018c-0.093 7.822-3.197 14.902-8.203 20.15l0.011-0.012zM482.987 620.715h345.771c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-345.771c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM482.987 390.315h230.741c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-230.741c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM482.987 851.115h461.141c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-461.141c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672z" />
<glyph unicode="&#xe923;" glyph-name="sort-add" d="M482.987 851.115h115.371c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-115.371c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM482.987 620.715h230.741c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-230.741c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM482.987 159.915h461.141c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-461.141c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM482.987 390.315h345.771c15.835 0 28.672-12.837 28.672-28.672v-58.027c0-15.835-12.837-28.672-28.672-28.672h-345.771c-15.835 0-28.672 12.837-28.672 28.672v58.027c0 15.835 12.837 28.672 28.672 28.672zM367.957 275.285h-86.357v548.181c0 0.001 0 0.001 0 0.002 0 15.835-12.837 28.672-28.672 28.672-0.12 0-0.24-0.001-0.36-0.002h-57.326c-0.101 0.001-0.221 0.002-0.341 0.002-15.835 0-28.672-12.837-28.672-28.672 0-0.001 0-0.001 0-0.002v0-546.133h-86.357c-15.876-0.193-28.672-13.108-28.672-29.011 0-0.001 0-0.001 0-0.002v0c0-0.005 0-0.011 0-0.017 0-7.894 3.268-15.026 8.526-20.114l0.008-0.007 145.067-175.104c5.264-5.050 12.423-8.16 20.309-8.16s15.045 3.11 20.319 8.169l-0.010-0.010 144.043 173.056c5.21 5.192 8.433 12.374 8.433 20.309s-3.223 15.117-8.432 20.309l-0.001 0.001c-5.098 5.284-12.242 8.566-20.153 8.566-0.475 0-0.948-0.012-1.417-0.035l0.066 0.003z" />
<glyph unicode="&#xe924;" glyph-name="expand" d="M769.024 444.928c-28.277 0-51.2-22.923-51.2-51.2v0-266.581c-0.191-20.659-16.888-37.355-37.528-37.547h-489.149c-20.736 0-37.547 16.81-37.547 37.547v0 489.131c0.571 20.291 17.156 36.523 37.533 36.523 0.005 0 0.010 0 0.015 0h266.581c28.277 0 51.2 22.923 51.2 51.2s-22.923 51.2-51.2 51.2v0h-266.581c-77.212-0.194-139.753-62.734-139.947-139.928v-488.126c0.194-77.212 62.734-139.753 139.928-139.947h489.15c76.772 0.771 138.733 63.091 138.923 139.928v266.599c0 0.003 0 0.007 0 0.010 0 27.917-22.343 50.615-50.122 51.189l-0.054 0.001zM969.045 876.373v0c-5.53 12.604-15.385 22.459-27.646 27.855l-0.344 0.135c-5.708 2.654-12.373 4.272-19.397 4.436l-0.059 0.001h-266.581c-28.277 0-51.2-22.923-51.2-51.2s22.923-51.2 51.2-51.2v0h143.019l-401.408-401.408c-9.335-9.225-15.116-22.028-15.116-36.181s5.781-26.956 15.111-36.176l0.005-0.005c9.263-9.252 22.054-14.974 36.181-14.974s26.918 5.722 36.182 14.974l401.407 401.407v-143.019c0-28.277 22.923-51.2 51.2-51.2s51.2 22.923 51.2 51.2v0 266.581c-0.029 6.778-1.406 13.226-3.877 19.101l0.122-0.328z" />
<glyph unicode="&#xe925;" glyph-name="sex-female" d="M793.941 584.533c3.545 16.844 5.574 36.198 5.574 56.026 0 157.031-127.299 284.331-284.331 284.331-142.597 0-260.676-104.971-281.179-241.856l-0.192-1.562c-2.833-14.767-4.453-31.752-4.453-49.114 0-53.505 15.388-103.416 41.981-145.548l-0.664 1.126c41.637-71.349 112.064-122.023 194.943-136.296l1.665-0.237v-74.069h-149.845c-0.607 0.027-1.319 0.043-2.035 0.043-26.769 0-48.469-21.7-48.469-48.469 0-8.664 2.273-16.798 6.256-23.836l-0.126 0.241c8.178-14.971 23.811-24.956 41.777-24.956 0.673 0 1.343 0.014 2.009 0.042l-0.095-0.003h153.941v-57.344c0-32.085 0-64.512 0-96.597 0-0.060 0-0.132 0-0.203 0-13.24 5.346-25.231 13.997-33.932l-0.002 0.002c8.546-9.046 20.625-14.677 34.019-14.677 0.040 0 0.080 0 0.121 0h-0.006c0.001 0 0.003 0 0.005 0 26.529 0 48.080 21.313 48.464 47.75v0.036c0 22.869 0 45.739 0 68.267v87.381h153.259c0.924-0.164 1.987-0.258 3.072-0.258s2.148 0.094 3.182 0.274l-0.11-0.016c25.517 1.545 45.626 22.617 45.626 48.386 0 14.226-6.129 27.021-15.89 35.888l-0.040 0.036c-8.301 7.658-19.435 12.353-31.666 12.353-0.868 0-1.73-0.024-2.587-0.070l0.119 0.005c-36.523 0-72.704 0-109.227 0h-44.373v75.776c115.769 23.213 205.016 114.415 225.036 229.387l0.244 1.695zM704.171 635.733c0.001-0.273 0.002-0.597 0.002-0.92 0-51.896-21.29-98.82-55.611-132.513l-0.028-0.028c-34.195-34.070-81.368-55.135-133.461-55.135s-99.267 21.064-133.467 55.14l0.006-0.006c-34.070 34.195-55.135 81.368-55.135 133.461s21.064 99.267 55.14 133.467l-0.006-0.006c33.592 33.54 79.971 54.282 131.195 54.282 0.677 0 1.353-0.004 2.028-0.011l-0.103 0.001c0.001 0 0.002 0 0.003 0 103.888 0 188.173-83.927 188.754-187.678v-0.055z" />
<glyph unicode="&#xe926;" glyph-name="sex-male" d="M565.248 556.885v189.781l137.899-138.24c2.383-2.598 5.074-4.855 8.030-6.731l0.162-0.096c7.571-5.13 16.909-8.19 26.961-8.19 3.507 0 6.926 0.372 10.221 1.080l-0.318-0.057c13.076 2.557 24.025 10.155 30.95 20.643l0.111 0.179c5.394 7.775 8.618 17.412 8.618 27.801 0 14.575-6.344 27.668-16.42 36.669l-0.048 0.042-219.819 219.819c-1.695 2.13-3.484 4.027-5.418 5.765l-0.043 0.038c-8.628 7.35-19.905 11.822-32.226 11.822-1.633 0-3.248-0.079-4.841-0.232l0.203 0.016c-13.699-0.917-25.744-7.317-34.079-17.002l-0.054-0.064-216.405-216.405c-3.559-3.176-6.796-6.522-9.776-10.089l-0.122-0.151c-5.953-8.072-9.528-18.216-9.528-29.195 0-14.889 6.574-28.242 16.978-37.315l0.059-0.050c8.443-7.322 19.539-11.784 31.678-11.784 1.465 0 2.915 0.065 4.347 0.192l-0.185-0.013c13.664 0.478 25.785 6.705 34.082 16.323l0.051 0.061 136.533 136.533v-190.805c-137.566-25.119-240.475-144.041-240.475-286.998 0-144.662 105.377-264.711 243.558-287.575l1.695-0.232c14.016-2.329 30.205-3.692 46.701-3.754h0.062c160.99 0 291.499 130.508 291.499 291.499 0 142.407-102.118 260.963-237.121 286.436l-1.813 0.284zM671.744 156.843l-13.312-16.725-7.509-9.216c-34.834-35.13-83.115-56.879-136.476-56.879-47.528 0-91.026 17.254-124.572 45.84l0.27-0.224c-43.547 33.976-71.285 86.461-71.285 145.424 0 21.257 3.605 41.672 10.237 60.666l-0.392-1.29c20.237 73.614 82.804 128.246 159.267 136.462l0.818 0.071h51.883c94.474-13.866 166.186-94.355 166.186-191.594 0-41.636-13.148-80.202-35.519-111.771l0.405 0.602z" />
</font></defs></svg>
PAMapp/assets/icon/fonts/icomoon.ttf
Binary files differ
PAMapp/assets/icon/fonts/icomoon.woff
Binary files differ
PAMapp/assets/icon/selection.json
@@ -1 +1 @@
{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M587.199 55.924l-55.924-55.924h-279.618l-55.924 55.924h-195.733v111.847h782.932v-111.847z","M33.107 870.508c1.405 85.070 70.697 153.493 155.97 153.493 0.217 0 0.434-0 0.65-0.001l-0.034 0h403.396c0.182 0.001 0.398 0.001 0.614 0.001 85.338 0 154.671-68.528 155.971-153.557l0.001-0.122v-647.895h-716.569zM144.954 332.112h493.023v538.023c-0.295 24.483-20.211 44.217-44.736 44.217-0.001 0-0.002-0-0.003-0l-403.21 0c-0.101 0.001-0.22 0.001-0.34 0.001-24.499 0-44.399-19.692-44.735-44.112l-0-0.032z","M288.939 834.903c30.886 0 55.924-25.038 55.924-55.924v0-316.901c0-30.886-25.038-55.924-55.924-55.924s-55.924 25.038-55.924 55.924v0 316.901c0 30.886 25.038 55.924 55.924 55.924v0z","M493.993 834.903c30.886 0 55.924-25.038 55.924-55.924v0-316.901c0-30.886-25.038-55.924-55.924-55.924s-55.924 25.038-55.924 55.924v0 316.901c0 30.886 25.038 55.924 55.924 55.924v0z"],"attrs":[{},{},{},{}],"width":783,"grid":0,"tags":["delet"],"isMulticolor":false,"isMulticolor2":false},"attrs":[{},{},{},{}],"properties":{"order":38,"id":33,"name":"delet","prevSize":32,"code":59680},"setIdx":0,"setId":0,"iconIdx":0},{"icon":{"paths":["M563.115 223.232l407.851 408.107c13.137 12.992 21.272 31.018 21.272 50.943 0 19.756-7.997 37.645-20.932 50.605l0.001-0.001-68.139 68.139c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l0.004 0.004-289.536-289.792-289.195 289.195c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l0.004 0.004-0.213-0.299-68.267-67.499c-13.075-12.989-21.168-30.978-21.168-50.859 0-19.71 7.956-37.563 20.831-50.521l-0.004 0.004 408.235-408.32c13.040-13.276 31.18-21.503 51.243-21.503 19.596 0 37.358 7.849 50.315 20.575l-0.011-0.010z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["top"]},"attrs":[{}],"properties":{"order":37,"id":32,"name":"top","prevSize":32,"code":59679},"setIdx":0,"setId":0,"iconIdx":1},{"icon":{"paths":["M384 0c-0.789-0.017-1.719-0.027-2.651-0.027-34.738 0-66.285 13.665-89.558 35.914l0.049-0.046c-22.202 23.224-35.867 54.77-35.867 89.509 0 0.932 0.010 1.862 0.029 2.789l-0.002-0.138c5.836 34.821 18.412 65.879 36.393 93.049l-0.553-0.889c2.672 8.237 4.213 17.715 4.213 27.553 0 2.918-0.136 5.803-0.401 8.652l0.027-0.365h-295.68v768h295.68c0.053-1.37 0.084-2.978 0.084-4.594 0-11.101-1.431-21.868-4.119-32.126l0.196 0.88c-17.428-26.281-30.005-57.34-35.644-90.756l-0.196-1.404c-0.017-0.789-0.027-1.719-0.027-2.651 0-34.738 13.665-66.285 35.914-89.558l-0.046 0.049c23.224-22.202 54.77-35.867 89.509-35.867 0.932 0 1.862 0.010 2.789 0.029l-0.138-0.002c0.789-0.017 1.719-0.027 2.651-0.027 34.738 0 66.285 13.665 89.558 35.914l-0.049-0.046c22.202 23.224 35.867 54.77 35.867 89.509 0 0.932-0.010 1.862-0.029 2.789l0.002-0.138c-5.836 34.821-18.412 65.879-36.393 93.049l0.553-0.889c-2.672 8.237-4.213 17.715-4.213 27.553 0 2.918 0.136 5.803 0.401 8.652l-0.027-0.365h295.68v-295.68c1.37-0.053 2.978-0.084 4.594-0.084 11.101 0 21.868 1.431 32.126 4.119l-0.88-0.196c26.281 17.428 57.34 30.005 90.756 35.644l1.404 0.196c70.692 0 128-57.308 128-128s-57.308-128-128-128v0c-34.821 5.836-65.879 18.412-93.049 36.393l0.889-0.553c-8.237 2.672-17.715 4.213-27.553 4.213-2.918 0-5.803-0.136-8.652-0.401l0.365 0.027v-295.68h-295.68c-0.053-1.37-0.084-2.978-0.084-4.594 0-11.101 1.431-21.868 4.119-32.126l-0.196 0.88c17.428-26.281 30.005-57.34 35.644-90.756l0.196-1.404c0.017-0.789 0.027-1.719 0.027-2.651 0-34.738-13.665-66.285-35.914-89.558l0.046 0.049c-23.224-22.202-54.77-35.867-89.509-35.867-0.932 0-1.862 0.010-2.789 0.029l0.138-0.002z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["puzzle"]},"attrs":[{}],"properties":{"order":35,"id":31,"name":"puzzle","prevSize":32,"code":59678},"setIdx":0,"setId":0,"iconIdx":2},{"icon":{"paths":["M563.115 854.229l407.851-408.107c13.086-12.984 21.186-30.975 21.186-50.858 0-19.714-7.963-37.568-20.848-50.521l0.003 0.003-68.139-68.139c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l0.004-0.004-289.536 289.621-289.195-289.195c-13.008-13.118-31.038-21.24-50.965-21.24-19.778 0-37.688 8.001-50.669 20.943l0.002-0.002-0.299 0.299-67.968 67.499c-13.075 12.989-21.168 30.978-21.168 50.859 0 19.71 7.956 37.563 20.831 50.521l-0.004-0.004 408.235 408.32c13.040 13.276 31.18 21.503 51.243 21.503 19.596 0 37.358-7.849 50.315-20.575l-0.011 0.010z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["down"]},"attrs":[{}],"properties":{"order":5,"id":30,"name":"down","prevSize":32,"code":59648},"setIdx":0,"setId":0,"iconIdx":3},{"icon":{"paths":["M944.305 432.195h-352.501v-352.501c-0.083-44.019-35.777-79.674-79.803-79.695l-0.002-0c-43.994 0.083-79.632 35.735-79.695 79.725l-0 0.006v352.464h-352.537c-44.055 0-79.768 35.713-79.768 79.768s35.713 79.768 79.768 79.768v0h352.501v352.574c0 44.055 35.713 79.768 79.768 79.768s79.768-35.713 79.768-79.768l-0 0v-352.574h352.501c44.055 0 79.768-35.713 79.768-79.768s-35.713-79.768-79.768-79.768l0 0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["add"]},"attrs":[{}],"properties":{"order":6,"id":29,"name":"add","prevSize":32,"code":59649},"setIdx":0,"setId":0,"iconIdx":4},{"icon":{"paths":["M358.4 0c-0.076-0-0.166-0-0.256-0-197.797 0-358.144 160.347-358.144 358.144 0 0.090 0 0.18 0 0.27l-0-0.014c0 268.8 358.4 665.6 358.4 665.6s358.4-396.8 358.4-665.6c0-0.076 0-0.166 0-0.256 0-197.797-160.347-358.144-358.144-358.144-0.090 0-0.18 0-0.27 0l0.014-0zM358.4 486.4c-70.692 0-128-57.308-128-128s57.308-128 128-128c70.692 0 128 57.308 128 128v0c0 70.692-57.308 128-128 128h0z"],"attrs":[{}],"width":717,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["address"]},"attrs":[{}],"properties":{"order":11,"id":28,"name":"address","prevSize":32,"code":59650},"setIdx":0,"setId":0,"iconIdx":5},{"icon":{"paths":["M447.993 511.981c141.38 0 255.991-114.611 255.991-255.991s-114.611-255.991-255.991-255.991c-141.38 0-255.991 114.611-255.991 255.991v-0c0 141.38 114.611 255.991 255.991 255.991v-0zM639.585 577.164l-95.609 382.81-63.988-272.006 63.988-111.998h-191.965l63.988 111.998-63.988 272.006-95.609-382.773c-142.815 6.542-256.155 123.796-256.401 267.577l-0 0.024v179.197h895.986v-179.197c-0.246-143.806-113.586-261.059-255.814-267.58l-0.587-0.021z"],"attrs":[{}],"width":896,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["agent"]},"attrs":[{}],"properties":{"order":13,"id":27,"name":"agent","prevSize":32,"code":59651},"setIdx":0,"setId":0,"iconIdx":6},{"icon":{"paths":["M889.022 7.054l-831.526 383.772c-34.358 15.411-57.857 49.317-57.857 88.711 0 53.291 43.002 96.539 96.2 96.936l0.038 0h351.649v351.801c0.219 53.372 43.536 96.553 96.938 96.553 39.559 0 73.583-23.696 88.654-57.668l0.245-0.618 383.621-831.564c3.826-10.169 6.041-21.922 6.041-34.192 0-55.109-44.674-99.783-99.783-99.783-12.281 0-24.044 2.219-34.909 6.277l0.689-0.226z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["arrow"]},"attrs":[{}],"properties":{"order":14,"id":26,"name":"arrow","prevSize":32,"code":59652},"setIdx":0,"setId":0,"iconIdx":7},{"icon":{"paths":["M448.963 503.181c138.95 0 251.59-112.641 251.59-251.59s-112.641-251.59-251.59-251.59v-0c-138.95 0-251.59 112.641-251.59 251.59s112.641 251.59 251.59 251.59v0zM448.963 119.488v0c72.958-0 132.103 59.144 132.103 132.103s-59.144 132.103-132.103 132.103c-72.958 0-132.103-59.144-132.103-132.103 0-0.013 0-0.026 0-0.039l-0 0.002c-0-72.938 59.128-132.065 132.065-132.065 0.013 0 0.026 0 0.039 0l-0.002-0z","M448.963 566.069c-167.938 0-448.963 50.013-448.963 217.355v240.576h893.721v-240.576c0-167.305-276.82-217.355-444.758-217.355zM774.233 904.475h-654.931v-121.051c0-40.263 142.671-97.83 329.475-97.83v0c186.804 0 325.27 57.567 325.27 97.83z"],"attrs":[{},{}],"width":894,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["avatar"]},"attrs":[{},{}],"properties":{"order":15,"id":25,"name":"avatar","prevSize":32,"code":59653},"setIdx":0,"setId":0,"iconIdx":8},{"icon":{"paths":["M908.486 692.817c-1.1-0.834-112.139-84.872-112.139-362.886 0-182.216-147.715-329.931-329.931-329.931s-329.931 147.715-329.931 329.931v0c0 278.014-111.039 362.052-111.191 362.242-15.359 10.347-25.326 27.674-25.326 47.328 0 31.414 25.465 56.881 56.878 56.885l819.14 0c25.031-0.194 46.179-16.601 53.474-39.229l0.112-0.401c1.696-5.184 2.675-11.15 2.675-17.344 0-19.089-9.291-36.008-23.598-46.482l-0.162-0.113zM174.901 682.616c47.923-94.131 76-205.282 76-322.99 0-10.443-0.221-20.835-0.659-31.17l0.050 1.475c0-119.383 96.779-216.162 216.162-216.162s216.162 96.779 216.162 216.162l0 0c-0.387 8.856-0.608 19.244-0.608 29.684 0 117.708 28.062 228.862 77.862 327.136l-1.9-4.135z","M573.853 872.459c-8.181-4.825-18.026-7.675-28.536-7.675-20.904 0-39.175 11.276-49.061 28.077l-0.145 0.266c-6.013 10.266-16.989 17.051-29.55 17.051-6.311 0-12.222-1.713-17.293-4.699l0.16 0.087c-5.181-3.025-9.376-7.22-12.314-12.241l-0.086-0.16c-10.022-17.142-28.338-28.474-49.3-28.474-31.434 0-56.916 25.482-56.916 56.916 0 10.472 2.828 20.283 7.762 28.711l-0.145-0.269c26.074 44.41 73.596 73.753 127.972 73.753s101.897-29.344 127.594-73.059l0.377-0.694c4.808-8.17 7.648-17.998 7.648-28.489 0-20.831-11.197-39.047-27.901-48.958l-0.263-0.144z"],"attrs":[{},{}],"width":932,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["bell"]},"attrs":[{},{}],"properties":{"order":16,"id":24,"name":"bell","prevSize":32,"code":59654},"setIdx":0,"setId":0,"iconIdx":9},{"icon":{"paths":["M307.2 460.8h-102.4v102.4h102.4zM512 460.8h-102.4v102.4h102.4zM716.8 460.8h-102.4v102.4h102.4zM819.2 102.4h-51.2v-102.4h-102.4v102.4h-409.6v-102.4h-102.4v102.4h-51.2c-56.277 0.024-101.889 45.651-101.889 101.931 0 0.165 0 0.33 0.001 0.495l-0-0.025-0.512 716.8c0 56.554 45.846 102.4 102.4 102.4v0h716.8c56.486-0.169 102.231-45.914 102.4-102.384l0-0.016v-716.8c-0.169-56.486-45.914-102.231-102.384-102.4l-0.016-0zM819.2 921.6h-716.8v-563.2h716.8z"],"attrs":[{}],"width":922,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["calender"]},"attrs":[{}],"properties":{"order":17,"id":23,"name":"calender","prevSize":32,"code":59655},"setIdx":0,"setId":0,"iconIdx":10},{"icon":{"paths":["M910.222 113.778v796.444h-796.444v-796.444h796.444zM910.222 0h-796.444c-62.76 0.193-113.584 51.018-113.778 113.759l-0 0.019v796.444c0.193 62.76 51.018 113.584 113.759 113.778l0.019 0h796.444c62.76-0.193 113.584-51.018 113.778-113.759l0-0.019v-796.444c-0.193-62.76-51.018-113.584-113.759-113.778l-0.019-0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["checkbox"]},"attrs":[{}],"properties":{"order":18,"id":22,"name":"checkbox","prevSize":32,"code":59656},"setIdx":0,"setId":0,"iconIdx":11},{"icon":{"paths":["M910.222 0h-796.444c-62.838 0-113.778 50.94-113.778 113.778v0 796.444c0 62.838 50.94 113.778 113.778 113.778v0h796.444c62.838 0 113.778-50.94 113.778-113.778v0-796.444c0-62.838-50.94-113.778-113.778-113.778v0zM398.222 796.444l-284.444-284.444 80.213-80.213 204.231 203.662 431.787-431.787 80.213 80.782z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["checkbox-1"]},"attrs":[{}],"properties":{"order":19,"id":21,"name":"checkbox-1","prevSize":32,"code":59657},"setIdx":0,"setId":0,"iconIdx":12},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512v0c0 282.77-229.23 512-512 512h-0zM276.821 547.072l279.723 279.723c8.937 8.992 21.312 14.557 34.987 14.557s26.050-5.565 34.984-14.554l0.002-0.002 35.115-35.115c8.992-8.937 14.557-21.312 14.557-34.987s-5.565-26.050-14.554-34.984l-0.002-0.002-209.749-209.749 209.749-209.749c8.992-8.937 14.557-21.312 14.557-34.987s-5.565-26.050-14.554-34.984l-0.002-0.002-35.115-35.115c-8.937-8.992-21.312-14.557-34.987-14.557s-26.050 5.565-34.984 14.554l-0.002 0.002-279.723 279.765c-8.993 8.976-14.557 21.385-14.557 35.093s5.564 26.118 14.556 35.093l0.001 0.001z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circle-left"]},"attrs":[{}],"properties":{"order":20,"id":20,"name":"circle-left","prevSize":32,"code":59658},"setIdx":0,"setId":0,"iconIdx":13},{"icon":{"paths":["M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512v0c0 282.77 229.23 512 512 512v0zM747.136 547.115l-279.723 279.723c-8.937 8.992-21.312 14.557-34.987 14.557s-26.050-5.565-34.984-14.554l-0.002-0.002-35.115-35.115c-8.992-8.937-14.557-21.312-14.557-34.987s5.565-26.050 14.554-34.984l0.002-0.002 209.749-209.749-209.792-209.792c-8.992-8.937-14.557-21.312-14.557-34.987s5.565-26.050 14.554-34.984l0.002-0.002 35.115-35.115c8.937-8.992 21.312-14.557 34.987-14.557s26.050 5.565 34.984 14.554l0.002 0.002 279.723 279.723c9.019 8.98 14.6 21.406 14.6 35.136 0 13.709-5.564 26.118-14.556 35.093l-0.001 0.001z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circle-right"]},"attrs":[{}],"properties":{"order":21,"id":19,"name":"circle-right","prevSize":32,"code":59659},"setIdx":0,"setId":0,"iconIdx":14},{"icon":{"paths":["M843.123 30.996l-331.098 331.098-331.098-331.098c-19.185-19.146-45.668-30.985-74.916-30.985s-55.731 11.839-74.918 30.987l0.002-0.002c-19.117 19.18-30.937 45.643-30.937 74.868s11.82 55.687 30.94 74.87l-0.003-0.003 331.050 331.098-331.050 331.244c-19.191 19.173-31.063 45.67-31.063 74.94 0 58.504 47.427 105.93 105.93 105.93 29.234 0 55.702-11.842 74.868-30.991l-0.001 0.001 331.098-331.098 331.196 331.147c19.046 18.46 45.049 29.839 73.71 29.839 58.521 0 105.961-47.44 105.961-105.961 0-28.661-11.379-54.663-29.865-73.737l0.027 0.028-331.196-331.196 331.098-331.098c18.46-19.046 29.839-45.049 29.839-73.71 0-58.521-47.44-105.961-105.961-105.961-28.661 0-54.663 11.379-73.737 29.865l0.028-0.027z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["close"]},"attrs":[{}],"properties":{"order":22,"id":18,"name":"close","prevSize":32,"code":59660},"setIdx":0,"setId":0,"iconIdx":15},{"icon":{"paths":["M895.851 0h-767.872c-70.681 0-127.979 57.298-127.979 127.979v0 575.904c0 70.681 57.298 127.979 127.979 127.979v0h191.968v167.993c-0 0.025-0 0.056-0 0.086 0 13.288 10.772 24.060 24.060 24.060 5.399 0 10.382-1.778 14.397-4.781l-0.063 0.045 249.558-187.403h287.952c70.681 0 127.979-57.298 127.979-127.979v0-575.904c0-70.681-57.298-127.979-127.979-127.979l0 0zM604.699 575.904h-371.821v-127.979h371.821zM791.42 296.697h-558.84v-127.979h558.84z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["comment"]},"attrs":[{}],"properties":{"order":23,"id":17,"name":"comment","prevSize":32,"code":59661},"setIdx":0,"setId":0,"iconIdx":16},{"icon":{"paths":["M646.741 485.035v-323.371l-161.707-161.664-161.664 161.664v107.819h-323.371v754.517h970.112v-538.965zM215.595 916.224h-107.819v-107.819h107.819zM215.595 700.629h-107.819v-107.776h107.819zM215.595 485.035h-107.819v-107.776h107.819zM538.965 916.181h-107.819v-107.776h107.776zM538.965 700.587h-107.819v-107.733h107.776zM538.965 484.992h-107.819v-107.733h107.776zM538.965 269.397h-107.819v-107.733h107.776zM862.336 916.139h-107.819v-107.733h107.776zM862.336 700.544h-107.819v-107.691h107.776z"],"attrs":[{}],"width":970,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["company"]},"attrs":[{}],"properties":{"order":7,"id":16,"name":"company","prevSize":32,"code":59662},"setIdx":0,"setId":0,"iconIdx":17},{"icon":{"paths":["M864 0c88.366 0 160 71.634 160 160 0 36.2-12.022 69.593-32.292 96.402l0.292-0.402-64 64-224-224 64-64c26.324-19.976 59.637-32 95.758-32 0.085 0 0.17 0 0.255 0l-0.013-0zM64 736l-64 288 288-64 592.171-592-224.171-224.128zM715.563 363.563l-448 448-55.168-55.125 448-448z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["edit"]},"attrs":[{}],"properties":{"order":8,"id":14,"name":"edit","prevSize":32,"code":59663},"setIdx":0,"setId":0,"iconIdx":18},{"icon":{"paths":["M1343.806 478.457c-9.762-19.575-244.11-478.457-667.948-478.457s-658.136 458.883-667.948 478.457c-4.994 9.78-7.92 21.332-7.92 33.568s2.926 23.787 8.117 33.994l-0.197-0.427c10.013 19.575 244.11 478.407 667.948 478.407s658.186-458.832 667.948-478.407c4.994-9.78 7.92-21.332 7.92-33.568s-2.926-23.787-8.117-33.994l0.197 0.427zM675.858 873.96c-272.446 0-457.030-266.138-514.553-361.809 57.523-95.671 242.107-361.809 514.553-361.809s457.13 266.288 514.553 361.809c-57.523 95.521-242.157 361.659-514.553 361.659z","M675.858 211.619c-165.896 0-300.381 134.485-300.381 300.381s134.485 300.381 300.381 300.381c165.896 0 300.381-134.485 300.381-300.381v0c-0.199-165.816-134.565-300.182-300.362-300.381l-0.020-0zM675.858 662.191c-82.948 0-150.191-67.243-150.191-150.191s67.243-150.191 150.191-150.191c82.948 0 150.191 67.243 150.191 150.191v0c0 82.948-67.243 150.191-150.191 150.191v0z"],"attrs":[{},{}],"width":1352,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["eye"]},"attrs":[{},{}],"properties":{"order":34,"id":13,"name":"eye","prevSize":32,"code":59664},"setIdx":0,"setId":0,"iconIdx":19},{"icon":{"paths":["M1123.235 921.346l-217.634-208.847c5.132 1.805 11.050 2.848 17.211 2.848 15.851 0 30.089-6.902 39.875-17.864l0.046-0.052c37.481-38.161 71.036-80.412 99.866-125.951l1.835-3.103c5.666-8.976 9.029-19.899 9.029-31.606 0-11.056-2.999-21.412-8.227-30.299l0.153 0.28c-7.952-13.359-194.813-327.802-528.499-327.802h-1.312c-35.996 0.005-71.127 3.696-105.040 10.716l3.34-0.578c-18.092 3.787-32.895 15.391-40.954 31.036l-0.156 0.333-212.306-203.798c-10.7-10.287-25.264-16.622-41.308-16.622-32.938 0-59.64 26.702-59.64 59.64 0 16.894 7.024 32.148 18.312 42.999l0.020 0.019 162.768 156.208c-5.287 1.648-9.884 3.809-14.111 6.501l0.235-0.14c-95.97 62.868-175.328 142.911-235.543 236.445l-1.89 3.135c-5.835 9.056-9.303 20.115-9.303 31.985 0 11.035 2.997 21.371 8.222 30.236l-0.152-0.279c7.952 13.359 194.813 327.802 529.175 327.802 107.604-0.9 207.542-32.95 291.456-87.555l-2.1 1.281c1.312-0.835 2.385-1.908 3.618-2.863l210.398 201.929c10.7 10.287 25.264 16.622 41.308 16.622 32.938 0 59.64-26.702 59.64-59.64 0-16.894-7.024-32.148-18.312-42.999l-0.020-0.019zM536.729 298.223c210.716 0 354.679 168.573 405.529 238.546-20.464 28.603-41.631 53.756-64.584 77.15l0.097-0.1c-10.193 10.583-16.471 24.997-16.471 40.878 0 6.315 0.993 12.399 2.831 18.103l-0.116-0.417-385.213-369.747c17.213-2.809 37.053-4.414 57.267-4.414 0.232 0 0.464 0 0.696 0.001l-0.036-0zM480.591 505.758c6.937-5.309 12.58-11.943 16.621-19.556l0.156-0.323 89.972 86.354c-14.804 12.070-33.904 19.382-54.711 19.382-7.266 0-14.323-0.892-21.069-2.571l0.598 0.126c-21.583-3.776-39.081-18.284-47.003-37.713l-0.149-0.414c-0.942-3.344-1.484-7.185-1.484-11.153 0-13.911 6.658-26.266 16.961-34.054l0.107-0.078zM536.729 775.315c-210.716 0-354.4-168.215-405.211-238.546 49.32-68.027 109.037-125.034 177.432-169.904l2.551-1.571c11.947-7.883 20.761-19.68 24.668-33.535l0.101-0.418 78.482 75.301c-2.135 1.142-3.89 2.209-5.584 3.359l0.217-0.139c-39.593 30.204-64.883 77.409-64.883 130.521 0 16.497 2.44 32.424 6.979 47.441l-0.301-1.159c21.213 61.143 72.589 106.713 135.851 119.32l1.154 0.192c13.578 3.209 29.168 5.048 45.187 5.048 51.658 0 98.848-19.131 134.872-50.694l-0.235 0.202c1.923-1.788 3.692-3.67 5.327-5.665l0.080-0.1 67.389 64.686c-58.645 34.055-128.851 54.577-203.762 55.657l-0.314 0.004z"],"attrs":[{}],"width":1142,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["eye-1"]},"attrs":[{}],"properties":{"order":24,"id":12,"name":"eye-1","prevSize":32,"code":59665},"setIdx":0,"setId":0,"iconIdx":20},{"icon":{"paths":["M470.315 379.861v136.192c52.181 11.819 98.603 31.189 147.2 44.587v-136.405c-52.011-11.605-98.773-30.976-147.2-44.416zM916.907 133.888c-67.939 35.792-147.729 58.874-232.376 63.923l-1.608 0.077c-107.008-0.213-195.584-69.76-330.368-69.76-0.457-0.002-0.998-0.003-1.539-0.003-48.265 0-94.476 8.794-137.118 24.867l2.678-0.885c4.705-11.905 7.433-25.695 7.433-40.122 0-61.856-50.144-112-112-112s-112 50.144-112 112c0 37.882 18.807 71.371 47.593 91.64l0.355 0.237v772.267c-0 0.038-0 0.083-0 0.128 0 26.439 21.433 47.872 47.872 47.872 0.045 0 0.090-0 0.135-0l-0.007 0h32c0.038 0 0.083 0 0.128 0 26.439 0 47.872-21.433 47.872-47.872 0-0.045-0-0.090-0-0.135l0 0.007v-188.928c64.268-28.012 139.144-44.31 217.827-44.31 3.851 0 7.693 0.039 11.525 0.117l-0.573-0.009c107.179 0 195.584 69.589 330.368 69.589 92.324-0.765 177.356-31.352 246.099-82.581l-1.107 0.789c16.771-11.705 27.605-30.909 27.605-52.644 0-0.047-0-0.094-0-0.141l0 0.007v-486.144c-0.078-35.287-28.702-63.863-64-63.863-9.72 0-18.935 2.167-27.186 6.044l0.391-0.165zM323.157 651.008c-54.473 5.68-104.346 17.389-151.58 34.589l4.38-1.394v-140.8c42.966-16.959 92.83-29.258 144.754-34.612l2.446-0.204zM911.957 382.208c-42.344 20.263-91.614 36.787-143.125 47.106l-4.075 0.681v141.867c55.26-7.286 105.051-25.69 148.773-52.924l-1.573 0.913v140.8c-41.573 28.653-91.64 48.031-145.739 54.055l-1.461 0.132v-142.976c-14.605 2.234-31.455 3.51-48.603 3.51-35.177 0-69.1-5.37-100.994-15.334l2.396 0.645v134.912c-39.685-15.094-88.92-29.775-139.395-41.183l-7.805-1.483v-136.875c-28.906-6.694-62.098-10.532-96.186-10.532-17.976 0-35.702 1.067-53.12 3.141l2.106-0.204v-140.032c-55.565 9.583-104.997 24.104-151.88 43.532l4.68-1.718v-140.8c42.614-19.83 92.097-35.166 143.91-43.55l3.29-0.439v142.976c14.417-2.165 31.054-3.401 47.98-3.401 35.4 0 69.537 5.408 101.63 15.442l-2.41-0.649v-134.741c39.858 15.224 89.098 29.908 139.605 41.235l7.595 1.431v136.704c26.239 6.45 56.363 10.149 87.35 10.149 21.13 0 41.859-1.72 62.054-5.028l-2.204 0.298v-143.872c55.763-10.757 105.071-26.328 151.746-46.79l-4.546 1.777z"],"attrs":[{}],"width":1008,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["flag"]},"attrs":[{}],"properties":{"order":25,"id":11,"name":"flag","prevSize":32,"code":59666},"setIdx":0,"setId":0,"iconIdx":21},{"icon":{"paths":["M460.771 358.396h102.293v-102.251h-102.293zM511.917 921.749c-0.012 0-0.027 0-0.041 0-226.23 0-409.625-183.395-409.625-409.625s183.395-409.625 409.625-409.625c226.215 0 409.601 183.372 409.625 409.581l0 0.002c0 226.23-183.395 409.625-409.625 409.625v0zM511.876-0.207c-282.717 0.071-511.876 229.274-511.876 512 0 282.77 229.23 512 512 512 282.697 0 511.882-229.113 512-511.782l0-0.011c0-282.77-229.23-512-512-512v0zM460.854 768.021h102.21v-307.25h-102.21z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["information"]},"attrs":[{}],"properties":{"order":26,"id":10,"name":"information","prevSize":32,"code":59667},"setIdx":0,"setId":0,"iconIdx":22},{"icon":{"paths":["M22.52 566.594l435.159 434.886c13.85 13.942 33.032 22.572 54.23 22.572s40.38-8.63 54.226-22.567l0.004-0.004 72.291-72.291c13.931-13.855 22.553-33.035 22.553-54.23s-8.622-40.375-22.549-54.227l-0.003-0.003-308.501-308.41 308.365-308.365c13.931-13.855 22.553-33.035 22.553-54.23s-8.622-40.375-22.549-54.227l-0.003-0.003-71.973-72.792c-13.85-13.942-33.032-22.572-54.23-22.572s-40.38 8.63-54.226 22.567l-0.004 0.004-435.023 434.932c-14.154 13.904-22.927 33.246-22.927 54.637 0 21.234 8.643 40.449 22.604 54.319l0.004 0.004z"],"attrs":[{}],"width":661,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["left"]},"attrs":[{}],"properties":{"order":27,"id":9,"name":"left","prevSize":32,"code":59668},"setIdx":0,"setId":0,"iconIdx":23},{"icon":{"paths":["M558.549 0.469l-465.451-0.469c-51.358 0.145-92.954 41.74-93.099 93.085l-0 0.014v837.803c0.145 51.358 41.74 92.954 93.085 93.099l0.014 0h465.451c51.358-0.145 92.954-41.74 93.099-93.085l0-0.014v-837.803c-0.194-51.199-41.744-92.629-92.97-92.629-0.045 0-0.090 0-0.136 0l0.007-0zM558.549 837.803h-465.451v-651.605h465.451z"],"attrs":[{}],"width":652,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["phone"]},"attrs":[{}],"properties":{"order":28,"id":8,"name":"phone","prevSize":32,"code":59669},"setIdx":0,"setId":0,"iconIdx":24},{"icon":{"paths":["M638.368 566.619l-435.042 434.86c-13.855 13.932-33.037 22.554-54.232 22.554s-40.377-8.622-54.229-22.55l-0.003-0.003-72.295-72.295c-13.932-13.855-22.554-33.037-22.554-54.232s8.622-40.377 22.55-54.229l0.003-0.003 308.378-308.378-308.378-308.378c-13.932-13.855-22.554-33.037-22.554-54.232s8.622-40.377 22.55-54.229l0.003-0.003 71.976-72.795c13.855-13.932 33.037-22.554 54.232-22.554s40.377 8.622 54.229 22.55l0.003 0.003 435.042 434.723c14.1 13.896 22.836 33.203 22.836 54.549 0 21.189-8.607 40.368-22.515 54.232l-0.002 0.002z"],"attrs":[{}],"width":661,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["right"]},"attrs":[{}],"properties":{"order":29,"id":7,"name":"right","prevSize":32,"code":59670},"setIdx":0,"setId":0,"iconIdx":25},{"icon":{"paths":["M227.579 579.116v227.579l398.211 217.305 398.211-217.305v-227.579l-398.211 217.358zM625.789-0l-625.789 341.316 625.789 341.316 512-279.311v393.1h113.789v-455.105z"],"attrs":[{}],"width":1252,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["school"]},"attrs":[{}],"properties":{"order":30,"id":6,"name":"school","prevSize":32,"code":59671},"setIdx":0,"setId":0,"iconIdx":26},{"icon":{"paths":["M1009.922 885.314l-199.391-199.391c-8.672-8.647-20.639-13.993-33.854-13.993-0.096 0-0.192 0-0.288 0.001l0.015-0h-32.592c54.858-69.783 87.982-158.908 87.982-255.769 0-229.618-186.142-415.76-415.76-415.76s-415.76 186.142-415.76 415.76c0 229.618 186.142 415.76 415.76 415.76 96.861 0 185.986-33.123 256.666-88.661l-0.897 0.679v32.464c-0 0.081-0.001 0.177-0.001 0.273 0 13.216 5.346 25.182 13.994 33.855l-0.001-0.001 199.391 199.391c8.657 8.711 20.645 14.103 33.893 14.103s25.236-5.392 33.891-14.1l0.002-0.002 56.609-56.609c8.774-8.732 14.204-20.817 14.204-34.171 0-13.184-5.292-25.131-13.869-33.834l0.006 0.006zM415.973 672.016c-141.361 0-255.957-114.596-255.957-255.957s114.596-255.957 255.957-255.957c141.361 0 255.957 114.596 255.957 255.957v0c-0.049 141.325-114.626 255.872-255.957 255.872l-0-0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["search"]},"attrs":[{}],"properties":{"order":31,"id":5,"name":"search","prevSize":32,"code":59672},"setIdx":0,"setId":0,"iconIdx":27},{"icon":{"paths":["M1060.923 354.485h-362.082l-110.034-328.386c-5.769-15.366-20.337-26.102-37.413-26.102s-31.644 10.737-37.322 25.828l-0.091 0.275-110.034 328.386h-364.574c-21.717 0.069-39.304 17.656-39.374 39.367l-0 0.007c-0 0.051-0.001 0.111-0.001 0.172 0 2.3 0.268 4.537 0.775 6.682l-0.039-0.196c1.082 11.588 7.245 21.545 16.211 27.732l0.127 0.083 297.753 209.856-114.363 332.062c-1.356 3.823-2.14 8.232-2.14 12.824 0 12.816 6.104 24.206 15.563 31.422l0.096 0.070c5.913 5.322 13.556 8.829 21.991 9.588l0.147 0.011c9.263-0.701 17.658-3.918 24.649-8.961l-0.142 0.098 290.483-207.038 290.483 207.038c6.807 5.047 15.229 8.284 24.374 8.857l0.132 0.007c8.688-0.56 16.438-4.176 22.272-9.773l-0.012 0.012c9.602-7.187 15.75-18.533 15.75-31.315 0-4.66-0.817-9.13-2.316-13.273l0.086 0.272-114.159-331.898 295.139-211.694 7.148-6.167c7.108-6.72 11.823-15.905 12.772-26.182l0.012-0.163c-1.204-22.063-19.388-39.497-41.643-39.497-0.078 0-0.156 0-0.234 0.001l0.012-0z"],"attrs":[{}],"width":1103,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["star"]},"attrs":[{}],"properties":{"order":32,"id":4,"name":"star","prevSize":32,"code":59673},"setIdx":0,"setId":0,"iconIdx":28},{"icon":{"paths":["M264.124 1024l-3.988-0.315c-45.874-4.728-81.349-43.172-81.349-89.9 0-9.949 1.608-19.523 4.579-28.476l-0.183 0.638 89.58-260.661-235.092-165.554c-19.618-13.599-33.145-34.797-36.332-59.244l-0.046-0.43c-0.823-4.244-1.294-9.125-1.294-14.115 0-0.018 0-0.036 0-0.054l-0 0.003c0.197-48.36 39.308-87.52 87.63-87.796l0.026-0h289.553l86.747-258.842c12.356-34.779 44.982-59.235 83.32-59.235 37.789 0 70.029 23.761 82.593 57.157l0.201 0.608 87.272 260.311h287.525c0.011-0 0.025-0 0.038-0 47.863 0 86.99 37.407 89.741 84.58l0.011 0.243v3.848l-0.315 3.883c-2.124 22.565-12.304 42.418-27.594 56.944l-0.039 0.036-11.963 10.074-233.098 167.233 89.755 261.011c3.161 8.633 4.99 18.602 4.99 28.997 0 27.516-12.812 52.041-32.795 67.933l-0.177 0.136c-13.364 11.803-30.658 19.438-49.692 20.728l-0.258 0.014-3.183 0.21-3.148-0.175c-18.973-1.079-36.226-7.647-50.416-18.125l0.256 0.181-229.565-163.77-230.369 164.12c-13.682 9.851-30.475 16.214-48.672 17.473l-0.298 0.017zM812.414 940.051v0.28zM282.243 939.876v0zM838.403 920.498v0zM139.39 423.032l258.003 181.889-97.94 285.006 247.929-176.642 247.649 176.502-97.94-284.586 254.015-182.169h-309.246l-94.442-282.243-94.722 282.243zM1004.972 423.032v0zM97.346 393.405l0.56 0.42z"],"attrs":[{}],"width":1095,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["star-1"]},"attrs":[{}],"properties":{"order":33,"id":3,"name":"star-1","prevSize":32,"code":59674},"setIdx":0,"setId":0,"iconIdx":29},{"icon":{"paths":["M662.613 361.941c-7.552-20.181 201.344-206.72 79.531-357.888-28.501-35.328-125.227 169.259-262.528 261.845-75.776 51.2-252.075 159.872-252.075 219.989v389.461c0 72.32 279.552 148.864 491.989 148.864 77.867 0 190.677-487.851 190.677-565.333s-240.128-76.459-247.467-96.725zM170.624 367.36c-0.681-0.010-1.486-0.016-2.292-0.016-93.126 0-168.619 75.493-168.619 168.619 0 3.187 0.088 6.354 0.263 9.498l-0.019-0.437v275.797c-0.161 2.71-0.252 5.878-0.252 9.068 0 90.015 72.972 162.987 162.987 162.987 2.79 0 5.564-0.070 8.32-0.209l-0.387 0.016c37.376 0-56.875-32.555-56.875-128.555v-362.667c0-100.565 94.251-134.187 56.875-134.187z"],"attrs":[{}],"width":910,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["thumbs-up"]},"attrs":[{}],"properties":{"order":12,"id":2,"name":"thumbs-up","prevSize":32,"code":59675},"setIdx":0,"setId":0,"iconIdx":30},{"icon":{"paths":["M511.488 0c-282.55 0.292-511.488 229.41-511.488 512 0 282.77 229.23 512 512 512s512-229.23 512-512l-0 0c0-0.076 0-0.166 0-0.257 0-282.628-229.116-511.744-511.744-511.744-0.27 0-0.54 0-0.81 0.001l0.042-0zM512 921.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v0c0 226.216-183.384 409.6-409.6 409.6v0zM537.6 256h-76.8v307.2l268.8 161.28 38.4-63.147-230.4-136.533z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["time"]},"attrs":[{}],"properties":{"order":9,"id":1,"name":"time","prevSize":32,"code":59676},"setIdx":0,"setId":0,"iconIdx":31},{"icon":{"paths":["M1104.017 128.018h-207.987v-80.017c0-26.51-21.491-48.001-48.001-48.001v0h-544.040c-26.51 0-48.001 21.491-48.001 48.001v0 80.017h-207.987c-26.51 0-48.001 21.491-48.001 48.001v0 111.986c7.076 85.462 54.363 158.548 122.682 200.96l1.112 0.643c61.778 44.226 136.678 74.099 217.854 83.23l2.133 0.195c34.389 59.486 80.159 108.69 134.709 145.998l1.518 0.98v144.002h-96.001c-3.854-0.457-8.318-0.718-12.843-0.718-62.746 0-113.776 50.163-115.172 112.574l-0.002 0.13v24c0 13.255 10.745 24 24 24v0h592.041c13.255 0 24-10.745 24-24v0-24c-1.399-62.54-52.429-112.704-115.175-112.704-4.525 0-8.989 0.261-13.378 0.768l0.535-0.050h-96.001v-144.002c56.068-38.356 101.826-87.64 135.041-145.086l1.137-2.132c83.314-9.166 158.252-38.973 221.451-84.147l-1.416 0.962c69.366-43.121 116.621-116.171 123.729-200.646l0.065-0.957v-111.986c0-26.51-21.491-48.001-48.001-48.001v0zM198.627 385.59c-35.829-20.914-61.682-55.601-70.437-96.621l-0.172-0.964v-32.016h128.402c1.638 61.997 10.873 121.145 26.808 177.479l-1.223-5.061c-31.815-11.002-59.407-25.499-84.329-43.47l0.951 0.653zM1024 288.005c-9.695 41.665-35.309 76.091-69.932 97.202l-0.677 0.383c-24.040 17.319-51.713 31.817-81.346 42.129l-2.271 0.688c14.711-51.273 23.946-110.421 25.564-171.467l0.020-0.952h128.594z"],"attrs":[{}],"width":1152,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["trophy"]},"attrs":[{}],"properties":{"order":10,"id":0,"name":"trophy","prevSize":32,"code":59677},"setIdx":0,"setId":0,"iconIdx":32}],"height":1024,"metadata":{"name":"icomoon"},"preferences":{"showGlyphs":true,"showCodes":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"icomoon","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"name":"icomoon","classSelector":".icon"},"historySize":50,"gridSize":16}}
{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M482.987 800.085h115.371c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-115.371c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M244.395 117.077c-5.317-5.071-12.534-8.192-20.48-8.192s-15.163 3.121-20.492 8.203l0.012-0.011-143.701 173.056c-5.035 5.211-8.137 12.317-8.137 20.148 0 15.764 12.572 28.592 28.237 29.003l0.038 0.001h86.357v548.181c-0 0.001-0 0.001-0 0.002 0 15.835 12.837 28.672 28.672 28.672 0.12 0 0.24-0.001 0.36-0.002l-0.018 0h57.344c0.101 0.001 0.221 0.002 0.341 0.002 15.835 0 28.672-12.837 28.672-28.672 0-0.001-0-0.001-0-0.002l0 0v-546.133h86.357c0.001 0 0.001 0 0.002 0 15.835 0 28.672-12.837 28.672-28.672 0-0.12-0.001-0.24-0.002-0.36l0 0.018c-0.093-7.822-3.197-14.902-8.203-20.15l0.011 0.012z","M482.987 339.285h345.771c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-345.771c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M482.987 569.685h230.741c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-230.741c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M482.987 108.885h461.141c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-461.141c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z"],"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sort-decrease"]},"attrs":[{},{},{},{},{}],"properties":{"order":2,"id":38,"name":"sort-decrease","prevSize":32,"code":59682},"setIdx":0,"setId":2,"iconIdx":0},{"icon":{"paths":["M482.987 108.885h115.371c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-115.371c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M482.987 339.285h230.741c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-230.741c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M482.987 800.085h461.141c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-461.141c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M482.987 569.685h345.771c15.835 0 28.672 12.837 28.672 28.672v58.027c0 15.835-12.837 28.672-28.672 28.672h-345.771c-15.835 0-28.672-12.837-28.672-28.672v-58.027c0-15.835 12.837-28.672 28.672-28.672z","M367.957 684.715h-86.357v-548.181c0-0.001 0-0.001 0-0.002 0-15.835-12.837-28.672-28.672-28.672-0.12 0-0.24 0.001-0.36 0.002l0.018-0h-57.344c-0.101-0.001-0.221-0.002-0.341-0.002-15.835 0-28.672 12.837-28.672 28.672 0 0.001 0 0.001 0 0.002l-0-0v546.133h-86.357c-15.876 0.193-28.672 13.108-28.672 29.011 0 0.001 0 0.001 0 0.002l-0-0c-0 0.005-0 0.011-0 0.017 0 7.894 3.268 15.026 8.526 20.114l0.008 0.007 145.067 175.104c5.264 5.050 12.423 8.16 20.309 8.16s15.045-3.11 20.319-8.169l-0.010 0.010 144.043-173.056c5.21-5.192 8.433-12.374 8.433-20.309s-3.223-15.117-8.432-20.309l-0.001-0.001c-5.098-5.284-12.242-8.566-20.153-8.566-0.475 0-0.948 0.012-1.417 0.035l0.066-0.003z"],"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sort-add"]},"attrs":[{},{},{},{},{}],"properties":{"order":3,"id":37,"name":"sort-add","prevSize":32,"code":59683},"setIdx":0,"setId":2,"iconIdx":1},{"icon":{"paths":["M769.024 515.072c-28.277 0-51.2 22.923-51.2 51.2v0 266.581c-0.191 20.659-16.888 37.355-37.528 37.547l-0.018 0h-489.131c-20.736 0-37.547-16.81-37.547-37.547v0-489.131c0.571-20.291 17.156-36.523 37.533-36.523 0.005 0 0.010 0 0.015 0l266.581-0c28.277 0 51.2-22.923 51.2-51.2s-22.923-51.2-51.2-51.2v0h-266.581c-77.212 0.194-139.753 62.734-139.947 139.928l-0 0.019v488.107c0.194 77.212 62.734 139.753 139.928 139.947l0.019 0h489.131c76.772-0.771 138.733-63.091 138.923-139.928l0-0.018v-266.581c0-0.003 0-0.007 0-0.010 0-27.917-22.343-50.615-50.122-51.189l-0.054-0.001z","M969.045 83.627v0c-5.53-12.604-15.385-22.459-27.646-27.855l-0.344-0.135c-5.708-2.654-12.373-4.272-19.397-4.436l-0.059-0.001h-266.581c-28.277 0-51.2 22.923-51.2 51.2s22.923 51.2 51.2 51.2v0h143.019l-401.408 401.408c-9.335 9.225-15.116 22.028-15.116 36.181s5.781 26.956 15.111 36.176l0.005 0.005c9.263 9.252 22.054 14.974 36.181 14.974s26.918-5.722 36.182-14.974l-0.001 0.001 401.408-401.408v143.019c0 28.277 22.923 51.2 51.2 51.2s51.2-22.923 51.2-51.2v0-266.581c-0.029-6.778-1.406-13.226-3.877-19.101l0.122 0.328z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["expand"]},"attrs":[{},{}],"properties":{"order":4,"id":36,"name":"expand","prevSize":32,"code":59684},"setIdx":0,"setId":2,"iconIdx":2},{"icon":{"paths":["M793.941 375.467c3.545-16.844 5.574-36.198 5.574-56.026 0-157.031-127.299-284.331-284.331-284.331-142.597 0-260.676 104.971-281.179 241.856l-0.192 1.562c-2.833 14.767-4.453 31.752-4.453 49.114 0 53.505 15.388 103.416 41.981 145.548l-0.664-1.126c41.637 71.349 112.064 122.023 194.943 136.296l1.665 0.237v74.069h-149.845c-0.607-0.027-1.319-0.043-2.035-0.043-26.769 0-48.469 21.7-48.469 48.469 0 8.664 2.273 16.798 6.256 23.836l-0.126-0.241c8.178 14.971 23.811 24.956 41.777 24.956 0.673 0 1.343-0.014 2.009-0.042l-0.095 0.003h153.941v57.344c0 32.085 0 64.512 0 96.597-0 0.060-0 0.132-0 0.203 0 13.24 5.346 25.231 13.997 33.932l-0.002-0.002c8.546 9.046 20.625 14.677 34.019 14.677 0.040 0 0.080-0 0.121-0l-0.006 0c0.001 0 0.003 0 0.005 0 26.529 0 48.080-21.313 48.464-47.75l0-0.036c0-22.869 0-45.739 0-68.267v-87.381h153.259c0.924 0.164 1.987 0.258 3.072 0.258s2.148-0.094 3.182-0.274l-0.11 0.016c25.517-1.545 45.626-22.617 45.626-48.386 0-14.226-6.129-27.021-15.89-35.888l-0.040-0.036c-8.301-7.658-19.435-12.353-31.666-12.353-0.868 0-1.73 0.024-2.587 0.070l0.119-0.005c-36.523 0-72.704 0-109.227 0h-44.373v-75.776c115.769-23.213 205.016-114.415 225.036-229.387l0.244-1.695zM704.171 324.267c0.001 0.273 0.002 0.597 0.002 0.92 0 51.896-21.29 98.82-55.611 132.513l-0.028 0.028c-34.195 34.070-81.368 55.135-133.461 55.135s-99.267-21.064-133.467-55.14l0.006 0.006c-34.070-34.195-55.135-81.368-55.135-133.461s21.064-99.267 55.14-133.467l-0.006 0.006c33.592-33.54 79.971-54.282 131.195-54.282 0.677 0 1.353 0.004 2.028 0.011l-0.103-0.001c0.001-0 0.002-0 0.003-0 103.888 0 188.173 83.927 188.754 187.678l0 0.055z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sex-female"]},"attrs":[{}],"properties":{"order":5,"id":35,"name":"sex-female","prevSize":32,"code":59685},"setIdx":0,"setId":2,"iconIdx":3},{"icon":{"paths":["M565.248 403.115v-189.781l137.899 138.24c2.383 2.598 5.074 4.855 8.030 6.731l0.162 0.096c7.571 5.13 16.909 8.19 26.961 8.19 3.507 0 6.926-0.372 10.221-1.080l-0.318 0.057c13.076-2.557 24.025-10.155 30.95-20.643l0.111-0.179c5.394-7.775 8.618-17.412 8.618-27.801 0-14.575-6.344-27.668-16.42-36.669l-0.048-0.042-219.819-219.819c-1.695-2.13-3.484-4.027-5.418-5.765l-0.043-0.038c-8.628-7.35-19.905-11.822-32.226-11.822-1.633 0-3.248 0.079-4.841 0.232l0.203-0.016c-13.699 0.917-25.744 7.317-34.079 17.002l-0.054 0.064-216.405 216.405c-3.559 3.176-6.796 6.522-9.776 10.089l-0.122 0.151c-5.953 8.072-9.528 18.216-9.528 29.195 0 14.889 6.574 28.242 16.978 37.315l0.059 0.050c8.443 7.322 19.539 11.784 31.678 11.784 1.465 0 2.915-0.065 4.347-0.192l-0.185 0.013c13.664-0.478 25.785-6.705 34.082-16.323l0.051-0.061 136.533-136.533v190.805c-137.566 25.119-240.475 144.041-240.475 286.998 0 144.662 105.377 264.711 243.558 287.575l1.695 0.232c14.016 2.329 30.205 3.692 46.701 3.754l0.062 0c160.99 0 291.499-130.508 291.499-291.499 0-142.407-102.118-260.963-237.121-286.436l-1.813-0.284zM671.744 803.157l-13.312 16.725-7.509 9.216c-34.834 35.13-83.115 56.879-136.476 56.879-47.528 0-91.026-17.254-124.572-45.84l0.27 0.224c-43.547-33.976-71.285-86.461-71.285-145.424 0-21.257 3.605-41.672 10.237-60.666l-0.392 1.29c20.237-73.614 82.804-128.246 159.267-136.462l0.818-0.071h51.883c94.474 13.866 166.186 94.355 166.186 191.594 0 41.636-13.148 80.202-35.519 111.771l0.405-0.602z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sex-male"]},"attrs":[{}],"properties":{"order":6,"id":34,"name":"sex-male","prevSize":32,"code":59686},"setIdx":0,"setId":2,"iconIdx":4},{"icon":{"paths":["M947.023 423.724h-834.737c-42.513 0-76.977 34.464-76.977 76.977s34.464 76.977 76.977 76.977h834.737c42.513 0 76.977-34.464 76.977-76.977s-34.464-76.977-76.977-76.977h0z"],"width":1059,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["decrease"],"grid":0},"attrs":[{}],"properties":{"order":2,"id":0,"name":"decrease","prevSize":32,"code":59648},"setIdx":0,"setId":2,"iconIdx":5},{"icon":{"paths":["M944.305 432.195h-352.501v-352.501c-0.083-44.019-35.777-79.674-79.803-79.695l-0.002-0c-43.994 0.083-79.632 35.735-79.695 79.725l-0 0.006v352.464h-352.537c-44.055 0-79.768 35.713-79.768 79.768s35.713 79.768 79.768 79.768v0h352.501v352.574c0 44.055 35.713 79.768 79.768 79.768s79.768-35.713 79.768-79.768l-0 0v-352.574h352.501c44.055 0 79.768-35.713 79.768-79.768s-35.713-79.768-79.768-79.768l0 0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["add"],"grid":0},"attrs":[{}],"properties":{"order":3,"id":1,"name":"add","prevSize":32,"code":59649},"setIdx":0,"setId":2,"iconIdx":6},{"icon":{"paths":["M358.4 0c-0.076-0-0.166-0-0.256-0-197.797 0-358.144 160.347-358.144 358.144 0 0.090 0 0.18 0 0.27l-0-0.014c0 268.8 358.4 665.6 358.4 665.6s358.4-396.8 358.4-665.6c0-0.076 0-0.166 0-0.256 0-197.797-160.347-358.144-358.144-358.144-0.090 0-0.18 0-0.27 0l0.014-0zM358.4 486.4c-70.692 0-128-57.308-128-128s57.308-128 128-128c70.692 0 128 57.308 128 128v0c0 70.692-57.308 128-128 128h0z"],"width":717,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["address"],"grid":0},"attrs":[{}],"properties":{"order":4,"id":2,"name":"address","prevSize":32,"code":59650},"setIdx":0,"setId":2,"iconIdx":7},{"icon":{"paths":["M447.993 511.981c141.38 0 255.991-114.611 255.991-255.991s-114.611-255.991-255.991-255.991c-141.38 0-255.991 114.611-255.991 255.991v-0c0 141.38 114.611 255.991 255.991 255.991v-0zM639.585 577.164l-95.609 382.81-63.988-272.006 63.988-111.998h-191.965l63.988 111.998-63.988 272.006-95.609-382.773c-142.815 6.542-256.155 123.796-256.401 267.577l-0 0.024v179.197h895.986v-179.197c-0.246-143.806-113.586-261.059-255.814-267.58l-0.587-0.021z"],"width":896,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["agent"],"grid":0},"attrs":[{}],"properties":{"order":5,"id":3,"name":"agent","prevSize":32,"code":59651},"setIdx":0,"setId":2,"iconIdx":8},{"icon":{"paths":["M889.022 7.054l-831.526 383.772c-34.358 15.411-57.857 49.317-57.857 88.711 0 53.291 43.002 96.539 96.2 96.936l0.038 0h351.649v351.801c0.219 53.372 43.536 96.553 96.938 96.553 39.559 0 73.583-23.696 88.654-57.668l0.245-0.618 383.621-831.564c3.826-10.169 6.041-21.922 6.041-34.192 0-55.109-44.674-99.783-99.783-99.783-12.281 0-24.044 2.219-34.909 6.277l0.689-0.226z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["arrow"],"grid":0},"attrs":[{}],"properties":{"order":14,"id":4,"name":"arrow","prevSize":32,"code":59652},"setIdx":0,"setId":2,"iconIdx":9},{"icon":{"paths":["M448.963 503.181c138.95 0 251.59-112.641 251.59-251.59s-112.641-251.59-251.59-251.59v-0c-138.95 0-251.59 112.641-251.59 251.59s112.641 251.59 251.59 251.59v0zM448.963 119.488v0c72.958-0 132.103 59.144 132.103 132.103s-59.144 132.103-132.103 132.103c-72.958 0-132.103-59.144-132.103-132.103 0-0.013 0-0.026 0-0.039l-0 0.002c-0-72.938 59.128-132.065 132.065-132.065 0.013 0 0.026 0 0.039 0l-0.002-0z","M448.963 566.069c-167.938 0-448.963 50.013-448.963 217.355v240.576h893.721v-240.576c0-167.305-276.82-217.355-444.758-217.355zM774.233 904.475h-654.931v-121.051c0-40.263 142.671-97.83 329.475-97.83v0c186.804 0 325.27 57.567 325.27 97.83z"],"width":894,"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{},{}]},"tags":["avatar"],"grid":0},"attrs":[{},{}],"properties":{"order":15,"id":5,"name":"avatar","prevSize":32,"code":59653},"setIdx":0,"setId":2,"iconIdx":10},{"icon":{"paths":["M908.486 692.817c-1.1-0.834-112.139-84.872-112.139-362.886 0-182.216-147.715-329.931-329.931-329.931s-329.931 147.715-329.931 329.931v0c0 278.014-111.039 362.052-111.191 362.242-15.359 10.347-25.326 27.674-25.326 47.328 0 31.414 25.465 56.881 56.878 56.885l819.14 0c25.031-0.194 46.179-16.601 53.474-39.229l0.112-0.401c1.696-5.184 2.675-11.15 2.675-17.344 0-19.089-9.291-36.008-23.598-46.482l-0.162-0.113zM174.901 682.616c47.923-94.131 76-205.282 76-322.99 0-10.443-0.221-20.835-0.659-31.17l0.050 1.475c0-119.383 96.779-216.162 216.162-216.162s216.162 96.779 216.162 216.162l0 0c-0.387 8.856-0.608 19.244-0.608 29.684 0 117.708 28.062 228.862 77.862 327.136l-1.9-4.135z","M573.853 872.459c-8.181-4.825-18.026-7.675-28.536-7.675-20.904 0-39.175 11.276-49.061 28.077l-0.145 0.266c-6.013 10.266-16.989 17.051-29.55 17.051-6.311 0-12.222-1.713-17.293-4.699l0.16 0.087c-5.181-3.025-9.376-7.22-12.314-12.241l-0.086-0.16c-10.022-17.142-28.338-28.474-49.3-28.474-31.434 0-56.916 25.482-56.916 56.916 0 10.472 2.828 20.283 7.762 28.711l-0.145-0.269c26.074 44.41 73.596 73.753 127.972 73.753s101.897-29.344 127.594-73.059l0.377-0.694c4.808-8.17 7.648-17.998 7.648-28.489 0-20.831-11.197-39.047-27.901-48.958l-0.263-0.144z"],"width":932,"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{},{}]},"tags":["bell"],"grid":0},"attrs":[{},{}],"properties":{"order":16,"id":6,"name":"bell","prevSize":32,"code":59654},"setIdx":0,"setId":2,"iconIdx":11},{"icon":{"paths":["M307.2 460.8h-102.4v102.4h102.4zM512 460.8h-102.4v102.4h102.4zM716.8 460.8h-102.4v102.4h102.4zM819.2 102.4h-51.2v-102.4h-102.4v102.4h-409.6v-102.4h-102.4v102.4h-51.2c-56.277 0.024-101.889 45.651-101.889 101.931 0 0.165 0 0.33 0.001 0.495l-0-0.025-0.512 716.8c0 56.554 45.846 102.4 102.4 102.4v0h716.8c56.486-0.169 102.231-45.914 102.4-102.384l0-0.016v-716.8c-0.169-56.486-45.914-102.231-102.384-102.4l-0.016-0zM819.2 921.6h-716.8v-563.2h716.8z"],"width":922,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["calender"],"grid":0},"attrs":[{}],"properties":{"order":17,"id":7,"name":"calender","prevSize":32,"code":59655},"setIdx":0,"setId":2,"iconIdx":12},{"icon":{"paths":["M910.222 0h-796.444c-62.838 0-113.778 50.94-113.778 113.778v0 796.444c0 62.838 50.94 113.778 113.778 113.778v0h796.444c62.838 0 113.778-50.94 113.778-113.778v0-796.444c0-62.838-50.94-113.778-113.778-113.778v0zM398.222 796.444l-284.444-284.444 80.213-80.213 204.231 203.662 431.787-431.787 80.213 80.782z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["checkbox-1"],"grid":0},"attrs":[{}],"properties":{"order":18,"id":8,"name":"checkbox-1","prevSize":32,"code":59656},"setIdx":0,"setId":2,"iconIdx":13},{"icon":{"paths":["M910.222 113.778v796.444h-796.444v-796.444h796.444zM910.222 0h-796.444c-62.76 0.193-113.584 51.018-113.778 113.759l-0 0.019v796.444c0.193 62.76 51.018 113.584 113.759 113.778l0.019 0h796.444c62.76-0.193 113.584-51.018 113.778-113.759l0-0.019v-796.444c-0.193-62.76-51.018-113.584-113.759-113.778l-0.019-0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["checkbox"],"grid":0},"attrs":[{}],"properties":{"order":19,"id":9,"name":"checkbox","prevSize":32,"code":59657},"setIdx":0,"setId":2,"iconIdx":14},{"icon":{"paths":["M512 1024c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512v0c0 282.77-229.23 512-512 512h-0zM276.821 547.072l279.723 279.723c8.937 8.992 21.312 14.557 34.987 14.557s26.050-5.565 34.984-14.554l0.002-0.002 35.115-35.115c8.992-8.937 14.557-21.312 14.557-34.987s-5.565-26.050-14.554-34.984l-0.002-0.002-209.749-209.749 209.749-209.749c8.992-8.937 14.557-21.312 14.557-34.987s-5.565-26.050-14.554-34.984l-0.002-0.002-35.115-35.115c-8.937-8.992-21.312-14.557-34.987-14.557s-26.050 5.565-34.984 14.554l-0.002 0.002-279.723 279.765c-8.993 8.976-14.557 21.385-14.557 35.093s5.564 26.118 14.556 35.093l0.001 0.001z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["circle-left"],"grid":0},"attrs":[{}],"properties":{"order":20,"id":10,"name":"circle-left","prevSize":32,"code":59658},"setIdx":0,"setId":2,"iconIdx":15},{"icon":{"paths":["M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512v0c0 282.77 229.23 512 512 512v0zM747.136 547.115l-279.723 279.723c-8.937 8.992-21.312 14.557-34.987 14.557s-26.050-5.565-34.984-14.554l-0.002-0.002-35.115-35.115c-8.992-8.937-14.557-21.312-14.557-34.987s5.565-26.050 14.554-34.984l0.002-0.002 209.749-209.749-209.792-209.792c-8.992-8.937-14.557-21.312-14.557-34.987s5.565-26.050 14.554-34.984l0.002-0.002 35.115-35.115c8.937-8.992 21.312-14.557 34.987-14.557s26.050 5.565 34.984 14.554l0.002 0.002 279.723 279.723c9.019 8.98 14.6 21.406 14.6 35.136 0 13.709-5.564 26.118-14.556 35.093l-0.001 0.001z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["circle-right"],"grid":0},"attrs":[{}],"properties":{"order":21,"id":11,"name":"circle-right","prevSize":32,"code":59659},"setIdx":0,"setId":2,"iconIdx":16},{"icon":{"paths":["M843.123 30.996l-331.098 331.098-331.098-331.098c-19.185-19.146-45.668-30.985-74.916-30.985s-55.731 11.839-74.918 30.987l0.002-0.002c-19.117 19.18-30.937 45.643-30.937 74.868s11.82 55.687 30.94 74.87l-0.003-0.003 331.050 331.098-331.050 331.244c-19.191 19.173-31.063 45.67-31.063 74.94 0 58.504 47.427 105.93 105.93 105.93 29.234 0 55.702-11.842 74.868-30.991l-0.001 0.001 331.098-331.098 331.196 331.147c19.046 18.46 45.049 29.839 73.71 29.839 58.521 0 105.961-47.44 105.961-105.961 0-28.661-11.379-54.663-29.865-73.737l0.027 0.028-331.196-331.196 331.098-331.098c18.46-19.046 29.839-45.049 29.839-73.71 0-58.521-47.44-105.961-105.961-105.961-28.661 0-54.663 11.379-73.737 29.865l0.028-0.027z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["close"],"grid":0},"attrs":[{}],"properties":{"order":22,"id":12,"name":"close","prevSize":32,"code":59660},"setIdx":0,"setId":2,"iconIdx":17},{"icon":{"paths":["M895.851 0h-767.872c-70.681 0-127.979 57.298-127.979 127.979v0 575.904c0 70.681 57.298 127.979 127.979 127.979v0h191.968v167.993c-0 0.025-0 0.056-0 0.086 0 13.288 10.772 24.060 24.060 24.060 5.399 0 10.382-1.778 14.397-4.781l-0.063 0.045 249.558-187.403h287.952c70.681 0 127.979-57.298 127.979-127.979v0-575.904c0-70.681-57.298-127.979-127.979-127.979l0 0zM604.699 575.904h-371.821v-127.979h371.821zM791.42 296.697h-558.84v-127.979h558.84z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["comment"],"grid":0},"attrs":[{}],"properties":{"order":23,"id":13,"name":"comment","prevSize":32,"code":59661},"setIdx":0,"setId":2,"iconIdx":18},{"icon":{"paths":["M646.741 485.035v-323.371l-161.707-161.664-161.664 161.664v107.819h-323.371v754.517h970.112v-538.965zM215.595 916.224h-107.819v-107.819h107.819zM215.595 700.629h-107.819v-107.776h107.819zM215.595 485.035h-107.819v-107.776h107.819zM538.965 916.181h-107.819v-107.776h107.776zM538.965 700.587h-107.819v-107.733h107.776zM538.965 484.992h-107.819v-107.733h107.776zM538.965 269.397h-107.819v-107.733h107.776zM862.336 916.139h-107.819v-107.733h107.776zM862.336 700.544h-107.819v-107.691h107.776z"],"width":970,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["company"],"grid":0},"attrs":[{}],"properties":{"order":24,"id":14,"name":"company","prevSize":32,"code":59662},"setIdx":0,"setId":2,"iconIdx":19},{"icon":{"paths":["M587.199 55.924l-55.924-55.924h-279.618l-55.924 55.924h-195.733v111.847h782.932v-111.847z","M33.107 870.508c1.405 85.070 70.697 153.493 155.97 153.493 0.217 0 0.434-0 0.65-0.001l-0.034 0h403.396c0.182 0.001 0.398 0.001 0.614 0.001 85.338 0 154.671-68.528 155.971-153.557l0.001-0.122v-647.895h-716.569zM144.954 332.112h493.023v538.023c-0.295 24.483-20.211 44.217-44.736 44.217-0.001 0-0.002-0-0.003-0l-403.21 0c-0.101 0.001-0.22 0.001-0.34 0.001-24.499 0-44.399-19.692-44.735-44.112l-0-0.032z","M288.939 834.903c30.886 0 55.924-25.038 55.924-55.924v0-316.901c0-30.886-25.038-55.924-55.924-55.924s-55.924 25.038-55.924 55.924v0 316.901c0 30.886 25.038 55.924 55.924 55.924v0z","M493.993 834.903c30.886 0 55.924-25.038 55.924-55.924v0-316.901c0-30.886-25.038-55.924-55.924-55.924s-55.924 25.038-55.924 55.924v0 316.901c0 30.886 25.038 55.924 55.924 55.924v0z"],"width":783,"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{},{},{},{}]},"tags":["delet"],"grid":0},"attrs":[{},{},{},{}],"properties":{"order":6,"id":15,"name":"delet","prevSize":32,"code":59663},"setIdx":0,"setId":2,"iconIdx":20},{"icon":{"paths":["M563.115 854.229l407.851-408.107c13.086-12.984 21.186-30.975 21.186-50.858 0-19.714-7.963-37.568-20.848-50.521l0.003 0.003-68.139-68.139c-12.998-13.055-30.985-21.133-50.859-21.133-19.725 0-37.592 7.958-50.564 20.838l0.004-0.004-289.536 289.621-289.195-289.195c-13.008-13.118-31.038-21.24-50.965-21.24-19.778 0-37.688 8.001-50.669 20.943l0.002-0.002-0.299 0.299-67.968 67.499c-13.075 12.989-21.168 30.978-21.168 50.859 0 19.71 7.956 37.563 20.831 50.521l-0.004-0.004 408.235 408.32c13.040 13.276 31.18 21.503 51.243 21.503 19.596 0 37.358-7.849 50.315-20.575l-0.011 0.010z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["down"],"grid":0},"attrs":[{}],"properties":{"order":7,"id":16,"name":"down","prevSize":32,"code":59664},"setIdx":0,"setId":2,"iconIdx":21},{"icon":{"paths":["M864 0c88.366 0 160 71.634 160 160 0 36.2-12.022 69.593-32.292 96.402l0.292-0.402-64 64-224-224 64-64c26.324-19.976 59.637-32 95.758-32 0.085 0 0.17 0 0.255 0l-0.013-0zM64 736l-64 288 288-64 592.171-592-224.171-224.128zM715.563 363.563l-448 448-55.168-55.125 448-448z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["edit"],"grid":0},"attrs":[{}],"properties":{"order":8,"id":17,"name":"edit","prevSize":32,"code":59665},"setIdx":0,"setId":2,"iconIdx":22},{"icon":{"paths":["M1123.235 921.346l-217.634-208.847c5.132 1.805 11.050 2.848 17.211 2.848 15.851 0 30.089-6.902 39.875-17.864l0.046-0.052c37.481-38.161 71.036-80.412 99.866-125.951l1.835-3.103c5.666-8.976 9.029-19.899 9.029-31.606 0-11.056-2.999-21.412-8.227-30.299l0.153 0.28c-7.952-13.359-194.813-327.802-528.499-327.802h-1.312c-35.996 0.005-71.127 3.696-105.040 10.716l3.34-0.578c-18.092 3.787-32.895 15.391-40.954 31.036l-0.156 0.333-212.306-203.798c-10.7-10.287-25.264-16.622-41.308-16.622-32.938 0-59.64 26.702-59.64 59.64 0 16.894 7.024 32.148 18.312 42.999l0.020 0.019 162.768 156.208c-5.287 1.648-9.884 3.809-14.111 6.501l0.235-0.14c-95.97 62.868-175.328 142.911-235.543 236.445l-1.89 3.135c-5.835 9.056-9.303 20.115-9.303 31.985 0 11.035 2.997 21.371 8.222 30.236l-0.152-0.279c7.952 13.359 194.813 327.802 529.175 327.802 107.604-0.9 207.542-32.95 291.456-87.555l-2.1 1.281c1.312-0.835 2.385-1.908 3.618-2.863l210.398 201.929c10.7 10.287 25.264 16.622 41.308 16.622 32.938 0 59.64-26.702 59.64-59.64 0-16.894-7.024-32.148-18.312-42.999l-0.020-0.019zM536.729 298.223c210.716 0 354.679 168.573 405.529 238.546-20.464 28.603-41.631 53.756-64.584 77.15l0.097-0.1c-10.193 10.583-16.471 24.997-16.471 40.878 0 6.315 0.993 12.399 2.831 18.103l-0.116-0.417-385.213-369.747c17.213-2.809 37.053-4.414 57.267-4.414 0.232 0 0.464 0 0.696 0.001l-0.036-0zM480.591 505.758c6.937-5.309 12.58-11.943 16.621-19.556l0.156-0.323 89.972 86.354c-14.804 12.070-33.904 19.382-54.711 19.382-7.266 0-14.323-0.892-21.069-2.571l0.598 0.126c-21.583-3.776-39.081-18.284-47.003-37.713l-0.149-0.414c-0.942-3.344-1.484-7.185-1.484-11.153 0-13.911 6.658-26.266 16.961-34.054l0.107-0.078zM536.729 775.315c-210.716 0-354.4-168.215-405.211-238.546 49.32-68.027 109.037-125.034 177.432-169.904l2.551-1.571c11.947-7.883 20.761-19.68 24.668-33.535l0.101-0.418 78.482 75.301c-2.135 1.142-3.89 2.209-5.584 3.359l0.217-0.139c-39.593 30.204-64.883 77.409-64.883 130.521 0 16.497 2.44 32.424 6.979 47.441l-0.301-1.159c21.213 61.143 72.589 106.713 135.851 119.32l1.154 0.192c13.578 3.209 29.168 5.048 45.187 5.048 51.658 0 98.848-19.131 134.872-50.694l-0.235 0.202c1.923-1.788 3.692-3.67 5.327-5.665l0.080-0.1 67.389 64.686c-58.645 34.055-128.851 54.577-203.762 55.657l-0.314 0.004z"],"width":1142,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["eye-1"],"grid":0},"attrs":[{}],"properties":{"order":9,"id":18,"name":"eye-1","prevSize":32,"code":59666},"setIdx":0,"setId":2,"iconIdx":23},{"icon":{"paths":["M1343.806 478.457c-9.762-19.575-244.11-478.457-667.948-478.457s-658.136 458.883-667.948 478.457c-4.994 9.78-7.92 21.332-7.92 33.568s2.926 23.787 8.117 33.994l-0.197-0.427c10.013 19.575 244.11 478.407 667.948 478.407s658.186-458.832 667.948-478.407c4.994-9.78 7.92-21.332 7.92-33.568s-2.926-23.787-8.117-33.994l0.197 0.427zM675.858 873.96c-272.446 0-457.030-266.138-514.553-361.809 57.523-95.671 242.107-361.809 514.553-361.809s457.13 266.288 514.553 361.809c-57.523 95.521-242.157 361.659-514.553 361.659z","M675.858 211.619c-165.896 0-300.381 134.485-300.381 300.381s134.485 300.381 300.381 300.381c165.896 0 300.381-134.485 300.381-300.381v0c-0.199-165.816-134.565-300.182-300.362-300.381l-0.020-0zM675.858 662.191c-82.948 0-150.191-67.243-150.191-150.191s67.243-150.191 150.191-150.191c82.948 0 150.191 67.243 150.191 150.191v0c0 82.948-67.243 150.191-150.191 150.191v0z"],"width":1352,"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{},{}]},"tags":["eye"],"grid":0},"attrs":[{},{}],"properties":{"order":25,"id":19,"name":"eye","prevSize":32,"code":59667},"setIdx":0,"setId":2,"iconIdx":24},{"icon":{"paths":["M470.315 379.861v136.192c52.181 11.819 98.603 31.189 147.2 44.587v-136.405c-52.011-11.605-98.773-30.976-147.2-44.416zM916.907 133.888c-67.939 35.792-147.729 58.874-232.376 63.923l-1.608 0.077c-107.008-0.213-195.584-69.76-330.368-69.76-0.457-0.002-0.998-0.003-1.539-0.003-48.265 0-94.476 8.794-137.118 24.867l2.678-0.885c4.705-11.905 7.433-25.695 7.433-40.122 0-61.856-50.144-112-112-112s-112 50.144-112 112c0 37.882 18.807 71.371 47.593 91.64l0.355 0.237v772.267c-0 0.038-0 0.083-0 0.128 0 26.439 21.433 47.872 47.872 47.872 0.045 0 0.090-0 0.135-0l-0.007 0h32c0.038 0 0.083 0 0.128 0 26.439 0 47.872-21.433 47.872-47.872 0-0.045-0-0.090-0-0.135l0 0.007v-188.928c64.268-28.012 139.144-44.31 217.827-44.31 3.851 0 7.693 0.039 11.525 0.117l-0.573-0.009c107.179 0 195.584 69.589 330.368 69.589 92.324-0.765 177.356-31.352 246.099-82.581l-1.107 0.789c16.771-11.705 27.605-30.909 27.605-52.644 0-0.047-0-0.094-0-0.141l0 0.007v-486.144c-0.078-35.287-28.702-63.863-64-63.863-9.72 0-18.935 2.167-27.186 6.044l0.391-0.165zM323.157 651.008c-54.473 5.68-104.346 17.389-151.58 34.589l4.38-1.394v-140.8c42.966-16.959 92.83-29.258 144.754-34.612l2.446-0.204zM911.957 382.208c-42.344 20.263-91.614 36.787-143.125 47.106l-4.075 0.681v141.867c55.26-7.286 105.051-25.69 148.773-52.924l-1.573 0.913v140.8c-41.573 28.653-91.64 48.031-145.739 54.055l-1.461 0.132v-142.976c-14.605 2.234-31.455 3.51-48.603 3.51-35.177 0-69.1-5.37-100.994-15.334l2.396 0.645v134.912c-39.685-15.094-88.92-29.775-139.395-41.183l-7.805-1.483v-136.875c-28.906-6.694-62.098-10.532-96.186-10.532-17.976 0-35.702 1.067-53.12 3.141l2.106-0.204v-140.032c-55.565 9.583-104.997 24.104-151.88 43.532l4.68-1.718v-140.8c42.614-19.83 92.097-35.166 143.91-43.55l3.29-0.439v142.976c14.417-2.165 31.054-3.401 47.98-3.401 35.4 0 69.537 5.408 101.63 15.442l-2.41-0.649v-134.741c39.858 15.224 89.098 29.908 139.605 41.235l7.595 1.431v136.704c26.239 6.45 56.363 10.149 87.35 10.149 21.13 0 41.859-1.72 62.054-5.028l-2.204 0.298v-143.872c55.763-10.757 105.071-26.328 151.746-46.79l-4.546 1.777z"],"width":1008,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["flag"],"grid":0},"attrs":[{}],"properties":{"order":26,"id":20,"name":"flag","prevSize":32,"code":59668},"setIdx":0,"setId":2,"iconIdx":25},{"icon":{"paths":["M460.771 358.396h102.293v-102.251h-102.293zM511.917 921.749c-0.012 0-0.027 0-0.041 0-226.23 0-409.625-183.395-409.625-409.625s183.395-409.625 409.625-409.625c226.215 0 409.601 183.372 409.625 409.581l0 0.002c0 226.23-183.395 409.625-409.625 409.625v0zM511.876-0.207c-282.717 0.071-511.876 229.274-511.876 512 0 282.77 229.23 512 512 512 282.697 0 511.882-229.113 512-511.782l0-0.011c0-282.77-229.23-512-512-512v0zM460.854 768.021h102.21v-307.25h-102.21z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["information"],"grid":0},"attrs":[{}],"properties":{"order":27,"id":21,"name":"information","prevSize":32,"code":59669},"setIdx":0,"setId":2,"iconIdx":26},{"icon":{"paths":["M22.52 566.594l435.159 434.886c13.85 13.942 33.032 22.572 54.23 22.572s40.38-8.63 54.226-22.567l0.004-0.004 72.291-72.291c13.931-13.855 22.553-33.035 22.553-54.23s-8.622-40.375-22.549-54.227l-0.003-0.003-308.501-308.41 308.365-308.365c13.931-13.855 22.553-33.035 22.553-54.23s-8.622-40.375-22.549-54.227l-0.003-0.003-71.973-72.792c-13.85-13.942-33.032-22.572-54.23-22.572s-40.38 8.63-54.226 22.567l-0.004 0.004-435.023 434.932c-14.154 13.904-22.927 33.246-22.927 54.637 0 21.234 8.643 40.449 22.604 54.319l0.004 0.004z"],"width":661,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["left"],"grid":0},"attrs":[{}],"properties":{"order":28,"id":22,"name":"left","prevSize":32,"code":59670},"setIdx":0,"setId":2,"iconIdx":27},{"icon":{"paths":["M558.549 0.469l-465.451-0.469c-51.358 0.145-92.954 41.74-93.099 93.085l-0 0.014v837.803c0.145 51.358 41.74 92.954 93.085 93.099l0.014 0h465.451c51.358-0.145 92.954-41.74 93.099-93.085l0-0.014v-837.803c-0.194-51.199-41.744-92.629-92.97-92.629-0.045 0-0.090 0-0.136 0l0.007-0zM558.549 837.803h-465.451v-651.605h465.451z"],"width":652,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["phone"],"grid":0},"attrs":[{}],"properties":{"order":29,"id":23,"name":"phone","prevSize":32,"code":59671},"setIdx":0,"setId":2,"iconIdx":28},{"icon":{"paths":["M384 0c-0.789-0.017-1.719-0.027-2.651-0.027-34.738 0-66.285 13.665-89.558 35.914l0.049-0.046c-22.202 23.224-35.867 54.77-35.867 89.509 0 0.932 0.010 1.862 0.029 2.789l-0.002-0.138c5.836 34.821 18.412 65.879 36.393 93.049l-0.553-0.889c2.672 8.237 4.213 17.715 4.213 27.553 0 2.918-0.136 5.803-0.401 8.652l0.027-0.365h-295.68v768h295.68c0.053-1.37 0.084-2.978 0.084-4.594 0-11.101-1.431-21.868-4.119-32.126l0.196 0.88c-17.428-26.281-30.005-57.34-35.644-90.756l-0.196-1.404c-0.017-0.789-0.027-1.719-0.027-2.651 0-34.738 13.665-66.285 35.914-89.558l-0.046 0.049c23.224-22.202 54.77-35.867 89.509-35.867 0.932 0 1.862 0.010 2.789 0.029l-0.138-0.002c0.789-0.017 1.719-0.027 2.651-0.027 34.738 0 66.285 13.665 89.558 35.914l-0.049-0.046c22.202 23.224 35.867 54.77 35.867 89.509 0 0.932-0.010 1.862-0.029 2.789l0.002-0.138c-5.836 34.821-18.412 65.879-36.393 93.049l0.553-0.889c-2.672 8.237-4.213 17.715-4.213 27.553 0 2.918 0.136 5.803 0.401 8.652l-0.027-0.365h295.68v-295.68c1.37-0.053 2.978-0.084 4.594-0.084 11.101 0 21.868 1.431 32.126 4.119l-0.88-0.196c26.281 17.428 57.34 30.005 90.756 35.644l1.404 0.196c70.692 0 128-57.308 128-128s-57.308-128-128-128v0c-34.821 5.836-65.879 18.412-93.049 36.393l0.889-0.553c-8.237 2.672-17.715 4.213-27.553 4.213-2.918 0-5.803-0.136-8.652-0.401l0.365 0.027v-295.68h-295.68c-0.053-1.37-0.084-2.978-0.084-4.594 0-11.101 1.431-21.868 4.119-32.126l-0.196 0.88c17.428-26.281 30.005-57.34 35.644-90.756l0.196-1.404c0.017-0.789 0.027-1.719 0.027-2.651 0-34.738-13.665-66.285-35.914-89.558l0.046 0.049c-23.224-22.202-54.77-35.867-89.509-35.867-0.932 0-1.862 0.010-2.789 0.029l0.138-0.002z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["puzzle"],"grid":0},"attrs":[{}],"properties":{"order":30,"id":24,"name":"puzzle","prevSize":32,"code":59672},"setIdx":0,"setId":2,"iconIdx":29},{"icon":{"paths":["M638.368 566.619l-435.042 434.86c-13.855 13.932-33.037 22.554-54.232 22.554s-40.377-8.622-54.229-22.55l-0.003-0.003-72.295-72.295c-13.932-13.855-22.554-33.037-22.554-54.232s8.622-40.377 22.55-54.229l0.003-0.003 308.378-308.378-308.378-308.378c-13.932-13.855-22.554-33.037-22.554-54.232s8.622-40.377 22.55-54.229l0.003-0.003 71.976-72.795c13.855-13.932 33.037-22.554 54.232-22.554s40.377 8.622 54.229 22.55l0.003 0.003 435.042 434.723c14.1 13.896 22.836 33.203 22.836 54.549 0 21.189-8.607 40.368-22.515 54.232l-0.002 0.002z"],"width":661,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["right"],"grid":0},"attrs":[{}],"properties":{"order":31,"id":25,"name":"right","prevSize":32,"code":59673},"setIdx":0,"setId":2,"iconIdx":30},{"icon":{"paths":["M227.579 579.116v227.579l398.211 217.305 398.211-217.305v-227.579l-398.211 217.358zM625.789-0l-625.789 341.316 625.789 341.316 512-279.311v393.1h113.789v-455.105z"],"width":1252,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["school"],"grid":0},"attrs":[{}],"properties":{"order":32,"id":26,"name":"school","prevSize":32,"code":59674},"setIdx":0,"setId":2,"iconIdx":31},{"icon":{"paths":["M1009.922 885.314l-199.391-199.391c-8.672-8.647-20.639-13.993-33.854-13.993-0.096 0-0.192 0-0.288 0.001l0.015-0h-32.592c54.858-69.783 87.982-158.908 87.982-255.769 0-229.618-186.142-415.76-415.76-415.76s-415.76 186.142-415.76 415.76c0 229.618 186.142 415.76 415.76 415.76 96.861 0 185.986-33.123 256.666-88.661l-0.897 0.679v32.464c-0 0.081-0.001 0.177-0.001 0.273 0 13.216 5.346 25.182 13.994 33.855l-0.001-0.001 199.391 199.391c8.657 8.711 20.645 14.103 33.893 14.103s25.236-5.392 33.891-14.1l0.002-0.002 56.609-56.609c8.774-8.732 14.204-20.817 14.204-34.171 0-13.184-5.292-25.131-13.869-33.834l0.006 0.006zM415.973 672.016c-141.361 0-255.957-114.596-255.957-255.957s114.596-255.957 255.957-255.957c141.361 0 255.957 114.596 255.957 255.957v0c-0.049 141.325-114.626 255.872-255.957 255.872l-0-0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["search"],"grid":0},"attrs":[{}],"properties":{"order":33,"id":27,"name":"search","prevSize":32,"code":59675},"setIdx":0,"setId":2,"iconIdx":32},{"icon":{"paths":["M264.124 1024l-3.988-0.315c-45.874-4.728-81.349-43.172-81.349-89.9 0-9.949 1.608-19.523 4.579-28.476l-0.183 0.638 89.58-260.661-235.092-165.554c-19.618-13.599-33.145-34.797-36.332-59.244l-0.046-0.43c-0.823-4.244-1.294-9.125-1.294-14.115 0-0.018 0-0.036 0-0.054l-0 0.003c0.197-48.36 39.308-87.52 87.63-87.796l0.026-0h289.553l86.747-258.842c12.356-34.779 44.982-59.235 83.32-59.235 37.789 0 70.029 23.761 82.593 57.157l0.201 0.608 87.272 260.311h287.525c0.011-0 0.025-0 0.038-0 47.863 0 86.99 37.407 89.741 84.58l0.011 0.243v3.848l-0.315 3.883c-2.124 22.565-12.304 42.418-27.594 56.944l-0.039 0.036-11.963 10.074-233.098 167.233 89.755 261.011c3.161 8.633 4.99 18.602 4.99 28.997 0 27.516-12.812 52.041-32.795 67.933l-0.177 0.136c-13.364 11.803-30.658 19.438-49.692 20.728l-0.258 0.014-3.183 0.21-3.148-0.175c-18.973-1.079-36.226-7.647-50.416-18.125l0.256 0.181-229.565-163.77-230.369 164.12c-13.682 9.851-30.475 16.214-48.672 17.473l-0.298 0.017zM812.414 940.051v0.28zM282.243 939.876v0zM838.403 920.498v0zM139.39 423.032l258.003 181.889-97.94 285.006 247.929-176.642 247.649 176.502-97.94-284.586 254.015-182.169h-309.246l-94.442-282.243-94.722 282.243zM1004.972 423.032v0zM97.346 393.405l0.56 0.42z"],"width":1095,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["star-1"],"grid":0},"attrs":[{}],"properties":{"order":34,"id":28,"name":"star-1","prevSize":32,"code":59676},"setIdx":0,"setId":2,"iconIdx":33},{"icon":{"paths":["M1060.923 354.485h-362.082l-110.034-328.386c-5.769-15.366-20.337-26.102-37.413-26.102s-31.644 10.737-37.322 25.828l-0.091 0.275-110.034 328.386h-364.574c-21.717 0.069-39.304 17.656-39.374 39.367l-0 0.007c-0 0.051-0.001 0.111-0.001 0.172 0 2.3 0.268 4.537 0.775 6.682l-0.039-0.196c1.082 11.588 7.245 21.545 16.211 27.732l0.127 0.083 297.753 209.856-114.363 332.062c-1.356 3.823-2.14 8.232-2.14 12.824 0 12.816 6.104 24.206 15.563 31.422l0.096 0.070c5.913 5.322 13.556 8.829 21.991 9.588l0.147 0.011c9.263-0.701 17.658-3.918 24.649-8.961l-0.142 0.098 290.483-207.038 290.483 207.038c6.807 5.047 15.229 8.284 24.374 8.857l0.132 0.007c8.688-0.56 16.438-4.176 22.272-9.773l-0.012 0.012c9.602-7.187 15.75-18.533 15.75-31.315 0-4.66-0.817-9.13-2.316-13.273l0.086 0.272-114.159-331.898 295.139-211.694 7.148-6.167c7.108-6.72 11.823-15.905 12.772-26.182l0.012-0.163c-1.204-22.063-19.388-39.497-41.643-39.497-0.078 0-0.156 0-0.234 0.001l0.012-0z"],"width":1103,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["star"],"grid":0},"attrs":[{}],"properties":{"order":35,"id":29,"name":"star","prevSize":32,"code":59677},"setIdx":0,"setId":2,"iconIdx":34},{"icon":{"paths":["M662.613 361.941c-7.552-20.181 201.344-206.72 79.531-357.888-28.501-35.328-125.227 169.259-262.528 261.845-75.776 51.2-252.075 159.872-252.075 219.989v389.461c0 72.32 279.552 148.864 491.989 148.864 77.867 0 190.677-487.851 190.677-565.333s-240.128-76.459-247.467-96.725zM170.624 367.36c-0.681-0.010-1.486-0.016-2.292-0.016-93.126 0-168.619 75.493-168.619 168.619 0 3.187 0.088 6.354 0.263 9.498l-0.019-0.437v275.797c-0.161 2.71-0.252 5.878-0.252 9.068 0 90.015 72.972 162.987 162.987 162.987 2.79 0 5.564-0.070 8.32-0.209l-0.387 0.016c37.376 0-56.875-32.555-56.875-128.555v-362.667c0-100.565 94.251-134.187 56.875-134.187z"],"width":910,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["thumbs-up"],"grid":0},"attrs":[{}],"properties":{"order":10,"id":30,"name":"thumbs-up","prevSize":32,"code":59678},"setIdx":0,"setId":2,"iconIdx":35},{"icon":{"paths":["M511.488 0c-282.55 0.292-511.488 229.41-511.488 512 0 282.77 229.23 512 512 512s512-229.23 512-512l-0 0c0-0.076 0-0.166 0-0.257 0-282.628-229.116-511.744-511.744-511.744-0.27 0-0.54 0-0.81 0.001l0.042-0zM512 921.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v0c0 226.216-183.384 409.6-409.6 409.6v0zM537.6 256h-76.8v307.2l268.8 161.28 38.4-63.147-230.4-136.533z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["time"],"grid":0},"attrs":[{}],"properties":{"order":11,"id":31,"name":"time","prevSize":32,"code":59679},"setIdx":0,"setId":2,"iconIdx":36},{"icon":{"paths":["M563.115 223.232l407.851 408.107c13.137 12.992 21.272 31.018 21.272 50.943 0 19.756-7.997 37.645-20.932 50.605l0.001-0.001-68.139 68.139c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l0.004 0.004-289.536-289.792-289.195 289.195c-12.998 13.055-30.985 21.133-50.859 21.133-19.725 0-37.592-7.958-50.564-20.838l0.004 0.004-0.213-0.299-68.267-67.499c-13.075-12.989-21.168-30.978-21.168-50.859 0-19.71 7.956-37.563 20.831-50.521l-0.004 0.004 408.235-408.32c13.040-13.276 31.18-21.503 51.243-21.503 19.596 0 37.358 7.849 50.315 20.575l-0.011-0.010z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["top"],"grid":0},"attrs":[{}],"properties":{"order":12,"id":32,"name":"top","prevSize":32,"code":59680},"setIdx":0,"setId":2,"iconIdx":37},{"icon":{"paths":["M1104.017 128.018h-207.987v-80.017c0-26.51-21.491-48.001-48.001-48.001v0h-544.040c-26.51 0-48.001 21.491-48.001 48.001v0 80.017h-207.987c-26.51 0-48.001 21.491-48.001 48.001v0 111.986c7.076 85.462 54.363 158.548 122.682 200.96l1.112 0.643c61.778 44.226 136.678 74.099 217.854 83.23l2.133 0.195c34.389 59.486 80.159 108.69 134.709 145.998l1.518 0.98v144.002h-96.001c-3.854-0.457-8.318-0.718-12.843-0.718-62.746 0-113.776 50.163-115.172 112.574l-0.002 0.13v24c0 13.255 10.745 24 24 24v0h592.041c13.255 0 24-10.745 24-24v0-24c-1.399-62.54-52.429-112.704-115.175-112.704-4.525 0-8.989 0.261-13.378 0.768l0.535-0.050h-96.001v-144.002c56.068-38.356 101.826-87.64 135.041-145.086l1.137-2.132c83.314-9.166 158.252-38.973 221.451-84.147l-1.416 0.962c69.366-43.121 116.621-116.171 123.729-200.646l0.065-0.957v-111.986c0-26.51-21.491-48.001-48.001-48.001v0zM198.627 385.59c-35.829-20.914-61.682-55.601-70.437-96.621l-0.172-0.964v-32.016h128.402c1.638 61.997 10.873 121.145 26.808 177.479l-1.223-5.061c-31.815-11.002-59.407-25.499-84.329-43.47l0.951 0.653zM1024 288.005c-9.695 41.665-35.309 76.091-69.932 97.202l-0.677 0.383c-24.040 17.319-51.713 31.817-81.346 42.129l-2.271 0.688c14.711-51.273 23.946-110.421 25.564-171.467l0.020-0.952h128.594z"],"width":1152,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"colorPermutations":{"12552552551":[{}]},"tags":["trophy"],"grid":0},"attrs":[{}],"properties":{"order":13,"id":33,"name":"trophy","prevSize":32,"code":59681},"setIdx":0,"setId":2,"iconIdx":38}],"height":1024,"metadata":{"name":"icomoon"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"icomoon"},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon","name":"icomoon"},"historySize":50,"showCodes":true,"gridSize":16}}
PAMapp/assets/icon/style.css
@@ -1,10 +1,10 @@
@font-face {
  font-family: 'icomoon';
  src:  url('fonts/icomoon.eot?vt1g0j');
  src:  url('fonts/icomoon.eot?vt1g0j#iefix') format('embedded-opentype'),
    url('fonts/icomoon.ttf?vt1g0j') format('truetype'),
    url('fonts/icomoon.woff?vt1g0j') format('woff'),
    url('fonts/icomoon.svg?vt1g0j#icomoon') format('svg');
  src:  url('fonts/icomoon.eot?xbg0m9');
  src:  url('fonts/icomoon.eot?xbg0m9#iefix') format('embedded-opentype'),
    url('fonts/icomoon.ttf?xbg0m9') format('truetype'),
    url('fonts/icomoon.woff?xbg0m9') format('woff'),
    url('fonts/icomoon.svg?xbg0m9#icomoon') format('svg');
  font-weight: normal;
  font-style: normal;
  font-display: block;
@@ -25,16 +25,22 @@
  -moz-osx-font-smoothing: grayscale;
}
.icon-delet:before {
  content: "\e920";
.icon-sort-decrease:before {
  content: "\e922";
}
.icon-top:before {
  content: "\e91f";
.icon-sort-add:before {
  content: "\e923";
}
.icon-puzzle:before {
  content: "\e91e";
.icon-expand:before {
  content: "\e924";
}
.icon-down:before {
.icon-sex-female:before {
  content: "\e925";
}
.icon-sex-male:before {
  content: "\e926";
}
.icon-decrease:before {
  content: "\e900";
}
.icon-add:before {
@@ -58,10 +64,10 @@
.icon-calender:before {
  content: "\e907";
}
.icon-checkbox:before {
.icon-checkbox-1:before {
  content: "\e908";
}
.icon-checkbox-1:before {
.icon-checkbox:before {
  content: "\e909";
}
.icon-circle-left:before {
@@ -79,48 +85,60 @@
.icon-company:before {
  content: "\e90e";
}
.icon-edit:before {
.icon-delet:before {
  content: "\e90f";
}
.icon-eye:before {
.icon-down:before {
  content: "\e910";
}
.icon-eye-1:before {
.icon-edit:before {
  content: "\e911";
}
.icon-flag:before {
.icon-eye-1:before {
  content: "\e912";
}
.icon-information:before {
.icon-eye:before {
  content: "\e913";
}
.icon-left:before {
.icon-flag:before {
  content: "\e914";
}
.icon-phone:before {
.icon-information:before {
  content: "\e915";
}
.icon-right:before {
.icon-left:before {
  content: "\e916";
}
.icon-school:before {
.icon-phone:before {
  content: "\e917";
}
.icon-search:before {
.icon-puzzle:before {
  content: "\e918";
}
.icon-star:before {
.icon-right:before {
  content: "\e919";
}
.icon-star-1:before {
.icon-school:before {
  content: "\e91a";
}
.icon-thumbs-up:before {
.icon-search:before {
  content: "\e91b";
}
.icon-time:before {
.icon-star-1:before {
  content: "\e91c";
}
.icon-trophy:before {
.icon-star:before {
  content: "\e91d";
}
.icon-thumbs-up:before {
  content: "\e91e";
}
.icon-time:before {
  content: "\e91f";
}
.icon-top:before {
  content: "\e920";
}
.icon-trophy:before {
  content: "\e921";
}
PAMapp/assets/images/appointment/avatar_bg.svg
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,9 @@
<svg id="Component_29" data-name="Component 29" xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">
  <circle id="Ellipse_726" data-name="Ellipse 726" cx="50" cy="50" r="50" fill="#feecdc"/>
  <g id="Group_3685" data-name="Group 3685" transform="translate(-4269 -1812)">
    <circle id="Ellipse_723" data-name="Ellipse 723" cx="50" cy="50" r="50" transform="translate(4269 1812)" fill="#feecdc"/>
    <path id="Intersection_4" data-name="Intersection 4" d="M8376.456,8861.851v-2.594c0-14.428,24.235-18.738,38.724-18.738s38.367,4.313,38.367,18.738v2.59A49.9,49.9,0,0,1,8415.013,8880H8415A49.892,49.892,0,0,1,8376.456,8861.851Zm17.021-48.454a21.7,21.7,0,0,1,21.7-21.686h.014a21.693,21.693,0,1,1-21.716,21.686Z" transform="translate(-4095.456 -6968)" fill="#d0d0ce" opacity="0.789"/>
    <circle id="Ellipse_724" data-name="Ellipse 724" cx="15" cy="15" r="15" transform="translate(4334 1882)" fill="none"/>
    <path id="female" d="M14.817,13.279l1.116,1.11c.457.457.92.914,1.377,1.383a.856.856,0,0,1-1.235,1.187c-.665-.653-1.324-1.318-1.983-1.977l-.516-.522a.938.938,0,0,1-.107.16l-2.339,2.339a.837.837,0,0,1-.867.231.813.813,0,0,1-.594-.641.843.843,0,0,1,.261-.819l2.321-2.315a.771.771,0,0,1,.125-.095l-1.395-1.4a5.9,5.9,0,0,1-5.028.968,5.734,5.734,0,0,1-3.383-2.333,5.936,5.936,0,1,1,9.669.107l1.431,1.4c.071-.083.142-.184.231-.273.736-.736,1.466-1.472,2.208-2.2A.859.859,0,1,1,17.3,10.822l-1.6,1.6C15.4,12.7,15.114,12.965,14.817,13.279ZM11.683,7.124a4.244,4.244,0,1,0-4.256,4.232A4.244,4.244,0,0,0,11.683,7.124Z" transform="matrix(0.719, 0.695, -0.695, 0.719, 4348.543, 1882.728)" fill="none"/>
  </g>
</svg>
PAMapp/assets/images/index_banner2_mob.svg
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,331 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="375" height="260" viewBox="0 0 375 260">
  <defs>
    <clipPath id="clip-path">
      <rect id="Rectangle_4130" data-name="Rectangle 4130" width="375" height="260" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-2">
      <rect id="Rectangle_4117" data-name="Rectangle 4117" width="6.086" height="2.169" transform="translate(0 1.24) rotate(-11.752)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-4">
      <rect id="Rectangle_4119" data-name="Rectangle 4119" width="2.898" height="3.398" transform="translate(0 0.918) rotate(-18.469)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-6">
      <rect id="Rectangle_4127" data-name="Rectangle 4127" width="6.738" height="2.401" transform="translate(0 0.219) rotate(-1.865)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-7">
      <rect id="Rectangle_4126" data-name="Rectangle 4126" width="6.737" height="2.401" transform="translate(0 0.219) rotate(-1.865)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-8">
      <rect id="Rectangle_4129" data-name="Rectangle 4129" width="3.762" height="3.208" transform="matrix(0.32, -0.948, 0.948, 0.32, 0, 3.564)" fill="none"/>
    </clipPath>
  </defs>
  <g id="index_banner2_mob" transform="translate(-1 2)">
    <g id="Group_3756" data-name="Group 3756" transform="translate(1 -2)" clip-path="url(#clip-path)">
      <g id="Group_3755" data-name="Group 3755" transform="translate(-122.288 -3)">
        <rect id="Rectangle_4115" data-name="Rectangle 4115" width="255.5" height="398" transform="translate(118.288 255.5) rotate(-90)" fill="#f2c75c"/>
        <g id="Group_1432" data-name="Group 1432" transform="translate(117.563 5.098)" opacity="0.3">
          <g id="Group_1431" data-name="Group 1431" transform="translate(30 -27)">
            <g id="Group_1428" data-name="Group 1428">
              <path id="Path_694" data-name="Path 694" d="M51.063,244.1l-11.35-9.312,9.312-11.35,11.35,9.312Zm-10.135-9.432,10.015,8.216,8.217-10.015-10.015-8.216Z" transform="translate(-53.631 -137.82)" fill="#a89968"/>
              <path id="Path_695" data-name="Path 695" d="M10.931,93.483-8.451,77.576l15.9-19.382L26.834,74.1ZM-6.376,77.376l17.1,14.031L24.758,74.3,7.655,60.273Z" transform="translate(8.451 -32.195)" fill="#a89968"/>
              <path id="Path_696" data-name="Path 696" d="M183.038,23.894a8.849,8.849,0,1,1,8.849-8.849h0A8.849,8.849,0,0,1,183.038,23.894Zm0-16.222a7.373,7.373,0,1,0,7.373,7.373h0a7.373,7.373,0,0,0-7.372-7.374h0Z" transform="translate(-82.869 -6.197)" fill="#a89968"/>
              <path id="Path_697" data-name="Path 697" d="M727.219,258.719a8.849,8.849,0,1,1,8.849-8.848h0A8.849,8.849,0,0,1,727.219,258.719Zm0-16.222a7.374,7.374,0,1,0,7.374,7.374,7.374,7.374,0,0,0-7.374-7.374h0Z" transform="translate(-354.96 -123.61)" fill="#a89968"/>
            </g>
            <g id="Group_1429" data-name="Group 1429" transform="translate(315.079 25.559)">
              <circle id="Ellipse_323" data-name="Ellipse 323" cx="16.98" cy="16.98" r="16.98" transform="translate(2.616 1.359)" fill="#f2c75c" opacity="0.5" style="isolation: isolate"/>
              <path id="Path_4975" data-name="Path 4975" d="M639,91.9a17.3,17.3,0,1,1,17.3-17.3A17.314,17.314,0,0,1,639,91.9Zm0-34.3a17,17,0,1,0,17,17,17.02,17.02,0,0,0-17-17Z" transform="translate(-621.707 -57.314)" fill="#f2c75c"/>
            </g>
            <g id="Group_1430" data-name="Group 1430" transform="translate(261.107 13.48)">
              <path id="Path_4959" data-name="Path 4959" d="M542.974,54.066l-1.69,4.312,14.065,46.006,3.419,1.34Z" transform="translate(-527.523 -43.612)" fill="#a89968"/>
              <path id="Path_4960" data-name="Path 4960" d="M549.057,38.556l-1.69,4.312L564.541,99.04l3.418,1.34Z" transform="translate(-530.565 -35.856)" fill="#a89968"/>
              <path id="Path_4961" data-name="Path 4961" d="M536.893,69.578l-1.69,4.313,10.956,35.838,3.419,1.34Z" transform="translate(-524.482 -51.368)" fill="#a89968"/>
              <path id="Path_4962" data-name="Path 4962" d="M557.324,34.5l-3.419-1.34,20.054,65.594,3.419,1.34Z" transform="translate(-533.833 -33.157)" fill="#a89968"/>
              <path id="Path_4963" data-name="Path 4963" d="M518.587,125.763l3.418,1.34-3.359-10.99-1.691,4.312Z" transform="translate(-515.359 -74.635)" fill="#a89968"/>
              <path id="Path_4964" data-name="Path 4964" d="M524.729,100.6l-1.69,4.313,4.74,15.5,3.419,1.341Z" transform="translate(-518.401 -66.88)" fill="#a89968"/>
              <path id="Path_4965" data-name="Path 4965" d="M530.812,85.09,529.121,89.4l7.848,25.671,3.419,1.34Z" transform="translate(-521.442 -59.123)" fill="#a89968"/>
              <path id="Path_4966" data-name="Path 4966" d="M569.624,39.32l-3.419-1.341,20.054,65.595,3.419,1.341Z" transform="translate(-539.984 -35.568)" fill="#a89968"/>
              <path id="Path_4967" data-name="Path 4967" d="M652.495,72.384l.193-.492-.391-.153Z" transform="translate(-583.03 -52.448)" fill="#a89968"/>
              <path id="Path_4968" data-name="Path 4968" d="M643.417,68.257,640,66.916,643.3,77.729l1.691-4.312Z" transform="translate(-576.88 -50.036)" fill="#a89968"/>
              <path id="Path_4969" data-name="Path 4969" d="M631.12,63.434,627.7,62.093l6.414,20.98,1.69-4.312Z" transform="translate(-570.732 -47.625)" fill="#a89968"/>
              <path id="Path_4970" data-name="Path 4970" d="M514.008,131.625l-.246.626.5.2Z" transform="translate(-513.762 -82.391)" fill="#a89968"/>
              <path id="Path_4971" data-name="Path 4971" d="M594.22,48.965l-3.418-1.34,15.74,51.481,1.69-4.312Z" transform="translate(-552.282 -40.391)" fill="#a89968"/>
              <path id="Path_4972" data-name="Path 4972" d="M618.819,58.611,615.4,57.27l9.523,31.148,1.69-4.312Z" transform="translate(-564.582 -45.214)" fill="#a89968"/>
              <path id="Path_4973" data-name="Path 4973" d="M581.921,44.143,578.5,42.8l18.848,61.649,1.691-4.311Z" transform="translate(-546.132 -37.979)" fill="#a89968"/>
              <path id="Path_4974" data-name="Path 4974" d="M606.52,53.789l-3.419-1.34,12.631,41.314,1.691-4.312Z" transform="translate(-558.432 -42.803)" fill="#a89968"/>
            </g>
          </g>
        </g>
        <path id="Path_7126" data-name="Path 7126" d="M-17.833,365.587c-23.71-18.11-37.464-66.341,34.457-88.278,14.519-2.706,43.01-7.388,70.173,5.509s68.28,4.028,94.55-12.932,85.263-79.18,224.058-77.792,180.109,80.467,153.542,168.787S109.41,462.776-17.833,365.587Z" transform="translate(140.237 -92.036)" fill="#e0d9c2"/>
        <path id="Path_7126-2" data-name="Path 7126" d="M35.451,414.4S51.592,471.629-6.738,466.8c-7.085-.586-14.883-2.654-23.876-15.443s-29.341-13.667-45.021-6.877-56.621,37.746-117.877,14.393-60.824-81.508-28.08-134.7S-6.484,334.49,35.451,414.4Z" transform="translate(243.576 -148.292)" fill="#e0d9c2"/>
        <g id="Group_3691" data-name="Group 3691" transform="translate(128.788 146.821)">
          <path id="Path_8374" data-name="Path 8374" d="M107.4,485.784s4.834,20.862,5.343,40.706a306,306,0,0,1-1.781,38.926s5.851,3.562,5.851,5.6-4.07,1.272-5.342,1.272-7.632-2.29-8.4-4.58-11.194-74.544-11.194-80.65-1.018,81.413-1.018,81.413,0,6.106-5.088,7.887-3.816-4.325-2.545-6.615c0,0-9.413-49.1-10.94-68.438s8.142-18.827,16.538-20.608S102.821,479.169,107.4,485.784Z" transform="translate(-43.065 -382.697)" fill="#67737a"/>
          <path id="Path_8375" data-name="Path 8375" d="M132.466,360.829s-.254-5.089-1.781-7.887c0,0-2.544-4.834-2.544-6.361a7.328,7.328,0,0,0-1.018-2.8c-.763-1.018-2.29-2.544-2.035-3.562,0,0-.255-.763,1.018-.763a3.467,3.467,0,0,1,2.289,1.272,1.342,1.342,0,0,0,1.781-.763c.509-1.272,1.527-2.035,4.579-1.018s5.089,3.307,4.834,5.343a36.882,36.882,0,0,1-3.053,8.9c-1.018,1.781,0,4.579.509,5.852S133.483,361.846,132.466,360.829Z" transform="translate(-69.53 -312.059)" fill="#feecdc"/>
          <path id="Path_8376" data-name="Path 8376" d="M72.818,319.5c0-.028-.005-.056-.008-.084-1.271-10.386-9.479-17.927-18.332-16.843s-15,10.381-13.729,20.767c.005.043.013.085.019.128-1.318-.151-4.113-.075-2.687,3.641,1.161,3.024,3.223,3.184,4.583,2.893,2.819,5.973,8.182,10,14.1,10.268.1,1.591-1.057,2.946-2.808,5.185,0,0,3.081,8.745,10.555,8.456s7.285-12.4,7.285-12.4-4.6-1.393-6.5-3.682a18.015,18.015,0,0,0,7.253-11.471c1.371-.1,3.174-.836,3.554-3.9C76.574,318.7,74.128,319.058,72.818,319.5Z" transform="translate(-25.843 -294.056)" fill="#feecdc"/>
          <path id="Path_8377" data-name="Path 8377" d="M39.606,321.7l.255,1.781s-3.181.636-3.944-.127-3.434-7.251,1.4-14.375,26.332-10.558,32.946-1.908c4.68,6.12,2.8,10.176,2.29,11.7-.254.764-1.526.764-2.035.764,0,0-.255-2.036-.763-4.326,0,0-1.272-6.106-5.343-6.106-5.088,0-21.371,4.071-23.406,5.343S39.1,318.393,39.606,321.7Z" transform="translate(-24.246 -293.794)" fill="#221e1f"/>
          <path id="Path_8378" data-name="Path 8378" d="M32.732,315.329s-2.8-7.124.509-11.194,25.837-12.071,34.29-4.128c0,0,.311-3.5-1.979-5.031,0,0,6.614-.763,6.36-2.8s-2.289-2.29-5.6-2.29-4.071-1.272-4.071-1.272-5.343-4.325-9.668-2.544a112.516,112.516,0,0,1-14.5,4.325c-1.526.254-10.431,3.307-10.685,11.194S28.407,315.075,32.732,315.329Z" transform="translate(-20.679 -285.642)" fill="#67737a"/>
          <path id="Path_8379" data-name="Path 8379" d="M42.208,380.336s1.527,2.035,7.378,1.272a14,14,0,0,0,8.9-4.833s19.59-1.781,25.7,17.046,9.413,51.392,8.65,55.463c0,0-.255,1.781-1.526,2.036,0,0-14.247,1.272-16.029,1.272s-3.816.254-4.325-.764.128-3.943.128-3.943V437.707s-8.905,2.8-15.265,2.544c0,0,1.272,12.466,1.018,13.993s-.509,1.527-2.29,1.781c0,0-19.081,2.29-20.862,2.544s-2.035.255-2.035-1.526-.254-9.159-.254-11.7c0,0-11.194-6.36-13.993-10.685s-4.325-8.142-2.8-12.212,5.851-20.862,8.4-26.714S34.957,380.464,42.208,380.336Z" transform="translate(-14 -331.186)" fill="#f09491"/>
          <path id="Path_8380" data-name="Path 8380" d="M136.689,379.6s4.834-2.8,9.414-2.544a23.471,23.471,0,0,1,2.035,2.29c.509.763,13.484,28.24,8.65,32.82,0,0-2.29,3.307-9.159,2.035S135.671,381.128,136.689,379.6Z" transform="translate(-75.28 -331.341)" fill="#e78b88"/>
          <path id="Path_8381" data-name="Path 8381" d="M61.861,334.712a4.1,4.1,0,0,1,3.043-.633" transform="translate(-37.931 -309.824)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
          <g id="Group_3679" data-name="Group 3679" transform="translate(25.267 27.521)">
            <path id="Path_8382" data-name="Path 8382" d="M65.072,340.9a2.963,2.963,0,0,1,2.617.187" transform="translate(-64.803 -340.684)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
            <path id="Path_8383" data-name="Path 8383" d="M64.534,342.352a4.1,4.1,0,0,1,2.989-.852" transform="translate(-64.534 -341.077)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
          </g>
          <path id="Path_8384" data-name="Path 8384" d="M85.954,329.7A4.1,4.1,0,0,1,89,329.067" transform="translate(-49.977 -307.318)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
          <g id="Group_3684" data-name="Group 3684" transform="translate(31.403 36.565)" opacity="0.8">
            <g id="Group_3683" data-name="Group 3683">
              <g id="Group_3682" data-name="Group 3682" clip-path="url(#clip-path-2)">
                <g id="Group_3681" data-name="Group 3681">
                  <g id="Group_3680" data-name="Group 3680" clip-path="url(#clip-path-2)">
                    <path id="Path_8385" data-name="Path 8385" d="M76.807,360.011s1.616,1.88,3.421,1.5,2.538-2.744,2.538-2.744" transform="translate(-76.807 -358.771)" fill="#db727c"/>
                  </g>
                </g>
              </g>
            </g>
          </g>
          <g id="Group_3689" data-name="Group 3689" transform="translate(31.581 29.922)" opacity="0.8">
            <g id="Group_3688" data-name="Group 3688">
              <g id="Group_3687" data-name="Group 3687" clip-path="url(#clip-path-4)">
                <g id="Group_3686" data-name="Group 3686">
                  <g id="Group_3685" data-name="Group 3685" clip-path="url(#clip-path-4)">
                    <path id="Path_8386" data-name="Path 8386" d="M80.473,346.4s1.5,1.807,1.2,2.4-2.109.933-2.109.933" transform="translate(-78.364 -345.944)" fill="none" stroke="#c6946b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
                  </g>
                </g>
              </g>
            </g>
          </g>
          <path id="Path_8387" data-name="Path 8387" d="M89.044,335.141a1.088,1.088,0,1,1-1.286-.844,1.088,1.088,0,0,1,1.286.844" transform="translate(-50.445 -309.958)" fill="#221e1f"/>
          <g id="Group_3690" data-name="Group 3690" transform="translate(29.012 7.213)">
            <path id="Path_8388" data-name="Path 8388" d="M141.729,348.07a1.947,1.947,0,0,1-.813-.178L117,336.952a1.957,1.957,0,1,1,1.629-3.559l23.915,10.94a1.958,1.958,0,0,1-.815,3.738Z" transform="translate(-93.941 -316.641)" fill="#72502b"/>
            <path id="Path_8389" data-name="Path 8389" d="M85.34,326.7a13.316,13.316,0,1,1,13.316-13.316A13.331,13.331,0,0,1,85.34,326.7Zm0-23.152a9.836,9.836,0,1,0,9.836,9.836A9.847,9.847,0,0,0,85.34,303.547Z" transform="translate(-72.024 -300.068)" fill="#d1232e"/>
          </g>
          <path id="Path_8390" data-name="Path 8390" d="M139.064,336.379a2.59,2.59,0,0,0-3.307.255c-1.526,1.526-3.307,3.816-2.289,4.834,0,0-.255,1.526,1.017,1.526,0,0,0,1.526,2.29,1.272,0,0,.763,1.781,3.053.254,0,0,3.307-2.544,3.053-4.579S139.064,336.379,139.064,336.379Z" transform="translate(-73.584 -310.762)" fill="#feecdc"/>
        </g>
        <g id="Group_3716" data-name="Group 3716" transform="translate(199.147 119.483)" opacity="0.5">
          <g id="Group_3692" data-name="Group 3692" transform="translate(49.086)">
            <path id="Path_8391" data-name="Path 8391" d="M218.144,225.36a1.724,1.724,0,0,0-.2.658h19.993q.026-.387.049-.778l.117.019a1.968,1.968,0,0,0-.039-1.426,29.471,29.471,0,0,0-.084-6.067,2.98,2.98,0,0,0-2.267-2.38,14.307,14.307,0,0,1-4.56-1.542,4.175,4.175,0,0,0-.2-.724.826.826,0,0,1-.094.19c-.02.035-.044.074-.072.116,0-.243,0-.476,0-.685a10.769,10.769,0,0,0,.929-2.552c.049,0,1.022-.39,1.158-.923.167-.631,1.067-1.344,1.02-1.814-.021-.209-.246-.366-.494-.492a.212.212,0,0,0,.041-.075,7.039,7.039,0,0,0,.226-4.194c.525-.681.986-1.884.68-1.7a4.955,4.955,0,0,1-2.38.34c-2.068-2.068-7.812-1.57-7.812-1.57s-2.049.21-2.616,4.517v.907c.029.559.128.364.371,1.244.088.319.154.454.2.474l-.008.323c-.227,4.42,1.088,4.885,1.628,5.7-.049.321-.1.711-.145,1.1.048.078.108.174.181.286-.03-.031-.058-.061-.083-.088-.106-.134-.165-.206-.165-.206,0,.045-.009.09-.014.134-.309.518-1.378,1.163-4.236,2.372-2.947,1.247-1.535,5.171-1.535,5.171S218.824,224.227,218.144,225.36Z" transform="translate(-215.976 -198.018)" fill="#fff" opacity="0.5"/>
            <path id="Path_8392" data-name="Path 8392" d="M215.083,221.738a1.717,1.717,0,0,0-.2.658h19.993q.025-.386.049-.778l.117.018a1.968,1.968,0,0,0-.039-1.426,29.431,29.431,0,0,0-.084-6.066,2.981,2.981,0,0,0-2.267-2.381,14.308,14.308,0,0,1-4.56-1.541,4.166,4.166,0,0,0-.2-.724.825.825,0,0,1-.094.19c-.02.034-.044.073-.071.116,0-.243,0-.476,0-.685a10.747,10.747,0,0,0,.929-2.552c.049,0,1.022-.39,1.158-.923.167-.631,1.067-1.344,1.02-1.814-.021-.209-.246-.367-.494-.492a.215.215,0,0,0,.04-.075,7.047,7.047,0,0,0,.227-4.194c.524-.681.986-1.884.68-1.7a4.957,4.957,0,0,1-2.381.34c-2.068-2.068-7.812-1.57-7.812-1.57s-2.049.209-2.616,4.517v.907c.03.559.128.364.371,1.244.088.319.155.454.2.474l-.008.322c-.227,4.421,1.088,4.885,1.628,5.7-.05.321-.1.71-.146,1.1.048.077.108.174.181.286-.03-.031-.058-.061-.083-.089-.106-.134-.165-.205-.165-.205,0,.045-.009.089-.013.134-.31.518-1.378,1.163-4.236,2.372-2.947,1.247-1.535,5.171-1.535,5.171S215.762,220.6,215.083,221.738Z" transform="translate(-214.343 -196.086)" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4"/>
          </g>
          <g id="Group_3693" data-name="Group 3693" transform="translate(0 8.596)">
            <path id="Path_8393" data-name="Path 8393" d="M115.39,232.1a16.311,16.311,0,0,0,1.942-3.8,3.856,3.856,0,0,0,.326.321,5.737,5.737,0,0,0,3.978,2.97,1.647,1.647,0,0,1-.509.985c-.009-.034-.016-.062-.022-.084s-.113,0-.124,0a.806.806,0,0,0-.125.125c0,.017-.006.035-.01.052a13.743,13.743,0,0,0-7.577,7.967h20.843a16.611,16.611,0,0,0-.063-2.239c-.391-3.9-5.827-5.518-7.088-5.842,0-.021-.007-.042-.012-.063,0,0-.283-.054-.3-.028a.519.519,0,0,1-.01.1,5.238,5.238,0,0,1-1.891-1.463,6.405,6.405,0,0,0,3.055-3.735h.033c-.043.447-.085.763-.085.763a3.25,3.25,0,0,0,.317-.774c.441-.056.937-.331,1.158-1.213.242-.968-.179-1.207-.609-1.224.011-.064.017-.1.017-.1a8.391,8.391,0,0,0-.331-4.748c-2.65-4.417-7.509-2.871-7.509-2.871a5.944,5.944,0,0,0-5.185,4.185,1.19,1.19,0,0,0-1.551.784c-1.1,2.429-.884,4.637.221,5.962A7.1,7.1,0,0,1,115.39,232.1Zm2.012-3.987q.114.249.246.485a1.576,1.576,0,0,1-.272-.417Z" transform="translate(-111.346 -215.802)" fill="#fff" opacity="0.5"/>
            <path id="Path_8394" data-name="Path 8394" d="M111.266,229.677a16.32,16.32,0,0,0,1.942-3.8,3.652,3.652,0,0,0,.326.322,5.736,5.736,0,0,0,3.978,2.97,1.644,1.644,0,0,1-.509.985c-.009-.033-.016-.062-.022-.084s-.113,0-.124,0a.783.783,0,0,0-.125.124c0,.018-.007.035-.01.053a13.74,13.74,0,0,0-7.577,7.967h20.843a16.535,16.535,0,0,0-.063-2.239c-.39-3.9-5.827-5.518-7.088-5.842l-.012-.063s-.283-.054-.3-.028a.524.524,0,0,1-.01.1,5.236,5.236,0,0,1-1.89-1.463,6.405,6.405,0,0,0,3.055-3.735h.033c-.044.447-.085.763-.085.763a3.271,3.271,0,0,0,.317-.774c.441-.056.937-.331,1.158-1.214.242-.968-.179-1.206-.609-1.224.011-.063.017-.1.017-.1a8.391,8.391,0,0,0-.331-4.748c-2.65-4.416-7.508-2.871-7.508-2.871a5.944,5.944,0,0,0-5.185,4.184,1.191,1.191,0,0,0-1.551.784c-1.1,2.429-.883,4.638.221,5.963A7.1,7.1,0,0,1,111.266,229.677Zm2.011-3.987q.115.249.246.485a1.576,1.576,0,0,1-.271-.417Z" transform="translate(-109.146 -214.508)" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="5"/>
          </g>
          <g id="Group_3694" data-name="Group 3694" transform="translate(20.193 25.386)">
            <path id="Path_8395" data-name="Path 8395" d="M191.573,289.678c-.046-2.952-.126-7.538-1.251-10.124,0,0-.29-1.017-2.76-1.743,0,0-5.9-4.036-9.593-3.8l0-.016-.011.017-.073,0c-.119-.489-.25-.976-.366-1.376a6.266,6.266,0,0,0,.664-3.768c-.055-.335.478.048.64-.589.312-1.194.987-3.655.084-4.13-.056-.028-.1-.047-.138-.066-.026.187-.055.372-.085.553.03-.182.059-.367.085-.553a16.762,16.762,0,0,0,.2-3.1c-.381-5.719-4.153-5.01-4.153-5.01s-.56-2.387-4.323-1.78c-1.381.216-6.937,3.959-5.085,5.811.145.145-2.682,1.131-1.082,4.426.23.472.458,1.083.71,1.689h0c-.281.453.084,1.893.7,3.4a1.868,1.868,0,0,0,1.184.948,13.812,13.812,0,0,0,1.6,3.091c.038.266.077.562.114.872-.042-.049-.079-.1-.11-.136a1.069,1.069,0,0,1-.15-.226,5.455,5.455,0,0,0-.1.549,15.916,15.916,0,0,0-8.9,4.923,3.6,3.6,0,0,0-2.033,2.18,50.734,50.734,0,0,0,.123,7.944Z" transform="translate(-154.992 -252.419)" fill="#fff" opacity="0.75"/>
            <path id="Path_8396" data-name="Path 8396" d="M186.754,286.064c-.046-2.952-.126-7.538-1.251-10.123,0,0-.291-1.017-2.76-1.744,0,0-5.9-4.036-9.592-3.8l0-.016-.011.017-.074,0c-.118-.489-.25-.976-.366-1.375a6.265,6.265,0,0,0,.664-3.768c-.055-.335.479.049.64-.589.312-1.195.987-3.655.084-4.13-.056-.028-.1-.047-.138-.066-.027.187-.055.372-.086.553.031-.182.059-.367.085-.553a16.722,16.722,0,0,0,.2-3.1c-.381-5.719-4.153-5.01-4.153-5.01s-.56-2.387-4.322-1.78c-1.382.216-6.937,3.959-5.085,5.811.146.145-2.682,1.131-1.081,4.426.23.472.457,1.083.709,1.689h0c-.281.453.083,1.893.7,3.4a1.869,1.869,0,0,0,1.185.948,13.8,13.8,0,0,0,1.6,3.091c.038.265.078.562.115.872-.042-.049-.079-.1-.11-.136a1.072,1.072,0,0,1-.151-.226,5.322,5.322,0,0,0-.1.549,15.915,15.915,0,0,0-8.9,4.923,3.6,3.6,0,0,0-2.034,2.179,50.694,50.694,0,0,0,.123,7.944Z" transform="translate(-152.421 -250.491)" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="5"/>
          </g>
          <g id="Group_3701" data-name="Group 3701" transform="translate(51.018 18.575)" opacity="0.5">
            <g id="Group_3696" data-name="Group 3696">
              <path id="Path_8397" data-name="Path 8397" d="M221.184,235.941l.747,1.512a.085.085,0,0,0,.063.046l1.669.242a.084.084,0,0,1,.047.144l-1.208,1.177a.085.085,0,0,0-.024.075l.285,1.662a.084.084,0,0,1-.122.089l-1.493-.784a.083.083,0,0,0-.078,0l-1.493.784a.084.084,0,0,1-.122-.089l.285-1.662a.084.084,0,0,0-.024-.075l-1.208-1.177a.084.084,0,0,1,.047-.144l1.669-.242a.085.085,0,0,0,.063-.046l.746-1.512A.084.084,0,0,1,221.184,235.941Z" transform="translate(-218.482 -235.895)" fill="#ffc301"/>
              <g id="Group_3695" data-name="Group 3695" transform="translate(0.34 0.396)">
                <path id="Path_8398" data-name="Path 8398" d="M221.5,236.744l-.665,1.288a.223.223,0,0,1-.178.12l-1.444.132,1.525.071a.222.222,0,0,0,.219-.145Z" transform="translate(-219.211 -236.744)" fill="#ffd253"/>
              </g>
              <path id="Path_8399" data-name="Path 8399" d="M220.6,242.628l-.033.191a.084.084,0,0,0,.122.089l1.493-.784a.083.083,0,0,1,.078,0l1.493.784a.084.084,0,0,0,.122-.089l-.285-1.662a.085.085,0,0,1,.024-.075l1.208-1.177a.084.084,0,0,0-.047-.144l-.559-.081A6.445,6.445,0,0,1,220.6,242.628Z" transform="translate(-219.592 -237.914)" fill="#f3b411"/>
            </g>
            <g id="Group_3698" data-name="Group 3698" transform="translate(5.996)">
              <path id="Path_8400" data-name="Path 8400" d="M234.035,235.941l.746,1.512a.085.085,0,0,0,.063.046l1.669.242a.084.084,0,0,1,.047.144l-1.208,1.177a.083.083,0,0,0-.024.075l.285,1.662a.084.084,0,0,1-.122.089L234,240.1a.083.083,0,0,0-.078,0l-1.493.784a.084.084,0,0,1-.122-.089l.285-1.662a.085.085,0,0,0-.024-.075l-1.208-1.177a.084.084,0,0,1,.047-.144l1.669-.242a.085.085,0,0,0,.063-.046l.747-1.512A.084.084,0,0,1,234.035,235.941Z" transform="translate(-231.333 -235.895)" fill="#ffc301"/>
              <g id="Group_3697" data-name="Group 3697" transform="translate(0.34 0.396)">
                <path id="Path_8401" data-name="Path 8401" d="M234.348,236.744l-.665,1.288a.222.222,0,0,1-.177.12l-1.444.132,1.526.071a.222.222,0,0,0,.219-.145Z" transform="translate(-232.061 -236.744)" fill="#ffd253"/>
              </g>
              <path id="Path_8402" data-name="Path 8402" d="M233.448,242.628l-.033.191a.084.084,0,0,0,.122.089l1.493-.784a.083.083,0,0,1,.078,0l1.493.784a.084.084,0,0,0,.122-.089l-.285-1.662a.084.084,0,0,1,.024-.075l1.208-1.177a.084.084,0,0,0-.047-.144l-.559-.081A6.447,6.447,0,0,1,233.448,242.628Z" transform="translate(-232.443 -237.914)" fill="#f3b411"/>
            </g>
            <g id="Group_3700" data-name="Group 3700" transform="translate(11.992)">
              <path id="Path_8403" data-name="Path 8403" d="M246.885,235.941l.746,1.512a.086.086,0,0,0,.063.046l1.669.242a.084.084,0,0,1,.047.144l-1.208,1.177a.084.084,0,0,0-.024.075l.285,1.662a.084.084,0,0,1-.122.089l-1.493-.784a.083.083,0,0,0-.078,0l-1.493.784a.084.084,0,0,1-.122-.089l.285-1.662a.083.083,0,0,0-.024-.075l-1.208-1.177a.084.084,0,0,1,.047-.144l1.669-.242a.086.086,0,0,0,.063-.046l.746-1.512A.084.084,0,0,1,246.885,235.941Z" transform="translate(-244.183 -235.895)" fill="#ffc301"/>
              <g id="Group_3699" data-name="Group 3699" transform="translate(0.34 0.396)">
                <path id="Path_8404" data-name="Path 8404" d="M247.2,236.744l-.665,1.288a.224.224,0,0,1-.178.12l-1.444.132,1.526.071a.222.222,0,0,0,.219-.145Z" transform="translate(-244.911 -236.744)" fill="#ffd253"/>
              </g>
              <path id="Path_8405" data-name="Path 8405" d="M246.3,242.628l-.033.191a.084.084,0,0,0,.122.089l1.493-.784a.083.083,0,0,1,.078,0l1.493.784a.084.084,0,0,0,.122-.089l-.285-1.662a.084.084,0,0,1,.024-.075l1.208-1.177a.084.084,0,0,0-.047-.144l-.559-.081A6.446,6.446,0,0,1,246.3,242.628Z" transform="translate(-245.293 -237.914)" fill="#f3b411"/>
            </g>
          </g>
          <g id="Group_3708" data-name="Group 3708" transform="translate(5.809 28.037)" opacity="0.5">
            <g id="Group_3703" data-name="Group 3703">
              <path id="Path_8406" data-name="Path 8406" d="M123.372,256.2l.491,1a.056.056,0,0,0,.042.03l1.1.16a.055.055,0,0,1,.031.094l-.795.775a.056.056,0,0,0-.016.049l.188,1.094a.055.055,0,0,1-.08.058l-.982-.516a.055.055,0,0,0-.051,0l-.982.516a.056.056,0,0,1-.081-.058l.188-1.094a.055.055,0,0,0-.016-.049l-.794-.775a.055.055,0,0,1,.03-.094l1.1-.16a.056.056,0,0,0,.042-.03l.491-1A.055.055,0,0,1,123.372,256.2Z" transform="translate(-121.595 -256.173)" fill="#ffc301"/>
              <g id="Group_3702" data-name="Group 3702" transform="translate(0.224 0.261)">
                <path id="Path_8407" data-name="Path 8407" d="M123.578,256.732l-.438.847a.146.146,0,0,1-.117.079l-.95.087,1,.047a.146.146,0,0,0,.144-.1Z" transform="translate(-122.074 -256.732)" fill="#ffd253"/>
              </g>
              <path id="Path_8408" data-name="Path 8408" d="M122.986,260.6l-.022.126a.056.056,0,0,0,.081.058l.982-.516a.055.055,0,0,1,.051,0l.982.516a.055.055,0,0,0,.08-.058l-.188-1.094a.056.056,0,0,1,.016-.049l.795-.775a.055.055,0,0,0-.031-.094l-.368-.054A4.241,4.241,0,0,1,122.986,260.6Z" transform="translate(-122.325 -257.502)" fill="#f3b411"/>
            </g>
            <g id="Group_3705" data-name="Group 3705" transform="translate(3.945)">
              <path id="Path_8409" data-name="Path 8409" d="M131.827,256.2l.491,1a.055.055,0,0,0,.042.03l1.1.16a.055.055,0,0,1,.031.094l-.795.775a.056.056,0,0,0-.016.049l.188,1.094a.055.055,0,0,1-.08.058l-.982-.516a.056.056,0,0,0-.052,0l-.982.516a.056.056,0,0,1-.081-.058l.188-1.094a.055.055,0,0,0-.016-.049l-.795-.775a.055.055,0,0,1,.031-.094l1.1-.16a.057.057,0,0,0,.042-.03l.491-1A.055.055,0,0,1,131.827,256.2Z" transform="translate(-130.049 -256.173)" fill="#ffc301"/>
              <g id="Group_3704" data-name="Group 3704" transform="translate(0.223 0.261)">
                <path id="Path_8410" data-name="Path 8410" d="M132.033,256.732l-.438.847a.146.146,0,0,1-.117.079l-.951.087,1,.047a.146.146,0,0,0,.144-.1Z" transform="translate(-130.528 -256.732)" fill="#ffd253"/>
              </g>
              <path id="Path_8411" data-name="Path 8411" d="M131.441,260.6l-.022.126a.056.056,0,0,0,.081.058l.982-.516a.056.056,0,0,1,.052,0l.982.516a.055.055,0,0,0,.08-.058l-.188-1.094a.056.056,0,0,1,.016-.049l.795-.775a.055.055,0,0,0-.031-.094l-.368-.054A4.241,4.241,0,0,1,131.441,260.6Z" transform="translate(-130.78 -257.502)" fill="#f3b411"/>
            </g>
            <g id="Group_3707" data-name="Group 3707" transform="translate(7.89)">
              <path id="Path_8412" data-name="Path 8412" d="M140.282,256.2l.491,1a.057.057,0,0,0,.042.03l1.1.16a.055.055,0,0,1,.031.094l-.795.775a.055.055,0,0,0-.016.049l.188,1.094a.055.055,0,0,1-.081.058l-.982-.516a.056.056,0,0,0-.052,0l-.982.516a.055.055,0,0,1-.081-.058l.188-1.094a.055.055,0,0,0-.016-.049l-.795-.775a.055.055,0,0,1,.031-.094l1.1-.16a.057.057,0,0,0,.042-.03l.491-1A.055.055,0,0,1,140.282,256.2Z" transform="translate(-138.504 -256.173)" fill="#ffc301"/>
              <g id="Group_3706" data-name="Group 3706" transform="translate(0.223 0.261)">
                <path id="Path_8413" data-name="Path 8413" d="M140.488,256.732l-.438.847a.146.146,0,0,1-.117.079l-.95.087,1,.047a.147.147,0,0,0,.145-.1Z" transform="translate(-138.983 -256.732)" fill="#ffd253"/>
              </g>
              <path id="Path_8414" data-name="Path 8414" d="M139.9,260.6l-.021.126a.055.055,0,0,0,.081.058l.982-.516a.056.056,0,0,1,.052,0l.982.516a.055.055,0,0,0,.081-.058l-.188-1.094a.055.055,0,0,1,.016-.049l.795-.775a.055.055,0,0,0-.031-.094l-.368-.054A4.241,4.241,0,0,1,139.9,260.6Z" transform="translate(-139.234 -257.502)" fill="#f3b411"/>
            </g>
          </g>
          <g id="Group_3715" data-name="Group 3715" transform="translate(27.187 52.219)" opacity="0.5">
            <g id="Group_3710" data-name="Group 3710">
              <path id="Path_8415" data-name="Path 8415" d="M170.563,308.052l.871,1.765a.1.1,0,0,0,.074.054l1.948.283a.1.1,0,0,1,.054.168L172.1,311.7a.1.1,0,0,0-.028.087l.333,1.939a.1.1,0,0,1-.143.1l-1.742-.916a.1.1,0,0,0-.092,0l-1.742.916a.1.1,0,0,1-.142-.1l.332-1.939a.1.1,0,0,0-.028-.087l-1.409-1.374a.1.1,0,0,1,.055-.168l1.947-.283a.1.1,0,0,0,.074-.054l.871-1.765A.1.1,0,0,1,170.563,308.052Z" transform="translate(-167.41 -307.997)" fill="#ffc301"/>
              <g id="Group_3709" data-name="Group 3709" transform="translate(0.397 0.462)">
                <path id="Path_8416" data-name="Path 8416" d="M170.929,308.988l-.776,1.5a.259.259,0,0,1-.207.14l-1.685.154,1.78.083a.26.26,0,0,0,.256-.169Z" transform="translate(-168.26 -308.988)" fill="#ffd253"/>
              </g>
              <path id="Path_8417" data-name="Path 8417" d="M169.878,315.855l-.038.223a.1.1,0,0,0,.142.1l1.742-.916a.1.1,0,0,1,.092,0l1.742.916a.1.1,0,0,0,.143-.1l-.333-1.939a.1.1,0,0,1,.028-.087l1.409-1.374a.1.1,0,0,0-.054-.168l-.652-.1A7.521,7.521,0,0,1,169.878,315.855Z" transform="translate(-168.706 -310.354)" fill="#f3b411"/>
            </g>
            <g id="Group_3712" data-name="Group 3712" transform="translate(6.997)">
              <path id="Path_8418" data-name="Path 8418" d="M185.559,308.052l.871,1.765a.1.1,0,0,0,.074.054l1.947.283a.1.1,0,0,1,.055.168L187.1,311.7a.1.1,0,0,0-.028.087l.333,1.939a.1.1,0,0,1-.143.1l-1.742-.916a.1.1,0,0,0-.091,0l-1.742.916a.1.1,0,0,1-.143-.1l.333-1.939a.1.1,0,0,0-.028-.087l-1.409-1.374a.1.1,0,0,1,.055-.168l1.948-.283a.1.1,0,0,0,.074-.054l.871-1.765A.1.1,0,0,1,185.559,308.052Z" transform="translate(-182.406 -307.997)" fill="#ffc301"/>
              <g id="Group_3711" data-name="Group 3711" transform="translate(0.397 0.462)">
                <path id="Path_8419" data-name="Path 8419" d="M185.925,308.988l-.776,1.5a.26.26,0,0,1-.207.14l-1.685.154,1.781.083a.259.259,0,0,0,.256-.169Z" transform="translate(-183.256 -308.988)" fill="#ffd253"/>
              </g>
              <path id="Path_8420" data-name="Path 8420" d="M184.875,315.855l-.038.223a.1.1,0,0,0,.143.1l1.742-.916a.1.1,0,0,1,.091,0l1.742.916a.1.1,0,0,0,.143-.1l-.333-1.939a.1.1,0,0,1,.028-.087l1.409-1.374a.1.1,0,0,0-.055-.168l-.652-.1A7.52,7.52,0,0,1,184.875,315.855Z" transform="translate(-183.702 -310.354)" fill="#f3b411"/>
            </g>
            <g id="Group_3714" data-name="Group 3714" transform="translate(13.995)">
              <path id="Path_8421" data-name="Path 8421" d="M200.556,308.052l.871,1.765a.1.1,0,0,0,.074.054l1.948.283a.1.1,0,0,1,.055.168l-1.409,1.374a.1.1,0,0,0-.028.087l.333,1.939a.1.1,0,0,1-.143.1l-1.742-.916a.1.1,0,0,0-.091,0l-1.742.916a.1.1,0,0,1-.143-.1l.333-1.939a.1.1,0,0,0-.028-.087l-1.409-1.374a.1.1,0,0,1,.055-.168l1.947-.283a.1.1,0,0,0,.074-.054l.871-1.765A.1.1,0,0,1,200.556,308.052Z" transform="translate(-197.403 -307.997)" fill="#ffc301"/>
              <g id="Group_3713" data-name="Group 3713" transform="translate(0.397 0.462)">
                <path id="Path_8422" data-name="Path 8422" d="M200.922,308.988l-.776,1.5a.259.259,0,0,1-.207.14l-1.685.154,1.78.083a.259.259,0,0,0,.256-.169Z" transform="translate(-198.253 -308.988)" fill="#ffd253"/>
              </g>
              <path id="Path_8423" data-name="Path 8423" d="M199.872,315.855l-.038.223a.1.1,0,0,0,.143.1l1.742-.916a.1.1,0,0,1,.091,0l1.742.916a.1.1,0,0,0,.143-.1l-.333-1.939a.1.1,0,0,1,.028-.087l1.409-1.374a.1.1,0,0,0-.055-.168l-.652-.1A7.52,7.52,0,0,1,199.872,315.855Z" transform="translate(-198.699 -310.354)" fill="#f3b411"/>
            </g>
          </g>
        </g>
        <g id="Group_3742" data-name="Group 3742" transform="translate(275.574 159.787)" opacity="0.5">
          <g id="Group_3727" data-name="Group 3727" transform="translate(67.583 68.424)">
            <g id="Group_3718" data-name="Group 3718" transform="translate(29.097 8.709)">
              <path id="Path_8424" data-name="Path 8424" d="M504.49,465.9l.982,1.991a.112.112,0,0,0,.083.061l2.2.319a.111.111,0,0,1,.061.19l-1.59,1.55a.111.111,0,0,0-.032.1l.375,2.188a.111.111,0,0,1-.161.117l-1.966-1.033a.111.111,0,0,0-.1,0l-1.966,1.033a.111.111,0,0,1-.161-.117l.375-2.188a.109.109,0,0,0-.032-.1l-1.59-1.55a.111.111,0,0,1,.062-.19l2.2-.319a.11.11,0,0,0,.083-.061l.983-1.991A.111.111,0,0,1,504.49,465.9Z" transform="translate(-500.932 -465.84)" fill="#ffc301"/>
              <g id="Group_3717" data-name="Group 3717" transform="translate(0.447 0.522)">
                <path id="Path_8425" data-name="Path 8425" d="M504.838,466.884l-.876,1.7a.293.293,0,0,1-.233.157l-1.9.174,2.009.094a.293.293,0,0,0,.289-.191Z" transform="translate(-501.827 -466.884)" fill="#ffd253"/>
              </g>
              <path id="Path_8426" data-name="Path 8426" d="M503.534,474.374l-.043.251a.111.111,0,0,0,.161.117l1.966-1.033a.111.111,0,0,1,.1,0l1.965,1.033a.111.111,0,0,0,.161-.117l-.375-2.188a.112.112,0,0,1,.032-.1l1.59-1.55a.111.111,0,0,0-.062-.19l-.736-.107A8.487,8.487,0,0,1,503.534,474.374Z" transform="translate(-502.211 -468.166)" fill="#f3b411"/>
            </g>
            <g id="Group_3720" data-name="Group 3720" transform="translate(19.959 11.12)">
              <path id="Path_8427" data-name="Path 8427" d="M485.178,470.707l.7,1.411a.08.08,0,0,0,.059.043l1.557.226a.079.079,0,0,1,.044.135l-1.128,1.1a.078.078,0,0,0-.022.069l.266,1.552a.079.079,0,0,1-.114.083l-1.393-.733a.08.08,0,0,0-.074,0l-1.393.733a.079.079,0,0,1-.114-.083l.266-1.552a.078.078,0,0,0-.022-.069l-1.128-1.1a.079.079,0,0,1,.044-.135l1.558-.226a.08.08,0,0,0,.059-.043l.7-1.411A.079.079,0,0,1,485.178,470.707Z" transform="translate(-482.656 -470.663)" fill="#ffc301"/>
              <g id="Group_3719" data-name="Group 3719" transform="translate(0.317 0.37)">
                <path id="Path_8428" data-name="Path 8428" d="M485.424,471.4l-.621,1.2a.208.208,0,0,1-.165.111l-1.348.123,1.424.066a.208.208,0,0,0,.2-.135Z" transform="translate(-483.29 -471.403)" fill="#ffd253"/>
              </g>
              <path id="Path_8429" data-name="Path 8429" d="M484.5,476.712l-.03.178a.079.079,0,0,0,.114.083l1.393-.733a.08.08,0,0,1,.073,0l1.393.733a.079.079,0,0,0,.114-.083l-.266-1.552a.078.078,0,0,1,.022-.069l1.128-1.1a.079.079,0,0,0-.044-.135l-.522-.076A6.018,6.018,0,0,1,484.5,476.712Z" transform="translate(-483.562 -472.312)" fill="#f3b411"/>
            </g>
            <g id="Group_3722" data-name="Group 3722" transform="translate(0 8.314)">
              <path id="Path_8430" data-name="Path 8430" d="M444.85,465.087l.583,1.183a.068.068,0,0,0,.05.036l1.3.189a.066.066,0,0,1,.036.112l-.944.921a.067.067,0,0,0-.019.059l.223,1.3a.066.066,0,0,1-.1.069l-1.167-.613a.067.067,0,0,0-.062,0l-1.167.613a.066.066,0,0,1-.1-.069l.223-1.3a.067.067,0,0,0-.019-.059l-.945-.921a.066.066,0,0,1,.036-.112l1.3-.189a.066.066,0,0,0,.049-.036l.584-1.183A.066.066,0,0,1,444.85,465.087Z" transform="translate(-442.737 -465.051)" fill="#ffc301"/>
              <g id="Group_3721" data-name="Group 3721" transform="translate(0.265 0.31)">
                <path id="Path_8431" data-name="Path 8431" d="M445.057,465.671l-.52,1.008a.176.176,0,0,1-.139.093l-1.13.1,1.193.055a.173.173,0,0,0,.171-.113Z" transform="translate(-443.268 -465.671)" fill="#ffd253"/>
              </g>
              <path id="Path_8432" data-name="Path 8432" d="M444.282,470.119l-.025.149a.066.066,0,0,0,.1.07l1.167-.614a.067.067,0,0,1,.061,0l1.168.614a.066.066,0,0,0,.1-.07l-.223-1.3a.067.067,0,0,1,.019-.059l.944-.921a.066.066,0,0,0-.036-.112l-.437-.064A5.039,5.039,0,0,1,444.282,470.119Z" transform="translate(-443.497 -466.432)" fill="#f3b411"/>
            </g>
            <g id="Group_3724" data-name="Group 3724" transform="translate(10.919 10.69)">
              <path id="Path_8433" data-name="Path 8433" d="M466.689,469.839l.583,1.182a.067.067,0,0,0,.05.036l1.3.19a.066.066,0,0,1,.037.112l-.944.921a.066.066,0,0,0-.019.058l.223,1.3a.066.066,0,0,1-.1.07l-1.167-.614a.067.067,0,0,0-.061,0l-1.167.614a.066.066,0,0,1-.1-.07l.223-1.3a.066.066,0,0,0-.019-.058l-.945-.921a.066.066,0,0,1,.036-.112l1.305-.19a.065.065,0,0,0,.049-.036l.584-1.182A.066.066,0,0,1,466.689,469.839Z" transform="translate(-464.576 -469.803)" fill="#ffc301"/>
              <g id="Group_3723" data-name="Group 3723" transform="translate(0.265 0.31)">
                <path id="Path_8434" data-name="Path 8434" d="M466.9,470.422l-.52,1.008a.176.176,0,0,1-.139.094l-1.13.1,1.193.056a.173.173,0,0,0,.171-.114Z" transform="translate(-465.107 -470.422)" fill="#ffd253"/>
              </g>
              <path id="Path_8435" data-name="Path 8435" d="M466.121,474.87l-.026.15a.066.066,0,0,0,.1.069l1.167-.613a.067.067,0,0,1,.061,0l1.168.613a.066.066,0,0,0,.1-.069l-.223-1.3a.066.066,0,0,1,.019-.059l.945-.921a.066.066,0,0,0-.037-.113l-.437-.063A5.039,5.039,0,0,1,466.121,474.87Z" transform="translate(-465.336 -471.184)" fill="#f3b411"/>
            </g>
            <g id="Group_3726" data-name="Group 3726" transform="translate(40.988)">
              <path id="Path_8436" data-name="Path 8436" d="M530.188,448.518l1.512,3.064a.171.171,0,0,0,.128.094l3.381.491a.171.171,0,0,1,.095.292l-2.446,2.385a.171.171,0,0,0-.049.151l.577,3.367a.171.171,0,0,1-.248.18l-3.025-1.59a.172.172,0,0,0-.159,0l-3.024,1.59a.171.171,0,0,1-.248-.18l.578-3.367a.172.172,0,0,0-.049-.151l-2.447-2.385a.171.171,0,0,1,.094-.292l3.381-.491a.171.171,0,0,0,.129-.094l1.512-3.064A.171.171,0,0,1,530.188,448.518Z" transform="translate(-524.712 -448.422)" fill="#ffc301"/>
              <g id="Group_3725" data-name="Group 3725" transform="translate(0.689 0.803)">
                <path id="Path_8437" data-name="Path 8437" d="M530.723,450.028l-1.348,2.61a.45.45,0,0,1-.36.242l-2.925.267,3.091.145a.452.452,0,0,0,.444-.295Z" transform="translate(-526.09 -450.028)" fill="#ffd253"/>
              </g>
              <path id="Path_8438" data-name="Path 8438" d="M528.717,461.553l-.067.387a.171.171,0,0,0,.248.18l3.024-1.59a.172.172,0,0,1,.159,0l3.025,1.59a.171.171,0,0,0,.248-.18l-.577-3.367a.171.171,0,0,1,.049-.151l2.446-2.385a.171.171,0,0,0-.095-.292l-1.132-.164A13.061,13.061,0,0,1,528.717,461.553Z" transform="translate(-526.68 -452.002)" fill="#f3b411"/>
            </g>
          </g>
          <g id="Group_3740" data-name="Group 3740" transform="translate(28.949)">
            <g id="Group_3729" data-name="Group 3729" transform="translate(0 18.701)">
              <path id="Path_8439" data-name="Path 8439" d="M368.511,349.029l.84,1.7a.1.1,0,0,0,.072.052l1.878.273a.1.1,0,0,1,.053.162l-1.36,1.325a.1.1,0,0,0-.027.084l.321,1.871a.1.1,0,0,1-.138.1l-1.68-.883a.1.1,0,0,0-.089,0l-1.68.883a.1.1,0,0,1-.138-.1l.321-1.871a.1.1,0,0,0-.027-.084l-1.359-1.325a.1.1,0,0,1,.053-.162l1.878-.273a.1.1,0,0,0,.072-.052l.84-1.7A.1.1,0,0,1,368.511,349.029Z" transform="translate(-365.469 -348.976)" fill="#ffc301"/>
              <g id="Group_3728" data-name="Group 3728" transform="translate(0.383 0.446)">
                <path id="Path_8440" data-name="Path 8440" d="M368.809,349.868l-.749,1.451a.251.251,0,0,1-.2.134l-1.625.148,1.717.08a.251.251,0,0,0,.247-.164Z" transform="translate(-366.234 -349.868)" fill="#ffd253"/>
              </g>
              <path id="Path_8441" data-name="Path 8441" d="M367.694,356.272l-.037.215a.1.1,0,0,0,.138.1l1.68-.884a.1.1,0,0,1,.089,0l1.68.884a.1.1,0,0,0,.138-.1l-.321-1.871a.1.1,0,0,1,.027-.084l1.36-1.325a.1.1,0,0,0-.053-.162l-.629-.091A7.257,7.257,0,0,1,367.694,356.272Z" transform="translate(-366.562 -350.965)" fill="#f3b411"/>
            </g>
            <g id="Group_3731" data-name="Group 3731" transform="translate(0.781 9.853)">
              <path id="Path_8442" data-name="Path 8442" d="M371.917,331.392l.319,2.529a.126.126,0,0,0,.068.1l2.264,1.171a.128.128,0,0,1,0,.229l-2.306,1.084a.129.129,0,0,0-.071.095l-.414,2.514a.127.127,0,0,1-.219.066l-1.744-1.858a.127.127,0,0,0-.112-.039l-2.519.383a.127.127,0,0,1-.131-.187l1.228-2.233a.127.127,0,0,0,0-.118l-1.143-2.277a.127.127,0,0,1,.138-.182l2.5.478a.129.129,0,0,0,.114-.035l1.813-1.791A.127.127,0,0,1,371.917,331.392Z" transform="translate(-367.031 -331.28)" fill="#ffc301"/>
              <g id="Group_3730" data-name="Group 3730" transform="translate(0.58 0.573)">
                <path id="Path_8443" data-name="Path 8443" d="M372.216,332.426l-1.586,1.512a.337.337,0,0,1-.312.083l-2.128-.525,2.143.856a.337.337,0,0,0,.385-.1Z" transform="translate(-368.19 -332.426)" fill="#ffd253"/>
              </g>
              <path id="Path_8444" data-name="Path 8444" d="M367.188,340.734l-.142.257a.127.127,0,0,0,.131.187l2.519-.383a.127.127,0,0,1,.112.039l1.744,1.858a.127.127,0,0,0,.219-.066l.414-2.514a.129.129,0,0,1,.071-.095l2.306-1.084a.128.128,0,0,0,0-.229l-.759-.392A9.74,9.74,0,0,1,367.188,340.734Z" transform="translate(-367.031 -334.796)" fill="#f3b411"/>
            </g>
            <g id="Group_3733" data-name="Group 3733" transform="translate(3.211 28.069)">
              <path id="Path_8445" data-name="Path 8445" d="M373.649,367.744l.486.984a.055.055,0,0,0,.042.03l1.086.158a.055.055,0,0,1,.03.093l-.785.766a.055.055,0,0,0-.016.048l.186,1.082a.055.055,0,0,1-.079.058l-.971-.51a.054.054,0,0,0-.051,0l-.971.51a.055.055,0,0,1-.08-.058l.185-1.082a.055.055,0,0,0-.016-.048l-.786-.766a.055.055,0,0,1,.03-.093l1.086-.158a.054.054,0,0,0,.041-.03l.486-.984A.055.055,0,0,1,373.649,367.744Z" transform="translate(-371.891 -367.713)" fill="#ffc301"/>
              <g id="Group_3732" data-name="Group 3732" transform="translate(0.221 0.258)">
                <path id="Path_8446" data-name="Path 8446" d="M373.821,368.229l-.433.838a.143.143,0,0,1-.115.077l-.94.086.993.047a.145.145,0,0,0,.143-.095Z" transform="translate(-372.333 -368.229)" fill="#ffd253"/>
              </g>
              <path id="Path_8447" data-name="Path 8447" d="M373.177,371.93l-.021.125a.055.055,0,0,0,.08.058l.971-.51a.054.054,0,0,1,.051,0l.971.51a.055.055,0,0,0,.079-.058l-.186-1.082a.055.055,0,0,1,.016-.048l.785-.766a.055.055,0,0,0-.03-.093l-.364-.053A4.192,4.192,0,0,1,373.177,371.93Z" transform="translate(-372.523 -368.863)" fill="#f3b411"/>
            </g>
            <g id="Group_3735" data-name="Group 3735" transform="translate(8.6 40.627)">
              <path id="Path_8448" data-name="Path 8448" d="M383.518,392.843l.234.475a.026.026,0,0,0,.02.015l.525.076a.027.027,0,0,1,.014.045l-.379.37a.028.028,0,0,0-.008.023l.089.523a.026.026,0,0,1-.038.027l-.469-.246a.026.026,0,0,0-.024,0l-.469.246a.026.026,0,0,1-.039-.027l.09-.523a.027.027,0,0,0-.008-.023l-.379-.37a.027.027,0,0,1,.014-.045l.525-.076a.025.025,0,0,0,.02-.015l.234-.475A.027.027,0,0,1,383.518,392.843Z" transform="translate(-382.669 -392.829)" fill="#ffc301"/>
              <g id="Group_3734" data-name="Group 3734" transform="translate(0.107 0.124)">
                <path id="Path_8449" data-name="Path 8449" d="M383.6,393.077l-.209.4a.07.07,0,0,1-.056.038l-.453.042.479.022a.07.07,0,0,0,.069-.046Z" transform="translate(-382.883 -393.077)" fill="#ffd253"/>
              </g>
              <path id="Path_8450" data-name="Path 8450" d="M383.29,394.864l-.01.06a.026.026,0,0,0,.038.027l.469-.246a.026.026,0,0,1,.025,0l.469.246a.026.026,0,0,0,.039-.027l-.09-.523a.028.028,0,0,1,.008-.023l.38-.37a.027.027,0,0,0-.015-.045l-.175-.026A2.023,2.023,0,0,1,383.29,394.864Z" transform="translate(-382.974 -393.383)" fill="#f3b411"/>
            </g>
            <g id="Group_3737" data-name="Group 3737" transform="translate(5.846 35.765)">
              <path id="Path_8451" data-name="Path 8451" d="M378.7,383.131l.424.86a.048.048,0,0,0,.036.027l.949.138a.048.048,0,0,1,.027.081l-.687.669a.048.048,0,0,0-.014.043l.162.945a.048.048,0,0,1-.07.051l-.849-.447a.047.047,0,0,0-.044,0l-.849.447a.048.048,0,0,1-.07-.051l.162-.945a.048.048,0,0,0-.014-.043l-.686-.669a.048.048,0,0,1,.027-.081l.949-.138a.048.048,0,0,0,.036-.027l.424-.86A.048.048,0,0,1,378.7,383.131Z" transform="translate(-377.161 -383.105)" fill="#ffc301"/>
              <g id="Group_3736" data-name="Group 3736" transform="translate(0.193 0.225)">
                <path id="Path_8452" data-name="Path 8452" d="M378.848,383.555l-.378.733a.127.127,0,0,1-.1.068l-.822.075.868.04a.127.127,0,0,0,.125-.083Z" transform="translate(-377.547 -383.555)" fill="#ffd253"/>
              </g>
              <path id="Path_8453" data-name="Path 8453" d="M378.285,386.791l-.018.109a.048.048,0,0,0,.069.051l.849-.447a.047.047,0,0,1,.044,0l.849.447a.048.048,0,0,0,.069-.051l-.162-.945a.048.048,0,0,1,.013-.043l.687-.669a.048.048,0,0,0-.026-.081l-.318-.047A3.665,3.665,0,0,1,378.285,386.791Z" transform="translate(-377.713 -384.109)" fill="#f3b411"/>
            </g>
            <g id="Group_3739" data-name="Group 3739" transform="translate(4.945)">
              <path id="Path_8454" data-name="Path 8454" d="M377.785,311.6l2.322,1.6a.142.142,0,0,0,.13.016l2.634-1.007a.14.14,0,0,1,.185.171l-.8,2.7a.142.142,0,0,0,.025.129l1.771,2.194a.14.14,0,0,1-.106.229l-2.819.072a.142.142,0,0,0-.115.064l-1.539,2.362a.141.141,0,0,1-.251-.03l-.939-2.659a.14.14,0,0,0-.1-.089l-2.723-.734a.141.141,0,0,1-.049-.248l2.239-1.715a.141.141,0,0,0,.055-.119l-.143-2.816A.141.141,0,0,1,377.785,311.6Z" transform="translate(-375.36 -311.574)" fill="#ffc301"/>
              <g id="Group_3738" data-name="Group 3738" transform="translate(0.518 0.597)">
                <path id="Path_8455" data-name="Path 8455" d="M378.477,312.768l.08,2.422a.374.374,0,0,1-.161.32l-2,1.37,2.285-1.14a.373.373,0,0,0,.2-.391Z" transform="translate(-376.395 -312.768)" fill="#ffd253"/>
              </g>
              <path id="Path_8456" data-name="Path 8456" d="M382.867,320.419l.108.306a.141.141,0,0,0,.251.03l1.539-2.362a.142.142,0,0,1,.115-.064l2.818-.071a.141.141,0,0,0,.106-.229l-1.771-2.194a.141.141,0,0,1-.026-.128l.8-2.7a.14.14,0,0,0-.185-.172l-.883.337A10.775,10.775,0,0,1,382.867,320.419Z" transform="translate(-379.113 -312.198)" fill="#f3b411"/>
            </g>
          </g>
          <g id="Group_3741" data-name="Group 3741" transform="translate(0 0.632)">
            <path id="Path_8457" data-name="Path 8457" d="M410.027,315.48a14.448,14.448,0,0,0-11.461,23.248l-.285,1.485-.414,2.161a.318.318,0,0,0,.417.36l2.079-.722,1.159-.4a14.45,14.45,0,1,0,8.506-26.13Z" transform="translate(-351.574 -314.16)" fill="#e7e7e7"/>
            <path id="Path_8458" data-name="Path 8458" d="M330.022,318.9l-1.244.12-.784.076-4.361-5.812a1.125,1.125,0,0,0-1.575-.224L308.021,323.6a1.125,1.125,0,0,0-.224,1.575l5.807,7.738a1.125,1.125,0,0,0,1.575.225L329.215,322.6a1.125,1.125,0,0,0,.225-1.575l-.054-.072.3-.658.518-1.138A.181.181,0,0,0,330.022,318.9Z" transform="translate(-307.571 -312.839)" fill="#e7e7e7"/>
            <rect id="Rectangle_4120" data-name="Rectangle 4120" width="9.225" height="1.575" transform="translate(2.803 11.108) rotate(-36.241)" fill="#9d9c9c"/>
            <rect id="Rectangle_4121" data-name="Rectangle 4121" width="6.525" height="1.575" transform="translate(4.466 13.376) rotate(-36.241)" fill="#9d9c9c"/>
            <rect id="Rectangle_4122" data-name="Rectangle 4122" width="8.775" height="1.575" transform="translate(6.195 15.735) rotate(-36.241)" fill="#9d9c9c"/>
            <rect id="Rectangle_4123" data-name="Rectangle 4123" width="11.68" height="2.771" transform="translate(51.607 9.148) rotate(-1.042)" fill="#9d9c9c"/>
            <rect id="Rectangle_4124" data-name="Rectangle 4124" width="11.482" height="2.771" transform="translate(51.697 14.096) rotate(-1.042)" fill="#9d9c9c"/>
            <rect id="Rectangle_4125" data-name="Rectangle 4125" width="11.68" height="2.771" transform="translate(51.79 19.242) rotate(-1.042)" fill="#9d9c9c"/>
          </g>
          <path id="Path_8459" data-name="Path 8459" d="M490.2,328.137a3.64,3.64,0,0,0,2.319,2.923.892.892,0,0,1-.032,1.668l-7.9,1.053a2.427,2.427,0,0,0-2.085,2.726s.6,5.428.924,6.931c.255,1.188,1.745.746,2.169.277a4.212,4.212,0,0,1,2.454-1.7,3.276,3.276,0,1,1,.865,6.494,4.881,4.881,0,0,1-2.5-.71c-1.053-.427-2.307-.333-2.383.193-.064.441,1.13,8.483,1.13,8.483a2.427,2.427,0,0,0,2.726,2.085l7.9-1.053c.652.035.989.725.6.99a3.638,3.638,0,1,0,3.829-.028c-.522-.38-.65-1.342-.252-1.518l8.125-1.082a2.426,2.426,0,0,0,2.085-2.725l-1-7.53a1.3,1.3,0,0,0-2.266-.389,3.277,3.277,0,1,1-.82-4.08c.732.574,2.486.314,2.461-.223-.062-1.385-1.031-7.743-1.031-7.743a2.426,2.426,0,0,0-2.726-2.085s-6.358.969-8.125,1.082c-.505.033-.414-1.78-.121-2.121a3.639,3.639,0,1,0-6.346-1.913Z" transform="translate(-395.029 -317.795)" fill="#9d9c9c"/>
          <path id="Path_8460" data-name="Path 8460" d="M407.331,413.824a3.812,3.812,0,0,0,3.649-1.4.935.935,0,0,1,1.658.554l-1.421,8.228a2.542,2.542,0,0,0,2.072,2.938s5.616,1.1,7.22,1.247c1.268.117,1.292-1.511.956-2.083a4.412,4.412,0,0,1-.936-2.987,3.432,3.432,0,0,1,6.764,1.168,5.115,5.115,0,0,1-1.492,2.277c-.757.919-1.055,2.2-.552,2.444.42.2,8.835,1.526,8.835,1.526a2.543,2.543,0,0,0,2.938-2.073l1.421-8.231c.24-.641,1.035-.762,1.177-.29a3.812,3.812,0,1,0,1.171-3.837c-.544.4-1.546.229-1.6-.224l1.461-8.462a2.542,2.542,0,0,0-2.073-2.938l-7.842-1.354c-1.324-.1-1.626,1.654-1.1,2.144a3.433,3.433,0,1,1-4.335-.457c.8-.552,1.092-2.387.548-2.531-1.4-.372-8.064-1.393-8.064-1.393a2.542,2.542,0,0,0-2.938,2.073s-1.022,6.66-1.462,8.462c-.126.515-1.91-.144-2.159-.543a3.812,3.812,0,1,0-3.9,5.745Z" transform="translate(-355.868 -354.812)" fill="#e7e7e7"/>
        </g>
        <g id="Group_3754" data-name="Group 3754" transform="translate(416.951 141.302)">
          <path id="Path_8461" data-name="Path 8461" d="M622.332,384.722s-2.3-8.133-4.588-8.221-7.448,4.783-8.307,13.092-6.018,24.643-2.865,30.947S612.3,432,622.9,427.7s14.04-7.736,14.9-10.888a4.523,4.523,0,0,0-.286-1.146c-.287-.859-1.719-4.3-4.012-4.3s-6.3,1.432-8.6,2.293C624.911,413.663,626.63,399.049,622.332,384.722Z" transform="translate(-597.944 -325.552)" fill="#dbdbdb"/>
          <path id="Path_8462" data-name="Path 8462" d="M615.751,310.052c-1.365-3.156-2.606-9.149-.084-14.636,3.977-8.655,11.033-20.691,25.029-20.811s28.059,15.743,27.107,23.832c-.822,6.987-1.6,11.341-10.277,15.094s-27.921,4.427-35.286,2.145A12.687,12.687,0,0,1,615.751,310.052Z" transform="translate(-602.269 -274.604)" fill="#42210b"/>
          <path id="Path_8463" data-name="Path 8463" d="M646.667,282.049c9.858.566,17.311,10.4,16.648,21.962,0,.048-.008.094-.011.142,1.445-.26,4.539-.376,3.227,3.83-1.068,3.423-3.333,3.747-4.856,3.523-2.688,6.8-6.782,9.546-13.357,12.011,0,1.765,2.016,2.995,4.109,5.343,0,0-4.909,10.4-13.186,10.618s-6.951-12.673-6.951-12.673a18.533,18.533,0,0,0,5.343-4.521c-4.521-1.233-9.194-7.148-10.114-12.583C624.368,291.077,636.81,281.484,646.667,282.049Z" transform="translate(-608.673 -278.315)" fill="#feecdc"/>
          <path id="Path_8464" data-name="Path 8464" d="M660.468,314.931a.2.2,0,0,1-.121.011,4.338,4.338,0,0,0-3.156.809.206.206,0,0,1-.269-.311,4.733,4.733,0,0,1,3.512-.9.205.205,0,0,1,.034.391Z" transform="translate(-623.589 -294.545)" fill="#221e1f"/>
          <path id="Path_8465" data-name="Path 8465" d="M633.14,318.684a.207.207,0,0,1-.167-.027,4.336,4.336,0,0,0-3.231-.413.2.2,0,0,1-.262-.126.205.205,0,0,1,.126-.262,4.727,4.727,0,0,1,3.595.46.205.205,0,0,1-.061.369Z" transform="translate(-609.897 -296.145)" fill="#221e1f"/>
          <g id="Group_3747" data-name="Group 3747" transform="translate(26.062 36.867)" opacity="0.8">
            <g id="Group_3746" data-name="Group 3746">
              <g id="Group_3745" data-name="Group 3745" clip-path="url(#clip-path-6)">
                <g id="Group_3744" data-name="Group 3744" transform="translate(0)">
                  <g id="Group_3743" data-name="Group 3743" clip-path="url(#clip-path-7)">
                    <path id="Path_8466" data-name="Path 8466" d="M649.182,348.339s-1.249,2.443-3.289,2.51-3.446-2.291-3.446-2.291" transform="translate(-642.448 -348.339)" fill="#db727c"/>
                  </g>
                </g>
              </g>
            </g>
          </g>
          <g id="Group_3752" data-name="Group 3752" transform="translate(24.807 28.982)" opacity="0.8">
            <g id="Group_3751" data-name="Group 3751">
              <g id="Group_3750" data-name="Group 3750" clip-path="url(#clip-path-8)">
                <g id="Group_3749" data-name="Group 3749">
                  <g id="Group_3748" data-name="Group 3748" clip-path="url(#clip-path-8)">
                    <path id="Path_8467" data-name="Path 8467" d="M642.378,333.586s-1.661,2-1.339,2.648,2.332,1.04,2.332,1.04" transform="translate(-640.469 -333.077)" fill="none" stroke="#c6946b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
                  </g>
                </g>
              </g>
            </g>
          </g>
          <path id="Path_8468" data-name="Path 8468" d="M632.654,326.768a1.2,1.2,0,1,0,.706-1.549,1.2,1.2,0,0,0-.706,1.549" transform="translate(-611.451 -299.873)" fill="#221e1f"/>
          <path id="Path_8469" data-name="Path 8469" d="M658.941,326.326a1.2,1.2,0,1,0,.706-1.549,1.2,1.2,0,0,0-.706,1.549" transform="translate(-624.595 -299.652)" fill="#221e1f"/>
          <path id="Path_8470" data-name="Path 8470" d="M626.262,293.969a12.962,12.962,0,0,1,6.164-2.877,11.5,11.5,0,0,1,5.047-6.441s-3.814,5.009-3.814,6.441c0,0,5.1-.735,7.4.411,0,0,2.147-6.852,5.013-7.711,0,0-2.579,5.445-2.579,8.31l2.293.573s3.439-6.3,3.439-7.164c0,0-.573,6.591-1.433,7.737,0,0,5.731,1.719,7.737,4.012a53.646,53.646,0,0,0,.573-6.877s6.591,14.327-.573,23.5c0,0,6.3-6.3,7.164-10.029s.859-16.62-7.737-21.2c-7.677-4.094-16.047-3.725-20.058-.573S623.472,296.36,626.262,293.969Z" transform="translate(-607.987 -277.122)" fill="#42210b"/>
          <path id="Path_8471" data-name="Path 8471" d="M617.124,382.27s0-11.1,8.63-13.151c0,0,1.208,8.648,6.366,9.508,0,0,6.591,1.72,10.6-3.725,0,0,1.432-2.865,4.3-2.579s9.742,0,9.169,11.462-6.018,29.513-2.866,38.97,12.322,33.525,13.468,49.858.573,15.474.573,15.474,0,1.432-3.152,1.432-38.4.286-47.28-2.005c0,0-5.158.286-4.584-3.725s1.432-47.28,4.3-60.461a51.919,51.919,0,0,0,1.432-9.169C618.366,409.286,614.832,393.445,617.124,382.27Z" transform="translate(-601.315 -321.861)" fill="#e7e7e7"/>
          <path id="Path_8472" data-name="Path 8472" d="M642.958,436.334s-4.5-2.214-6.377-4.845c0,0-3.281-4.45-4.664-5.036,0,0-5.5-.5-6.874-.467s-2.5.774-2.9,4.277,3.274,6.63,5.228,7.152a12.765,12.765,0,0,0,5.754,0c2.053-.353,5.309,1.9,6.242,2.9S643.441,437.762,642.958,436.334Z" transform="translate(-606.219 -350.294)" fill="#feecdc"/>
          <path id="Path_8473" data-name="Path 8473" d="M668.253,389.654s2.3-8.133,4.587-8.221,7.448,4.783,8.307,13.092,6.018,24.642,2.865,30.947-5.731,11.462-16.333,7.164-14.04-7.737-14.9-10.888c0,0-4.013-4.105-3.727-4.965s1.817-4.52,4.109-4.52,10.219,5.473,12.512,6.333C665.674,418.595,663.955,403.981,668.253,389.654Z" transform="translate(-619.682 -328.018)" fill="#dbdbdb"/>
          <path id="Path_8474" data-name="Path 8474" d="M665.332,372.088s-7.45,6.877-9.456,7.45a2.1,2.1,0,0,0,.286,1.719c.573.86,2.579,4.585,4.872,4.012s2.006,0,2.866.573,2.005,1.719,4.011-1.147,5.731-7.737,8.6-8.6c0,0,0-.286-1.433-.859a15.96,15.96,0,0,0-7.736-2.006A4.885,4.885,0,0,0,665.332,372.088Z" transform="translate(-623.065 -323.346)" fill="#f09491"/>
          <path id="Path_8475" data-name="Path 8475" d="M633.414,368.382s3.145,7.882,4.523,9.092c0,0,.432.8-.414.947a4.394,4.394,0,0,0-2.853,1.961c-.928,1.329-3.449,3.522-6.193-2.1s-.405-7.2,1.137-8.351S633.032,367.868,633.414,368.382Z" transform="translate(-608.767 -321.419)" fill="#f09491"/>
          <path id="Path_8476" data-name="Path 8476" d="M649.245,373.579c-.316,0-.608-.018-.881-.045-2.941-.294-5.708-5.429-5.824-5.648l.362-.193c.028.052,2.78,5.159,5.5,5.432,1.8.179,4.486-.062,9.312-3.556l.241.333C653.74,372.956,651.094,373.579,649.245,373.579Z" transform="translate(-616.433 -321.148)" fill="#42210b"/>
          <circle id="Ellipse_706" data-name="Ellipse 706" cx="0.573" cy="0.573" r="0.573" transform="translate(31.379 52.18)" fill="#d1232e"/>
          <g id="Group_3753" data-name="Group 3753" transform="translate(9.229 67.81)">
            <path id="Path_8477" data-name="Path 8477" d="M614.643,413.346s-2.127,3.812.424,3.5c0,0,.159,1.314,2.019.645a2.142,2.142,0,0,0,2.657.567c1.86-.669,1.047-3.712,1.047-3.712S616.45,412.238,614.643,413.346Z" transform="translate(-611.297 -411.624)" fill="#feecdc"/>
            <path id="Path_8478" data-name="Path 8478" d="M618.212,413.332s-1.492-3.066-4.542-3.1-2.287-.024-3.821.722-1.429,1.608.422,1.578,4.226-.636,5.313.836S618.2,414.1,618.212,413.332Z" transform="translate(-608.783 -410.224)" fill="#feecdc"/>
          </g>
          <path id="Path_8479" data-name="Path 8479" d="M614.372,421.8l-2.625,4.443a1.3,1.3,0,0,1-1.714.681l-18.919-8.154a1.3,1.3,0,0,1-.681-1.714l3.517-4.281a1.3,1.3,0,0,1,1.714-.681l18.027,7.991A1.3,1.3,0,0,1,614.372,421.8Z" transform="translate(-590.325 -343.297)" fill="#42210b"/>
          <path id="Path_8480" data-name="Path 8480" d="M602.56,414.675l-6.076-2.694c-.661-.285-1.429-.391-1.714.271l-3.516,4.281a1.3,1.3,0,0,0,.681,1.714l13.319,5.74A39.988,39.988,0,0,1,602.56,414.675Z" transform="translate(-590.736 -343.181)" fill="#fff" opacity="0.17"/>
          <path id="Path_8481" data-name="Path 8481" d="M616.456,435.4s-2.464-3.475.311-2.56,3.456,2.44,3.456,2.44,8.076,2.426,7.161,5.2S619.954,439.864,616.456,435.4Z" transform="translate(-602.886 -353.644)" fill="#feecdc"/>
        </g>
        <path id="Path_6895" data-name="Path 6895" d="M375.317,505.811V483.157s-95.445,5.664-186.5,6.535S-1.128,476.622-1.128,476.622v29.185Z" transform="translate(122.352 -234.311)" fill="#f8f9fa"/>
      </g>
    </g>
  </g>
</svg>
PAMapp/assets/images/index_banner2_web.svg
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,362 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1444" height="570.018" viewBox="0 0 1444 570.018">
  <defs>
    <clipPath id="clip-path">
      <path id="Path_8159" data-name="Path 8159" d="M1442,549s-538.678,16.635-730,16C541.74,564.435-2,549-2,549V-5H1442Z" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-2">
      <rect id="Rectangle_4084" data-name="Rectangle 4084" width="12.172" height="4.338" transform="matrix(0.979, -0.204, 0.204, 0.979, 410.688, 423.908)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-4">
      <rect id="Rectangle_4086" data-name="Rectangle 4086" width="5.796" height="6.796" transform="translate(411.044 409.978) rotate(-18.469)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-6">
      <rect id="Rectangle_4088" data-name="Rectangle 4088" width="13.476" height="4.802" transform="matrix(0.999, -0.033, 0.033, 0.999, 976.332, 411.432)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-7">
      <rect id="Rectangle_4087" data-name="Rectangle 4087" width="13.474" height="4.802" transform="matrix(0.999, -0.033, 0.033, 0.999, 976.332, 411.432)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-8">
      <rect id="Rectangle_4090" data-name="Rectangle 4090" width="7.528" height="6.42" transform="translate(973.822 402.352) rotate(-71.348)" fill="none"/>
    </clipPath>
  </defs>
  <g id="index_banner2_web" transform="translate(2 5)">
    <g id="Group_3495" data-name="Group 3495" clip-path="url(#clip-path)">
      <g id="Group_3494" data-name="Group 3494">
        <rect id="Rectangle_4115" data-name="Rectangle 4115" width="1496" height="561.656" transform="translate(-11 -27)" fill="#f2c75c"/>
        <g id="Group_1432" data-name="Group 1432" opacity="0.3">
          <g id="Group_1431" data-name="Group 1431">
            <g id="Group_1428" data-name="Group 1428">
              <path id="Path_694" data-name="Path 694" d="M380.648,240.412l-22.7-18.624,18.624-22.7,22.7,18.624Zm-20.27-18.864,20.03,16.432,16.434-20.03-20.03-16.432Z" fill="#a89968"/>
              <path id="Path_695" data-name="Path 695" d="M424.548,150.428l-38.764-31.814,31.8-38.764,38.77,31.812Zm-34.614-32.214,34.2,28.062L452.2,112.062,418,84.008Z" fill="#a89968"/>
              <path id="Path_696" data-name="Path 696" d="M586.122,63.246a17.7,17.7,0,1,1,17.7-17.7h0A17.7,17.7,0,0,1,586.122,63.246Zm0-32.444a14.746,14.746,0,1,0,14.746,14.746h0A14.746,14.746,0,0,0,586.124,30.8h0Z" fill="#a89968"/>
              <path id="Path_697" data-name="Path 697" d="M1130.3,298.07a17.7,17.7,0,1,1,17.7-17.7v0h0A17.7,17.7,0,0,1,1130.3,298.07Zm0-32.444a14.748,14.748,0,1,0,14.748,14.748,14.748,14.748,0,0,0-14.748-14.748Z" fill="#a89968"/>
            </g>
            <g id="Group_1429" data-name="Group 1429">
              <circle id="Ellipse_323" data-name="Ellipse 323" cx="33.96" cy="33.96" r="33.96" transform="translate(1021.174 81.688)" fill="#f2c75c" opacity="0.5" style="isolation: isolate"/>
              <path id="Path_4975" data-name="Path 4975" d="M1050.528,148.142a34.6,34.6,0,1,1,34.6-34.6h0A34.627,34.627,0,0,1,1050.528,148.142Zm0-68.6a34,34,0,1,0,34,34A34,34,0,0,0,1050.528,79.542Z" fill="#f2c75c"/>
            </g>
            <g id="Group_1430" data-name="Group 1430">
              <path id="Path_4959" data-name="Path 4959" d="M938.9,75.72l-3.38,8.624,28.13,92.012,6.838,2.68Z" fill="#a89968"/>
              <path id="Path_4960" data-name="Path 4960" d="M944.982,60.212l-3.38,8.624L975.95,181.18l6.836,2.68Z" fill="#a89968"/>
              <path id="Path_4961" data-name="Path 4961" d="M932.82,91.232l-3.38,8.626,21.912,71.676,6.838,2.68Z" fill="#a89968"/>
              <path id="Path_4962" data-name="Path 4962" d="M954.98,57.5l-6.838-2.68L988.25,186.006l6.838,2.68Z" fill="#a89968"/>
              <path id="Path_4963" data-name="Path 4963" d="M914.454,157.068l6.836,2.68-6.718-21.98-3.382,8.624Z" fill="#a89968"/>
              <path id="Path_4964" data-name="Path 4964" d="M920.654,122.252l-3.38,8.626,9.48,31,6.838,2.682Z" fill="#a89968"/>
              <path id="Path_4965" data-name="Path 4965" d="M926.738,106.746l-3.382,8.62,15.7,51.342,6.838,2.68Z" fill="#a89968"/>
              <path id="Path_4966" data-name="Path 4966" d="M967.278,62.316l-6.838-2.682,40.108,131.19,6.838,2.682Z" fill="#a89968"/>
              <path id="Path_4967" data-name="Path 4967" d="M1046.928,94.684l.386-.984-.782-.306Z" fill="#a89968"/>
              <path id="Path_4968" data-name="Path 4968" d="M1041.072,91.254l-6.834-2.682,6.6,21.626,3.382-8.624Z" fill="#a89968"/>
              <path id="Path_4969" data-name="Path 4969" d="M1028.774,86.43l-6.84-2.682,12.828,41.96,3.38-8.624Z" fill="#a89968"/>
              <path id="Path_4970" data-name="Path 4970" d="M908.49,153.28,908,154.532l1,.4Z" fill="#a89968"/>
              <path id="Path_4971" data-name="Path 4971" d="M991.874,71.96l-6.836-2.68,31.48,102.962,3.38-8.624Z" fill="#a89968"/>
              <path id="Path_4972" data-name="Path 4972" d="M1016.472,81.606l-6.838-2.682,19.046,62.3,3.38-8.624Z" fill="#a89968"/>
              <path id="Path_4973" data-name="Path 4973" d="M979.576,67.14l-6.842-2.686,37.7,123.3,3.382-8.622Z" fill="#a89968"/>
              <path id="Path_4974" data-name="Path 4974" d="M1004.174,76.784l-6.838-2.68,25.262,82.628,3.382-8.624Z" fill="#a89968"/>
            </g>
          </g>
        </g>
        <path id="Path_7126" data-name="Path 7126" d="M335.114,570.758c-47.42-36.22-74.928-132.682,68.914-176.556,29.038-5.412,86.02-14.776,140.346,11.018s136.56,8.056,189.1-25.864S904,221,1181.59,223.772c86.747.868,271.935,29.19,322.41,56.228,111.045,59.483,21.2,159.906-15.326,281.346C1435.54,737.986,589.6,765.136,335.114,570.758Z" fill="#e0d9c2"/>
        <path id="Path_7126-2" data-name="Path 7126-2" d="M648.36,555.872s32.282,114.458-84.378,104.8c-14.17-1.172-29.766-5.308-47.752-30.886s-58.682-27.334-90.042-13.754S52.512,688.706-70,642-255.488,511.384-190,405c16.186-26.294,260-90,418.916-68.718C361.736,354.069,585.22,435.554,648.36,555.872Z" fill="#e0d9c2"/>
        <g id="Group_3691" data-name="Group 3691">
          <path id="Path_8374" data-name="Path 8374" d="M476.552,554.472s9.668,41.724,10.686,81.412a611.993,611.993,0,0,1-3.562,77.852s11.7,7.124,11.7,11.2-8.14,2.544-10.684,2.544-15.264-4.58-16.8-9.16-22.388-149.088-22.388-161.3-2.036,162.826-2.036,162.826,0,12.212-10.176,15.774-7.632-8.65-5.09-13.23c0,0-18.826-98.2-21.88-136.876S422.608,547.86,439.4,544.3,467.394,541.242,476.552,554.472Z" fill="#67737a"/>
          <path id="Path_8375" data-name="Path 8375" d="M473.754,445.838s-.508-10.178-3.562-15.774c0,0-5.088-9.668-5.088-12.722a14.66,14.66,0,0,0-2.036-5.6c-1.526-2.036-4.58-5.088-4.07-7.124,0,0-.51-1.526,2.036-1.526a6.932,6.932,0,0,1,4.578,2.544,2.683,2.683,0,0,0,3.52-1.42c.015-.035.029-.07.042-.106,1.018-2.544,3.054-4.07,9.158-2.036S488.51,408.688,488,412.76a73.75,73.75,0,0,1-6.106,17.8c-2.036,3.562,0,9.158,1.018,11.7S475.788,447.872,473.754,445.838Z" fill="#feecdc"/>
          <path id="Path_8376" data-name="Path 8376" d="M441.832,399.186a1.6,1.6,0,0,0-.016-.168c-2.542-20.772-18.958-35.854-36.664-33.686s-30,20.762-27.458,41.534c.01.086.026.17.038.256-2.636-.3-8.226-.15-5.374,7.282,2.322,6.048,6.446,6.368,9.166,5.786,5.638,11.946,16.364,20,28.2,20.536.2,3.182-2.114,5.892-5.616,10.37,0,0,6.162,17.49,21.11,16.912s14.57-24.8,14.57-24.8-9.2-2.786-13-7.364A36.024,36.024,0,0,0,441.294,412.9c2.742-.2,6.348-1.672,7.108-7.8C449.344,397.586,444.452,398.3,441.832,399.186Z" fill="#feecdc"/>
          <path id="Path_8377" data-name="Path 8377" d="M378.6,404.11l.51,3.562s-6.362,1.272-7.888-.254-6.868-14.5,2.8-28.75,52.664-21.116,65.892-3.816c9.36,12.24,5.6,20.352,4.58,23.4-.508,1.528-3.052,1.528-4.07,1.528,0,0-.51-4.072-1.526-8.652,0,0-2.544-12.212-10.686-12.212-10.176,0-42.742,8.142-46.812,10.686S377.59,397.5,378.6,404.11Z" fill="#221e1f"/>
          <path id="Path_8378" data-name="Path 8378" d="M371.988,407.672s-5.6-14.248,1.018-22.388,51.674-24.142,68.58-8.256c0,0,.622-7-3.958-10.062,0,0,13.228-1.526,12.72-5.6s-4.578-4.58-11.2-4.58-8.142-2.544-8.142-2.544-10.686-8.65-19.336-5.088a224.9,224.9,0,0,1-29,8.65c-3.052.508-20.862,6.614-21.37,22.388S363.338,407.164,371.988,407.672Z" fill="#67737a"/>
          <path id="Path_8379" data-name="Path 8379" d="M404.3,446.6s3.054,4.07,14.756,2.544a28,28,0,0,0,17.8-9.666s39.18-3.562,51.4,34.092,18.826,102.784,17.3,110.926c0,0-.51,3.562-3.052,4.072,0,0-28.494,2.544-32.058,2.544s-37.906,6.358-41.468,6.866c0,0-38.162,4.58-41.724,5.088s-4.07.51-4.07-3.052-.508-18.318-.508-23.4c0,0-22.388-12.72-27.986-21.37s-8.65-16.284-5.6-24.424,11.7-41.724,16.8-53.428S389.8,446.854,404.3,446.6Z" fill="#f09491"/>
          <path id="Path_8380" data-name="Path 8380" d="M470.7,444.816s9.668-5.6,18.828-5.088a47.025,47.025,0,0,1,4.07,4.58c1.018,1.526,26.968,56.48,17.3,65.64,0,0-4.58,6.614-18.318,4.07S468.664,447.872,470.7,444.816Z" fill="#e78b88"/>
          <path id="Path_8381" data-name="Path 8381" d="M395.742,398.074a8.2,8.2,0,0,1,6.086-1.266" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
          <g id="Group_3679" data-name="Group 3679">
            <path id="Path_8382" data-name="Path 8382" d="M398.954,403.772a5.929,5.929,0,0,1,5.234.374" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
            <path id="Path_8383" data-name="Path 8383" d="M398.416,405.89a8.205,8.205,0,0,1,5.978-1.7" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
          </g>
          <path id="Path_8384" data-name="Path 8384" d="M419.836,393.062a8.2,8.2,0,0,1,6.092-1.266" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
          <g id="Group_3684" data-name="Group 3684" opacity="0.8">
            <g id="Group_3683" data-name="Group 3683">
              <g id="Group_3481" data-name="Group 3481">
                <g id="Group_3480" data-name="Group 3480" clip-path="url(#clip-path-2)">
                  <g id="Group_3682" data-name="Group 3682">
                    <g id="Group_3681" data-name="Group 3681">
                      <g id="Group_3479" data-name="Group 3479">
                        <g id="Group_3478" data-name="Group 3478" clip-path="url(#clip-path-2)">
                          <g id="Group_3680" data-name="Group 3680">
                            <path id="Path_8385" data-name="Path 8385" d="M410.688,423.908s3.232,3.76,6.842,3,5.076-5.488,5.076-5.488" fill="#db727c"/>
                          </g>
                        </g>
                      </g>
                    </g>
                  </g>
                </g>
              </g>
            </g>
          </g>
          <g id="Group_3689" data-name="Group 3689" opacity="0.8">
            <g id="Group_3688" data-name="Group 3688">
              <g id="Group_3485" data-name="Group 3485">
                <g id="Group_3484" data-name="Group 3484" clip-path="url(#clip-path-4)">
                  <g id="Group_3687" data-name="Group 3687">
                    <g id="Group_3686" data-name="Group 3686">
                      <g id="Group_3483" data-name="Group 3483">
                        <g id="Group_3482" data-name="Group 3482" clip-path="url(#clip-path-4)">
                          <g id="Group_3685" data-name="Group 3685">
                            <path id="Path_8386" data-name="Path 8386" d="M415.262,409.054s3,3.614,2.4,4.8-4.218,1.866-4.218,1.866" fill="none" stroke="#c6946b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
                          </g>
                        </g>
                      </g>
                    </g>
                  </g>
                </g>
              </g>
            </g>
          </g>
          <path id="Path_8387" data-name="Path 8387" d="M425.08,398.664a2.176,2.176,0,1,1-2.573-1.688h0a2.175,2.175,0,0,1,2.572,1.688" fill="#221e1f"/>
          <g id="Group_3690" data-name="Group 3690">
            <path id="Path_8388" data-name="Path 8388" d="M501.482,425.582a3.886,3.886,0,0,1-1.626-.356l-47.832-21.88a3.914,3.914,0,0,1,3.258-7.118l47.83,21.88a3.916,3.916,0,0,1-1.63,7.476Z" fill="#72502b"/>
            <path id="Path_8389" data-name="Path 8389" d="M432.538,415.988a26.632,26.632,0,1,1,26.632-26.632A26.632,26.632,0,0,1,432.538,415.988Zm0-46.3a19.672,19.672,0,1,0,19.672,19.672h0a19.694,19.694,0,0,0-19.672-19.674Z" fill="#d1232e"/>
          </g>
          <path id="Path_8390" data-name="Path 8390" d="M478.842,399.532a5.181,5.181,0,0,0-6.614.51c-3.052,3.052-6.614,7.632-4.578,9.668,0,0-.51,3.052,2.034,3.052,0,0,0,3.052,4.58,2.544,0,0,1.526,3.562,6.106.508,0,0,6.614-5.088,6.106-9.158S478.842,399.532,478.842,399.532Z" fill="#feecdc"/>
        </g>
        <g id="Group_3716" data-name="Group 3716" opacity="0.5">
          <g id="Group_3692" data-name="Group 3692">
            <path id="Path_8391" data-name="Path 8391" d="M591.108,317.306a3.466,3.466,0,0,0-.4,1.316h39.986q.053-.774.1-1.556l.234.038a3.933,3.933,0,0,0-.078-2.852,58.869,58.869,0,0,0-.168-12.134,5.96,5.96,0,0,0-4.534-4.76,28.6,28.6,0,0,1-9.12-3.084,8.263,8.263,0,0,0-.4-1.448,1.642,1.642,0,0,1-.188.38c-.04.07-.088.148-.144.232v-1.37a21.481,21.481,0,0,0,1.858-5.1c.1,0,2.044-.78,2.316-1.846.334-1.262,2.134-2.688,2.04-3.628-.042-.418-.492-.732-.988-.984a.4.4,0,0,0,.082-.15,14.072,14.072,0,0,0,.452-8.388c1.05-1.362,1.972-3.768,1.36-3.4a9.9,9.9,0,0,1-4.76.68c-4.136-4.136-15.624-3.14-15.624-3.14s-4.1.42-5.232,9.034v1.814c.058,1.118.256.728.742,2.488.176.638.308.908.4.948l-.016.646c-.454,8.84,2.176,9.77,3.256,11.4-.1.642-.2,1.422-.29,2.2.1.156.216.348.362.572-.06-.062-.116-.122-.166-.176-.212-.268-.33-.412-.33-.412a2.384,2.384,0,0,1-.028.268c-.618,1.036-2.756,2.326-8.472,4.744-5.894,2.494-3.07,10.342-3.07,10.342S592.468,315.04,591.108,317.306Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
            <path id="Path_8392" data-name="Path 8392" d="M588.252,313.926a3.46,3.46,0,0,0-.4,1.316h39.986q.051-.771.1-1.556l.234.036a3.932,3.932,0,0,0-.078-2.852,58.849,58.849,0,0,0-.168-12.132,5.962,5.962,0,0,0-4.534-4.762,28.618,28.618,0,0,1-9.12-3.082,8.286,8.286,0,0,0-.4-1.448,1.642,1.642,0,0,1-.188.38c-.04.068-.088.146-.142.232v-1.37a21.482,21.482,0,0,0,1.858-5.1c.1,0,2.044-.78,2.316-1.846.334-1.262,2.134-2.688,2.04-3.628-.042-.418-.492-.734-.988-.984a.411.411,0,0,0,.08-.15,14.088,14.088,0,0,0,.454-8.388c1.048-1.362,1.972-3.768,1.36-3.4a9.911,9.911,0,0,1-4.762.68c-4.136-4.136-15.624-3.14-15.624-3.14s-4.1.418-5.232,9.034v1.814c.06,1.118.256.728.742,2.488.176.638.31.908.4.948l-.016.644c-.454,8.842,2.176,9.77,3.256,11.4-.1.642-.2,1.42-.292,2.2.1.154.216.348.362.572-.06-.062-.116-.122-.166-.178-.212-.268-.33-.41-.33-.41,0,.09-.018.178-.026.268-.62,1.036-2.756,2.326-8.472,4.744-5.894,2.494-3.07,10.342-3.07,10.342S589.61,311.65,588.252,313.926Z" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="4"/>
          </g>
          <g id="Group_3693" data-name="Group 3693">
            <path id="Path_8393" data-name="Path 8393" d="M496.688,312.41a32.592,32.592,0,0,0,3.884-7.6,7.9,7.9,0,0,0,.652.642,11.473,11.473,0,0,0,7.956,5.94,3.288,3.288,0,0,1-1.018,1.97c-.018-.068-.032-.124-.044-.168s-.226,0-.248,0a1.642,1.642,0,0,0-.25.25.478.478,0,0,1-.02.1,27.49,27.49,0,0,0-15.154,15.934h41.686a33.145,33.145,0,0,0-.126-4.478c-.782-7.8-11.654-11.036-14.176-11.684a.563.563,0,0,0-.024-.126s-.566-.108-.6-.056a1.036,1.036,0,0,1-.02.2,10.476,10.476,0,0,1-3.782-2.926,12.805,12.805,0,0,0,6.11-7.47h.066c-.086.894-.17,1.526-.17,1.526a6.465,6.465,0,0,0,.634-1.548c.882-.112,1.874-.662,2.316-2.426.484-1.936-.358-2.414-1.218-2.448.022-.128.034-.2.034-.2a16.774,16.774,0,0,0-.662-9.5c-5.3-8.834-15.018-5.742-15.018-5.742a11.889,11.889,0,0,0-10.37,8.37,2.379,2.379,0,0,0-3.052,1.418c-.018.049-.035.1-.05.15-2.2,4.858-1.768,9.274.442,11.924A14.2,14.2,0,0,1,496.688,312.41Zm4.024-7.974q.228.5.492.97a3.155,3.155,0,0,1-.544-.834Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
            <path id="Path_8394" data-name="Path 8394" d="M492.84,310.152a32.593,32.593,0,0,0,3.884-7.6,7.479,7.479,0,0,0,.652.644,11.47,11.47,0,0,0,7.956,5.94,3.283,3.283,0,0,1-1.018,1.97c-.018-.066-.032-.124-.044-.168s-.226,0-.248,0a1.584,1.584,0,0,0-.25.248.661.661,0,0,1-.02.106A27.482,27.482,0,0,0,488.6,327.226h41.686a32.977,32.977,0,0,0-.126-4.478c-.78-7.8-11.654-11.036-14.176-11.684l-.024-.126s-.566-.108-.6-.056a1.036,1.036,0,0,1-.02.2,10.48,10.48,0,0,1-3.78-2.926,12.809,12.809,0,0,0,6.11-7.47h.066c-.088.894-.17,1.526-.17,1.526a6.525,6.525,0,0,0,.634-1.548c.882-.112,1.874-.662,2.316-2.428.484-1.936-.358-2.412-1.218-2.448.022-.126.034-.2.034-.2a16.774,16.774,0,0,0-.662-9.5c-5.3-8.832-15.016-5.742-15.016-5.742a11.889,11.889,0,0,0-10.37,8.368,2.382,2.382,0,0,0-3.054,1.422c-.017.048-.033.1-.048.146-2.2,4.858-1.766,9.276.442,11.926A14.194,14.194,0,0,1,492.84,310.152Zm4.022-7.974q.231.5.492.97a3.174,3.174,0,0,1-.542-.834Z" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="5"/>
          </g>
          <g id="Group_3694" data-name="Group 3694">
            <path id="Path_8395" data-name="Path 8395" d="M602.148,387.912c-.092-5.9-.252-15.076-2.5-20.248,0,0-.58-2.034-5.52-3.486,0,0-11.8-8.072-19.186-7.6v-.032l-.022.034h-.146c-.238-.978-.5-1.952-.732-2.752a12.527,12.527,0,0,0,1.328-7.536c-.11-.67.956.1,1.28-1.178.624-2.388,1.974-7.31.168-8.26-.112-.056-.2-.094-.276-.132-.052.374-.11.744-.17,1.106.06-.364.118-.734.17-1.106a33.505,33.505,0,0,0,.4-6.2c-.762-11.438-8.306-10.02-8.306-10.02s-1.12-4.774-8.646-3.56c-2.762.432-13.874,7.918-10.17,11.622.29.29-5.364,2.262-2.164,8.852.46.944.916,2.166,1.42,3.378h0c-.562.906.168,3.786,1.4,6.8a3.736,3.736,0,0,0,2.368,1.9,27.614,27.614,0,0,0,3.2,6.182c.076.532.154,1.124.228,1.744-.084-.1-.158-.2-.22-.272a2.179,2.179,0,0,1-.3-.452,11.09,11.09,0,0,0-.2,1.1,31.838,31.838,0,0,0-17.8,9.846,7.2,7.2,0,0,0-4.066,4.36,101.541,101.541,0,0,0,.246,15.888Z" fill="#fff" opacity="0.75" style="isolation: isolate"/>
            <path id="Path_8396" data-name="Path 8396" d="M597.652,384.54c-.092-5.9-.252-15.076-2.5-20.246,0,0-.582-2.034-5.52-3.488,0,0-11.8-8.072-19.184-7.6v-.032l-.022.034h-.148c-.236-.978-.5-1.952-.732-2.75a12.527,12.527,0,0,0,1.328-7.536c-.11-.67.958.1,1.28-1.178.624-2.39,1.974-7.31.168-8.26-.112-.056-.2-.094-.276-.132-.054.374-.11.744-.172,1.106.062-.364.118-.734.17-1.106a33.337,33.337,0,0,0,.4-6.2c-.762-11.438-8.306-10.02-8.306-10.02s-1.12-4.774-8.644-3.56c-2.764.432-13.874,7.918-10.17,11.622.292.29-5.364,2.262-2.162,8.852.46.944.914,2.166,1.418,3.378h0c-.562.906.166,3.786,1.4,6.8a3.739,3.739,0,0,0,2.37,1.9,27.614,27.614,0,0,0,3.2,6.182c.076.53.156,1.124.23,1.744-.084-.1-.158-.2-.22-.272a2.149,2.149,0,0,1-.3-.452,11.036,11.036,0,0,0-.2,1.1,31.838,31.838,0,0,0-17.8,9.846,7.2,7.2,0,0,0-4.068,4.358,101.542,101.542,0,0,0,.246,15.888Z" fill="none" stroke="#f09491" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="5"/>
          </g>
          <g id="Group_3701" data-name="Group 3701" opacity="0.5">
            <g id="Group_3696" data-name="Group 3696">
              <path id="Path_8397" data-name="Path 8397" d="M596.04,299.864l1.494,3.024a.171.171,0,0,0,.126.092l3.338.484a.169.169,0,0,1,.145.189.164.164,0,0,1-.051.1l-2.416,2.354a.173.173,0,0,0-.048.15l.57,3.324a.168.168,0,0,1-.244.178l-2.986-1.568a.166.166,0,0,0-.156,0l-2.986,1.568a.168.168,0,0,1-.227-.07.175.175,0,0,1-.017-.108l.57-3.324a.167.167,0,0,0-.048-.15l-2.416-2.354a.169.169,0,0,1,.094-.288l3.338-.484a.168.168,0,0,0,.126-.092l1.492-3.024a.169.169,0,0,1,.225-.077A.164.164,0,0,1,596.04,299.864Z" fill="#ffc301"/>
              <g id="Group_3695" data-name="Group 3695">
                <path id="Path_8398" data-name="Path 8398" d="M595.894,300.564l-1.33,2.576a.444.444,0,0,1-.356.24l-2.888.264,3.05.142a.443.443,0,0,0,.438-.29Z" fill="#ffd253"/>
              </g>
              <path id="Path_8399" data-name="Path 8399" d="M592.652,309.2l-.066.382a.168.168,0,0,0,.136.2.162.162,0,0,0,.108-.017l2.986-1.568a.166.166,0,0,1,.156,0l2.986,1.568a.167.167,0,0,0,.227-.07.162.162,0,0,0,.017-.108l-.57-3.324a.173.173,0,0,1,.048-.15l2.416-2.354a.168.168,0,0,0,.006-.237.17.17,0,0,0-.1-.051l-1.118-.162A12.882,12.882,0,0,1,592.652,309.2Z" fill="#f3b411"/>
            </g>
            <g id="Group_3698" data-name="Group 3698">
              <path id="Path_8400" data-name="Path 8400" d="M608.032,299.864l1.492,3.024a.171.171,0,0,0,.126.092l3.338.484a.169.169,0,0,1,.145.189.164.164,0,0,1-.051.1l-2.416,2.354a.167.167,0,0,0-.048.15l.57,3.324a.168.168,0,0,1-.244.178l-2.982-1.576a.166.166,0,0,0-.156,0l-2.986,1.568a.168.168,0,0,1-.227-.07.175.175,0,0,1-.017-.108l.57-3.324a.167.167,0,0,0-.048-.15l-2.416-2.354a.169.169,0,0,1,.094-.288l3.338-.484a.167.167,0,0,0,.126-.092l1.494-3.024a.168.168,0,0,1,.3.008Z" fill="#ffc301"/>
              <g id="Group_3697" data-name="Group 3697">
                <path id="Path_8401" data-name="Path 8401" d="M607.882,300.564l-1.33,2.576a.441.441,0,0,1-.354.24l-2.888.264,3.052.142a.443.443,0,0,0,.438-.29Z" fill="#ffd253"/>
              </g>
              <path id="Path_8402" data-name="Path 8402" d="M604.638,309.2l-.066.382a.168.168,0,0,0,.136.2.162.162,0,0,0,.108-.017l2.986-1.568a.166.166,0,0,1,.156,0l2.986,1.568a.167.167,0,0,0,.227-.07.162.162,0,0,0,.017-.108l-.57-3.324a.167.167,0,0,1,.048-.15l2.416-2.354a.168.168,0,0,0,.006-.237.17.17,0,0,0-.1-.051l-1.118-.162A12.89,12.89,0,0,1,604.638,309.2Z" fill="#f3b411"/>
            </g>
            <g id="Group_3700" data-name="Group 3700">
              <path id="Path_8403" data-name="Path 8403" d="M620.024,299.864l1.492,3.024a.174.174,0,0,0,.126.092l3.338.484a.169.169,0,0,1,.145.189.164.164,0,0,1-.051.1l-2.416,2.354a.17.17,0,0,0-.048.15l.57,3.324a.168.168,0,0,1-.244.178l-2.986-1.568a.166.166,0,0,0-.156,0l-2.986,1.568a.168.168,0,0,1-.227-.07.175.175,0,0,1-.017-.108l.57-3.324a.162.162,0,0,0-.048-.15l-2.416-2.354a.169.169,0,0,1,.094-.288l3.338-.484a.17.17,0,0,0,.126-.092l1.492-3.024a.168.168,0,0,1,.3,0Z" fill="#ffc301"/>
              <g id="Group_3699" data-name="Group 3699">
                <path id="Path_8404" data-name="Path 8404" d="M619.878,300.564l-1.33,2.576a.445.445,0,0,1-.356.24l-2.888.264,3.052.142a.443.443,0,0,0,.438-.29Z" fill="#ffd253"/>
              </g>
              <path id="Path_8405" data-name="Path 8405" d="M616.634,309.2l-.066.382a.168.168,0,0,0,.136.2.162.162,0,0,0,.108-.017l2.986-1.568a.166.166,0,0,1,.156,0l2.986,1.568a.167.167,0,0,0,.227-.07.162.162,0,0,0,.017-.108l-.57-3.324a.167.167,0,0,1,.048-.15l2.416-2.354a.168.168,0,0,0,.006-.237.17.17,0,0,0-.1-.051l-1.118-.162A12.886,12.886,0,0,1,616.634,309.2Z" fill="#f3b411"/>
            </g>
          </g>
          <g id="Group_3708" data-name="Group 3708" opacity="0.5">
            <g id="Group_3703" data-name="Group 3703">
              <path id="Path_8406" data-name="Path 8406" d="M503.772,318.75l.982,2a.111.111,0,0,0,.084.06l2.2.32a.11.11,0,0,1,.1.124.107.107,0,0,1-.033.064l-1.59,1.55a.112.112,0,0,0-.032.1l.376,2.188a.109.109,0,0,1-.089.127.1.1,0,0,1-.071-.011l-1.964-1.032a.114.114,0,0,0-.1,0l-1.964,1.032a.11.11,0,0,1-.15-.048.115.115,0,0,1-.012-.068l.376-2.188a.107.107,0,0,0-.032-.1l-1.588-1.55a.11.11,0,0,1,.06-.188l2.2-.32a.11.11,0,0,0,.084-.06l.982-2a.111.111,0,0,1,.151-.037A.109.109,0,0,1,503.772,318.75Z" fill="#ffc301"/>
              <g id="Group_3702" data-name="Group 3702">
                <path id="Path_8407" data-name="Path 8407" d="M503.674,319.218l-.876,1.694a.29.29,0,0,1-.234.158l-1.9.174,2,.094a.291.291,0,0,0,.288-.2Z" fill="#ffd253"/>
              </g>
              <path id="Path_8408" data-name="Path 8408" d="M501.54,324.892l-.044.252a.112.112,0,0,0,.1.127.1.1,0,0,0,.067-.011l1.964-1.032a.114.114,0,0,1,.1,0l1.964,1.032a.11.11,0,0,0,.149-.045.1.1,0,0,0,.011-.071l-.376-2.188a.112.112,0,0,1,.032-.1l1.59-1.55a.109.109,0,0,0,0-.155.113.113,0,0,0-.065-.033l-.736-.108A8.479,8.479,0,0,1,501.54,324.892Z" fill="#f3b411"/>
            </g>
            <g id="Group_3705" data-name="Group 3705">
              <path id="Path_8409" data-name="Path 8409" d="M511.664,318.75l.982,2a.111.111,0,0,0,.084.06l2.2.32a.11.11,0,0,1,.1.124.108.108,0,0,1-.033.064l-1.59,1.55a.112.112,0,0,0-.032.1l.376,2.188a.109.109,0,0,1-.089.127.1.1,0,0,1-.071-.011l-1.964-1.032a.112.112,0,0,0-.1,0l-1.964,1.032a.11.11,0,0,1-.15-.048.115.115,0,0,1-.012-.068l.376-2.188a.107.107,0,0,0-.032-.1l-1.59-1.55a.11.11,0,0,1,0-.155.113.113,0,0,1,.064-.033l2.2-.32a.11.11,0,0,0,.084-.06l.982-2a.111.111,0,0,1,.151-.039A.1.1,0,0,1,511.664,318.75Z" fill="#ffc301"/>
              <g id="Group_3704" data-name="Group 3704">
                <path id="Path_8410" data-name="Path 8410" d="M511.564,319.218l-.876,1.694a.29.29,0,0,1-.234.158l-1.9.174,2,.094a.291.291,0,0,0,.288-.2Z" fill="#ffd253"/>
              </g>
              <path id="Path_8411" data-name="Path 8411" d="M509.43,324.892l-.044.252a.113.113,0,0,0,.1.127.1.1,0,0,0,.067-.011l1.964-1.032a.112.112,0,0,1,.1,0l1.964,1.032a.11.11,0,0,0,.149-.045.1.1,0,0,0,.011-.071l-.376-2.188a.112.112,0,0,1,.032-.1l1.59-1.55a.109.109,0,0,0,0-.155.116.116,0,0,0-.065-.033l-.736-.108A8.483,8.483,0,0,1,509.43,324.892Z" fill="#f3b411"/>
            </g>
            <g id="Group_3707" data-name="Group 3707">
              <path id="Path_8412" data-name="Path 8412" d="M519.554,318.75l.982,2a.111.111,0,0,0,.084.06l2.2.32a.11.11,0,0,1,.095.124.107.107,0,0,1-.033.064l-1.59,1.55a.112.112,0,0,0-.032.1l.376,2.188a.109.109,0,0,1-.088.128.107.107,0,0,1-.074-.012l-1.964-1.032a.112.112,0,0,0-.1,0l-1.964,1.032a.109.109,0,0,1-.149-.042.111.111,0,0,1-.013-.074l.376-2.188a.107.107,0,0,0-.032-.1l-1.59-1.55a.11.11,0,0,1,0-.155.114.114,0,0,1,.064-.033l2.2-.32a.11.11,0,0,0,.084-.06l.982-2a.11.11,0,0,1,.15-.042A.113.113,0,0,1,519.554,318.75Z" fill="#ffc301"/>
              <g id="Group_3706" data-name="Group 3706">
                <path id="Path_8413" data-name="Path 8413" d="M519.454,319.218l-.876,1.694a.29.29,0,0,1-.234.158l-1.9.174,2,.094a.293.293,0,0,0,.29-.2Z" fill="#ffd253"/>
              </g>
              <path id="Path_8414" data-name="Path 8414" d="M517.33,324.892l-.042.252a.11.11,0,0,0,.088.128.105.105,0,0,0,.074-.012l1.964-1.032a.112.112,0,0,1,.1,0l1.964,1.032a.11.11,0,0,0,.15-.042.105.105,0,0,0,.012-.074l-.376-2.188a.112.112,0,0,1,.032-.1l1.59-1.55a.109.109,0,0,0,0-.155.116.116,0,0,0-.065-.033l-.736-.108A8.48,8.48,0,0,1,517.33,324.892Z" fill="#f3b411"/>
            </g>
          </g>
          <g id="Group_3715" data-name="Group 3715" opacity="0.5">
            <g id="Group_3710" data-name="Group 3710">
              <path id="Path_8415" data-name="Path 8415" d="M549.28,367.17l1.742,3.53a.2.2,0,0,0,.148.108l3.9.566a.2.2,0,0,1,.108.336l-2.82,2.756a.2.2,0,0,0-.056.174l.666,3.878a.2.2,0,0,1-.286.2l-3.484-1.832a.2.2,0,0,0-.184,0l-3.484,1.832a.2.2,0,0,1-.266-.1.205.205,0,0,1-.018-.1l.664-3.878a.2.2,0,0,0-.056-.174l-2.818-2.748a.2.2,0,0,1,.005-.283.211.211,0,0,1,.105-.053l3.894-.566a.2.2,0,0,0,.148-.108l1.742-3.53a.2.2,0,0,1,.268-.09A.2.2,0,0,1,549.28,367.17Z" fill="#ffc301"/>
              <g id="Group_3709" data-name="Group 3709">
                <path id="Path_8416" data-name="Path 8416" d="M549.106,367.984l-1.552,3a.517.517,0,0,1-.414.28l-3.37.308,3.56.166a.52.52,0,0,0,.512-.338Z" fill="#ffd253"/>
              </g>
              <path id="Path_8417" data-name="Path 8417" d="M545.318,378.062l-.076.446a.2.2,0,0,0,.181.218.193.193,0,0,0,.1-.018l3.484-1.832a.2.2,0,0,1,.184,0l3.484,1.832a.2.2,0,0,0,.267-.093.188.188,0,0,0,.019-.107l-.666-3.878a.2.2,0,0,1,.056-.174l2.818-2.748a.2.2,0,0,0,0-.283.2.2,0,0,0-.1-.053l-1.3-.2A15.04,15.04,0,0,1,545.318,378.062Z" fill="#f3b411"/>
            </g>
            <g id="Group_3712" data-name="Group 3712">
              <path id="Path_8418" data-name="Path 8418" d="M563.274,367.17l1.742,3.53a.2.2,0,0,0,.148.108l3.894.566a.2.2,0,0,1,.11.336l-2.812,2.756a.2.2,0,0,0-.056.174l.666,3.878a.2.2,0,0,1-.286.2l-3.484-1.832a.2.2,0,0,0-.182,0l-3.484,1.832a.2.2,0,0,1-.267-.093.207.207,0,0,1-.019-.107l.666-3.878a.2.2,0,0,0-.056-.174l-2.818-2.748a.2.2,0,0,1,.005-.283.21.21,0,0,1,.1-.053l3.9-.566a.2.2,0,0,0,.148-.108l1.742-3.53a.2.2,0,0,1,.342-.008Z" fill="#ffc301"/>
              <g id="Group_3711" data-name="Group 3711">
                <path id="Path_8419" data-name="Path 8419" d="M563.1,367.984l-1.552,3a.518.518,0,0,1-.414.28l-3.37.308,3.562.166a.516.516,0,0,0,.512-.338Z" fill="#ffd253"/>
              </g>
              <path id="Path_8420" data-name="Path 8420" d="M559.314,378.062l-.076.446a.2.2,0,0,0,.179.219.2.2,0,0,0,.107-.019l3.484-1.832a.2.2,0,0,1,.182,0l3.484,1.832a.2.2,0,0,0,.268-.093.2.2,0,0,0,.018-.107l-.666-3.878a.2.2,0,0,1,.056-.174l2.818-2.748a.2.2,0,0,0-.005-.283.2.2,0,0,0-.105-.053l-1.3-.2A15.036,15.036,0,0,1,559.314,378.062Z" fill="#f3b411"/>
            </g>
            <g id="Group_3714" data-name="Group 3714">
              <path id="Path_8421" data-name="Path 8421" d="M577.27,367.17l1.742,3.53a.2.2,0,0,0,.148.108l3.9.566a.2.2,0,0,1,.11.336l-2.818,2.748a.2.2,0,0,0-.056.174l.666,3.878a.2.2,0,0,1-.286.2l-3.484-1.832a.2.2,0,0,0-.182,0l-3.484,1.832a.2.2,0,0,1-.267-.093.206.206,0,0,1-.019-.107l.666-3.878a.2.2,0,0,0-.056-.174l-2.818-2.748a.2.2,0,0,1,.005-.283.21.21,0,0,1,.1-.053l3.894-.566a.2.2,0,0,0,.148-.108l1.742-3.53a.2.2,0,0,1,.348,0Z" fill="#ffc301"/>
              <g id="Group_3713" data-name="Group 3713">
                <path id="Path_8422" data-name="Path 8422" d="M577.1,367.984l-1.552,3a.518.518,0,0,1-.414.28l-3.37.308,3.56.166a.515.515,0,0,0,.512-.338Z" fill="#ffd253"/>
              </g>
              <path id="Path_8423" data-name="Path 8423" d="M573.31,378.062l-.076.446a.2.2,0,0,0,.179.219.2.2,0,0,0,.107-.019L577,376.876a.2.2,0,0,1,.182,0l3.484,1.832a.2.2,0,0,0,.267-.093.188.188,0,0,0,.019-.107l-.666-3.878a.2.2,0,0,1,.056-.174l2.818-2.748a.2.2,0,0,0-.005-.283.2.2,0,0,0-.1-.053l-1.3-.2A15.036,15.036,0,0,1,573.31,378.062Z" fill="#f3b411"/>
            </g>
          </g>
        </g>
        <g id="Group_3742" data-name="Group 3742" opacity="0.5">
          <g id="Group_3727" data-name="Group 3727">
            <g id="Group_3718" data-name="Group 3718">
              <path id="Path_8424" data-name="Path 8424" d="M841.93,497.616l1.964,3.982a.225.225,0,0,0,.166.122l4.4.638a.222.222,0,0,1,.188.252.218.218,0,0,1-.066.128l-3.18,3.1a.225.225,0,0,0-.064.2l.75,4.376a.221.221,0,0,1-.181.256.216.216,0,0,1-.141-.022l-3.932-2.066a.22.22,0,0,0-.2,0l-3.932,2.066a.222.222,0,0,1-.322-.234l.75-4.376a.217.217,0,0,0-.064-.2l-3.18-3.1a.222.222,0,0,1-.006-.314.226.226,0,0,1,.13-.066l4.4-.638a.217.217,0,0,0,.166-.122l1.966-3.982a.222.222,0,0,1,.388,0Z" fill="#ffc301"/>
              <g id="Group_3717" data-name="Group 3717">
                <path id="Path_8425" data-name="Path 8425" d="M841.73,498.54l-1.752,3.4a.584.584,0,0,1-.466.314l-3.8.348,4.018.188a.584.584,0,0,0,.578-.382Z" fill="#ffd253"/>
              </g>
              <path id="Path_8426" data-name="Path 8426" d="M837.46,509.912l-.086.5a.224.224,0,0,0,.182.257.22.22,0,0,0,.14-.023l3.932-2.066a.227.227,0,0,1,.2,0l3.93,2.066a.223.223,0,0,0,.3-.093.216.216,0,0,0,.022-.141l-.75-4.376a.225.225,0,0,1,.064-.2l3.18-3.1a.221.221,0,0,0,.007-.314.226.226,0,0,0-.131-.066l-1.472-.214A16.97,16.97,0,0,1,837.46,509.912Z" fill="#f3b411"/>
            </g>
            <g id="Group_3720" data-name="Group 3720">
              <path id="Path_8427" data-name="Path 8427" d="M821.582,502.406l1.4,2.822a.161.161,0,0,0,.118.086l3.114.452a.158.158,0,0,1,.135.179.152.152,0,0,1-.047.091l-2.256,2.2a.16.16,0,0,0-.044.138l.532,3.1a.157.157,0,0,1-.228.166l-2.786-1.466a.161.161,0,0,0-.148,0l-2.786,1.466a.158.158,0,0,1-.228-.166l.532-3.1a.155.155,0,0,0-.044-.138l-2.256-2.2a.159.159,0,0,1,.088-.27l3.116-.452a.159.159,0,0,0,.118-.086l1.4-2.822a.158.158,0,0,1,.27,0Z" fill="#ffc301"/>
              <g id="Group_3719" data-name="Group 3719">
                <path id="Path_8428" data-name="Path 8428" d="M821.44,503.052l-1.242,2.4a.415.415,0,0,1-.33.222l-2.7.246,2.848.132a.414.414,0,0,0,.4-.27Z" fill="#ffd253"/>
              </g>
              <path id="Path_8429" data-name="Path 8429" d="M818.414,511.118l-.06.356a.159.159,0,0,0,.131.182.156.156,0,0,0,.1-.016l2.786-1.466a.163.163,0,0,1,.146,0l2.786,1.466a.157.157,0,0,0,.228-.166l-.532-3.1a.16.16,0,0,1,.044-.138l2.256-2.2a.157.157,0,0,0,0-.223.155.155,0,0,0-.092-.047l-1.044-.152A12.034,12.034,0,0,1,818.414,511.118Z" fill="#f3b411"/>
            </g>
            <g id="Group_3722" data-name="Group 3722">
              <path id="Path_8430" data-name="Path 8430" d="M780.846,496.778l1.166,2.366a.133.133,0,0,0,.1.072l2.6.378a.131.131,0,0,1,.072.224L782.9,501.66a.136.136,0,0,0-.038.118l.446,2.6a.132.132,0,0,1-.1.156.13.13,0,0,1-.1-.018l-2.334-1.226a.136.136,0,0,0-.124,0l-2.334,1.226a.132.132,0,0,1-.2-.138l.446-2.6a.133.133,0,0,0-.038-.118l-1.89-1.842a.13.13,0,0,1,0-.186.133.133,0,0,1,.072-.038l2.6-.378a.129.129,0,0,0,.1-.072l1.168-2.366a.139.139,0,1,1,.278,0Z" fill="#ffc301"/>
              <g id="Group_3721" data-name="Group 3721">
                <path id="Path_8431" data-name="Path 8431" d="M780.728,497.326l-1.04,2.016a.351.351,0,0,1-.278.186l-2.26.2,2.386.11a.345.345,0,0,0,.342-.226Z" fill="#ffd253"/>
              </g>
              <path id="Path_8432" data-name="Path 8432" d="M778.19,504.08l-.05.3a.133.133,0,0,0,.1.158.13.13,0,0,0,.1-.018l2.334-1.228a.138.138,0,0,1,.122,0l2.336,1.228a.133.133,0,0,0,.183-.04.129.129,0,0,0,.017-.1l-.446-2.6a.136.136,0,0,1,.038-.118l1.888-1.842a.13.13,0,0,0,0-.186.136.136,0,0,0-.073-.038l-.874-.128A10.076,10.076,0,0,1,778.19,504.08Z" fill="#f3b411"/>
            </g>
            <g id="Group_3724" data-name="Group 3724">
              <path id="Path_8433" data-name="Path 8433" d="M802.684,501.53l1.166,2.364a.133.133,0,0,0,.1.072l2.6.38a.131.131,0,0,1,.074.224l-1.888,1.842a.132.132,0,0,0-.038.116l.446,2.6a.132.132,0,0,1-.2.14l-2.334-1.228a.138.138,0,0,0-.122,0l-2.334,1.228a.13.13,0,0,1-.182-.04.134.134,0,0,1-.018-.1l.446-2.6a.132.132,0,0,0-.038-.116l-1.89-1.842a.13.13,0,0,1,0-.186.134.134,0,0,1,.072-.038l2.61-.38a.127.127,0,0,0,.1-.072l1.168-2.364a.132.132,0,0,1,.264,0Z" fill="#ffc301"/>
              <g id="Group_3723" data-name="Group 3723">
                <path id="Path_8434" data-name="Path 8434" d="M802.574,502.078l-1.04,2.016a.349.349,0,0,1-.278.188l-2.26.2,2.386.112a.345.345,0,0,0,.342-.228Z" fill="#ffd253"/>
              </g>
              <path id="Path_8435" data-name="Path 8435" d="M800.028,508.83l-.052.3a.133.133,0,0,0,.1.156.127.127,0,0,0,.1-.018l2.334-1.226a.138.138,0,0,1,.122,0l2.336,1.226a.133.133,0,0,0,.183-.041.131.131,0,0,0,.017-.1l-.446-2.6a.136.136,0,0,1,.038-.118l1.89-1.842a.132.132,0,0,0-.074-.226l-.874-.126A10.076,10.076,0,0,1,800.028,508.83Z" fill="#f3b411"/>
            </g>
            <g id="Group_3726" data-name="Group 3726">
              <path id="Path_8436" data-name="Path 8436" d="M869.548,480.27l3.024,6.128a.343.343,0,0,0,.256.188l6.762.982a.341.341,0,0,1,.19.584l-4.892,4.77a.343.343,0,0,0-.1.3l1.154,6.734a.342.342,0,0,1-.28.395.346.346,0,0,1-.216-.035l-6.05-3.18a.344.344,0,0,0-.318,0l-6.048,3.18a.343.343,0,0,1-.5-.36l1.156-6.734a.343.343,0,0,0-.1-.3l-4.894-4.77a.341.341,0,0,1-.007-.483.336.336,0,0,1,.2-.1l6.762-.982a.339.339,0,0,0,.258-.188l3.024-6.128a.343.343,0,0,1,.457-.159A.336.336,0,0,1,869.548,480.27Z" fill="#ffc301"/>
              <g id="Group_3725" data-name="Group 3725">
                <path id="Path_8437" data-name="Path 8437" d="M869.24,481.684l-2.7,5.22a.9.9,0,0,1-.72.484l-5.85.534,6.182.29a.9.9,0,0,0,.888-.59Z" fill="#ffd253"/>
              </g>
              <path id="Path_8438" data-name="Path 8438" d="M862.67,499.18l-.134.774a.342.342,0,0,0,.28.394.337.337,0,0,0,.216-.034l6.048-3.18a.344.344,0,0,1,.318,0l6.05,3.18a.342.342,0,0,0,.462-.144.336.336,0,0,0,.034-.216l-1.154-6.734a.343.343,0,0,1,.1-.3l4.892-4.77a.343.343,0,0,0-.19-.584l-2.264-.328A26.117,26.117,0,0,1,862.67,499.18Z" fill="#f3b411"/>
            </g>
          </g>
          <g id="Group_3740" data-name="Group 3740">
            <g id="Group_3729" data-name="Group 3729">
              <path id="Path_8439" data-name="Path 8439" d="M705.436,380.738l1.68,3.4a.2.2,0,0,0,.144.1l3.756.546a.2.2,0,0,1,.148.241.187.187,0,0,1-.042.083l-2.72,2.65a.2.2,0,0,0-.054.168l.642,3.742a.2.2,0,0,1-.184.215.208.208,0,0,1-.092-.015l-3.36-1.766a.2.2,0,0,0-.178,0l-3.36,1.766a.2.2,0,0,1-.261-.108.206.206,0,0,1-.015-.092l.642-3.742a.2.2,0,0,0-.054-.168l-2.718-2.65a.2.2,0,0,1,.023-.282.218.218,0,0,1,.083-.042l3.756-.546a.2.2,0,0,0,.144-.1l1.68-3.4a.2.2,0,0,1,.276-.064A.2.2,0,0,1,705.436,380.738Z" fill="#ffc301"/>
              <g id="Group_3728" data-name="Group 3728">
                <path id="Path_8440" data-name="Path 8440" d="M705.268,381.524l-1.5,2.9a.5.5,0,0,1-.4.268l-3.25.3,3.434.16a.5.5,0,0,0,.494-.328Z" fill="#ffd253"/>
              </g>
              <path id="Path_8441" data-name="Path 8441" d="M701.616,391.246l-.074.43a.2.2,0,0,0,.276.2l3.36-1.768a.2.2,0,0,1,.178,0l3.36,1.768a.2.2,0,0,0,.262-.108.192.192,0,0,0,.014-.092l-.642-3.742a.2.2,0,0,1,.054-.168l2.72-2.65a.2.2,0,0,0-.023-.282.21.21,0,0,0-.083-.042l-1.258-.182A14.514,14.514,0,0,1,701.616,391.246Z" fill="#f3b411"/>
            </g>
            <g id="Group_3731" data-name="Group 3731">
              <path id="Path_8442" data-name="Path 8442" d="M710.686,363.16l.638,5.058a.254.254,0,0,0,.136.2l4.528,2.342a.255.255,0,0,1,0,.458l-4.612,2.168a.262.262,0,0,0-.142.19l-.828,5.028a.253.253,0,0,1-.29.211.257.257,0,0,1-.148-.079l-3.488-3.716a.257.257,0,0,0-.224-.078l-5.038.766a.253.253,0,0,1-.29-.211.257.257,0,0,1,.028-.163l2.456-4.466a.253.253,0,0,0,0-.236l-2.286-4.554a.254.254,0,0,1,.276-.364l5,.956a.259.259,0,0,0,.228-.07l3.626-3.582a.255.255,0,0,1,.43.142Z" fill="#ffc301"/>
              <g id="Group_3730" data-name="Group 3730">
                <path id="Path_8443" data-name="Path 8443" d="M710.126,364.082l-3.172,3.024a.672.672,0,0,1-.624.166l-4.256-1.05,4.286,1.712a.674.674,0,0,0,.77-.2Z" fill="#ffd253"/>
              </g>
              <path id="Path_8444" data-name="Path 8444" d="M701.228,374.812l-.284.514a.253.253,0,0,0,.262.374l5.038-.766a.257.257,0,0,1,.224.078l3.488,3.716a.253.253,0,0,0,.438-.132l.828-5.028a.262.262,0,0,1,.142-.19l4.612-2.168a.256.256,0,0,0,0-.458l-1.518-.784A19.476,19.476,0,0,1,701.228,374.812Z" fill="#f3b411"/>
            </g>
            <g id="Group_3733" data-name="Group 3733">
              <path id="Path_8445" data-name="Path 8445" d="M709.29,399.43l.972,1.968a.111.111,0,0,0,.084.06l2.172.316a.111.111,0,0,1,.091.127.113.113,0,0,1-.031.059l-1.57,1.532a.114.114,0,0,0-.032.1l.372,2.164a.109.109,0,0,1-.09.126.107.107,0,0,1-.068-.01l-1.942-1.02a.108.108,0,0,0-.1,0l-1.942,1.02a.11.11,0,0,1-.16-.116l.37-2.164a.108.108,0,0,0-.032-.1l-1.572-1.532a.11.11,0,0,1,0-.155.107.107,0,0,1,.059-.031l2.172-.316a.1.1,0,0,0,.082-.06l.972-1.968a.11.11,0,0,1,.149-.045A.108.108,0,0,1,709.29,399.43Z" fill="#ffc301"/>
              <g id="Group_3732" data-name="Group 3732">
                <path id="Path_8446" data-name="Path 8446" d="M709.192,399.884l-.866,1.676a.284.284,0,0,1-.23.154l-1.88.172,1.986.094a.289.289,0,0,0,.286-.19Z" fill="#ffd253"/>
              </g>
              <path id="Path_8447" data-name="Path 8447" d="M707.082,405.5l-.042.25a.11.11,0,0,0,.09.127.1.1,0,0,0,.07-.011l1.942-1.02a.108.108,0,0,1,.1,0l1.942,1.02a.11.11,0,0,0,.158-.116l-.372-2.164a.114.114,0,0,1,.032-.1l1.57-1.532a.109.109,0,0,0,0-.155.112.112,0,0,0-.06-.031l-.728-.106A8.382,8.382,0,0,1,707.082,405.5Z" fill="#f3b411"/>
            </g>
            <g id="Group_3735" data-name="Group 3735">
              <path id="Path_8448" data-name="Path 8448" d="M718.25,424.512l.468.95a.053.053,0,0,0,.04.03l1.05.152a.054.054,0,0,1,.042.064.051.051,0,0,1-.014.026l-.758.74a.056.056,0,0,0-.016.046l.178,1.046a.051.051,0,0,1-.043.06.048.048,0,0,1-.033-.006l-.938-.492a.051.051,0,0,0-.048,0l-.938.492a.052.052,0,0,1-.071-.017.053.053,0,0,1-.007-.037l.18-1.046a.05.05,0,0,0-.016-.046l-.758-.74a.055.055,0,0,1,0-.076.06.06,0,0,1,.026-.014l1.05-.152a.048.048,0,0,0,.04-.03l.468-.95a.055.055,0,0,1,.073-.023A.051.051,0,0,1,718.25,424.512Z" fill="#ffc301"/>
              <g id="Group_3734" data-name="Group 3734">
                <path id="Path_8449" data-name="Path 8449" d="M718.2,424.732l-.418.8a.138.138,0,0,1-.112.076l-.906.084.958.044a.139.139,0,0,0,.138-.092Z" fill="#ffd253"/>
              </g>
              <path id="Path_8450" data-name="Path 8450" d="M717.184,427.446l-.02.12a.053.053,0,0,0,.043.06.047.047,0,0,0,.033-.006l.938-.492a.055.055,0,0,1,.05,0l.938.492a.051.051,0,0,0,.078-.054l-.18-1.046a.056.056,0,0,1,.016-.046l.76-.74a.054.054,0,0,0,0-.076.057.057,0,0,0-.028-.014l-.35-.052A4.043,4.043,0,0,1,717.184,427.446Z" fill="#f3b411"/>
            </g>
            <g id="Group_3737" data-name="Group 3737">
              <path id="Path_8451" data-name="Path 8451" d="M714.122,414.812l.848,1.72a.1.1,0,0,0,.072.054l1.9.276a.1.1,0,0,1,.081.11.094.094,0,0,1-.027.052l-1.374,1.338a.1.1,0,0,0-.028.086l.324,1.89a.1.1,0,0,1-.14.1l-1.7-.894a.1.1,0,0,0-.088,0l-1.7.894a.1.1,0,0,1-.13-.039.1.1,0,0,1-.01-.063l.324-1.89a.1.1,0,0,0-.028-.086l-1.372-1.338a.1.1,0,0,1,.054-.162l1.9-.276a.094.094,0,0,0,.072-.054l.848-1.72a.1.1,0,0,1,.128-.046A.094.094,0,0,1,714.122,414.812Z" fill="#ffc301"/>
              <g id="Group_3736" data-name="Group 3736">
                <path id="Path_8452" data-name="Path 8452" d="M714.032,415.21l-.756,1.466a.251.251,0,0,1-.2.136l-1.644.15,1.736.08a.253.253,0,0,0,.25-.166Z" fill="#ffd253"/>
              </g>
              <path id="Path_8453" data-name="Path 8453" d="M712.188,420.124l-.036.218a.1.1,0,0,0,.079.111.086.086,0,0,0,.059-.009l1.7-.894a.1.1,0,0,1,.088,0l1.7.894a.1.1,0,0,0,.129-.042.089.089,0,0,0,.009-.06l-.324-1.89a.1.1,0,0,1,.026-.086l1.374-1.338a.1.1,0,0,0,0-.136.1.1,0,0,0-.051-.026l-.636-.094A7.329,7.329,0,0,1,712.188,420.124Z" fill="#f3b411"/>
            </g>
            <g id="Group_3739" data-name="Group 3739">
              <path id="Path_8454" data-name="Path 8454" d="M714.092,343.282l4.644,3.2a.281.281,0,0,0,.26.032l5.268-2.014a.281.281,0,0,1,.363.159.274.274,0,0,1,.007.183l-1.6,5.4a.288.288,0,0,0,.05.258l3.542,4.388a.28.28,0,0,1-.212.458l-5.638.144a.286.286,0,0,0-.23.128l-3.078,4.724a.282.282,0,0,1-.5-.06l-1.878-5.318a.281.281,0,0,0-.2-.178l-5.446-1.468a.281.281,0,0,1-.2-.346.284.284,0,0,1,.1-.15l4.478-3.43a.279.279,0,0,0,.11-.238l-.286-5.632a.282.282,0,0,1,.446-.24Z" fill="#ffc301"/>
              <g id="Group_3738" data-name="Group 3738">
                <path id="Path_8455" data-name="Path 8455" d="M714.442,344.424l.16,4.844a.746.746,0,0,1-.322.64l-4,2.74,4.57-2.28a.745.745,0,0,0,.4-.782Z" fill="#ffd253"/>
              </g>
              <path id="Path_8456" data-name="Path 8456" d="M716.75,359.672l.216.612a.282.282,0,0,0,.36.172.277.277,0,0,0,.142-.112l3.078-4.724a.285.285,0,0,1,.23-.128l5.636-.142a.282.282,0,0,0,.212-.458l-3.542-4.388a.284.284,0,0,1-.052-.256l1.6-5.4a.281.281,0,0,0-.183-.351.286.286,0,0,0-.187.007l-1.766.674A21.544,21.544,0,0,1,716.75,359.672Z" fill="#f3b411"/>
            </g>
          </g>
          <g id="Group_3741" data-name="Group 3741">
            <path id="Path_8457" data-name="Path 8457" d="M758.36,347.134a28.9,28.9,0,0,0-22.922,46.5l-.57,2.97-.828,4.322a.636.636,0,0,0,.834.72l4.158-1.444,2.318-.8a28.9,28.9,0,1,0,17.012-52.26Z" fill="#e7e7e7"/>
            <path id="Path_8458" data-name="Path 8458" d="M686.356,356.616l-2.488.24-1.568.152-8.722-11.624a2.25,2.25,0,0,0-3.15-.448l-28.074,21.08a2.25,2.25,0,0,0-.448,3.15l11.614,15.476a2.25,2.25,0,0,0,3.15.45h0l28.072-21.076a2.25,2.25,0,0,0,.45-3.15h0l-.108-.144.6-1.316,1.036-2.276a.362.362,0,0,0-.173-.481A.369.369,0,0,0,686.356,356.616Z" fill="#e7e7e7"/>
            <rect id="Rectangle_4120" data-name="Rectangle 4120" width="18.45" height="3.15" transform="translate(647.06 366.71) rotate(-36.241)" fill="#9d9c9c"/>
            <rect id="Rectangle_4121" data-name="Rectangle 4121" width="13.05" height="3.15" transform="translate(650.386 371.246) rotate(-36.241)" fill="#9d9c9c"/>
            <rect id="Rectangle_4122" data-name="Rectangle 4122" width="17.55" height="3.15" transform="translate(653.844 375.964) rotate(-36.241)" fill="#9d9c9c"/>
            <rect id="Rectangle_4123" data-name="Rectangle 4123" width="23.36" height="5.542" transform="translate(744.668 362.79) rotate(-1.042)" fill="#9d9c9c"/>
            <rect id="Rectangle_4124" data-name="Rectangle 4124" width="22.964" height="5.542" transform="translate(744.848 372.686) rotate(-1.042)" fill="#9d9c9c"/>
            <rect id="Rectangle_4125" data-name="Rectangle 4125" width="23.36" height="5.542" transform="translate(745.034 382.978) rotate(-1.042)" fill="#9d9c9c"/>
          </g>
          <path id="Path_8459" data-name="Path 8459" d="M831.8,363.914a7.281,7.281,0,0,0,4.638,5.846,1.784,1.784,0,0,1-.064,3.336l-15.8,2.106a4.854,4.854,0,0,0-4.17,5.452s1.2,10.856,1.848,13.862c.51,2.376,3.49,1.492,4.338.554a8.426,8.426,0,0,1,4.908-3.4,6.552,6.552,0,0,1,1.914,12.964c-.061.009-.122.017-.184.024a9.761,9.761,0,0,1-5-1.42c-2.106-.854-4.614-.666-4.766.386-.128.882,2.26,16.966,2.26,16.966a4.855,4.855,0,0,0,5.452,4.17l15.8-2.106c1.3.07,1.979,1.45,1.2,1.98a7.276,7.276,0,1,0,7.659-.056c-1.044-.76-1.3-2.684-.505-3.036l16.25-2.164a4.852,4.852,0,0,0,4.171-5.449h0l-2-15.06a2.6,2.6,0,0,0-4.532-.778,6.554,6.554,0,1,1-1.64-8.16c1.464,1.148,4.972.628,4.922-.446-.124-2.77-2.062-15.486-2.062-15.486a4.852,4.852,0,0,0-5.449-4.17h0s-12.716,1.938-16.25,2.164c-1.01.066-.828-3.56-.242-4.242a7.278,7.278,0,1,0-12.692-3.826Z" fill="#9d9c9c"/>
          <path id="Path_8460" data-name="Path 8460" d="M744.38,461.254a7.623,7.623,0,0,0,7.3-2.8,1.87,1.87,0,0,1,3.316,1.108l-2.842,16.456a5.084,5.084,0,0,0,4.144,5.876h0s11.232,2.2,14.44,2.494c2.536.234,2.584-3.022,1.912-4.166a8.825,8.825,0,0,1-1.872-5.974,6.864,6.864,0,0,1,13.528,2.336h0a10.223,10.223,0,0,1-2.984,4.554c-1.514,1.838-2.11,4.4-1.1,4.888.84.4,17.67,3.052,17.67,3.052a5.086,5.086,0,0,0,5.876-4.146L806.6,468.47c.48-1.282,2.07-1.524,2.354-.58a7.623,7.623,0,1,0,2.342-7.674c-1.088.8-3.092.458-3.2-.448l2.922-16.924a5.083,5.083,0,0,0-4.144-5.875h0l-15.684-2.708c-2.648-.2-3.252,3.308-2.2,4.288a6.865,6.865,0,1,1-8.67-.914c1.6-1.1,2.184-4.774,1.1-5.062-2.8-.744-16.128-2.786-16.128-2.786a5.083,5.083,0,0,0-5.875,4.144v0s-2.044,13.32-2.924,16.924c-.252,1.03-3.82-.288-4.318-1.086a7.624,7.624,0,1,0-7.8,11.49Z" fill="#e7e7e7"/>
        </g>
        <g id="Group_3754" data-name="Group 3754">
          <path id="Path_8461" data-name="Path 8461" d="M972.984,455.6s-4.6-16.266-9.176-16.442-14.9,9.566-16.614,26.184-12.036,49.286-5.73,61.894,11.456,22.92,32.656,14.32,28.08-15.472,29.8-21.776a8.99,8.99,0,0,0-.572-2.292c-.574-1.718-3.438-8.6-8.024-8.6s-12.6,2.864-17.2,4.586C978.142,513.482,981.58,484.254,972.984,455.6Z" fill="#dbdbdb"/>
          <path id="Path_8462" data-name="Path 8462" d="M951.172,408.156c-2.73-6.312-5.212-18.3-.168-29.272,7.954-17.31,22.066-41.382,50.058-41.622s56.118,31.486,54.214,47.664c-1.644,13.974-3.2,22.682-20.554,30.188s-55.842,8.854-70.572,4.29A25.373,25.373,0,0,1,951.172,408.156Z" fill="#42210b"/>
          <path id="Path_8463" data-name="Path 8463" d="M1000.2,344.728c19.716,1.132,34.622,20.8,33.3,43.924,0,.1-.016.188-.022.284,2.89-.52,9.078-.752,6.454,7.66-2.136,6.846-6.666,7.494-9.712,7.046-5.376,13.6-13.564,19.092-26.714,24.022,0,3.53,4.032,5.99,8.218,10.686,0,0-9.818,20.8-26.372,21.236s-13.9-25.346-13.9-25.346a37.051,37.051,0,0,0,10.686-9.042c-9.041-2.466-18.387-14.3-20.228-25.166C955.6,362.784,980.482,343.6,1000.2,344.728Z" fill="#feecdc"/>
          <path id="Path_8464" data-name="Path 8464" d="M997.966,378.032a.4.4,0,0,1-.242.022,8.678,8.678,0,0,0-6.312,1.618.412.412,0,0,1-.538-.622,9.471,9.471,0,0,1,7.025-1.8.41.41,0,0,1,.068.782Z" fill="#221e1f"/>
          <path id="Path_8465" data-name="Path 8465" d="M970.694,382.338a.412.412,0,0,1-.334-.054,8.674,8.674,0,0,0-6.462-.826.4.4,0,0,1-.516-.23l-.008-.022a.411.411,0,0,1,.25-.523h0a9.452,9.452,0,0,1,7.19.92.41.41,0,0,1-.122.738Z" fill="#221e1f"/>
          <g id="Group_3747" data-name="Group 3747" opacity="0.8">
            <g id="Group_3746" data-name="Group 3746">
              <g id="Group_3489" data-name="Group 3489">
                <g id="Group_3488" data-name="Group 3488" clip-path="url(#clip-path-6)">
                  <g id="Group_3745" data-name="Group 3745">
                    <g id="Group_3744" data-name="Group 3744">
                      <g id="Group_3487" data-name="Group 3487">
                        <g id="Group_3486" data-name="Group 3486" clip-path="url(#clip-path-7)">
                          <g id="Group_3743" data-name="Group 3743">
                            <path id="Path_8466" data-name="Path 8466" d="M989.8,410.994s-2.5,4.886-6.578,5.02-6.892-4.582-6.892-4.582" fill="#db727c"/>
                          </g>
                        </g>
                      </g>
                    </g>
                  </g>
                </g>
              </g>
            </g>
          </g>
          <g id="Group_3752" data-name="Group 3752" opacity="0.8">
            <g id="Group_3751" data-name="Group 3751">
              <g id="Group_3493" data-name="Group 3493">
                <g id="Group_3492" data-name="Group 3492" clip-path="url(#clip-path-8)">
                  <g id="Group_3750" data-name="Group 3750">
                    <g id="Group_3749" data-name="Group 3749">
                      <g id="Group_3491" data-name="Group 3491">
                        <g id="Group_3490" data-name="Group 3490" clip-path="url(#clip-path-8)">
                          <g id="Group_3748" data-name="Group 3748">
                            <path id="Path_8467" data-name="Path 8467" d="M977.64,396.242s-3.322,4-2.678,5.3,4.664,2.08,4.664,2.08" fill="none" stroke="#c6946b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
                          </g>
                        </g>
                      </g>
                    </g>
                  </g>
                </g>
              </g>
            </g>
          </g>
          <path id="Path_8468" data-name="Path 8468" d="M966.614,391.05a2.434,2.434,0,1,0-.005-.014l.005.014" fill="#221e1f"/>
          <path id="Path_8469" data-name="Path 8469" d="M992.9,390.608a2.436,2.436,0,1,0-.005-.014l.005.014" fill="#221e1f"/>
          <path id="Path_8470" data-name="Path 8470" d="M960.758,370.954a25.926,25.926,0,0,1,12.328-5.754,23,23,0,0,1,10.094-12.882s-7.628,10.018-7.628,12.882c0,0,10.2-1.47,14.8.822,0,0,4.294-13.7,10.026-15.422,0,0-5.158,10.89-5.158,16.62l4.586,1.146s6.879-12.6,6.879-14.328c0,0-1.146,13.182-2.866,15.474,0,0,11.462,3.438,15.474,8.024a107.54,107.54,0,0,0,1.146-13.754s13.182,28.654-1.146,47c0,0,12.6-12.6,14.328-20.058s1.718-33.24-15.474-42.4c-15.354-8.188-32.094-7.45-40.116-1.146S955.178,375.736,960.758,370.954Z" fill="#42210b"/>
          <path id="Path_8471" data-name="Path 8471" d="M955.826,458.078s0-22.2,17.26-26.3c0,0,2.416,17.3,12.732,19.016,0,0,13.182,3.44,21.2-7.45,0,0,2.864-5.73,8.6-5.158s19.484,0,18.338,22.924-12.036,59.026-5.732,77.94,24.644,67.05,26.936,99.716,1.146,30.948,1.146,30.948,0,2.864-6.3,2.864-76.8.572-94.56-4.01c0,0-10.316.572-9.168-7.45s2.864-94.56,8.6-120.922a103.814,103.814,0,0,0,2.864-18.338C958.31,512.11,951.242,480.428,955.826,458.078Z" fill="#e7e7e7"/>
          <path id="Path_8472" data-name="Path 8472" d="M997.686,509.34s-9-4.428-12.754-9.69c0,0-6.562-8.9-9.328-10.072,0,0-11-1-13.748-.934s-5,1.548-5.8,8.554,6.548,13.26,10.456,14.3a25.526,25.526,0,0,0,11.508,0c4.106-.706,10.618,3.8,12.484,5.8S998.652,512.2,997.686,509.34Z" fill="#feecdc"/>
          <path id="Path_8473" data-name="Path 8473" d="M1021.35,460.532s4.6-16.266,9.174-16.442,14.9,9.566,16.614,26.184,12.036,49.284,5.73,61.894-11.462,22.924-32.666,14.328-28.08-15.474-29.8-21.776c0,0-8.026-8.21-7.454-9.93s3.634-9.04,8.218-9.04,20.438,10.946,25.024,12.666C1016.192,518.414,1012.754,489.186,1021.35,460.532Z" fill="#dbdbdb"/>
          <path id="Path_8474" data-name="Path 8474" d="M1008.742,434.744s-14.9,13.754-18.912,14.9a4.2,4.2,0,0,0,.572,3.438c1.146,1.72,5.158,9.17,9.744,8.024s4.012,0,5.732,1.146,4.01,3.438,8.022-2.294,11.462-15.474,17.2-17.2c0,0,0-.572-2.866-1.718a31.922,31.922,0,0,0-15.472-4.012A9.77,9.77,0,0,0,1008.742,434.744Z" fill="#f09491"/>
          <path id="Path_8475" data-name="Path 8475" d="M973.5,431.186s6.29,15.764,9.046,18.184c0,0,.864,1.6-.828,1.894a8.792,8.792,0,0,0-5.706,3.922c-1.856,2.658-6.9,7.044-12.386-4.2s-.81-14.4,2.274-16.7S972.738,430.158,973.5,431.186Z" fill="#f09491"/>
          <path id="Path_8476" data-name="Path 8476" d="M989.832,442.122c-.632,0-1.216-.036-1.762-.09-5.882-.588-11.416-10.858-11.648-11.3l.724-.386c.056.1,5.561,10.318,11,10.864,3.6.358,8.972-.124,18.624-7.112l.483.666C998.822,440.876,993.53,442.122,989.832,442.122Z" fill="#42210b"/>
          <circle id="Ellipse_706" data-name="Ellipse 706" cx="1.146" cy="1.146" r="1.146" transform="translate(986.966 441.62)" fill="#d1232e"/>
          <g id="Group_3753" data-name="Group 3753">
            <path id="Path_8477" data-name="Path 8477" d="M949.358,476.324s-4.254,7.624.848,7c0,0,.318,2.628,4.038,1.29a4.283,4.283,0,0,0,5.314,1.134c3.72-1.338,2.094-7.424,2.094-7.424S952.972,474.108,949.358,476.324Z" fill="#feecdc"/>
            <path id="Path_8478" data-name="Path 8478" d="M961.524,479.1s-2.984-6.132-9.084-6.2-4.574-.048-7.642,1.444-2.858,3.216.844,3.156,8.452-1.272,10.626,1.672S961.5,480.632,961.524,479.1Z" fill="#feecdc"/>
          </g>
          <path id="Path_8479" data-name="Path 8479" d="M972.3,494.266l-5.25,8.886a2.6,2.6,0,0,1-3.412,1.369l-.016-.007-37.838-16.308a2.6,2.6,0,0,1-1.368-3.413l.006-.015,7.034-8.562a2.6,2.6,0,0,1,3.413-1.368l.015.006,36.054,15.982a2.6,2.6,0,0,1,1.37,3.413Z" fill="#42210b"/>
          <path id="Path_8480" data-name="Path 8480" d="M947.856,480.248,935.7,474.86c-1.322-.57-2.858-.782-3.428.542l-7.032,8.562a2.6,2.6,0,0,0,1.347,3.422l.015.006,26.638,11.48A79.986,79.986,0,0,1,947.856,480.248Z" fill="#fff" opacity="0.17" style="isolation: isolate"/>
          <path id="Path_8481" data-name="Path 8481" d="M951.348,500.772s-4.928-6.95.622-5.12,6.912,4.88,6.912,4.88,16.152,4.852,14.322,10.4S958.344,509.7,951.348,500.772Z" fill="#feecdc"/>
        </g>
      </g>
    </g>
  </g>
</svg>
PAMapp/assets/images/index_banner_web.svg
@@ -1 +1,193 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1440 590"><defs><clipPath id="a"><path d="M1441,551s-538.68,16.64-730,16C540.74,566.43-3,551-3,551V-3H1441Z" fill="none"/></clipPath><clipPath id="b"><rect x="410.03" y="173.42" width="621" height="399.04" fill="none"/></clipPath><clipPath id="c"><rect x="511.43" y="435.03" width="13.3" height="4.74" transform="translate(-68.19 96.79) rotate(-10.02)" fill="none"/></clipPath><clipPath id="e"><rect x="512.87" y="423.49" width="6.33" height="7.42" transform="translate(-66.45 96.28) rotate(-10.02)" fill="none"/></clipPath><clipPath id="g"><rect x="641.82" y="411.94" width="15.82" height="5.64" transform="translate(-62.24 119.35) rotate(-10.02)" fill="none"/></clipPath><clipPath id="i"><rect x="643.53" y="395.32" width="7.54" height="8.83" transform="translate(-59.67 118.7) rotate(-10.02)" fill="none"/></clipPath><clipPath id="k"><rect x="893.06" y="411.94" width="15.82" height="5.64" transform="translate(-13.85 31.52) rotate(-1.99)" fill="none"/></clipPath><clipPath id="m"><rect x="892.75" y="396.08" width="8.83" height="5.12" transform="translate(348.54 1212.79) rotate(-79.98)" fill="none"/></clipPath><clipPath id="o"><rect x="774.24" y="404.67" width="15.82" height="5.64" transform="translate(-71.69 186.66) rotate(-13.02)" fill="none"/></clipPath><clipPath id="q"><rect x="782.24" y="388.84" width="5.12" height="8.83" transform="translate(-56.44 142.52) rotate(-10.02)" fill="none"/></clipPath></defs><g clip-path="url(#a)"><rect x="-2" width="1442.53" height="572.46" fill="#f09491"/><path d="M251.89,300.54l-19.33-15.86,15.86-19.32,19.33,15.85Zm-17.26-16.06,17.06,14,14-17.05-17.06-14Z" fill="#e87722"/><path d="M227.88,218.92l-19.33-15.86,15.86-19.33,19.32,15.86Zm-17.26-16.06,17,14,14-17.06-17-14Z" fill="#f09491"/><path d="M470.26,175.69a8.83,8.83,0,1,1,8.82-8.82h0A8.82,8.82,0,0,1,470.26,175.69Zm0-16.17a7.35,7.35,0,1,0,7.35,7.35h0a7.36,7.36,0,0,0-7.35-7.36h0Z" fill="#f2c75c"/><path d="M1223.73,291.77a8.83,8.83,0,1,1,8.82-8.82h0A8.82,8.82,0,0,1,1223.73,291.77Zm0-16.18a7.36,7.36,0,1,0,7.35,7.36,7.36,7.36,0,0,0-7.35-7.36Z" fill="#e87722"/><circle cx="1131.2" cy="201.67" r="16.93" fill="#f2c75c" opacity="0.5" style="isolation:isolate"/><path d="M1128.91,217.87a17.25,17.25,0,1,1,17.24-17.25A17.27,17.27,0,0,1,1128.91,217.87Zm0-34.2a17,17,0,1,0,16.95,17,17,17,0,0,0-16.95-17Z" fill="#f2c75c"/><path d="M1034.88,190.8l-2.35,6,19.56,64,4.75,1.86Z" fill="#e87722"/><path d="M1039.11,180l-2.35,6,23.88,78.1,4.75,1.87Z" fill="#e87722"/><path d="M1030.65,201.59l-2.35,6,15.24,49.82,4.75,1.87Z" fill="#e87722"/><path d="M1046.06,178.13l-4.75-1.86,27.88,91.2,4.75,1.86Z" fill="#e87722"/><path d="M1017.89,247.35l4.75,1.86L1018,233.94l-2.35,6Z" fill="#e87722"/><path d="M1022.2,223.15l-2.35,6,6.59,21.55,4.75,1.87Z" fill="#e87722"/><path d="M1026.43,212.37l-2.35,6,10.91,35.7,4.75,1.86Z" fill="#e87722"/><path d="M1054.61,181.48l-4.76-1.86,27.89,91.2,4.75,1.86Z" fill="#e87722"/><path d="M1110,204l.27-.69-.54-.21Z" fill="#e87722"/><path d="M1105.91,201.6l-4.75-1.87,4.59,15,2.35-6Z" fill="#e87722"/><path d="M1097.36,198.25l-4.76-1.87,8.92,29.17,2.35-6Z" fill="#e87722"/><path d="M1013.74,244.72l-.34.87.69.27Z" fill="#e87722"/><path d="M1071.71,188.19l-4.75-1.87,21.88,71.58,2.35-6Z" fill="#e87722"/><path d="M1088.81,194.89l-4.76-1.86,13.24,43.3,2.35-6Z" fill="#e87722"/><path d="M1063.16,184.84l-4.75-1.87,26.2,85.71,2.35-6Z" fill="#e87722"/><path d="M1080.26,191.54l-4.75-1.86,17.56,57.44,2.35-6Z" fill="#e87722"/><path d="M313.16,292.58l-1.63,4.17,13.6,44.49,3.31,1.3Z" fill="#e87722"/><path d="M316.1,285.08l-1.63,4.17,16.61,54.33,3.3,1.29Z" fill="#e87722"/><path d="M310.22,300.08l-1.63,4.17,10.59,34.66,3.31,1.3Z" fill="#e87722"/><path d="M320.94,283.77l-3.31-1.3L337,345.91l3.31,1.3Z" fill="#e87722"/><path d="M301.34,331.92l3.31,1.29-3.25-10.63-1.64,4.17Z" fill="#e87722"/><path d="M304.34,315.08l-1.64,4.17,4.59,15,3.3,1.3Z" fill="#e87722"/><path d="M307.28,307.58l-1.64,4.17,7.6,24.83,3.3,1.3Z" fill="#e87722"/><path d="M326.88,286.1l-3.3-1.3L343,348.24l3.31,1.3Z" fill="#e87722"/><path d="M365.4,301.75l.19-.47-.38-.15Z" fill="#e87722"/><path d="M362.57,300.09l-3.31-1.3,3.2,10.46,1.63-4.17Z" fill="#e87722"/><path d="M356.62,297.76l-3.31-1.3,6.21,20.29,1.63-4.17Z" fill="#e87722"/><path d="M298.45,330.09l-.23.6.47.19Z" fill="#e87722"/><path d="M338.78,290.76l-3.31-1.29,15.22,49.79,1.64-4.17Z" fill="#e87722"/><path d="M350.67,295.43l-3.3-1.3,9.21,30.12,1.63-4.17Z" fill="#e87722"/><path d="M332.83,288.43l-3.31-1.3,18.23,59.63,1.64-4.17Z" fill="#e87722"/><path d="M344.73,293.1l-3.31-1.3,12.22,39.95,1.63-4.17Z" fill="#e87722"/><g clip-path="url(#b)"><circle cx="708.48" cy="540.51" r="231.28" fill="#fff" opacity="0.25" style="isolation:isolate"/><circle cx="708.48" cy="540.51" r="194.26" fill="#fff" opacity="0.5" style="isolation:isolate"/><circle cx="708.48" cy="617.13" r="144.5" fill="#fff" opacity="0.75" style="isolation:isolate"/><path d="M875.43,569.36A687.49,687.49,0,0,0,850.36,659l60.77,2.28,5.31-23.55,6.08,25.07s63.82,0,63.8-.76c-1.68-91.15-25.23-95.71-25.23-95.71Z" fill="#a7a6a6"/><path d="M872.38,575.43l-2.28,5.32s25.92,13,53.94,10.64A111.1,111.1,0,0,0,971,576.19l-3.8-6.07s-23.54,13.67-46.33,14.43C897.29,585.34,872.38,575.43,872.38,575.43Z" fill="#72502b"/><path d="M934.12,429.21s4.56,5.32,31.9,11.4c0,0,11.4,1.52,15.2,15.95s-2.28,85.07-3.8,94.95-9.12,18.23-19,16c0,0-14.44,11.39-49.38,11.39l-35.32-8,1.14-17.09s-22.79-10.64-23.55-14.44-7.59-24.3-3-31.9S843,462.64,843,462.64s-6.84-6.08,12.91-14.44,26.75-12.68,28.57-16.21c0,0,7.13,11.66,14,13.94s13.67.75,21.27-4.56A124.11,124.11,0,0,0,934.12,429.21Z" fill="#a7a8aa"/><path d="M877.54,363.51c1.52-5.32,3.15-1.25,5.11-4.86,4.33-7.85-4,7,26.94,8.07s26.39-15.82,28-5.2c1.13,7.32,1.55,37.31,4,33.39,2-3.21,3.3-8.15,4.51-13,.86,1.05,7.45,2.49,7.75,5.49s-5.72,7.92-6.84,12.15c-.91,3.58-7.43,6.2-7.76,6.19-.35.71-2.71,12-6.23,17.1,0,3,0,6.76.17,10.37C931,436,923.7,443.16,905,447.83h-7.81a109.81,109.81,0,0,1-12.36-16.35c.29-2.62.64-5.23,1-7.38-3.62-5.44-12.43-8.55-10.91-38.17l.38-14.82" fill="#e2b690"/><path d="M917,554.75l-14.2,15L893,550.88s-3-74.46,3.31-85.75c-.57-1.2-4.22-7.68-6.54-11.75l2.5-1.93c7.49-5.77,6.51-5.15,6.51-5.15-.19-.09,2.46-.66,2.27-.76,0,0,4.56,1.52,7.6,0,.68-.34.83.71.76.76s.77.07,4.32,3.77c1.11,1.13,2.38,2.55,3.93,4.41a57.16,57.16,0,0,0-8.34,9.76c6.5,8.5,9.52,82.32,9.52,82.32Z" fill="#db232e"/><path d="M907.46,445.94s1.94,1.26,9.44,7l2.5,1.92c2,1.53,4.39,3.33,7.11,5.43,2.62-1.26,13.73-18.57,7.64-34.9a5,5,0,0,1-.63,1.27c-1.78,3.07-7.89,11.2-25.6,18.85-.18.09-.27.3-.46.39" fill="#fff"/><path d="M884.11,465.15c2.88-3.74,5.4-6.78,7.4-9.15,1.55-1.85,2.82-3.28,3.93-4.41,3.55-3.7,4.89-5.28,4.89-5.28s.83-.71.75-.76c-7.57-6-13.44-10.27-15.61-12.76-.71-.9-1.11-1.38-1.11-1.38-1.72,17.35-3.11,33.12-.25,33.74" fill="#fff"/><path d="M871.08,372.24c.2,3.75.86,2.44,2.49,8.34,1.45,5.29,2.07,3.11,2.07,0,0-6.08,3.35-13.87,5.31-17.47,4.34-7.85-2.35,2.53,28.64,3.59s27.63-.65,29.3,10c1.13,7.31.3,22.14,2.73,18.22,1.94-3.21,2.69-7.47,4.66-12,.91-2.1,3.68,3.36,4.56.76,6.08-18.16.86-27.25,1.52-28.1,3.51-4.57,6.6-12.63,4.55-11.4-3.79,2.28-15.19,3-15.95,2.28-13.86-13.86-52.35-10.52-52.35-10.52s-13.73,1.41-17.53,30.27Z" fill="#221e1f"/><path d="M909.82,502.13s25.82,11.39,40.25,21.27c0,0-2.28,31.15-19.75,34.18,0,0-15.19-17.46-19.75-23.54,0,0-6.07-9.88-11.39-12.16Z" fill="#a7a8aa"/><path d="M861.2,497.58s4.56-9.88,21.27-5.32c0,0,8.36.76,14.43,5.32l3,1.51s3,19.75-1.52,20.51l-8.35-.76S881,516.57,876.4,512s-8.36-3-12.16-3h-6.07S856.65,503.65,861.2,497.58Z" fill="#e2b690"/><path d="M898.13,498a49.61,49.61,0,0,1,1,8.67s.76,6.84-1.51,10.64a8.52,8.52,0,0,1-4,2.22,35.38,35.38,0,0,0,7.8,3.85s4.56-2.28,6.08-5.31l-3-3,3,.76s3-7.59,2.28-13.67Z" fill="#a7a8aa"/><path d="M932.08,492s-57,15.91-72.78,23.43c0,0,12.08,27.71,28.87,33.42,0,0,32.76-20.15,38.21-25.45,0,0,7.53-8.81,13.14-10.24Z" fill="#a7a8aa"/><path d="M980.81,495s-3-10.46-20.19-8.55c0,0-8.37-.55-15.08,3l-3.24,1s-6.06,19.05-1.68,20.5l8.37.55s9.36-.84,14.57-4.64,8.72-1.7,12.48-1.11l6,.94S984.37,501.75,980.81,495Z" fill="#e2b690"/><path d="M944.27,489.75a50.25,50.25,0,0,0-2.39,8.4s-1.81,6.64-.15,10.75a8.38,8.38,0,0,0,3.61,2.81,35,35,0,0,1-8.31,2.6s-4.14-3-5.17-6.19l3.47-2.53-3.12.28s-1.82-8-.13-13.87Z" fill="#fff"/><path d="M496.53,566.32s-9.87,20.51-13.67,31.15-4.56,55.44-4.56,55.44,66.84,16,101,0c0,0-.76-48.61-6.84-57.73s-15.19-31.9-15.19-31.9l-35.7,3.8Z" fill="#67737a"/><path d="M488.44,401.36s-17.54-21.59-24.28-6.75-5.4,28.33,1.35,36.43,6.74,22.93,6.74,24.28S493.83,421.59,488.44,401.36Z" fill="#221e1f"/><path d="M550.42,411.66v-.19c0-22.72-15.71-41.14-35.08-41.14s-35.07,18.42-35.07,41.14v.28c-2.8-.67-8.85-1.24-6.75,7.14,1.7,6.83,6.11,7.72,9.11,7.45,4.5,13.62,15,23.72,27.7,25.86-.2,3.45-3.06,6.07-7.42,10.43,0,0,4.33,19.67,20.52,21s19-24.81,19-24.81-9.55-4.22-13-9.66c8.53-4.37,15.28-12.6,18.66-22.81,3,.14,7.07-1,8.7-7.48C558.73,410.92,553.36,411.05,550.42,411.66Z" fill="#feecdc"/><path d="M490.46,391.24s-8.09,12.14-8.09,16.19c0,0-2.27,21.73,4.26,27.05A28.09,28.09,0,0,1,477,410.12s-6.75-1.35-5.4-12.14,10.8-32.38,33.73-33.73c0,0,29.68-9.44,45.87,17.54,0,0,6.07,15.52,2,29,0,0-2.7,16.18-5.4,20.23,0,0,2-15.51.68-20.91s-1.35-16.19-13.49-25.63c0,0,1.35,6.74-1.35,12.14,0,0,0,1.35-4,1.35s-25,.68-31,2.7c-1.32.44-4,2.7-5.39-1.35Z" fill="#221e1f"/><path d="M506.4,458.46a25.45,25.45,0,0,0,5.32,7.59c3.92,3.93,9.12,7.6,14.43,7.6,2.28,0,5.45-.79,10.85-3.49l5.31,105.14s-27.57,6.15-46.45-6c0,0,0-16.19-4.05-25.63L454,536.94s2.69-12.55,2.69-16.19C456.74,501.86,476.73,469.25,506.4,458.46Z" fill="#a7a8aa"/><path d="M541.35,457.7s42.19,9.09,44.89,36.07-6.74,60.71-18.88,67.45l-8.1,1.35V568s-16.19,10.79-28.33,8.09l-2.7-9.44s-25.63-5.4-33.72-10.8,2.7-14.84,2.7-14.84l33.72-9.44-6.29-57.89S538.65,467.14,541.35,457.7Z" fill="#d0d0ce"/><path d="M458.08,531.54s41.83-18.89,89-4l1.35,12.14s-49.91,18.89-74.2,14.84S450,536.94,458.08,531.54Z" fill="#a7a8aa"/><path d="M538.82,483.65c-8.73-9.22-13.3-10.66-13.3-10.66.16-.08.4-.24.56-.32,11.06-5.69,14-11.54,14.82-14.11a4,4,0,0,0,.16-1c.08-.16,1.81.18,1.81.18,2.41,11.13-2.29,25.3-4,25.95" fill="#fff"/><path d="M522.71,473c-.8.32-5.37,2.32-13.3,10.66-1.67-.64-6.08-14-3.76-25.19a4.55,4.55,0,0,1,.76-.76c.07,0,.73-.11.76,0,.4,1.65,2.25,8.53,15.54,15.29" fill="#fff"/><path d="M547.12,527.81l1.35,11.82s8.83-3.69,11.11-12c0,0-1.58-8.28-7.59-2.28C551,526.27,550.61,528,547.12,527.81Z" fill="#feecdc"/><path d="M495.47,409.22a9,9,0,0,1,6.79.24" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><path d="M522.54,406.19a8.91,8.91,0,0,1,6.05-3.09" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><g opacity="0.8"><g clip-path="url(#c)"><g clip-path="url(#c)"><path d="M511.11,436.22s3.41,4.21,7.38,3.51,5.72-5.82,5.72-5.82" fill="#e5727c"/></g></g></g><g opacity="0.8"><g clip-path="url(#e)"><g clip-path="url(#e)"><path d="M514,424.31s-1,5,.19,5.85,5-.4,5-.4" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/></g></g></g><path d="M505,415.57a2.38,2.38,0,1,1-2.76-1.93h0a2.38,2.38,0,0,1,2.75,1.93" fill="#221e1f"/><path d="M527.67,411.56a2.38,2.38,0,1,1-2.76-1.93h0a2.38,2.38,0,0,1,2.76,1.93" fill="#221e1f"/><path d="M706.63,562.52a689.16,689.16,0,0,1,25.06,89.64l-60.76,2.27-5.33-23.54L659.53,656s-63.81,0-63.81-.76c0-22,9.11-91.91,9.11-91.91Z" fill="#a7a6a6"/><path d="M623.83,424.28s-28.11,3.79-47.1,25.82c0,0-9.11,3.8-10.63,11.4s0,62.28,6.08,70.64,10.63,9.87,14.43,9.11L598,539l6.08,29.62s30.39,7.6,47.86,7.6,50.89-6.08,56.21-10.64l7.59-31.9L737,526.83s9.12-1.52,8.36-12.92.76-46.33-6.84-63.81c0,0-1.52-5.31-14.43-9.11,0,0-31.35-21.45-50.62-19.84a17.85,17.85,0,0,1-3.31,18.32c-7.6,9.11-19,9.87-28.11,5.31S623.83,424.28,623.83,424.28Z" fill="#1b365d"/><path d="M678.38,391.17c-.84,3.33-3.63,1.34-3.34,3.08a32.81,32.81,0,0,1-3.47,19.7c.6,2.09,1.29,4.64,1.91,7.19A109,109,0,0,1,663.32,439l-7.74,1c-19.16-2.23-27.29-8.4-29.88-10.83-.26-3.61-.74-7.32-1.16-10.31-4.15-4.63-7.94-15.5-8.37-16.16-.32.05-4.84-1.53-6.2-5-3.22-7.9-5.13-15.43-3.65-17.8,1.82,4.61,3.79,9.34,6.14,12.28,2.91,3.58-.53-26.22-.35-33.63.29-10.74-2.17,6.6,28.49,1.56s20.37-18.69,25.68-11.46c2.4,3.33,7.22,37.88,8.73,34.11a64.13,64.13,0,0,0,3.1-13.53l.72.34c4.72,2.49,1.19,15.35-.44,21.59" fill="#feecdc"/><path d="M670.93,547.33,658.77,564l-12.15-17.46s-1.22-74.93,3.57-86.93c-.72-1.12-5.18-7.08-8-10.81l2.23-2.24c6.69-6.68,8.46-8.19,8.46-8.19l-.59-.2,7.8.26-.13.14a29.28,29.28,0,0,1,5.58,3.87c1.24,1,2.68,2.23,4.45,3.86a57.72,57.72,0,0,0-7,10.75c7.53,7.61,8.71,81.89,8.71,81.89" fill="#db232e"/><path d="M652.88,438.41s-1.77,1.5-8.46,8.19l-2.23,2.23c-1.77,1.77-3.93,3.86-6.36,6.29-2.75-.91-16-16.65-12.06-33.63a5.53,5.53,0,0,0,.79,1.18c2.16,2.82,9.18,10.23,27.73,15.54l.59.2" fill="#fff"/><path d="M678.51,454.46c-3.35-3.34-6.23-6-8.52-8.12-1.77-1.64-3.22-2.89-4.46-3.87A29.34,29.34,0,0,0,660,438.6l.13-.13A109.14,109.14,0,0,0,673,422.54c.59-1,.92-1.51.92-1.51,3.93,17,7.34,32.45,4.59,33.43" fill="#fff"/><path d="M679.16,353.05a87.72,87.72,0,0,1-1.06,16.19A63.88,63.88,0,0,1,675,382.76c-1.51,3.77-5.1-23.15-7.5-26.47-5.31-7.23,3.68-1.2-26.92,3.83s-27.48,2.9-27.77,13.64c-.18,7.4,2.55,22-.37,18.43-2.34-2.94-4.31-7.66-6.14-12.28-1.31-3.17-2.5-6.36-3.71-8.83-8.36-17.23,6.42-22.38,5.66-23.15-9.68-9.68,19.36-29.25,26.59-30.38,19.67-3.17,22.6,9.31,22.6,9.31s19.72-3.71,21.71,26.2" fill="#221e1f"/><path d="M701.69,484.66s-8.36-1.52-16,9.88l-8.36,1.52s-2.28,14.43,1.52,15.19l17.47-9.88Z" fill="#feecdc"/><path d="M629.53,489.22s34.94-3,47.09,6.08c0,0-3,14.43,4.56,19.75s1.52,24.3,1.52,24.3-27.35,3-46.33,0l-12.92-2.27,2.28-21.27Z" fill="#1b365d"/><path d="M625.35,529.86s-.76,5.43.76,8c0,0-7.6-1.19-9.88-1.95,0,0-7.59.76-8.35-.76s1.52-3,1.52-3S622.31,531.38,625.35,529.86Z" fill="#feecdc"/><path d="M709.66,568.6l2.28,5.32s-25.82,9.87-53.93,10.63-55.45-6.84-55.45-6.84l.66-6.06s31.24,8.34,54,6.82C680.76,576.91,709.66,568.6,709.66,568.6Z" fill="#72502b"/><path d="M622.9,378.3a10.61,10.61,0,0,1,8.07.42" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><path d="M655.11,374.85a10.68,10.68,0,0,1,7.07-3.92" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><g opacity="0.8"><g clip-path="url(#g)"><g clip-path="url(#g)"><path d="M641.44,413.36s4.06,5,8.78,4.18,6.81-6.93,6.81-6.93" fill="#e5727c"/></g></g></g><g opacity="0.8"><g clip-path="url(#i)"><g clip-path="url(#i)"><path d="M644.85,396.3s-1.18,6,.22,7,6-.48,6-.48" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/></g></g></g><path d="M634.11,385.9a2.83,2.83,0,1,1-3.28-2.29h0a2.82,2.82,0,0,1,3.28,2.29" fill="#221e1f"/><path d="M661.14,381.12a2.83,2.83,0,1,1-3.28-2.29h0a2.83,2.83,0,0,1,3.28,2.29" fill="#221e1f"/><path d="M810.69,442.51c-3.8-.76-.76,0-10.63-5.32-6.83-3.68-7.48-11-7.24-15.14,12-7.79,18.76-23.41,15.79-39.74-3.84-21-22.34-35.31-41.32-31.85S736,373.79,739.85,394.84c2.89,15.82,14.06,27.81,27.49,31.31a10.85,10.85,0,0,1,2.33,6.48c0,7.6-7.59,6.08-7.59,6.08l7.59,15.19c9.12,12.15,36.46,12.91,44.06,9.88S814.49,443.27,810.69,442.51Z" fill="#feecdc"/><path d="M773.09,354s15.19-3,19,6.84a32,32,0,0,0,10.64,14.43s9.11,8.36,6.07,23.55c0,0-3,5.32,0,4.56,0,0,6.84,2.28,12.92-6.08s5.31-17.47.75-18.23-12.91-7.6-12.15-11.4.76-9.87-4.56-13.67-12.15-19-29.62-15.95c0,0-5.32,0-6.84,3,0,0-19-5.32-30.38,10.64,0,0-3,4.55-8.36,19a16,16,0,0,1-6.83,9.11c-5.32,3-14.44,5.32-15.2,16.71s8.36,11.4,10.64,11.4c0,0-9.12,9.11-1.52,18.23s12.15,4.55,14.43,2.28,3-1.52,5.32-.76,9.88,1.51,12.91-6.08,0-11.39-3.79-14.43S742,395,744.23,389.71s3.79-7.6,9.11-9.87,6.08-5.32,6.08-8.36S757.14,354.77,767,354C767,354,770.81,355.53,773.09,354Z" fill="#221e1f"/><path d="M765.75,438.69A28.58,28.58,0,0,1,759,438c-2.28-.76-6.84-3-9.88,3s-19,41-6.83,57.73c0,0,6.07,3.8,9.11-2.28a9.79,9.79,0,0,1,13-4.6,9.68,9.68,0,0,1,1.39.81c4.55,3,.75,40.26-6.08,58.49s-22,50.89-14.43,81.27L751.44,662l96.47-2.28s12.16-29.63,5.32-57-23.55-49.37-23.55-61.53-3-20.51-.76-29.62c0,0,1.9-4.94,1.9-7.22,0,0,8.35,4.56,13.67,2.28,0,0,5.32-3,3-9.87,0,0,7.6,1.52,7.6-4.56,0,0,.76-1.52-1.52-3.8s-9.88-12.15-11.4-15.95-19-28.11-27.34-31.9c0,0-4.3-1.1-6.33,1.35,0,0-.51.93.25,3.21s3.8,14.43,0,14.43-26.59,1.52-32.66-4.55a38.17,38.17,0,0,1-8.36-12.16S766.76,439.06,765.75,438.69Z" fill="#ed1b2e"/><path d="M776.13,499.09a96.16,96.16,0,0,1-12.2-7.16s-6.79-3.47-11.35,1.85a21.34,21.34,0,0,1-3,4.55s-1.52,2.28-3.8,1.52c0,0,6.84,24.31,16,29.63,0,0-5.32,3.8,6.08,9.11a16.37,16.37,0,0,0,4.56.76,22.26,22.26,0,0,1,6.83,1.52c2.28.76,17.47,8.36,33.42,6.84s27.35-7.6,28.87-12.16c0,0,3.8-2.27,3.8-5.31,0,0-.76-3.8.76-5.32s3.8-9.12,1.52-21.27c0,0-2.31,5.19-9.51,3.36l-7.2-2.6s-2.28,10.64-3.8,11.4c0,0-29.63-6.84-38-6.08,0,0-7.6,0-10.64-3S776.13,499.09,776.13,499.09Z" fill="#feecdc"/><ellipse cx="787.9" cy="447.06" rx="2.28" ry="3.04" transform="translate(-106.49 303.13) rotate(-20.43)" fill="#f1f1f1"/><path d="M784.81,444.77c-6.95,0-13.2-5.1-16.55-8.45a.39.39,0,0,1,0-.54.37.37,0,0,1,.52,0c3.74,3.74,11.19,9.74,19,7.88,6-1.44,8.82-8.81,8.84-8.88a.37.37,0,0,1,.49-.22.36.36,0,0,1,.22.48h0c-.12.32-3,7.83-9.38,9.36A14.17,14.17,0,0,1,784.81,444.77Z" fill="#f1f1f1"/><path d="M927.8,378.3a10.71,10.71,0,0,0-8.07.42" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><path d="M895.58,374.86a9.73,9.73,0,0,0-3.15-2.66,9.52,9.52,0,0,0-3.91-1.26" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><g opacity="0.8"><g clip-path="url(#k)"><g clip-path="url(#k)"><path d="M908.78,411.67s-2.92,5.74-7.71,5.91-8.1-5.36-8.1-5.36" fill="#e5727c"/></g></g></g><g opacity="0.8"><g clip-path="url(#m)"><g clip-path="url(#m)"><path d="M896.62,394.67s-2.46,5.35-1.86,6.68,3.89,1.26,3.89,1.26" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/></g></g></g><path d="M916.59,385.9a2.83,2.83,0,1,0,3.28-2.29h0a2.82,2.82,0,0,0-3.27,2.29h0" fill="#221e1f"/><path d="M889.56,381.13a2.83,2.83,0,1,0,3.28-2.3h0a2.83,2.83,0,0,0-3.28,2.3h0" fill="#221e1f"/><path d="M754.69,377.09a10.65,10.65,0,0,1,8.07.43" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><path d="M786.91,373.65a10.62,10.62,0,0,1,7.07-3.92" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/><g opacity="0.8"><g clip-path="url(#o)"><g clip-path="url(#o)"><path d="M773.8,406.52s4.31,4.8,9,3.72,6.44-7.28,6.44-7.28" fill="#e5727c"/></g></g></g><g opacity="0.8"><g clip-path="url(#q)"><g clip-path="url(#q)"><path d="M785.36,389.28s2.46,5.34,1.86,6.68-3.9,1.26-3.9,1.26" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/></g></g></g><path d="M765.9,384.7a2.83,2.83,0,1,1-3.27-2.3h0a2.82,2.82,0,0,1,3.27,2.3h0" fill="#221e1f"/><path d="M792.93,379.92a2.83,2.83,0,1,1-3.28-2.29h0a2.82,2.82,0,0,1,3.27,2.29h0" fill="#221e1f"/></g></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1442" height="569.228" viewBox="0 0 1442 569.228">
  <defs>
    <clipPath id="clip-path">
      <path id="Path_7025" data-name="Path 7025" d="M1439,550.233S901.066,566.85,710.011,566.211C539.987,565.641-3,550.233-3,550.233V-3H1439Z" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-2">
      <rect id="Rectangle_3402" data-name="Rectangle 3402" width="620.14" height="398.487" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-3">
      <rect id="Rectangle_3394" data-name="Rectangle 3394" width="13.282" height="4.733" transform="translate(0 2.311) rotate(-10.02)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-4">
      <rect id="Rectangle_3395" data-name="Rectangle 3395" width="6.321" height="7.41" transform="translate(0 1.1) rotate(-10.02)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-5">
      <rect id="Rectangle_3396" data-name="Rectangle 3396" width="15.798" height="5.632" transform="translate(0 2.749) rotate(-10.02)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-6">
      <rect id="Rectangle_3397" data-name="Rectangle 3397" width="7.53" height="8.818" transform="translate(0 1.31) rotate(-10.02)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-7">
      <rect id="Rectangle_3398" data-name="Rectangle 3398" width="15.798" height="5.632" transform="translate(0 0.549) rotate(-1.99)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-8">
      <rect id="Rectangle_3399" data-name="Rectangle 3399" width="8.818" height="5.113" transform="translate(0 8.683) rotate(-79.98)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-9">
      <rect id="Rectangle_3400" data-name="Rectangle 3400" width="15.798" height="5.632" transform="translate(0 3.559) rotate(-13.02)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-10">
      <rect id="Rectangle_3401" data-name="Rectangle 3401" width="5.113" height="8.818" transform="translate(0 0.89) rotate(-10.02)" fill="none"/>
    </clipPath>
  </defs>
  <g id="index_banner_web" transform="translate(3 3)" clip-path="url(#clip-path)">
    <rect id="Rectangle_3393" data-name="Rectangle 3393" width="1440.532" height="571.667" transform="translate(-2.001 -0.004)" fill="#f09491"/>
    <path id="Path_6924" data-name="Path 6924" d="M251.863,300.491l-19.3-15.838L248.4,265.36l19.3,15.828Zm-17.236-16.038,17.036,13.981,13.981-17.026-17.036-13.981Z" transform="translate(-0.326 -0.372)" fill="#e87722"/>
    <path id="Path_6925" data-name="Path 6925" d="M227.853,218.871l-19.3-15.838,15.838-19.3,19.293,15.838Zm-17.236-16.038,16.976,13.981,13.981-17.036L224.6,185.8Z" transform="translate(-0.293 -0.259)" fill="#f09491"/>
    <path id="Path_6926" data-name="Path 6926" d="M470.248,175.666a8.818,8.818,0,1,1,8.808-8.808h0a8.808,8.808,0,0,1-8.808,8.808Zm0-16.148a7.34,7.34,0,1,0,7.34,7.34h0a7.35,7.35,0,0,0-7.34-7.35h0Z" transform="translate(-0.643 -0.223)" fill="#f2c75c"/>
    <path id="Path_6927" data-name="Path 6927" d="M1223.718,291.746a8.818,8.818,0,1,1,8.807-8.808h0A8.808,8.808,0,0,1,1223.718,291.746Zm0-16.158a7.35,7.35,0,1,0,7.34,7.35A7.35,7.35,0,0,0,1223.718,275.588Z" transform="translate(-1.687 -0.384)" fill="#e87722"/>
    <circle id="Ellipse_530" data-name="Ellipse 530" cx="16.907" cy="16.907" r="16.907" transform="translate(1112.723 184.48)" fill="#f2c75c" opacity="0.5"/>
    <path id="Path_6928" data-name="Path 6928" d="M1128.886,217.822A17.226,17.226,0,1,1,1146.1,200.6,17.226,17.226,0,0,1,1128.886,217.822Zm0-34.153a16.976,16.976,0,1,0,16.927,16.976A16.976,16.976,0,0,0,1128.886,183.67Z" transform="translate(-1.544 -0.258)" fill="#f2c75c"/>
    <path id="Path_6929" data-name="Path 6929" d="M1034.877,190.8l-2.347,5.992,19.533,63.911,4.744,1.857Z" transform="translate(-1.434 -0.268)" fill="#e87722"/>
    <path id="Path_6930" data-name="Path 6930" d="M1039.107,180l-2.347,5.992,23.847,77.992,4.744,1.867Z" transform="translate(-1.44 -0.253)" fill="#e87722"/>
    <path id="Path_6931" data-name="Path 6931" d="M1030.647,201.59l-2.347,5.992,15.219,49.751,4.744,1.867Z" transform="translate(-1.428 -0.283)" fill="#e87722"/>
    <path id="Path_6932" data-name="Path 6932" d="M1046.053,178.127l-4.743-1.857,27.841,91.074,4.743,1.857Z" transform="translate(-1.446 -0.248)" fill="#e87722"/>
    <path id="Path_6933" data-name="Path 6933" d="M1017.887,247.331l4.744,1.857L1018,233.94l-2.347,5.992Z" transform="translate(-1.411 -0.328)" fill="#e87722"/>
    <path id="Path_6934" data-name="Path 6934" d="M1022.2,223.15l-2.347,5.992,6.581,21.52,4.743,1.867Z" transform="translate(-1.417 -0.313)" fill="#e87722"/>
    <path id="Path_6935" data-name="Path 6935" d="M1026.427,212.37l-2.347,5.992,10.895,35.651,4.744,1.857Z" transform="translate(-1.423 -0.298)" fill="#e87722"/>
    <path id="Path_6936" data-name="Path 6936" d="M1054.6,181.477l-4.753-1.857,27.851,91.074,4.743,1.857Z" transform="translate(-1.458 -0.253)" fill="#e87722"/>
    <path id="Path_6937" data-name="Path 6937" d="M1110,204l.27-.689-.539-.21Z" transform="translate(-1.541 -0.285)" fill="#e87722"/>
    <path id="Path_6938" data-name="Path 6938" d="M1105.9,201.6l-4.744-1.867,4.584,14.979,2.347-5.992Z" transform="translate(-1.529 -0.281)" fill="#e87722"/>
    <path id="Path_6939" data-name="Path 6939" d="M1097.354,198.247l-4.753-1.867,8.908,29.13,2.347-5.992Z" transform="translate(-1.518 -0.276)" fill="#e87722"/>
    <path id="Path_6940" data-name="Path 6940" d="M1013.74,244.72l-.34.869.689.27Z" transform="translate(-1.408 -0.343)" fill="#e87722"/>
    <path id="Path_6941" data-name="Path 6941" d="M1071.7,188.187l-4.743-1.867,21.85,71.481,2.347-5.992Z" transform="translate(-1.482 -0.262)" fill="#e87722"/>
    <path id="Path_6942" data-name="Path 6942" d="M1088.8,194.887l-4.753-1.857,13.222,43.24,2.347-5.992Z" transform="translate(-1.506 -0.272)" fill="#e87722"/>
    <path id="Path_6943" data-name="Path 6943" d="M1063.154,184.837l-4.743-1.867,26.164,85.591,2.347-5.992Z" transform="translate(-1.47 -0.258)" fill="#e87722"/>
    <path id="Path_6944" data-name="Path 6944" d="M1080.253,191.537l-4.743-1.857,17.536,57.36,2.347-5.992Z" transform="translate(-1.494 -0.267)" fill="#e87722"/>
    <path id="Path_6945" data-name="Path 6945" d="M313.158,292.58l-1.628,4.164,13.581,44.428,3.305,1.3Z" transform="translate(-0.436 -0.409)" fill="#e87722"/>
    <path id="Path_6946" data-name="Path 6946" d="M316.1,285.08l-1.628,4.164L331.057,343.5l3.3,1.288Z" transform="translate(-0.44 -0.399)" fill="#e87722"/>
    <path id="Path_6947" data-name="Path 6947" d="M310.218,300.08l-1.628,4.164,10.575,34.612,3.305,1.3Z" transform="translate(-0.432 -0.42)" fill="#e87722"/>
    <path id="Path_6948" data-name="Path 6948" d="M320.935,283.768l-3.305-1.3,19.343,63.352,3.305,1.3Z" transform="translate(-0.444 -0.395)" fill="#e87722"/>
    <path id="Path_6949" data-name="Path 6949" d="M301.338,331.907l3.305,1.288L301.4,322.58l-1.638,4.164Z" transform="translate(-0.419 -0.451)" fill="#e87722"/>
    <path id="Path_6950" data-name="Path 6950" d="M304.338,315.08l-1.638,4.164,4.584,14.979,3.3,1.3Z" transform="translate(-0.423 -0.441)" fill="#e87722"/>
    <path id="Path_6951" data-name="Path 6951" d="M307.278,307.58l-1.638,4.164,7.59,24.8,3.3,1.3Z" transform="translate(-0.427 -0.43)" fill="#e87722"/>
    <path id="Path_6952" data-name="Path 6952" d="M326.875,286.1l-3.3-1.3,19.393,63.352,3.305,1.3Z" transform="translate(-0.452 -0.399)" fill="#e87722"/>
    <path id="Path_6953" data-name="Path 6953" d="M365.4,301.749l.19-.469-.38-.15Z" transform="translate(-0.51 -0.421)" fill="#e87722"/>
    <path id="Path_6954" data-name="Path 6954" d="M362.565,300.088l-3.305-1.3,3.2,10.445,1.628-4.164Z" transform="translate(-0.502 -0.418)" fill="#e87722"/>
    <path id="Path_6955" data-name="Path 6955" d="M356.615,297.758l-3.305-1.3,6.2,20.262,1.628-4.164Z" transform="translate(-0.494 -0.415)" fill="#e87722"/>
    <path id="Path_6956" data-name="Path 6956" d="M298.45,330.09l-.23.6.469.19Z" transform="translate(-0.417 -0.461)" fill="#e87722"/>
    <path id="Path_6957" data-name="Path 6957" d="M338.775,290.758l-3.305-1.288,15.2,49.721,1.638-4.164Z" transform="translate(-0.469 -0.405)" fill="#e87722"/>
    <path id="Path_6958" data-name="Path 6958" d="M350.665,295.428l-3.3-1.3,9.2,30.078,1.628-4.164Z" transform="translate(-0.485 -0.412)" fill="#e87722"/>
    <path id="Path_6959" data-name="Path 6959" d="M332.825,288.428l-3.305-1.3,18.2,59.547,1.638-4.164Z" transform="translate(-0.461 -0.402)" fill="#e87722"/>
    <path id="Path_6960" data-name="Path 6960" d="M344.725,293.1l-3.305-1.3,12.2,39.895,1.628-4.164Z" transform="translate(-0.477 -0.408)" fill="#e87722"/>
    <g id="Group_2132" data-name="Group 2132" transform="translate(409.458 173.176)" clip-path="url(#clip-path-2)">
      <circle id="Ellipse_531" data-name="Ellipse 531" cx="230.96" cy="230.96" r="230.96" transform="translate(67.077 135.622)" fill="#fff" opacity="0.25"/>
      <circle id="Ellipse_532" data-name="Ellipse 532" cx="193.991" cy="193.991" r="193.991" transform="translate(104.046 172.591)" fill="#fff" opacity="0.5"/>
      <circle id="Ellipse_533" data-name="Ellipse 533" cx="144.3" cy="144.3" r="144.3" transform="translate(153.737 298.796)" fill="#fff" opacity="0.75"/>
      <path id="Path_6961" data-name="Path 6961" d="M875.4,569.356a686.532,686.532,0,0,0-25.035,89.516l60.686,2.277,5.3-23.517,6.072,25.035s63.732,0,63.712-.759c-1.678-91.024-25.2-95.577-25.2-95.577Z" transform="translate(-410.64 -173.964)" fill="#a7a6a6"/>
      <path id="Path_6962" data-name="Path 6962" d="M872.377,575.423l-2.277,5.313s25.884,12.982,53.865,10.625a110.944,110.944,0,0,0,46.895-15.179l-3.795-6.062s-23.507,13.651-46.266,14.41C897.252,585.319,872.377,575.423,872.377,575.423Z" transform="translate(-410.667 -173.97)" fill="#72502b"/>
      <path id="Path_6963" data-name="Path 6963" d="M933.992,429.21s4.554,5.313,31.856,11.384c0,0,11.384,1.518,15.179,15.928s-2.277,84.952-3.795,94.819-9.107,18.2-18.974,15.978c0,0-14.42,11.374-49.312,11.374L873.676,570.7l1.138-17.066s-22.758-10.625-23.517-14.42-7.58-24.266-3-31.856-5.3-44.768-5.3-44.768-6.831-6.072,12.892-14.42,26.713-12.662,28.53-16.188c0,0,7.12,11.644,13.981,13.921s13.651.749,21.241-4.554a123.931,123.931,0,0,0,14.35-12.143Z" transform="translate(-410.628 -173.774)" fill="#a7a8aa"/>
      <path id="Path_6964" data-name="Path 6964" d="M877.536,363.5c1.518-5.313,3.146-1.248,5.1-4.853,4.324-7.839-3.994,6.99,26.9,8.059s26.353-15.8,27.961-5.193c1.128,7.31,1.548,37.258,3.995,33.344,2-3.206,3.3-8.139,4.5-12.982.859,1.049,7.44,2.487,7.739,5.482s-5.712,7.909-6.831,12.133c-.909,3.575-7.42,6.191-7.749,6.181-.349.709-2.706,11.983-6.221,17.076,0,3,0,6.751.17,10.356-2.187,2.786-9.477,9.936-28.151,14.6h-7.8a109.662,109.662,0,0,1-12.343-16.327c.29-2.616.639-5.223,1-7.37-3.615-5.432-12.413-8.538-10.895-38.117l.379-14.8" transform="translate(-410.674 -173.673)" fill="#e2b690"/>
      <path id="Path_6965" data-name="Path 6965" d="M916.962,554.6l-14.18,14.979L893,550.734s-3-74.357,3.305-85.631c-.569-1.2-4.214-7.669-6.531-11.734l2.5-1.927c7.48-5.762,6.5-5.143,6.5-5.143-.19-.09,2.457-.659,2.267-.759,0,0,4.554,1.518,7.589,0,.679-.34.829.709.759.759s.769.07,4.314,3.765c1.108,1.128,2.377,2.546,3.924,4.4a57.076,57.076,0,0,0-8.328,9.746c6.491,8.488,9.507,82.206,9.507,82.206Z" transform="translate(-410.694 -173.797)" fill="#db232e"/>
      <path id="Path_6966" data-name="Path 6966" d="M907.46,445.912s1.937,1.258,9.427,6.99l2.5,1.917c2,1.528,4.384,3.325,7.1,5.422,2.616-1.258,13.711-18.544,7.63-34.852a5,5,0,0,1-.629,1.268c-1.778,3.066-7.879,11.185-25.565,18.824-.18.09-.27.3-.459.389" transform="translate(-410.719 -173.769)" fill="#fff"/>
      <path id="Path_6967" data-name="Path 6967" d="M884.108,465.1c2.876-3.735,5.392-6.771,7.39-9.137,1.548-1.847,2.816-3.275,3.924-4.4,3.545-3.695,4.883-5.273,4.883-5.273s.829-.709.749-.759c-7.56-5.992-13.421-10.256-15.588-12.742-.709-.9-1.109-1.378-1.109-1.378-1.718,17.326-3.106,33.074-.25,33.693" transform="translate(-410.684 -173.777)" fill="#fff"/>
      <path id="Path_6968" data-name="Path 6968" d="M871.08,372.189c.2,3.745.859,2.437,2.487,8.328,1.448,5.283,2.067,3.106,2.067,0,0-6.072,3.345-13.851,5.3-17.446,4.334-7.839-2.347,2.527,28.6,3.585s27.592-.649,29.259,9.986c1.128,7.3.3,22.109,2.726,18.195,1.937-3.206,2.686-7.46,4.653-11.983.909-2.1,3.675,3.355,4.554.759,6.072-18.135.859-27.212,1.518-28.061,3.505-4.564,6.591-12.613,4.544-11.384-3.785,2.277-15.169,3-15.928,2.277-13.841-13.841-52.277-10.505-52.277-10.505s-13.711,1.408-17.506,30.228Z" transform="translate(-410.669 -173.645)" fill="#221e1f"/>
      <path id="Path_6969" data-name="Path 6969" d="M909.805,502.13S935.59,513.5,950,523.371c0,0-2.277,31.107-19.723,34.133,0,0-15.169-17.436-19.723-23.507,0,0-6.062-9.866-11.374-12.143Z" transform="translate(-410.708 -173.875)" fill="#a7a8aa"/>
      <path id="Path_6970" data-name="Path 6970" d="M861.2,497.571s4.554-9.866,21.241-5.313c0,0,8.348.759,14.41,5.313l3,1.508s3,19.723-1.518,20.482l-8.338-.759s-9.018-2.267-13.611-6.831-8.348-3-12.143-3H858.17S856.652,503.633,861.2,497.571Z" transform="translate(-410.65 -173.86)" fill="#e2b690"/>
      <path id="Path_6971" data-name="Path 6971" d="M898.124,498a49.52,49.52,0,0,1,1,8.658s.759,6.831-1.508,10.625a8.508,8.508,0,0,1-3.994,2.217,35.33,35.33,0,0,0,7.789,3.845s4.554-2.277,6.072-5.3l-3-3,3,.759s3-7.579,2.277-13.651Z" transform="translate(-410.7 -173.87)" fill="#a7a8aa"/>
      <path id="Path_6972" data-name="Path 6972" d="M931.979,492s-56.921,15.888-72.679,23.4c0,0,12.063,27.672,28.83,33.374,0,0,32.715-20.122,38.157-25.415,0,0,7.52-8.8,13.122-10.226Z" transform="translate(-410.652 -173.861)" fill="#a7a8aa"/>
      <path id="Path_6973" data-name="Path 6973" d="M980.752,494.988s-3-10.446-20.162-8.538c0,0-8.359-.549-15.059,3l-3.235,1s-6.052,19.024-1.678,20.472l8.358.549s9.347-.839,14.55-4.634,8.708-1.7,12.463-1.108l5.992.939S984.307,501.728,980.752,494.988Z" transform="translate(-410.763 -173.853)" fill="#e2b690"/>
      <path id="Path_6974" data-name="Path 6974" d="M944.252,489.75a50.164,50.164,0,0,0-2.387,8.388s-1.808,6.631-.15,10.735a8.368,8.368,0,0,0,3.6,2.806,34.953,34.953,0,0,1-8.3,2.6s-4.134-3-5.163-6.181l3.465-2.527-3.116.28s-1.817-7.989-.13-13.851Z" transform="translate(-410.752 -173.858)" fill="#fff"/>
      <path id="Path_6975" data-name="Path 6975" d="M496.5,566.316s-9.856,20.482-13.651,31.107-4.554,55.363-4.554,55.363,66.748,15.978,100.86,0c0,0-.759-48.543-6.831-57.65s-15.169-31.856-15.169-31.856l-35.65,3.795Z" transform="translate(-410.125 -173.96)" fill="#67737a"/>
      <path id="Path_6976" data-name="Path 6976" d="M488.4,401.343s-17.516-21.56-24.246-6.741-5.392,28.291,1.348,36.38,6.731,22.9,6.731,24.246S493.783,421.545,488.4,401.343Z" transform="translate(-410.099 -173.719)" fill="#221e1f"/>
      <path id="Path_6977" data-name="Path 6977" d="M550.313,411.6v-.19c0-22.689-15.688-41.083-35.031-41.083s-35.021,18.395-35.021,41.083v.28c-2.8-.669-8.838-1.238-6.741,7.13,1.7,6.82,6.1,7.709,9.1,7.44,4.494,13.6,14.979,23.687,27.662,25.824-.2,3.445-3.056,6.062-7.41,10.416,0,0,4.324,19.643,20.492,20.971S542.334,458.7,542.334,458.7s-9.537-4.214-12.982-9.647c8.518-4.364,15.259-12.583,18.634-22.778,3,.14,7.06-1,8.688-7.47C558.611,410.864,553.249,410.994,550.313,411.6Z" transform="translate(-410.117 -173.693)" fill="#feecdc"/>
      <path id="Path_6978" data-name="Path 6978" d="M490.434,391.2s-8.079,12.123-8.079,16.168c0,0-2.267,21.7,4.254,27.013a28.051,28.051,0,0,1-9.617-24.326s-6.741-1.348-5.392-12.123,10.785-32.335,33.683-33.683c0,0,29.639-9.427,45.806,17.516,0,0,6.062,15.5,2,28.96,0,0-2.7,16.158-5.392,20.2,0,0,2-15.488.679-20.881s-1.348-16.168-13.471-25.595c0,0,1.348,6.731-1.348,12.123,0,0,0,1.348-3.995,1.348s-24.965.679-30.957,2.7c-1.318.439-3.995,2.7-5.383-1.348Z" transform="translate(-410.115 -173.682)" fill="#221e1f"/>
      <path id="Path_6979" data-name="Path 6979" d="M506.327,458.46a25.415,25.415,0,0,0,5.313,7.579c3.914,3.925,9.107,7.59,14.41,7.59,2.277,0,5.443-.789,10.835-3.485l5.3,104.994s-27.532,6.141-46.386-5.992c0,0,0-16.168-4.044-25.595L454,536.831s2.686-12.533,2.686-16.168C456.736,501.8,476.7,469.235,506.327,458.46Z" transform="translate(-410.091 -173.815)" fill="#a7a8aa"/>
      <path id="Path_6980" data-name="Path 6980" d="M541.281,457.7s42.132,9.077,44.828,36.02-6.731,60.626-18.854,67.357l-8.089,1.348v5.422S543,578.622,530.875,575.926l-2.7-9.427s-25.595-5.393-33.673-10.785,2.7-14.819,2.7-14.819l33.673-9.427-6.281-57.81S538.585,467.127,541.281,457.7Z" transform="translate(-410.143 -173.814)" fill="#d0d0ce"/>
      <path id="Path_6981" data-name="Path 6981" d="M458.073,531.527s41.772-18.864,88.877-3.994l1.348,12.123s-49.841,18.864-74.1,14.819S450,536.919,458.073,531.527Z" transform="translate(-410.09 -173.903)" fill="#a7a8aa"/>
      <path id="Path_6982" data-name="Path 6982" d="M538.8,483.614c-8.718-9.207-13.281-10.645-13.281-10.645.16-.08.4-.24.559-.32,11.045-5.682,13.981-11.524,14.8-14.09a4,4,0,0,0,.16-1c.08-.16,1.808.18,1.808.18,2.407,11.115-2.287,25.265-3.995,25.914" transform="translate(-410.19 -173.813)" fill="#fff"/>
      <path id="Path_6983" data-name="Path 6983" d="M522.685,472.979c-.8.32-5.362,2.317-13.282,10.645-1.668-.639-6.072-13.981-3.755-25.155a4.543,4.543,0,0,1,.759-.759c.07,0,.729-.11.759,0,.4,1.648,2.247,8.518,15.518,15.269" transform="translate(-410.162 -173.814)" fill="#fff"/>
      <path id="Path_6984" data-name="Path 6984" d="M547.12,527.8l1.348,11.8s8.818-3.685,11.095-11.983c0,0-1.578-8.268-7.58-2.277C550.995,526.266,550.605,527.993,547.12,527.8Z" transform="translate(-410.22 -173.904)" fill="#feecdc"/>
      <path id="Path_6985" data-name="Path 6985" d="M495.47,409.219a8.988,8.988,0,0,1,6.781.24" transform="translate(-410.148 -173.746)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
      <path id="Path_6986" data-name="Path 6986" d="M522.54,406.186a8.9,8.9,0,0,1,6.042-3.086" transform="translate(-410.186 -173.738)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
      <g id="Group_2110" data-name="Group 2110" transform="translate(100.962 260.107)" opacity="0.8">
        <g id="Group_2109" data-name="Group 2109" transform="translate(0)" clip-path="url(#clip-path-3)">
          <g id="Group_2108" data-name="Group 2108" transform="translate(-0.022 0.022)">
            <path id="Path_6987" data-name="Path 6987" d="M511.11,436.217s3.405,4.2,7.37,3.505,5.712-5.812,5.712-5.812" transform="translate(-511.11 -433.91)" fill="#e5727c"/>
          </g>
        </g>
      </g>
      <g id="Group_2113" data-name="Group 2113" transform="translate(102.11 249.211)" opacity="0.8">
        <g id="Group_2112" data-name="Group 2112" transform="translate(0)" clip-path="url(#clip-path-4)">
          <g id="Group_2111" data-name="Group 2111" transform="translate(1.323 1.332)">
            <path id="Path_6988" data-name="Path 6988" d="M514,424.31s-1,4.993.19,5.842,4.993-.4,4.993-.4" transform="translate(-513.607 -424.31)" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
          </g>
        </g>
      </g>
      <path id="Path_6989" data-name="Path 6989" d="M504.993,415.567a2.377,2.377,0,1,1-2.756-1.927h0a2.377,2.377,0,0,1,2.746,1.927" transform="translate(-410.155 -173.753)" fill="#221e1f"/>
      <path id="Path_6990" data-name="Path 6990" d="M527.663,411.557a2.377,2.377,0,1,1-2.756-1.927h0a2.377,2.377,0,0,1,2.756,1.927" transform="translate(-410.186 -173.747)" fill="#221e1f"/>
      <path id="Path_6991" data-name="Path 6991" d="M706.476,562.52A688.187,688.187,0,0,1,731.5,652.036L670.826,654.3,665.5,630.8l-6.062,25.075s-63.722,0-63.722-.759c0-21.97,9.1-91.783,9.1-91.783Z" transform="translate(-410.287 -173.959)" fill="#a7a6a6"/>
      <path id="Path_6992" data-name="Path 6992" d="M623.749,424.276s-28.071,3.785-47.035,25.784c0,0-9.1,3.795-10.615,11.384s0,62.194,6.072,70.542,10.615,9.856,14.41,9.1l11.374-2.247,6.072,29.579s30.348,7.589,47.794,7.589,50.82-6.072,56.132-10.625l7.579-31.856,21.23-6.84s9.107-1.518,8.348-12.9.759-46.266-6.831-63.722c0,0-1.518-5.3-14.41-9.1,0,0-31.307-21.42-50.55-19.813a17.825,17.825,0,0,1-3.305,18.295c-7.589,9.1-18.974,9.856-28.071,5.3S623.749,424.276,623.749,424.276Z" transform="translate(-410.245 -173.763)" fill="#1b365d"/>
      <path id="Path_6993" data-name="Path 6993" d="M678.279,391.108c-.839,3.325-3.625,1.338-3.335,3.076a32.764,32.764,0,0,1-3.465,19.673c.6,2.087,1.288,4.634,1.907,7.18a108.854,108.854,0,0,1-10.146,17.835l-7.729,1c-19.133-2.227-27.252-8.388-29.839-10.815-.26-3.6-.739-7.31-1.158-10.3-4.144-4.624-7.929-15.479-8.358-16.138-.32.05-4.833-1.528-6.191-4.993-3.216-7.889-5.123-15.409-3.645-17.775,1.818,4.6,3.785,9.327,6.132,12.263,2.906,3.575-.529-26.184-.349-33.583.29-10.725-2.167,6.591,28.45,1.558s20.342-18.664,25.644-11.444c2.4,3.325,7.21,37.828,8.718,34.063a64.038,64.038,0,0,0,3.1-13.511l.719.34c4.713,2.487,1.188,15.329-.439,21.56" transform="translate(-410.301 -173.66)" fill="#feecdc"/>
      <path id="Path_6994" data-name="Path 6994" d="M670.89,547.179l-12.143,16.647L646.614,546.39s-1.218-74.826,3.565-86.81c-.719-1.118-5.173-7.07-7.989-10.8l2.227-2.237c6.681-6.671,8.448-8.179,8.448-8.179l-.589-.2,7.789.26-.13.14a29.238,29.238,0,0,1,5.572,3.865c1.238,1,2.676,2.227,4.444,3.855a57.645,57.645,0,0,0-6.99,10.735c7.52,7.6,8.7,81.777,8.7,81.777" transform="translate(-410.352 -173.787)" fill="#db232e"/>
      <path id="Path_6995" data-name="Path 6995" d="M652.839,438.387s-1.768,1.5-8.448,8.179l-2.227,2.227c-1.768,1.768-3.925,3.855-6.351,6.281-2.746-.909-15.978-16.627-12.043-33.583a5.521,5.521,0,0,0,.789,1.178c2.157,2.816,9.167,10.216,27.692,15.519l.589.2" transform="translate(-410.325 -173.764)" fill="#fff"/>
      <path id="Path_6996" data-name="Path 6996" d="M678.484,454.414c-3.345-3.335-6.221-5.992-8.508-8.109-1.768-1.638-3.216-2.886-4.454-3.865A29.3,29.3,0,0,0,660,438.576l.13-.13a109,109,0,0,0,12.852-15.908c.589-1,.919-1.508.919-1.508,3.925,16.976,7.33,32.405,4.584,33.384" transform="translate(-410.376 -173.763)" fill="#fff"/>
      <path id="Path_6997" data-name="Path 6997" d="M679.05,353a87.6,87.6,0,0,1-1.059,16.168,63.792,63.792,0,0,1-3.1,13.5c-1.508,3.765-5.093-23.118-7.49-26.433-5.3-7.22,3.675-1.2-26.883,3.825s-27.442,2.9-27.732,13.621c-.18,7.39,2.546,21.97-.369,18.4-2.337-2.936-4.3-7.649-6.132-12.263-1.308-3.166-2.5-6.351-3.7-8.818-8.348-17.206,6.411-22.349,5.652-23.118-9.667-9.667,19.333-29.21,26.553-30.338,19.643-3.166,22.569,9.3,22.569,9.3s19.693-3.7,21.68,26.164" transform="translate(-410.293 -173.619)" fill="#221e1f"/>
      <path id="Path_6998" data-name="Path 6998" d="M701.655,484.66s-8.349-1.518-15.978,9.866l-8.348,1.518s-2.277,14.41,1.518,15.169l17.446-9.866Z" transform="translate(-410.399 -173.851)" fill="#feecdc"/>
      <path id="Path_6999" data-name="Path 6999" d="M629.522,489.219s34.892-3,47.025,6.072c0,0-3,14.41,4.554,19.723s1.518,24.266,1.518,24.266-27.312,3-46.266,0l-12.9-2.267,2.277-21.241Z" transform="translate(-410.326 -173.857)" fill="#1b365d"/>
      <path id="Path_7000" data-name="Path 7000" d="M625.326,529.86s-.759,5.423.759,7.989c0,0-7.589-1.188-9.866-1.947,0,0-7.58.759-8.338-.759s1.518-3,1.518-3S622.29,531.378,625.326,529.86Z" transform="translate(-410.304 -173.914)" fill="#feecdc"/>
      <path id="Path_7001" data-name="Path 7001" d="M709.512,568.6l2.277,5.313S686,583.769,657.933,584.528,602.56,577.7,602.56,577.7l.659-6.052s31.2,8.328,53.925,6.811C680.652,576.9,709.512,568.6,709.512,568.6Z" transform="translate(-410.297 -173.967)" fill="#72502b"/>
      <path id="Path_7002" data-name="Path 7002" d="M622.9,378.3a10.6,10.6,0,0,1,8.059.419" transform="translate(-410.325 -173.703)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
      <path id="Path_7003" data-name="Path 7003" d="M655.11,374.845a10.665,10.665,0,0,1,7.06-3.915" transform="translate(-410.37 -173.694)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
      <g id="Group_2116" data-name="Group 2116" transform="translate(231.115 236.837)" opacity="0.8">
        <g id="Group_2115" data-name="Group 2115" transform="translate(0)" clip-path="url(#clip-path-5)">
          <g id="Group_2114" data-name="Group 2114" transform="translate(-0.026 0.025)">
            <path id="Path_7004" data-name="Path 7004" d="M641.44,413.356s4.054,4.993,8.768,4.174,6.8-6.92,6.8-6.92" transform="translate(-641.44 -410.61)" fill="#e5727c"/>
          </g>
        </g>
      </g>
      <g id="Group_2119" data-name="Group 2119" transform="translate(232.476 220.985)" opacity="0.8">
        <g id="Group_2118" data-name="Group 2118" transform="translate(0)" clip-path="url(#clip-path-6)">
          <g id="Group_2117" data-name="Group 2117" transform="translate(1.555 1.586)">
            <path id="Path_7005" data-name="Path 7005" d="M644.849,396.3s-1.178,5.992.22,6.99,5.992-.479,5.992-.479" transform="translate(-644.385 -396.3)" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
          </g>
        </g>
      </g>
      <path id="Path_7006" data-name="Path 7006" d="M634.1,385.9a2.826,2.826,0,1,1-3.275-2.287h0A2.816,2.816,0,0,1,634.1,385.9" transform="translate(-410.333 -173.711)" fill="#221e1f"/>
      <path id="Path_7007" data-name="Path 7007" d="M661.132,381.117a2.826,2.826,0,1,1-3.275-2.287h0a2.826,2.826,0,0,1,3.275,2.287" transform="translate(-410.37 -173.704)" fill="#221e1f"/>
      <path id="Path_7008" data-name="Path 7008" d="M810.591,442.382c-3.795-.759-.759,0-10.615-5.313-6.821-3.675-7.47-10.985-7.23-15.119,11.983-7.779,18.734-23.378,15.768-39.685C804.679,361.294,786.2,347,767.251,350.459s-31.247,23.3-27.4,44.319c2.886,15.8,14.04,27.771,27.452,31.267a10.836,10.836,0,0,1,2.327,6.471c0,7.59-7.58,6.072-7.58,6.072l7.58,15.169c9.107,12.133,36.41,12.892,44,9.866S814.386,443.141,810.591,442.382Z" transform="translate(-410.486 -173.665)" fill="#feecdc"/>
      <path id="Path_7009" data-name="Path 7009" d="M773,353.977s15.169-3,18.974,6.831a31.956,31.956,0,0,0,10.625,14.41s9.1,8.348,6.062,23.517c0,0-3,5.313,0,4.554,0,0,6.831,2.277,12.9-6.072s5.3-17.446.749-18.2-12.892-7.589-12.133-11.384.759-9.856-4.554-13.651S793.492,335,776.046,338.049c0,0-5.313,0-6.831,3,0,0-18.974-5.313-30.338,10.625,0,0-3,4.544-8.348,18.974a15.978,15.978,0,0,1-6.82,9.1c-5.313,3-14.42,5.313-15.179,16.687s8.348,11.384,10.625,11.384c0,0-9.107,9.1-1.518,18.2s12.133,4.544,14.41,2.277,3-1.518,5.313-.759,9.866,1.508,12.892-6.072,0-11.374-3.785-14.41-4.514-12.133-2.287-17.416,3.785-7.589,9.1-9.856,6.072-5.313,6.072-8.348-2.277-16.687,7.57-17.456C766.919,353.977,770.724,355.505,773,353.977Z" transform="translate(-410.443 -173.647)" fill="#221e1f"/>
      <path id="Path_7010" data-name="Path 7010" d="M765.711,438.688a28.543,28.543,0,0,1-6.741-.689c-2.277-.759-6.831-3-9.866,3s-18.974,40.943-6.821,57.65c0,0,6.062,3.795,9.1-2.277a9.776,9.776,0,0,1,12.982-4.594,9.654,9.654,0,0,1,1.388.809c4.544,3,.749,40.2-6.072,58.409s-21.969,50.82-14.41,81.157l6.151,29.539,96.336-2.277s12.143-29.589,5.313-56.921-23.517-49.3-23.517-61.445-3-20.482-.759-29.579c0,0,1.9-4.933,1.9-7.21,0,0,8.338,4.554,13.651,2.277,0,0,5.313-3,3-9.856,0,0,7.59,1.518,7.59-4.554,0,0,.759-1.518-1.518-3.795S843.543,476.2,842.025,472.4s-18.974-28.071-27.3-31.856c0,0-4.294-1.1-6.321,1.348,0,0-.509.929.25,3.206s3.795,14.41,0,14.41-26.553,1.518-32.615-4.544a38.119,38.119,0,0,1-8.348-12.143S766.72,439.057,765.711,438.688Z" transform="translate(-410.484 -173.785)" fill="#ed1b2e"/>
      <path id="Path_7011" data-name="Path 7011" d="M776.088,499.078a96,96,0,0,1-12.183-7.15s-6.781-3.465-11.334,1.847a21.307,21.307,0,0,1-3,4.544s-1.518,2.277-3.795,1.518c0,0,6.831,24.276,15.978,29.589,0,0-5.313,3.795,6.072,9.1a16.341,16.341,0,0,0,4.554.759A22.228,22.228,0,0,1,779.2,540.8c2.277.759,17.446,8.348,33.374,6.831s27.312-7.589,28.83-12.143c0,0,3.795-2.267,3.795-5.3,0,0-.759-3.795.759-5.313s3.795-9.107,1.518-21.241c0,0-2.307,5.183-9.5,3.355l-7.19-2.6s-2.277,10.625-3.795,11.384c0,0-29.589-6.831-37.947-6.072,0,0-7.589,0-10.625-3S776.088,499.078,776.088,499.078Z" transform="translate(-410.495 -173.86)" fill="#feecdc"/>
      <ellipse id="Ellipse_534" data-name="Ellipse 534" cx="2.277" cy="3.036" rx="2.277" ry="3.036" transform="translate(374.155 271.196) rotate(-20.43)" fill="#f1f1f1"/>
      <path id="Path_7012" data-name="Path 7012" d="M784.787,444.756c-6.94,0-13.182-5.093-16.527-8.438a.389.389,0,0,1,0-.539.369.369,0,0,1,.519,0c3.735,3.735,11.175,9.726,18.974,7.869,5.992-1.438,8.808-8.8,8.828-8.868a.37.37,0,0,1,.489-.22.36.36,0,0,1,.22.479h0c-.12.32-3,7.819-9.367,9.347a14.149,14.149,0,0,1-3.136.37Z" transform="translate(-410.526 -173.782)" fill="#f1f1f1"/>
      <path id="Path_7013" data-name="Path 7013" d="M927.789,378.3a10.7,10.7,0,0,0-8.059.419" transform="translate(-410.736 -173.703)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
      <path id="Path_7014" data-name="Path 7014" d="M895.57,374.855a9.717,9.717,0,0,0-3.146-2.656,9.508,9.508,0,0,0-3.9-1.258" transform="translate(-410.693 -173.694)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
      <g id="Group_2122" data-name="Group 2122" transform="translate(482.282 237.897)" opacity="0.8">
        <g id="Group_2121" data-name="Group 2121" transform="translate(0 0)" clip-path="url(#clip-path-7)">
          <g id="Group_2120" data-name="Group 2120" transform="translate(-0.011 0.023)">
            <path id="Path_7015" data-name="Path 7015" d="M908.758,411.67s-2.916,5.732-7.7,5.9-8.089-5.353-8.089-5.353" transform="translate(-892.97 -411.67)" fill="#e5727c"/>
          </g>
        </g>
      </g>
      <g id="Group_2125" data-name="Group 2125" transform="translate(483.209 220.148)" opacity="0.8">
        <g id="Group_2124" data-name="Group 2124" transform="translate(0)" clip-path="url(#clip-path-8)">
          <g id="Group_2123" data-name="Group 2123" transform="translate(0.755 0.796)">
            <path id="Path_7016" data-name="Path 7016" d="M896.617,394.67s-2.457,5.343-1.857,6.671,3.885,1.258,3.885,1.258" transform="translate(-894.666 -394.67)" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
          </g>
        </g>
      </g>
      <path id="Path_7017" data-name="Path 7017" d="M916.59,385.9a2.826,2.826,0,1,0,3.275-2.287h0A2.816,2.816,0,0,0,916.6,385.9h0" transform="translate(-410.732 -173.711)" fill="#221e1f"/>
      <path id="Path_7018" data-name="Path 7018" d="M889.56,381.127a2.826,2.826,0,1,0,3.276-2.3h0a2.826,2.826,0,0,0-3.275,2.3h0" transform="translate(-410.694 -173.704)" fill="#221e1f"/>
      <path id="Path_7019" data-name="Path 7019" d="M754.69,377.089a10.635,10.635,0,0,1,8.059.429" transform="translate(-410.507 -173.701)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
      <path id="Path_7020" data-name="Path 7020" d="M786.91,373.645a10.605,10.605,0,0,1,7.06-3.915" transform="translate(-410.552 -173.692)" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
      <g id="Group_2128" data-name="Group 2128" transform="translate(363.279 229.195)" opacity="0.8">
        <g id="Group_2127" data-name="Group 2127" transform="translate(0)" clip-path="url(#clip-path-9)">
          <g id="Group_2126" data-name="Group 2126" transform="translate(-0.012 0.027)">
            <path id="Path_7021" data-name="Path 7021" d="M773.8,406.515s4.3,4.793,8.988,3.715,6.431-7.27,6.431-7.27" transform="translate(-773.8 -402.96)" fill="#e5727c"/>
          </g>
        </g>
      </g>
      <g id="Group_2131" data-name="Group 2131" transform="translate(370.981 214.72)" opacity="0.8">
        <g id="Group_2130" data-name="Group 2130" transform="translate(0 0)" clip-path="url(#clip-path-10)">
          <g id="Group_2129" data-name="Group 2129" transform="translate(1.792 0.841)">
            <path id="Path_7022" data-name="Path 7022" d="M785.357,389.28s2.457,5.333,1.857,6.671-3.895,1.258-3.895,1.258" transform="translate(-783.32 -389.28)" fill="none" stroke="#d09e6b" stroke-linecap="round" stroke-miterlimit="10" stroke-width="0.52"/>
          </g>
        </g>
      </g>
      <path id="Path_7023" data-name="Path 7023" d="M765.892,384.7a2.826,2.826,0,1,1-3.266-2.3h0a2.816,2.816,0,0,1,3.266,2.3h0" transform="translate(-410.515 -173.709)" fill="#221e1f"/>
      <path id="Path_7024" data-name="Path 7024" d="M792.922,379.917a2.826,2.826,0,1,1-3.275-2.287h0a2.816,2.816,0,0,1,3.266,2.287h0" transform="translate(-410.552 -173.703)" fill="#221e1f"/>
    </g>
  </g>
</svg>
PAMapp/assets/images/logo.png

PAMapp/assets/images/notification/banner_mob.svg
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,56 @@
<svg id="notification_mob" data-name="notification â€“ mob" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="375" height="120" viewBox="0 0 375 120">
  <defs>
    <clipPath id="clip-path">
      <rect id="Rectangle_4042" data-name="Rectangle 4042" width="375" height="120" fill="none"/>
    </clipPath>
    <linearGradient id="linear-gradient" x1="-1.128" y1="2.281" x2="-0.128" y2="2.281" gradientUnits="objectBoundingBox">
      <stop offset="0" stop-color="#edc9c7"/>
      <stop offset="1" stop-color="#f3e2e1"/>
    </linearGradient>
  </defs>
  <g id="Group_3388" data-name="Group 3388" transform="translate(1 -1)">
    <g id="Group_3387" data-name="Group 3387" transform="translate(-1 1)" clip-path="url(#clip-path)">
      <g id="Group_3386" data-name="Group 3386" transform="translate(-3.5 -50.5)">
        <g id="Group_3383" data-name="Group 3383" transform="translate(0 42.5)">
          <rect id="Rectangle_4025" data-name="Rectangle 4025" width="134.5" height="398" transform="translate(0 134.5) rotate(-90)" fill="url(#linear-gradient)"/>
        </g>
        <rect id="Rectangle_4026" data-name="Rectangle 4026" width="225" height="72.5" transform="translate(161 111.5)" fill="#f09491"/>
        <rect id="Rectangle_4027" data-name="Rectangle 4027" width="375" height="120" transform="translate(4.5 50.5)" fill="none"/>
        <path id="Path_8048" data-name="Path 8048" d="M505.6,13.343,480.284-95.912a5.277,5.277,0,0,0-6.332-3.95L183.977-32.675a5.278,5.278,0,0,0-3.951,6.332l8.8,38.431L173,24.641a2.912,2.912,0,0,0,1.188,5.127l19.738,4.31,11.418,48.835a5.278,5.278,0,0,0,6.333,3.95L501.649,19.675A5.277,5.277,0,0,0,505.6,13.343Z" transform="translate(-81.946 100)" fill="#f09491"/>
        <path id="Path_8049" data-name="Path 8049" d="M472.4,135.243l-74.942,34.674a8.661,8.661,0,0,1-6.521-.636L359.2,143.793a2.154,2.154,0,0,1,.792-3.589l80.219-29.133a5.109,5.109,0,0,1,4.938.636l27.519,19.947C473.986,132.974,473.733,134.648,472.4,135.243Z" transform="translate(-175.259 -5.352)" fill="#1b365d" opacity="0.5"/>
        <path id="Path_8050" data-name="Path 8050" d="M473.873,114.133l-74.941,34.674a8.667,8.667,0,0,1-6.522-.636l-31.741-25.488c-.168-.112-.838-.452-.792-1.056.264-3.43.007-6.92,1.055-7.388L441.68,89.962a5.106,5.106,0,0,1,4.938.636l28.574,15.725C475.72,108.433,475.2,113.538,473.873,114.133Z" transform="translate(-175.937 5.203)" fill="#a7a8aa"/>
        <path id="Path_8051" data-name="Path 8051" d="M474.514,103.05l-74.942,34.674a8.663,8.663,0,0,1-6.521-.636L361.309,111.6a2.154,2.154,0,0,1,.792-3.589l80.22-29.132a5.108,5.108,0,0,1,4.938.636l27.519,19.947C476.1,100.781,475.844,102.455,474.514,103.05Z" transform="translate(-176.314 10.745)" fill="#feecdc"/>
        <path id="Path_8052" data-name="Path 8052" d="M495.549,118.372l-14.578,6.789a5.2,5.2,0,0,1-4.223-.825l-21.506-16.67a1.6,1.6,0,0,1,.313-2.61l15.366-5.78a3.132,3.132,0,0,1,3.206.739l21.4,15.717C496.443,116.78,496.371,118,495.549,118.372Z" transform="translate(-223.36 0.453)" fill="#fff"/>
        <path id="Path_8053" data-name="Path 8053" d="M437,142.121l-14.578,6.789a5.2,5.2,0,0,1-4.223-.824l-22.006-17.17a1.6,1.6,0,0,1,.314-2.61l15.866-5.28a3.133,3.133,0,0,1,3.206.739l21.4,15.717C437.889,140.529,437.817,141.753,437,142.121Z" transform="translate(-193.833 -11.422)" fill="#fff"/>
        <path id="Path_8054" data-name="Path 8054" d="M540.751,104.906l-1.5,1.383a1.669,1.669,0,0,1-1.353-.264l-6.625-5.4a.512.512,0,0,1,.1-.836l1.492-1a1,1,0,0,1,1.027.237l6.863,5C541.045,104.365,541.015,104.558,540.751,104.906Z" transform="translate(-261.551 0.635)" fill="#a7a8aa"/>
        <path id="Path_8055" data-name="Path 8055" d="M391.314,173.552l-.712.939a.715.715,0,0,1-.871-.148L383.4,169.33a.634.634,0,0,1-.146-.807l.674-.776c.263-.118.725-.3,1.055,0l6.069,4.75C391.344,172.832,391.578,173.2,391.314,173.552Z" transform="translate(-187.583 -33.791)" fill="#fff"/>
        <rect id="Rectangle_4028" data-name="Rectangle 4028" width="24.277" height="24.541" rx="5.278" transform="translate(131.955 109.942)" fill="#5cb8b2"/>
        <rect id="Rectangle_4029" data-name="Rectangle 4029" width="30.61" height="30.943" rx="5.278" transform="translate(178.662 59.277)" fill="#fff" opacity="0.7"/>
        <rect id="Rectangle_4030" data-name="Rectangle 4030" width="30.61" height="30.943" rx="5.278" transform="translate(236.452 67.194)" fill="#f2c75c" opacity="0.7"/>
        <path id="Path_8056" data-name="Path 8056" d="M149.422,69.681l-6.879,10.753,7.88,6.207-9.28,9.1,5.192-8.723-7.1-5.9Z" transform="translate(-65.616 15.16)" fill="#fff"/>
        <path id="Path_8057" data-name="Path 8057" d="M187.495,180.835,175.68,176l-4.688,8.868-10.621-7.492,9.515,3.539,4.53-8.048Z" transform="translate(-76.186 -36.434)" fill="#fff"/>
        <g id="Group_3384" data-name="Group 3384" transform="translate(21.25 101.584)">
          <ellipse id="Ellipse_684" data-name="Ellipse 684" cx="4.354" cy="4.882" rx="4.354" ry="4.882" transform="translate(18.449 43.12) rotate(-89.901)" fill="#d0d0ce"/>
          <path id="Path_8058" data-name="Path 8058" d="M67.989,173.6s-1.589,3.163-.278,8.179,3.676,11.09,3.676,11.09,1.052,1.849-.268,2.374-7.129,2.627-7.129,2.627-2.641,1.051-3.43-.534-8.145-20.6-8.145-20.6Z" transform="translate(-43.457 -138.383)" fill="#a7a8aa"/>
          <circle id="Ellipse_685" data-name="Ellipse 685" cx="6.333" cy="6.333" r="6.333" transform="translate(40.134 9.656)" fill="#f09491"/>
          <circle id="Ellipse_686" data-name="Ellipse 686" cx="7.784" cy="7.784" r="7.784" transform="translate(0 22.255)" fill="#68737a"/>
          <path id="Path_8059" data-name="Path 8059" d="M42.159,132.015s-4.736-7.66,9-13.442,16.637-7.1,21.922-11.837,6.34-4.211,7.656-1.57,8.929,25.084,9.451,28.251-1.328,5.011-6.869,4.738-19.267,1.814-25.6,3.65S44.771,147.06,42.159,132.015Z" transform="translate(-37.934 -103.169)" fill="#fff"/>
          <path id="Path_8060" data-name="Path 8060" d="M52.376,131.871l7.244,23.674s-7.028,4.033-11.511,2.706-6.318-8.983-6.318-8.983-3.677-10.033,2.134-13.19A91.3,91.3,0,0,1,52.376,131.871Z" transform="translate(-37.571 -117.52)" fill="#f09491"/>
        </g>
        <rect id="Rectangle_4031" data-name="Rectangle 4031" width="21.374" height="3.43" transform="translate(183.28 71.811)" fill="#d0d0ce"/>
        <rect id="Rectangle_4032" data-name="Rectangle 4032" width="21.374" height="3.43" transform="translate(183.28 65.214)" fill="#d0d0ce"/>
        <rect id="Rectangle_4033" data-name="Rectangle 4033" width="13.986" height="3.43" transform="translate(183.28 78.409)" fill="#d0d0ce"/>
        <rect id="Rectangle_4034" data-name="Rectangle 4034" width="21.374" height="3.43" transform="translate(240.806 73.659)" fill="#d0d0ce"/>
        <rect id="Rectangle_4035" data-name="Rectangle 4035" width="13.986" height="3.43" transform="translate(240.806 80.256)" fill="#d0d0ce"/>
        <rect id="Rectangle_4036" data-name="Rectangle 4036" width="17.416" height="3.43" transform="translate(135.254 114.824)" fill="#d0d0ce"/>
        <rect id="Rectangle_4037" data-name="Rectangle 4037" width="11.396" height="3.43" transform="translate(135.254 121.421)" fill="#d0d0ce"/>
        <g id="Group_3385" data-name="Group 3385" transform="translate(312.602 82.875)">
          <rect id="Rectangle_4038" data-name="Rectangle 4038" width="37.851" height="38.263" rx="5.278" fill="#fff"/>
          <rect id="Rectangle_4039" data-name="Rectangle 4039" width="30.346" height="3.43" transform="translate(4.09 12.27)" fill="#d0d0ce"/>
          <rect id="Rectangle_4040" data-name="Rectangle 4040" width="30.346" height="3.43" transform="translate(4.09 5.673)" fill="#d0d0ce"/>
          <rect id="Rectangle_4041" data-name="Rectangle 4041" width="19.856" height="3.43" transform="translate(4.09 18.867)" fill="#d0d0ce"/>
        </g>
      </g>
    </g>
  </g>
</svg>
PAMapp/assets/images/notification/banner_web.svg
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,60 @@
<svg id="notification_web" data-name="notification â€“ web" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1280" height="150" viewBox="0 0 1280 150">
  <defs>
    <clipPath id="clip-path">
      <rect id="Rectangle_3981" data-name="Rectangle 3981" width="1280" height="150" transform="translate(0 1)" fill="none"/>
    </clipPath>
    <linearGradient id="linear-gradient" x1="-9.872" y1="-2.825" x2="-8.872" y2="-2.825" gradientUnits="objectBoundingBox">
      <stop offset="0" stop-color="#edc9c7"/>
      <stop offset="1" stop-color="#f3e2e1"/>
    </linearGradient>
  </defs>
  <g id="Group_3422" data-name="Group 3422" transform="translate(0 -1)">
    <g id="Group_3421" data-name="Group 3421" clip-path="url(#clip-path)">
      <g id="Group_3420" data-name="Group 3420">
        <g id="Group_3415" data-name="Group 3415">
          <rect id="Rectangle_3964" data-name="Rectangle 3964" width="269" height="796" transform="translate(-6 247) rotate(-90)" fill="url(#linear-gradient)"/>
        </g>
        <rect id="Rectangle_3965" data-name="Rectangle 3965" width="751.302" height="155.546" transform="translate(541.045 18.832)" fill="#f09491"/>
        <rect id="Rectangle_3966" data-name="Rectangle 3966" width="750" height="240" transform="translate(3 -6)" fill="none"/>
        <path id="Path_8017" data-name="Path 8017" d="M1299.375,29.165l-38.229-164.992a7.971,7.971,0,0,0-9.564-5.966L451.993-1.82a7.971,7.971,0,0,0-5.966,9.563L459.318,65.78,435.41,84.735a4.4,4.4,0,0,0,1.794,7.743l29.808,6.509,17.244,73.748a7.971,7.971,0,0,0,9.564,5.966L1293.409,38.728A7.971,7.971,0,0,0,1299.375,29.165Z" fill="#f09491"/>
        <path id="Path_8018" data-name="Path 8018" d="M746.643,92.665,633.469,145.029c-2.009.9-7.173.8-9.848-.961l-47.934-38.491c-1.993-1.993-.813-4.521,1.2-5.419L698.026,56.163a7.716,7.716,0,0,1,7.458.96l41.558,30.123C749.034,89.238,748.652,91.767,746.643,92.665Z" fill="#1b365d" opacity="0.5"/>
        <path id="Path_8019" data-name="Path 8019" d="M747.838,76.725,634.665,129.088c-2.009.9-7.173.8-9.848-.96L576.882,89.637c-.253-.169-1.265-.684-1.2-1.594.4-5.181.011-10.45,1.594-11.158L699.222,40.223a7.712,7.712,0,0,1,7.457.96L749.831,64.93C750.628,68.118,749.848,75.827,747.838,76.725Z" fill="#a7a8aa"/>
        <path id="Path_8020" data-name="Path 8020" d="M748.237,68.357,635.063,120.72c-2.009.9-7.173.8-9.848-.96L577.281,81.268c-1.993-1.992-.813-4.521,1.2-5.419L699.62,31.854a7.714,7.714,0,0,1,7.458.961l41.558,30.122C750.628,64.93,750.246,67.458,748.237,68.357Z" fill="#feecdc"/>
        <path id="Path_8021" data-name="Path 8021" d="M708.958,75.952,686.943,86.205c-1.241.555-4.563.2-6.377-1.245L648.089,59.786c-1.388-1.582-.768-3.388.473-3.943l23.205-8.728a4.73,4.73,0,0,1,4.841,1.115L708.92,71.966C710.308,73.548,710.2,75.4,708.958,75.952Z" fill="#fff"/>
        <path id="Path_8022" data-name="Path 8022" d="M665.123,93.885l-22.015,10.253c-1.241.555-4.563.2-6.377-1.246L603.5,76.963c-1.388-1.582-.768-3.387.473-3.942l23.96-7.974a4.73,4.73,0,0,1,4.841,1.116L665.085,89.9C666.473,91.481,666.364,93.329,665.123,93.885Z" fill="#fff"/>
        <path id="Path_8023" data-name="Path 8023" d="M719.545,55.892l-2.271,2.089a2.518,2.518,0,0,1-2.042-.4l-10.006-8.15a.774.774,0,0,1,.152-1.263l2.253-1.515a1.515,1.515,0,0,1,1.551.357l10.363,7.558C719.99,55.076,719.944,55.366,719.545,55.892Z" fill="#a7a8aa"/>
        <path id="Path_8024" data-name="Path 8024" d="M605.574,107.569l-1.075,1.42a1.082,1.082,0,0,1-1.316-.224l-9.564-7.572a.959.959,0,0,1-.22-1.219l1.017-1.172c.4-.177,1.095-.455,1.594,0l9.166,7.173C605.62,106.482,605.974,107.044,605.574,107.569Z" fill="#fff"/>
        <rect id="Rectangle_3967" data-name="Rectangle 3967" width="36.662" height="37.061" rx="3.985" transform="translate(497.182 62.539)" fill="#5cb8b2"/>
        <path id="Path_8025" data-name="Path 8025" d="M424.469,22.631,414.081,38.869l11.9,9.373L411.966,61.985l7.841-13.174L409.082,39.9Z" fill="#fff"/>
        <path id="Path_8026" data-name="Path 8026" d="M466,112.577l-17.842-7.3-7.08,13.392-16.039-11.314,14.369,5.344,6.841-12.154Z" fill="#fff"/>
        <g id="Group_3416" data-name="Group 3416">
          <ellipse id="Ellipse_678" data-name="Ellipse 678" cx="6.575" cy="7.372" rx="6.575" ry="7.372" transform="translate(357.861 113.036) rotate(-89.901)" fill="#d0d0ce"/>
          <path id="Path_8027" data-name="Path 8027" d="M367.047,101.1s-2.4,4.778-.42,12.353,5.55,16.747,5.55,16.747,1.589,2.792-.4,3.586-10.767,3.966-10.767,3.966-3.988,1.587-5.179-.806-12.3-31.1-12.3-31.1Z" fill="#a7a8aa"/>
          <circle id="Ellipse_679" data-name="Ellipse 679" cx="9.564" cy="9.564" r="9.564" transform="translate(390.609 62.499)" fill="#f09491"/>
          <circle id="Ellipse_680" data-name="Ellipse 680" cx="11.756" cy="11.756" r="11.756" transform="translate(330 81.526)" fill="#68737a"/>
          <path id="Path_8028" data-name="Path 8028" d="M336.379,91.479s-7.153-11.569,13.584-20.3S375.087,60.463,383.07,53.3s9.575-6.36,11.56-2.371S408.114,88.814,408.9,93.6s-2.006,7.568-10.374,7.155-29.1,2.739-38.664,5.512S340.325,114.2,336.379,91.479Z" fill="#fff"/>
          <path id="Path_8029" data-name="Path 8029" d="M352.357,69.589,363.3,105.342s-10.613,6.091-17.384,4.086-9.54-13.565-9.54-13.565-5.553-15.153,3.222-19.92A137.735,137.735,0,0,1,352.357,69.589Z" fill="#f09491"/>
        </g>
        <g id="Group_3417" data-name="Group 3417">
          <rect id="Rectangle_3968" data-name="Rectangle 3968" width="33.608" height="33.973" rx="2.897" transform="translate(560.717 13.027)" fill="#fff" opacity="0.7"/>
          <rect id="Rectangle_3969" data-name="Rectangle 3969" width="23.468" height="3.766" transform="translate(565.787 26.789)" fill="#d0d0ce"/>
          <rect id="Rectangle_3970" data-name="Rectangle 3970" width="23.468" height="3.766" transform="translate(565.787 19.546)" fill="#d0d0ce"/>
          <rect id="Rectangle_3971" data-name="Rectangle 3971" width="15.355" height="3.766" transform="translate(565.787 34.032)" fill="#d0d0ce"/>
        </g>
        <g id="Group_3418" data-name="Group 3418">
          <rect id="Rectangle_3972" data-name="Rectangle 3972" width="46.226" height="46.729" rx="3.985" transform="translate(649.988 8.982)" fill="#f2c75c" opacity="0.7"/>
          <rect id="Rectangle_3973" data-name="Rectangle 3973" width="32.279" height="5.181" transform="translate(656.564 18.745)" fill="#d0d0ce"/>
          <rect id="Rectangle_3974" data-name="Rectangle 3974" width="21.121" height="5.181" transform="translate(656.564 28.708)" fill="#d0d0ce"/>
        </g>
        <rect id="Rectangle_3975" data-name="Rectangle 3975" width="26.301" height="5.181" transform="translate(502.163 69.911)" fill="#d0d0ce"/>
        <rect id="Rectangle_3976" data-name="Rectangle 3976" width="17.209" height="5.181" transform="translate(502.163 79.874)" fill="#d0d0ce"/>
        <g id="Group_3419" data-name="Group 3419">
          <rect id="Rectangle_3977" data-name="Rectangle 3977" width="57.161" height="57.783" rx="3.985" transform="translate(769.988 32.663)" fill="#fff"/>
          <rect id="Rectangle_3978" data-name="Rectangle 3978" width="45.828" height="5.181" transform="translate(776.164 51.193)" fill="#d0d0ce"/>
          <rect id="Rectangle_3979" data-name="Rectangle 3979" width="45.828" height="5.181" transform="translate(776.164 41.231)" fill="#d0d0ce"/>
          <rect id="Rectangle_3980" data-name="Rectangle 3980" width="29.986" height="5.181" transform="translate(776.164 61.156)" fill="#d0d0ce"/>
        </g>
      </g>
    </g>
  </g>
</svg>
PAMapp/assets/images/quickFilter/btn_senior.svg
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 147.5 110"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{opacity:0.5;}.cls-4{fill:#f5e3d3;}.cls-5{fill:#221e1f;}.cls-6{fill:#1b365d;}.cls-7{opacity:0.8;}.cls-8{clip-path:url(#clip-path-2);}.cls-9{fill:#dc727c;}.cls-10{clip-path:url(#clip-path-4);}.cls-11{fill:#c7956b;}.cls-12{fill:#e41b2e;}.cls-13{fill:#f2c75c;}.cls-14{fill:#ecc3b2;}.cls-15{fill:#534741;}.cls-16{fill:#67737a;}.cls-17{fill:#a89968;}.cls-18{fill:#fff;}.cls-19{fill:#009cbd;}</style><clipPath id="clip-path"><rect class="cls-1" x="-0.25" y="-0.19" width="147.5" height="110.37"/></clipPath><clipPath id="clip-path-2"><rect class="cls-1" x="124.69" y="39.49" width="1.64" height="4.6" transform="translate(70.66 162.17) rotate(-83.92)"/></clipPath><clipPath id="clip-path-4"><rect class="cls-1" x="122.96" y="37.04" width="2.57" height="1.49" transform="translate(79.85 159.82) rotate(-86.92)"/></clipPath></defs><g id="circle"><g class="cls-2"><g class="cls-3"><path id="Path_6890" data-name="Path 6890" class="cls-4" d="M119,47.66a10,10,0,0,1,2.16-.2c1.92-1.17,1.54-2.54,1.4-3.74a11.28,11.28,0,0,1-5.21-11.28c.78-6.16,5.92-10.59,11.48-9.89s9.44,6.27,8.66,12.44A11.34,11.34,0,0,1,130,44.51a3.1,3.1,0,0,0-.58,1.91c.12,2.2,4.6,3.7,4.6,3.7l-1.81,5c-2.46,3.67-11.17.49-13.42-.28S117.87,47.94,119,47.66Z"/><path id="Path_6891" data-name="Path 6891" class="cls-5" d="M125.09,25.5a2.78,2.78,0,0,0-3.68.4,11.78,11.78,0,0,0-3.16,9.53A6.65,6.65,0,0,0,120,38.91s4.11,3,.2,6.17c-2.49,2-10.55,1.67-7.88-3.2.84-1.54-3.37-1.09-3.93-2.13-2.74-5.15,3.27-7.43,4.6-7.59s.54-5.09,3.75-9.76c2.89-3,6.35-4.31,11.38-3.21,0,0,1.55.07,1.95,1,0,0,5.58-1.3,8.68,3.48A30.82,30.82,0,0,1,141,29.26,4.64,4.64,0,0,0,142.83,32c1.5.95,4.12,1.73,4.19,5s-2.57,3.2-3.23,3.17c0,0,2.53,2.77.21,5.31s-3.59,1.17-4.22.48-.84-.34-1.53-.29c-6.91.49-5.2-6-4.06-6.86s2.3-3,1.71-4.61-3.21-3.79-3.8-4.7C127.86,23,126.52,25.51,125.09,25.5Z"/><path class="cls-6" d="M119.29,46a.64.64,0,0,1-.59-.4l-1.64-4a.64.64,0,0,1,.35-.84.65.65,0,0,1,.84.36l1.64,4.05a.65.65,0,0,1-.36.84A.67.67,0,0,1,119.29,46Z"/><path class="cls-4" d="M111.69,58.84s-3,9,3,12c2.34,1.21,2.43-4,2.55-10.6S112.3,57.18,111.69,58.84Z"/><g id="Group_1783" data-name="Group 1783"><path class="cls-5" d="M130,32.61a.13.13,0,0,1-.1-.06.14.14,0,0,1,0-.2,3.22,3.22,0,0,1,2.42-.42.14.14,0,0,1,.11.17.15.15,0,0,1-.17.1,3,3,0,0,0-2.21.39A.13.13,0,0,1,130,32.61Z"/><path class="cls-5" d="M122.93,32.34a.09.09,0,0,1-.08,0,3,3,0,0,0-2.08-.84.14.14,0,0,1-.14-.14.14.14,0,0,1,.14-.14,2.87,2.87,0,0,1,1.23.24,2.93,2.93,0,0,1,1,.68.15.15,0,0,1,0,.2A.14.14,0,0,1,122.93,32.34Z"/><g id="Group_1764-3" data-name="Group 1764-3" class="cls-7"><g id="Group_1763-3" data-name="Group 1763-3"><g class="cls-8"><g id="Group_1762-3" data-name="Group 1762-3"><g id="Group_1761-3" data-name="Group 1761-3"><g class="cls-8"><g id="Group_1760-3" data-name="Group 1760-3"><path id="Path_6902-3" data-name="Path 6902-3" class="cls-9" d="M127.88,41.22s-1.07,1.53-2.46,1.39-2.11-1.87-2.11-1.87"/></g></g></g></g></g></g></g><g id="Group_1769-3" data-name="Group 1769-3" class="cls-7"><g id="Group_1768-3" data-name="Group 1768-3"><g class="cls-10"><g id="Group_1767-3" data-name="Group 1767-3"><g id="Group_1766-3" data-name="Group 1766-3"><g class="cls-10"><g id="Group_1765-3" data-name="Group 1765-3"><path class="cls-11" d="M124.17,39a.76.76,0,0,1-.59-.28c-.23-.38.24-1.88.29-2a.08.08,0,1,1,.15,0,4.27,4.27,0,0,0-.31,1.93c.15.26.84.22,1.09.19a.06.06,0,0,1,.08.06.08.08,0,0,1-.06.09A3.87,3.87,0,0,1,124.17,39Z"/></g></g></g></g></g></g></g><path id="Path_6904-3" data-name="Path 6904-3" class="cls-5" d="M129.39,34.65a.83.83,0,0,0,.78.87.83.83,0,0,0,.09-1.65h0a.83.83,0,0,0-.87.78h0"/><path id="Path_6905-3" data-name="Path 6905-3" class="cls-5" d="M121.43,34.22a.82.82,0,1,0,1.64.09.81.81,0,0,0-.77-.86h0a.82.82,0,0,0-.87.77h0"/></g><path id="Path_6892" data-name="Path 6892" class="cls-12" d="M134.7,48.9c1.47-.41,2.62.12,3.27,0s2.07-.67,2.76,1.18c.38,1,.22,3.64,1.83,6.91,1.35,2.74,6.41,5.68,3.51,7.38a4.25,4.25,0,0,0-2.31.18c-1.19,3.17-4.95,2.2-6.79.71-.12-.09-.28-1.39-2.21-.8,0,0-.43,10.82,2.78,14.31,3.83,4.16,4.86,14.56-3.39,20.06-2.56,1.7-10.14.37-13.75,1.38C114.06,102,101.15,92,101.15,92s9.6-6.33,15.12-12.38c2.67-2.92.59-5,2.27-8.1,1.24-2.3,1.47-1.92,1.09-4.62a35.59,35.59,0,0,1-1.13-4.13s.06-.75-1.41-1.57c-.88-.72-6.47.22-5.92-.78a1.7,1.7,0,0,1-1.36-2,1.61,1.61,0,0,1,.7-1.21c1.42-1.27,1-2.36,2.13-3.92.55-1,1-4.36,3.55-5.2,0,0,3.46-1.78,4-1,0,0-.45,5.33-.42,6,0,1,2.78,2.44,3.87,2.56s6,1.19,8-.37c1.13-.9,1-4.15,1.72-5.4C133.31,49.9,133.37,49.33,134.7,48.9Z"/><path id="Path_6893" data-name="Path 6893" class="cls-4" d="M134.76,64.5c1.29-.48,1.31-.56,2.46,1.12.18.5,3.31,1.17,3.74,1.11,0,0,.56,10-2.89,11.13a19.49,19.49,0,0,1-7.54-.37c-4.57-.92-7.86-2.13-9-2.95-1.41-1-4.77.49-6.08-3.36,0,0,1-.32,2-2.93,0,0,.8-2.21,1.91-4.52a29.62,29.62,0,0,1,.51,4.63c-.06.6-.67,2.14-.26,2.4a18.11,18.11,0,0,0,4.28,1.46,64.63,64.63,0,0,1,11.2-.39C134.6,70.06,134.79,65.3,134.76,64.5Z"/><ellipse id="Ellipse_493" data-name="Ellipse 493" class="cls-13" cx="124.49" cy="50.75" rx="0.88" ry="0.66" transform="translate(23.56 139.55) rotate(-63.52)"/><path id="Path_6894" data-name="Path 6894" class="cls-14" d="M125.45,50.18c2,.21,4-1.07,5-1.93a.11.11,0,0,0-.14-.18c-1.19,1-3.53,2.47-5.73,1.7-1.7-.6-2.28-2.82-2.28-2.84a.11.11,0,1,0-.22.06c0,.09.62,2.35,2.43,3A3.91,3.91,0,0,0,125.45,50.18Z"/><path class="cls-4" d="M116,46.45s.47-2.68,1-2.92,1.68-1,2-.51-.77.57-1.38,1.24c-.29.31-.23.73-.15,1.31,0,0,3.06-1.92,3.38-1,0,0,.47.52.42.85,0,0,.85.95.21,1.12,0,0,.66,1.17-.14,1.32a7.33,7.33,0,0,1-.94,4.62,7.57,7.57,0,0,0-.72,4.22c.39,2.06,1,10.47-.85,12.34s-3.48,2.91-4.85,1.54a4.72,4.72,0,0,1-.5-6.3s3.1-7.42,3.35-8.88a6.37,6.37,0,0,0-.12-2.65A30.23,30.23,0,0,1,116,46.45Z"/><path class="cls-4" d="M115,90.22s-4.94-.5-5.75,3.49-5.91,14.15-13.68,21.12a18.69,18.69,0,0,0-3,2.76,3.51,3.51,0,0,1-2.87,2.14c-2.11.5-11.11.85-8.66-.38s7.2-4.55,9.55-5.16c0,0,1.19-.38,2.48-2.66s7.18-16.84,7.93-17.4,1.53-10.66,9-11.57S115,90.22,115,90.22Z"/><path class="cls-4" d="M111.35,89.53s-4.27,2.54-2.53,6.23,3.7,14.88,1.64,25.11a18.15,18.15,0,0,0-.76,4,3.51,3.51,0,0,1-1,3.43c-1.39,1.67-8.4,7.32-7.17,4.88s3-8,4.57-9.84c0,0,.73-1,.41-3.63s-4.3-17.79-4-18.68-5.14-9.47.31-14.66S111.35,89.53,111.35,89.53Z"/><path class="cls-12" d="M98.88,94.22s6.39-3.6,10.52-.85,11,6.88,17.87,4.13,6.88-11,6.88-11a38.14,38.14,0,0,0-10.64-7.19c-5.86-2.44-5.7-4.27-5.7-4.27s.09,3.32-7.6,5.33S98,88.19,98.88,94.22Z"/><path class="cls-15" d="M131.05,104.07l22.09-4.44a1.11,1.11,0,0,0,.83-1.34l-3.25-16a1.11,1.11,0,0,0-1.33-.83l-19.58,2.27a1.73,1.73,0,0,0-1.43,1.65l.67,17.64A2.15,2.15,0,0,0,131.05,104.07Z"/><path class="cls-16" d="M131.27,95.18a1.12,1.12,0,0,0,.45.06c2.37-.4,16.45-2.68,19.29-3.47a4.28,4.28,0,0,0,1.36-1.14.11.11,0,0,0,0-.15.11.11,0,0,0-.16,0A4,4,0,0,1,151,91.56c-2.83.78-16.9,3.06-19.27,3.46A9.4,9.4,0,0,1,129,93.91a.11.11,0,0,0-.16,0,.11.11,0,0,0,0,.15A22,22,0,0,0,131.27,95.18Z"/><rect x="138.97" y="90.41" width="4.22" height="5.94" rx="1.43" transform="translate(295.03 163.54) rotate(171)"/><rect class="cls-15" x="139.97" y="91.91" width="2.11" height="2.97" rx="0.72" transform="translate(294.92 163.56) rotate(171)"/><path class="cls-17" d="M133.94,84.27H134a.56.56,0,0,0,.65-.44c.38-1.93,1.32-2.35,2.09-2.51a43.72,43.72,0,0,1,5.44-.62,3.73,3.73,0,0,1,2.94,1.81.56.56,0,0,0,1-.56,4.83,4.83,0,0,0-3.92-2.37,46.75,46.75,0,0,0-5.64.65c-1.6.32-2.57,1.43-3,3.39A.56.56,0,0,0,133.94,84.27Z"/><path class="cls-6" d="M121,51.24,119.63,48a.64.64,0,0,1,.35-.84.65.65,0,0,1,.84.36l1.37,3.38a9.59,9.59,0,0,0-.09,1.51C121.91,52.36,121.26,51.37,121,51.24Z"/><path class="cls-18" d="M121,51.24a1.17,1.17,0,0,1,.4-.26,2.58,2.58,0,0,1,.79-.13,1.88,1.88,0,0,1-.09,1.51A1.64,1.64,0,0,1,121,51.24Z"/><path class="cls-19" d="M122.1,52.46l-.32-.21c0-.06.2-.13.2-.13s.24-.07.25,0Z"/></g></g></g></svg>
PAMapp/assets/images/quickFilter/btn_unlimited.svg
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 147.5 110"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{opacity:0.5;}.cls-4{fill:#f5e3d3;}.cls-5{fill:#67737a;}.cls-6{fill:#221e1f;}.cls-7{fill:#9e9fa1;}.cls-8{fill:#c7c7c5;}.cls-9{fill:#fff;}.cls-10{opacity:0.8;}.cls-11{clip-path:url(#clip-path-2);}.cls-12{clip-path:url(#clip-path-3);}.cls-13{fill:#dc727c;}.cls-14{clip-path:url(#clip-path-4);}.cls-15{fill:#c7956b;}.cls-16{fill:#1b365d;}.cls-17{fill:#e41b2e;}.cls-18{fill:#a89968;}</style><clipPath id="clip-path"><rect class="cls-1" x="-0.25" y="-0.19" width="147.5" height="110.37"/></clipPath><clipPath id="clip-path-2"><rect class="cls-1" x="38.65" y="38.24" width="1.39" height="3.9" transform="translate(-9.31 68.39) rotate(-75.7)"/></clipPath><clipPath id="clip-path-3"><rect class="cls-1" x="38.65" y="38.24" width="1.39" height="3.9" transform="translate(-9.31 68.39) rotate(-75.7)"/></clipPath><clipPath id="clip-path-4"><polygon class="cls-1" points="41.89 35 40.41 34.91 40.45 37.08 41.93 37.17 41.89 35"/></clipPath></defs><g id="circle"><g class="cls-2"><g class="cls-3"><path class="cls-4" d="M47,92.44s4.15,3.2,4.86,4.43c1.22,2.1-5.31-.67-4.75,16.25L48.91,116S58.3,96.43,58.3,94.88s-.44-6.19-4-6.86S47,92.44,47,92.44Z"/><path class="cls-4" d="M28.23,98.19l-5.08,13.64s-1.5,3.17-3.63,4.5S3.57,129.27,3.57,129.27l-.88-1.77s3.09-14.16,13.38-15.15a4.87,4.87,0,0,0,1-2.33c.33-1.65,1.44-17.35,1.44-17.35Z"/><path id="Path_6869" data-name="Path 6869" class="cls-5" d="M25.63,67.58s-3.08,4.06-4.38,6.22-4.19,20.08-4.19,20.08,11.07,10.28,19.68,8.18c7.3-1.78,16.14-12.14,19.91-13,0,0-12.79-9.23-13.72-11.5s-3.85-7.9-3.85-7.9l-8-.76Z"/><path id="Path_6870" data-name="Path 6870" class="cls-6" d="M30.74,28.55s6.47-5,2.17-7.06-8.26-1.82-10.68.09-6.78,1.79-7.18,1.78S24.76,30,30.74,28.55Z"/><path id="Path_6871" data-name="Path 6871" class="cls-4" d="M49.81,36.79l0,0c2.74-6.07.77-12.89-4.4-15.23s-11.6.69-14.34,6.76l0,.07c-.66-.51-2.21-1.4-2.66,1.1-.37,2,.7,2.8,1.53,3.09A10.8,10.8,0,0,0,34.2,42.78c-.47.9-1.55,1.25-3.24,1.89,0,0-1.21,5.78,2.95,8.1S42,48.43,42,48.43s-2-2.28-2.31-4.15a11.52,11.52,0,0,0,7.74-3.85c.78.4,2,.6,3.22-1C52.12,37.59,50.67,37,49.81,36.79Z"/><path id="Path_6872" data-name="Path 6872" class="cls-6" d="M36.25,24.09s-3.63,2.27-4.12,3.35c0,0-3.23,5.53-2.12,7.74a8.23,8.23,0,0,1,.35-7.67s-1.63-1.18,0-3.9,6.79-7.35,13.08-4.94c0,0,9.07,1.06,10.14,10.23,0,0-.25,4.88-3,8,0,0-2.67,4-3.88,4.76,0,0,2.41-3.9,2.7-5.51s1.6-4.49-.51-8.48a6.28,6.28,0,0,1-1.83,3.09s-.16.36-1.24-.13-6.75-2.84-8.62-3c-.4,0-1.4.23-1.28-1Z"/><path id="Path_6873" data-name="Path 6873" class="cls-7" d="M32.58,44.38a5.76,5.76,0,0,0,.83,1.9,5,5,0,0,0,2.83,2.31,5.73,5.73,0,0,0,2.53-.29L35.26,71.58s-6.31.13-9.91-3.37c0,0-2.07-11.22-2.54-13.47L12.2,54.52c.5-1.12-5-2.81-4.65-4C8.39,46.4,25.24,43.68,32.58,44.38Z"/><path id="Path_6874" data-name="Path 6874" class="cls-8" d="M40.28,45.77s19.41,9.57,18.8,15.6-7.74,4-13.93-2L39.54,69.55l-.24,1.18s-4,1.65-6.56.52l2-9.76,1.19-13S39.26,47.71,40.28,45.77Z"/><path id="Path_6875" data-name="Path 6875" class="cls-7" d="M14.75,49.91A30.56,30.56,0,0,1,1.08,64.43L-1,62.69S4.05,51.88,8.58,48.75,15.21,47.79,14.75,49.91Z"/><path id="Path_6875-2" data-name="Path 6875" class="cls-8" d="M53.33,63.77A30.57,30.57,0,0,1,57,44.17l2.72.33s1.56,11.83-.55,16.91S54.09,65.81,53.33,63.77Z"/><path id="Path_6876" data-name="Path 6876" class="cls-9" d="M38.52,51.55C36.94,49,36,48.49,36,48.49l.14-.05c2.81-.79,3.76-2,4.06-2.55a1.09,1.09,0,0,0,.09-.23,5.17,5.17,0,0,1,.69.46c0,2.67-2,5.37-2.42,5.43"/><path class="cls-9" d="M32.67,44s-.17,0-.18,0-.54.31-.61.37c-1.14,2.65-.33,6,.05,6.2a12.11,12.11,0,0,1,4.15-2C33.13,46.21,32.69,44.45,32.67,44Z"/><path id="Path_6878" data-name="Path 6878" class="cls-4" d="M56.65,42.14a6.22,6.22,0,0,0,.22,2.21l2.87.44a5.77,5.77,0,0,0-.17-5.06S57.26,38.21,57.3,41C57.3,41.44,57.06,41.07,56.65,42.14Z"/><g id="Group_1781" data-name="Group 1781"><path class="cls-6" d="M39,31.17a.16.16,0,0,1-.13-.08,2.17,2.17,0,0,0-.58-.76,2.23,2.23,0,0,0-.83-.48.14.14,0,0,1-.09-.18.14.14,0,0,1,.17-.09,2.7,2.7,0,0,1,.93.54,2.47,2.47,0,0,1,.65.85.13.13,0,0,1-.06.18Z"/><path class="cls-6" d="M44.1,32.88a.13.13,0,0,1-.11-.06.14.14,0,0,1,0-.19,2.63,2.63,0,0,1,1-.4,2.57,2.57,0,0,1,1.07,0,.14.14,0,0,1,.1.17.13.13,0,0,1-.16.1,2.45,2.45,0,0,0-1.85.35A.11.11,0,0,1,44.1,32.88Z"/><g id="Group_1775" data-name="Group 1775" class="cls-10"><g id="Group_1774" data-name="Group 1774"><g class="cls-11"><g id="Group_1773" data-name="Group 1773"><g id="Group_1772" data-name="Group 1772"><g class="cls-12"><g id="Group_1771" data-name="Group 1771"><path id="Path_6908" data-name="Path 6908" class="cls-13" d="M37.63,39s.4,1.54,1.54,1.83A2.7,2.7,0,0,0,41.41,40"/></g></g></g></g></g></g></g><g id="Group_1780" data-name="Group 1780" class="cls-10"><g id="Group_1779" data-name="Group 1779"><g class="cls-14"><g id="Group_1778" data-name="Group 1778"><g id="Group_1777" data-name="Group 1777"><g class="cls-14"><g id="Group_1776" data-name="Group 1776"><path class="cls-15" d="M41.23,37.05a2.78,2.78,0,0,1-.68-.09s-.06,0-.06-.08a.08.08,0,0,1,.09-.06c.35.08,1,.14,1.1,0s-.07-1.1-.24-1.63a.08.08,0,0,1,0-.09.07.07,0,0,1,.09,0c.08.24.46,1.47.22,1.77A.74.74,0,0,1,41.23,37.05Z"/></g></g></g></g></g></g></g><path id="Path_6910" data-name="Path 6910" class="cls-6" d="M38.47,32.77a.7.7,0,0,1-1.35-.34.7.7,0,1,1,1.35.34h0"/><path id="Path_6911" data-name="Path 6911" class="cls-6" d="M45,34.44a.7.7,0,0,1-.85.5.7.7,0,0,1,.34-1.35.71.71,0,0,1,.51.85h0"/></g><path class="cls-16" d="M5.42,91.38l-20.76-8.46a1.12,1.12,0,0,1-.57-1.46l6.17-15a1.1,1.1,0,0,1,1.46-.56l18.7,5.86a1.74,1.74,0,0,1,1.09,1.89L7.57,90.7A2.13,2.13,0,0,1,5.42,91.38Z"/><path class="cls-5" d="M6.85,82.65a1.08,1.08,0,0,1-.45,0c-2.23-.83-15.57-5.69-18.19-7a4.24,4.24,0,0,1-1.12-1.36.11.11,0,0,1,.05-.15.11.11,0,0,1,.15.05,3.65,3.65,0,0,0,1,1.26c2.62,1.3,15.94,6.15,18.18,7a9.52,9.52,0,0,0,2.88-.58.12.12,0,0,1,.15.06.11.11,0,0,1-.06.14A19.63,19.63,0,0,1,6.85,82.65Z"/><rect class="cls-17" x="-4.49" y="76.11" width="4.2" height="5.91" rx="1.43" transform="translate(26.66 5.49) rotate(19.81)"/><path class="cls-18" d="M6.28,71.49H6.22A.55.55,0,0,1,5.67,71c0-2-.85-2.55-1.58-2.85A43.51,43.51,0,0,0-1.1,66.48,3.69,3.69,0,0,0-4.31,67.7a.55.55,0,0,1-.78.06A.55.55,0,0,1-5.15,67,4.77,4.77,0,0,1-.88,65.39a43.94,43.94,0,0,1,5.39,1.69C6,67.69,6.76,69,6.77,70.94A.55.55,0,0,1,6.28,71.49Z"/><path id="Path_6878-2" data-name="Path 6878" class="cls-4" d="M1.36,65.8l-.22-1.33-2-2.21S-2.92,65-1.07,67.12c.4.47,2.43,2,2.43.23C1.35,66.9.51,66.57,1.36,65.8Z"/></g></g></g></svg>
PAMapp/assets/images/quickFilter/btn_young.svg
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 147.5 110"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{opacity:0.5;}.cls-4{fill:#997c52;}.cls-5{fill:#9e9fa1;}.cls-6{fill:#d9ad87;}.cls-7{fill:#a89968;}.cls-8{fill:#d2232e;}.cls-9{fill:#fff;}.cls-10{fill:#221e1f;}.cls-11{opacity:0.8;}.cls-12{clip-path:url(#clip-path-2);}.cls-13{fill:#dc727c;}.cls-14{clip-path:url(#clip-path-4);}.cls-15{fill:#c7956b;}.cls-16{fill:#72502b;}</style><clipPath id="clip-path"><rect class="cls-1" x="-0.25" y="-0.19" width="147.5" height="110.37"/></clipPath><clipPath id="clip-path-2"><polygon class="cls-1" points="109.7 22.97 105.16 23.13 105.1 21.43 109.64 21.26 109.7 22.97"/></clipPath><clipPath id="clip-path-4"><polygon class="cls-1" points="107.56 20.36 106.12 20.09 106.56 17.46 108 17.73 107.56 20.36"/></clipPath></defs><g id="bg"><circle class="cls-1" cx="119.36" cy="34.35" r="24.35"/></g><g id="circle"><g class="cls-2"><g class="cls-3"><path id="Path_6855" data-name="Path 6855" class="cls-4" d="M94,69.07C90.6,80.87,89.09,96.94,87,109.19c0,0-5.92,31.45-4.69,32.65s5.63,5.8,10.32,1.84c1.34-1.12,4.36-26.39,4.88-27.42,4.5-9,6.38-23.46,9.76-28.47.69-1,2.88-1,3.37,0,4.51,8.7,6.52,21,9.57,26.1,1.64,2.73,5.14,32.17,7.13,31.11,1.15-.61,8.5-1.22,9.39-2.11,1.29-1.31-5.43-32.41-5.43-32.47C129.63,74.6,123.06,67,123.06,67Z"/><path id="Path_6857" data-name="Path 6857" class="cls-5" d="M116.35,29.14a51.48,51.48,0,0,1,11.21.63c7.69,1.18,11.86-.17,15.95.79,0,0,5.77,1.7,3.57,4.94-4.32,6.33-19.14,7.92-19.14,7.92.75,5.14-1.63,19-2.07,22s.39,5.38-2.06,6.52c-3.38,1.59-12.2,4-15,3.57,0,0-7.31-1.08-9.76-1.78a40.86,40.86,0,0,1-5.63-3s1.34-5.38,1.13-6.53S93,48.56,93.22,44.8c0,0-6-1.26-8.25-2.37C82.4,41.18,75.4,36.1,75.4,36.1s-2.63-4.75,3-5c1.74-.06,9,.59,9,.59,5.66-2.52,14.17-.69,14.69-1.76,0,0,2.05,3.53,4,4.22s3.92.23,6.1-1.38A36.06,36.06,0,0,0,116.35,29.14Z"/><path id="Path_6858" data-name="Path 6858" class="cls-6" d="M100.11,9.27c.44-1.61.91-.38,1.47-1.47,1.25-2.38-1.16,2.12,7.73,2.44s7.57-4.78,8-1.57c.32,2.21.45,11.28,1.14,10.1a16.26,16.26,0,0,0,1.3-3.92c.24.32,2.13.75,2.22,1.66s-1.64,2.4-2,3.67c-.26,1.09-2.14,1.88-2.23,1.88-.1.21-.78,3.62-1.79,5.17,0,.91,0,2,0,3.14-.64.83-2.73,3-8.1,4.41h-2.24a33.52,33.52,0,0,1-3.55-5c.09-.79.19-1.58.28-2.23-1-1.65-3.56-2.59-3.13-11.55l.11-4.48"/><path id="Path_6859" data-name="Path 6859" class="cls-7" d="M110.67,62.41l-1.12,2.37-3.75-2.57s-2.26-4.94,1.12-22.16l-.37-1.18a21.18,21.18,0,0,1,2.06-1.39,10.73,10.73,0,0,1,.94,2.38c.43.14.92,3.81.19,7.51A28.67,28.67,0,0,0,110.67,62.41Z"/><path id="Path_6859-2" data-name="Path 6859" class="cls-8" d="M92.18,58.9l-5.09-3.32,5.8-2.81s13,3.46,13.14-13c-.17-.36-1.23-2.31-1.9-3.54l.71-.59a15.17,15.17,0,0,0,1.86-1.57s.71-.21.65-.24a3.2,3.2,0,0,0,2.18,0c.2-.11.24.21.22.23s.22,0,1.25,1.13c.32.34.69.77,1.13,1.32a17.46,17.46,0,0,0-2.37,3c1.88,2.56,0,11.64-2.22,14.58C102.33,60.81,92.18,58.9,92.18,58.9Z"/><path id="Path_6860" data-name="Path 6860" class="cls-9" d="M108.7,34.2s.56.38,2.71,2.13l.71.58,2,1.64c.75-.38,3.93-5.61,2.19-10.55a2.64,2.64,0,0,1-.18.38c-.51.93-2.27,3.39-7.35,5.7,0,0-.08.09-.13.12"/><path id="Path_6861" data-name="Path 6861" class="cls-9" d="M102,40c.83-1.13,1.55-2,2.12-2.77.45-.56.81-1,1.13-1.33,1-1.12,1.4-1.6,1.4-1.6s.24-.21.22-.23a49.58,49.58,0,0,1-4.48-3.86c-.2-.27-.32-.41-.32-.41-.49,5.24-.89,10-.07,10.2"/><path id="Path_6862" data-name="Path 6862" class="cls-10" d="M98.26,11.91c.06,1.13.25.74.72,2.52.41,1.6.59.94.59,0a13.61,13.61,0,0,1,1.52-5.29c1.25-2.37-.67.77,8.22,1.09s7.93-.2,8.41,3c.32,2.22.08,6.7.78,5.51a38.46,38.46,0,0,0,1.34-3.63c.26-.64,1,1,1.3.23,1.75-5.5.25-8.25.44-8.51,1-1.38,1.9-3.81,1.31-3.44a9.08,9.08,0,0,1-4.58.69c-4-4.2-15-3.19-15-3.19s-3.94.43-5,9.16Z"/><g id="Group_1540" data-name="Group 1540"><path id="Path_6866" data-name="Path 6866" class="cls-5" d="M80.32,11.13s-6,13.69-5.47,22.4c0,0,8.57,1.39,12.53-2,0,0,.14-11.64-.31-13.89,0,0-1-3.35-.47-5Z"/><path id="Path_6867" data-name="Path 6867" class="cls-6" d="M83.88.44s-1.39-1.53-3.1,1.12c-1.07,2.79-.45,3.89.2,4.84A4,4,0,0,1,81.78,8L81,10.38s5.26,1.92,6.14.51a5.65,5.65,0,0,1,.54-1.5C88.31,8.73,90.1,8.87,90,8c-.18-2.58-.75-2.58-1.5-2.77.39-1.88-.32-3.73-1.18-3.45,0,0-.68-1.52-1.69-.94C85.66.85,85.25,0,83.88.44Z"/><path id="Path_6868" data-name="Path 6868" class="cls-9" d="M81.4,8.8a12.07,12.07,0,0,0,1.69,1.58,13.4,13.4,0,0,0,2.81,1,2.33,2.33,0,0,0,1.23-.47,11,11,0,0,1-.64,2.54,4.32,4.32,0,0,1-2.3.33l-.08-1.3-.41.84a9.5,9.5,0,0,1-3.38-2.2Z"/></g><g id="Group_1540-2" data-name="Group 1540"><path id="Path_6866-2" data-name="Path 6866" class="cls-5" d="M139.37,13.1s10.71,11.92,8.27,21c0,0-4.62,2.68-9.34.68,0,0-3.37-11.08-3.56-13.37,0,0,0-3.51-1-4.94Z"/><path id="Path_6867-2" data-name="Path 6867" class="cls-6" d="M133,4s.91-1.9,3.28.11c1.8,2.34,1.51,3.58,1.16,4.69a4,4,0,0,0-.32,1.78l1.38,2S134,16.06,132.76,15a5.26,5.26,0,0,0-.94-1.27c-.76-.45-2.55.26-2.61-.61-.15-2.34-.6-1.93.67-3.11-.9-1.67-.73-3.66.17-3.66,0,0,.23-1.66,1.36-1.42C131.41,4.92,131.57,4,133,4Z"/><path id="Path_6868-2" data-name="Path 6868" class="cls-9" d="M137.69,11.2a13,13,0,0,1-1.18,2,14.08,14.08,0,0,1-2.4,1.84A2.25,2.25,0,0,1,132.8,15a11.18,11.18,0,0,0,1.32,2.24,4.43,4.43,0,0,0,2.29-.4l-.28-1.27.62.68a9.79,9.79,0,0,0,2.62-3.16Z"/></g><g id="Group_1782" data-name="Group 1782"><path class="cls-10" d="M112.22,14a.13.13,0,0,1-.12-.08.14.14,0,0,1,.06-.19,2.69,2.69,0,0,1,1.2-.32,2.81,2.81,0,0,1,1.22.18.16.16,0,0,1,.09.19.14.14,0,0,1-.18.09,2.78,2.78,0,0,0-2.21.12Z"/><path class="cls-10" d="M105.29,12.85a.14.14,0,0,1-.11-.06,2.64,2.64,0,0,0-.86-.77,2.57,2.57,0,0,0-1.07-.36.14.14,0,0,1-.12-.16.13.13,0,0,1,.15-.13,2.81,2.81,0,0,1,1.18.4,3.13,3.13,0,0,1,.94.84.14.14,0,0,1,0,.2A.12.12,0,0,1,105.29,12.85Z"/><g id="Group_1764-2" data-name="Group 1764-2" class="cls-11"><g id="Group_1763-2" data-name="Group 1763-2"><g class="cls-12"><g id="Group_1762-2" data-name="Group 1762-2"><g id="Group_1761-2" data-name="Group 1761-2"><g class="cls-12"><g id="Group_1760-2" data-name="Group 1760-2"><path id="Path_6902-2" data-name="Path 6902-2" class="cls-13" d="M109.64,21.26s-.84,1.74-2.21,1.79-2.32-1.62-2.32-1.62"/></g></g></g></g></g></g></g><g id="Group_1769-2" data-name="Group 1769-2" class="cls-11"><g id="Group_1768-2" data-name="Group 1768-2"><g class="cls-14"><g id="Group_1767-2" data-name="Group 1767-2"><g id="Group_1766-2" data-name="Group 1766-2"><g class="cls-14"><g id="Group_1765-2" data-name="Group 1765-2"><path class="cls-15" d="M107.45,20.18c-.21,0-1,0-1.15-.42s.46-1.92.54-2.09a.07.07,0,0,1,.09,0,.08.08,0,0,1,0,.11,4.8,4.8,0,0,0-.54,2c.13.3.8.35,1.06.34h0a.07.07,0,0,1,.07.07.07.07,0,0,1-.07.08Z"/></g></g></g></g></g></g></g><path id="Path_6904-2" data-name="Path 6904-2" class="cls-10" d="M111.32,16a.85.85,0,0,0,.66,1,.82.82,0,0,0,.94-.69.85.85,0,0,0-.66-1h0a.81.81,0,0,0-.94.69h0"/><path id="Path_6905-2" data-name="Path 6905-2" class="cls-10" d="M103.56,15.39a.86.86,0,0,0,.66,1,.82.82,0,0,0,.94-.69.86.86,0,0,0-.66-1h0a.82.82,0,0,0-.94.7h0"/></g><path id="Path_6856" data-name="Path 6856" class="cls-16" d="M93.41,70.12l-.75,2.38a32.26,32.26,0,0,0,17.47,4.12,40.83,40.83,0,0,0,15.93-4.52l-.75-1.78s-8.46,4-16.28,4.23C100.94,74.79,93.41,70.12,93.41,70.12Z"/></g></g></g></svg>
PAMapp/assets/images/satisfaction/satisfactionBtn_mob.svg
PAMapp/assets/images/satisfaction/satisfactionBtn_s_mob.svg
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,222 @@
<svg xmlns="http://www.w3.org/2000/svg" width="335" height="60" viewBox="0 0 335 60">
  <g id="satisfaction_s_mob" data-name="satisfaction â€“ s â€“ mob" transform="translate(0 -3.95)">
    <g id="Component_22_11" data-name="Component 22 11">
      <g id="Group_3319" data-name="Group 3319">
        <g id="Group_3896" data-name="Group 3896">
          <path id="Path_8566" data-name="Path 8566" d="M55.271,23.671V22.7H46.483q5.124,2.022,9.833,4.256c-.016-.857-.023-1.38-.023-1.38a1.11,1.11,0,0,1,.1-.424A1.753,1.753,0,0,1,55.271,23.671Z" fill="#8db9ca"/>
          <path id="Path_8567" data-name="Path 8567" d="M83.59,45.675a45.2,45.2,0,0,1,4.042,5.03c-.016-.1-.027-.208-.048-.312A6.452,6.452,0,0,0,83.59,45.675Z" fill="#8db9ca"/>
          <path id="Path_8568" data-name="Path 8568" d="M59.29,22.7H58.279a1.787,1.787,0,0,0,.3.055C58.75,22.752,59.006,22.728,59.29,22.7Z" fill="#8db9ca"/>
          <path id="Path_8569" data-name="Path 8569" d="M230.734,3.95H10A10,10,0,0,0,.722,10.232c3.038.529,6.057,1.09,9.032,1.711V7.688A1.758,1.758,0,0,1,11.512,5.93H68.585a1.758,1.758,0,0,1,1.758,1.758V20.939A1.758,1.758,0,0,1,68.585,22.7H64.349a1.791,1.791,0,0,1,.1,1.156c-.119,1.073-1.013,1.523-2.077,1.759.46,1.131,1.061,3.058,1.7,5.33A80.66,80.66,0,0,1,82.775,44.81,7.053,7.053,0,0,1,88.273,51a6.969,6.969,0,0,1,.032.719A30.048,30.048,0,0,1,92.971,63.95H325a10,10,0,0,0,10-10V40.3C290.872,38.918,245.273,24.736,230.734,3.95Z" fill="#8db9ca"/>
          <path id="Path_8570" data-name="Path 8570" d="M43.541,22.7a3.576,3.576,0,0,1,.6,1.171s6.3-1.186,6.94,8.371l0,.009a28,28,0,0,1-.339,5.173v.007c.067.03.134.06.226.108,1.51.794.381,4.906-.14,6.9l.007-.005c-.27,1.065-1.162.425-1.07.984a10.474,10.474,0,0,1-1.11,6.3c.194.67.414,1.482.612,2.3-.109.241-.229.476-.344.714.063-.092.131-.182.193-.275.082-.136.146-.239.2-.318-.016-.045-.025-.091-.042-.135.043,0,.087,0,.13,0l.016-.025.006.024a6.966,6.966,0,0,1,2.525.374c2.7-2.771,5.221-12.111,5.221-12.111-.566-2.542-.79-11.784-.856-15.306q-4.7-2.23-9.833-4.256Z" fill="#8db9ca"/>
          <path id="Path_8571" data-name="Path 8571" d="M43.541,22.7a3.576,3.576,0,0,1,.6,1.171s6.3-1.186,6.94,8.371l0,.009a28,28,0,0,1-.339,5.173v.007c.067.03.134.06.226.108,1.51.794.381,4.906-.14,6.9l.007-.005c-.27,1.065-1.162.425-1.07.984a10.474,10.474,0,0,1-1.11,6.3c.194.67.414,1.482.612,2.3-.109.241-.229.476-.344.714.063-.092.131-.182.193-.275.082-.136.146-.239.2-.318-.016-.045-.025-.091-.042-.135.043,0,.087,0,.13,0l.016-.025.006.024a6.966,6.966,0,0,1,2.525.374c2.7-2.771,5.221-12.111,5.221-12.111-.566-2.542-.79-11.784-.856-15.306q-4.7-2.23-9.833-4.256Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8572" data-name="Path 8572" d="M30.953,48.108a3.119,3.119,0,0,1-1.98-1.585C27.942,44,27.332,41.592,27.8,40.834a16.469,16.469,0,0,0,1.962,3.924.311.311,0,0,0,.086.078.65.65,0,0,1-.086-.083A16.462,16.462,0,0,1,27.8,40.83c-.422-1.012-.8-2.035-1.19-2.824-2.676-5.508,2.05-7.155,1.807-7.4C26.3,28.483,30,24.872,33.282,22.7H25.563a10.782,10.782,0,0,1-.853,2.166,1.922,1.922,0,0,1-.566.61c-.024,2.991-.163,16.355-.786,19.158,0,0,2.775,7.957,5.425,11.485a11.771,11.771,0,0,1,4.454-1.1,8.885,8.885,0,0,1,.154-.9,1.794,1.794,0,0,0,.251.377c.05.065.11.139.176.218-.061-.511-.126-1-.189-1.441C32.3,51.793,31.095,48.319,30.953,48.108Z" fill="#8db9ca"/>
          <path id="Path_8573" data-name="Path 8573" d="M30.953,48.108a3.119,3.119,0,0,1-1.98-1.585C27.942,44,27.332,41.592,27.8,40.834a16.469,16.469,0,0,0,1.962,3.924.311.311,0,0,0,.086.078.65.65,0,0,1-.086-.083A16.462,16.462,0,0,1,27.8,40.83c-.422-1.012-.8-2.035-1.19-2.824-2.676-5.508,2.05-7.155,1.807-7.4C26.3,28.483,30,24.872,33.282,22.7H25.563a10.782,10.782,0,0,1-.853,2.166,1.922,1.922,0,0,1-.566.61c-.024,2.991-.163,16.355-.786,19.158,0,0,2.775,7.957,5.425,11.485a11.771,11.771,0,0,1,4.454-1.1,8.885,8.885,0,0,1,.154-.9,1.794,1.794,0,0,0,.251.377c.05.065.11.139.176.218-.061-.511-.126-1-.189-1.441C32.3,51.793,31.095,48.319,30.953,48.108Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8574" data-name="Path 8574" d="M82.652,58.608c-.231.046-.467.082-.707.106a7.053,7.053,0,1,1,.83-13.9A80.66,80.66,0,0,0,64.069,30.942c1.763,6.287,3.805,15.208,3.923,17.2.176,2.986-1.4,7.026-4.039,14.052-.242.646-.489,1.227-.738,1.754H92.971a30.048,30.048,0,0,0-4.666-12.227A7.052,7.052,0,0,1,82.652,58.608Z" fill="#8db9ca"/>
          <path id="Path_8575" data-name="Path 8575" d="M82.652,58.608c-.231.046-.467.082-.707.106a7.053,7.053,0,1,1,.83-13.9A80.66,80.66,0,0,0,64.069,30.942c1.763,6.287,3.805,15.208,3.923,17.2.176,2.986-1.4,7.026-4.039,14.052-.242.646-.489,1.227-.738,1.754H92.971a30.048,30.048,0,0,0-4.666-12.227A7.052,7.052,0,0,1,82.652,58.608Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8576" data-name="Path 8576" d="M14.641,27.192a1.112,1.112,0,0,0-1.508.112l-.428.442-.422-.436a1.115,1.115,0,0,0-.825-.362h0a1.1,1.1,0,0,0-.694.246,1.178,1.178,0,0,0-.113,1.655.514.514,0,0,0,.038.042l2,2.064h.029l2-2.063a1.178,1.178,0,0,0-.037-1.663Z" fill="#8db9ca"/>
          <path id="Path_8577" data-name="Path 8577" d="M14.641,27.192a1.112,1.112,0,0,0-1.508.112l-.428.442-.422-.436a1.115,1.115,0,0,0-.825-.362h0a1.1,1.1,0,0,0-.694.246,1.178,1.178,0,0,0-.113,1.655.514.514,0,0,0,.038.042l2,2.064h.029l2-2.063a1.178,1.178,0,0,0-.037-1.663Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8578" data-name="Path 8578" d="M13.518,50.78c.174-2.932,2.63-22.359,4.049-24.895-.434-.159-.749-.372-.749-.655a3.006,3.006,0,0,1,.714-2.533h-6.02a1.758,1.758,0,0,1-1.758-1.758v-9C6.779,11.322,3.76,10.761.722,10.232A9.968,9.968,0,0,0,0,13.95v40a10,10,0,0,0,10,10h7.227C14.79,57.467,13.349,53.639,13.518,50.78ZM9.7,46.134a.383.383,0,0,1-.366.192l-1.6-.119-1,1.252a.388.388,0,0,1-.31.145.4.4,0,0,1-.085-.009.386.386,0,0,1-.3-.289l-.383-1.559-1.5-.569a.391.391,0,0,1-.067-.7l1.365-.845.077-1.6a.391.391,0,0,1,.643-.28L7.405,42.79l1.549-.422a.391.391,0,0,1,.465.524l-.608,1.487.88,1.343A.388.388,0,0,1,9.7,46.134Zm3-14.562a.627.627,0,0,1-.456-.2l-2-2.061c-.022-.023-.043-.045-.062-.069a1.788,1.788,0,0,1,.183-2.521,1.724,1.724,0,0,1,2.33.142,1.718,1.718,0,0,1,2.322-.148h.006l.071.065a1.786,1.786,0,0,1,.054,2.525h0l-2.023,2.087A.619.619,0,0,1,12.7,31.572Z" fill="#8db9ca"/>
          <path id="Path_8579" data-name="Path 8579" d="M13.518,50.78c.174-2.932,2.63-22.359,4.049-24.895-.434-.159-.749-.372-.749-.655a3.006,3.006,0,0,1,.714-2.533h-6.02a1.758,1.758,0,0,1-1.758-1.758v-9C6.779,11.322,3.76,10.761.722,10.232A9.968,9.968,0,0,0,0,13.95v40a10,10,0,0,0,10,10h7.227C14.79,57.467,13.349,53.639,13.518,50.78ZM9.7,46.134a.383.383,0,0,1-.366.192l-1.6-.119-1,1.252a.388.388,0,0,1-.31.145.4.4,0,0,1-.085-.009.386.386,0,0,1-.3-.289l-.383-1.559-1.5-.569a.391.391,0,0,1-.067-.7l1.365-.845.077-1.6a.391.391,0,0,1,.643-.28L7.405,42.79l1.549-.422a.391.391,0,0,1,.465.524l-.608,1.487.88,1.343A.388.388,0,0,1,9.7,46.134Zm3-14.562a.627.627,0,0,1-.456-.2l-2-2.061c-.022-.023-.043-.045-.062-.069a1.788,1.788,0,0,1,.183-2.521,1.724,1.724,0,0,1,2.33.142,1.718,1.718,0,0,1,2.322-.148h.006l.071.065a1.786,1.786,0,0,1,.054,2.525h0l-2.023,2.087A.619.619,0,0,1,12.7,31.572Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8580" data-name="Path 8580" d="M8.2,44.254l.483-1.182-1.232.335a.39.39,0,0,1-.355-.079L6.118,42.5l-.062,1.275a.39.39,0,0,1-.185.314l-1.08.672,1.194.452a.391.391,0,0,1,.241.275l.3,1.238.8-.995a.384.384,0,0,1,.333-.145l1.273.094-.7-1.068A.388.388,0,0,1,8.2,44.254Z" fill="#8db9ca"/>
          <path id="Path_8581" data-name="Path 8581" d="M8.2,44.254l.483-1.182-1.232.335a.39.39,0,0,1-.355-.079L6.118,42.5l-.062,1.275a.39.39,0,0,1-.185.314l-1.08.672,1.194.452a.391.391,0,0,1,.241.275l.3,1.238.8-.995a.384.384,0,0,1,.333-.145l1.273.094-.7-1.068A.388.388,0,0,1,8.2,44.254Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8582" data-name="Path 8582" d="M80.611,45.272c-.222.024-.439.057-.654.1h0a6.456,6.456,0,1,0,7.674,5.333,45.2,45.2,0,0,0-4.042-5.03A6.427,6.427,0,0,0,80.611,45.272Zm-2.253,4.971a.6.6,0,1,1,.549-.648v0h0A.6.6,0,0,1,78.358,50.243Zm3.528,5.878a1.506,1.506,0,0,1-.2.029,1.9,1.9,0,0,1-1.979-1.415.152.152,0,0,1,.3-.069.172.172,0,0,1,0,.039,1.619,1.619,0,0,0,1.651,1.142,2.016,2.016,0,0,0,1.571-1.363.154.154,0,0,1,.3.068A2.326,2.326,0,0,1,81.886,56.121Zm2.19-7.549a.6.6,0,0,1,.648.548v0h0a.6.6,0,1,1-.649-.55Z" fill="#8db9ca"/>
          <path id="Path_8583" data-name="Path 8583" d="M80.611,45.272c-.222.024-.439.057-.654.1h0a6.456,6.456,0,1,0,7.674,5.333,45.2,45.2,0,0,0-4.042-5.03A6.427,6.427,0,0,0,80.611,45.272Zm-2.253,4.971a.6.6,0,1,1,.549-.648v0h0A.6.6,0,0,1,78.358,50.243Zm3.528,5.878a1.506,1.506,0,0,1-.2.029,1.9,1.9,0,0,1-1.979-1.415.152.152,0,0,1,.3-.069.172.172,0,0,1,0,.039,1.619,1.619,0,0,0,1.651,1.142,2.016,2.016,0,0,0,1.571-1.363.154.154,0,0,1,.3.068A2.326,2.326,0,0,1,81.886,56.121Zm2.19-7.549a.6.6,0,0,1,.648.548v0h0a.6.6,0,1,1-.649-.55Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8584" data-name="Path 8584" d="M266.189,19.017l.4-.969-1.01.276a.325.325,0,0,1-.292-.065l-.8-.676-.05,1.045a.324.324,0,0,1-.152.258l-.895.554.979.371a.319.319,0,0,1,.2.225l.249,1.015.656-.816a.32.32,0,0,1,.273-.119l1.044.077-.574-.876A.323.323,0,0,1,266.189,19.017Z" fill="#8db9ca"/>
          <path id="Path_8585" data-name="Path 8585" d="M266.189,19.017l.4-.969-1.01.276a.325.325,0,0,1-.292-.065l-.8-.676-.05,1.045a.324.324,0,0,1-.152.258l-.895.554.979.371a.319.319,0,0,1,.2.225l.249,1.015.656-.816a.32.32,0,0,1,.273-.119l1.044.077-.574-.876A.323.323,0,0,1,266.189,19.017Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8586" data-name="Path 8586" d="M325,3.95H230.734C245.273,24.736,290.872,38.918,335,40.3V13.95A10,10,0,0,0,325,3.95ZM267.406,20.57a.315.315,0,0,1-.3.156l-1.313-.1-.824,1.026a.319.319,0,0,1-.24.116.327.327,0,0,1-.07-.008.32.32,0,0,1-.242-.237L264.1,20.25l-1.231-.467a.321.321,0,0,1-.055-.572l1.119-.693L264,17.2a.321.321,0,0,1,.528-.23l1,.85,1.27-.345a.324.324,0,0,1,.382.434l-.5,1.218.722,1.1A.321.321,0,0,1,267.406,20.57Zm28.764-4.758-7.589,3.074a1.271,1.271,0,0,1-1.658-.7l-2.306-5.692a1.28,1.28,0,0,1,.7-1.658l7.589-3.075a1.28,1.28,0,0,1,1.658.7l.005.012a.16.16,0,0,1,.009.023l2.292,5.657A1.281,1.281,0,0,1,296.17,15.812Zm27.51,10.632a5.787,5.787,0,0,1-7.11,3.106q-.275-.093-.546-.214a5.787,5.787,0,1,1,7.656-2.892Z" fill="#8db9ca"/>
          <path id="Path_8587" data-name="Path 8587" d="M325,3.95H230.734C245.273,24.736,290.872,38.918,335,40.3V13.95A10,10,0,0,0,325,3.95ZM267.406,20.57a.315.315,0,0,1-.3.156l-1.313-.1-.824,1.026a.319.319,0,0,1-.24.116.327.327,0,0,1-.07-.008.32.32,0,0,1-.242-.237L264.1,20.25l-1.231-.467a.321.321,0,0,1-.055-.572l1.119-.693L264,17.2a.321.321,0,0,1,.528-.23l1,.85,1.27-.345a.324.324,0,0,1,.382.434l-.5,1.218.722,1.1A.321.321,0,0,1,267.406,20.57Zm28.764-4.758-7.589,3.074a1.271,1.271,0,0,1-1.658-.7l-2.306-5.692a1.28,1.28,0,0,1,.7-1.658l7.589-3.075a1.28,1.28,0,0,1,1.658.7l.005.012a.16.16,0,0,1,.009.023l2.292,5.657A1.281,1.281,0,0,1,296.17,15.812Zm27.51,10.632a5.787,5.787,0,0,1-7.11,3.106q-.275-.093-.546-.214a5.787,5.787,0,1,1,7.656-2.892Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8588" data-name="Path 8588" d="M294.04,8.549a.769.769,0,0,0-.94-.324L285.512,11.3h-.005a.77.77,0,0,0-.448.894l5.763,1.323Z" fill="#8db9ca"/>
          <path id="Path_8589" data-name="Path 8589" d="M294.04,8.549a.769.769,0,0,0-.94-.324L285.512,11.3h-.005a.77.77,0,0,0-.448.894l5.763,1.323Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8590" data-name="Path 8590" d="M320.577,19.25a3.938,3.938,0,0,0-.5-.208v.008a5.285,5.285,0,1,0,.5.2Zm-3.868,1.941a.493.493,0,0,1,.892.42h0a.493.493,0,0,1-.891-.422Zm2.138,5.832a1.907,1.907,0,0,1-1.8.444,1.511,1.511,0,0,1-.157-.063,1.556,1.556,0,0,1-.826-1.816.122.122,0,0,1,.162-.063h0a.125.125,0,0,1,.063.165,1.327,1.327,0,0,0,.7,1.487,1.651,1.651,0,0,0,1.673-.325.125.125,0,1,1,.184.17Zm3.081-3.365a.494.494,0,1,1-.237-.657h0a.493.493,0,0,1,.235.656Z" fill="#8db9ca"/>
          <path id="Path_8591" data-name="Path 8591" d="M320.577,19.25a3.938,3.938,0,0,0-.5-.208v.008a5.285,5.285,0,1,0,.5.2Zm-3.868,1.941a.493.493,0,0,1,.892.42h0a.493.493,0,0,1-.891-.422Zm2.138,5.832a1.907,1.907,0,0,1-1.8.444,1.511,1.511,0,0,1-.157-.063,1.556,1.556,0,0,1-.826-1.816.122.122,0,0,1,.162-.063h0a.125.125,0,0,1,.063.165,1.327,1.327,0,0,0,.7,1.487,1.651,1.651,0,0,0,1.673-.325.125.125,0,1,1,.184.17Zm3.081-3.365a.494.494,0,1,1-.237-.657h0a.493.493,0,0,1,.235.656Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8592" data-name="Path 8592" d="M290.937,14.05a.259.259,0,0,1-.056-.006l-5.621-1.292L287.386,18a.78.78,0,0,0,1.008.427l7.588-3.074a.78.78,0,0,0,.426-1.009l-2.123-5.253-3.144,4.846A.249.249,0,0,1,290.937,14.05Z" fill="#8db9ca"/>
          <path id="Path_8593" data-name="Path 8593" d="M290.937,14.05a.259.259,0,0,1-.056-.006l-5.621-1.292L287.386,18a.78.78,0,0,0,1.008.427l7.588-3.074a.78.78,0,0,0,.426-1.009l-2.123-5.253-3.144,4.846A.249.249,0,0,1,290.937,14.05Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8594" data-name="Path 8594" d="M266.676,19.131l.5-1.218a.324.324,0,0,0-.382-.434l-1.27.345-1-.85a.321.321,0,0,0-.528.23l-.063,1.314-1.119.693a.321.321,0,0,0,.055.572l1.231.467.317,1.273a.32.32,0,0,0,.242.237.327.327,0,0,0,.07.008.319.319,0,0,0,.24-.116l.824-1.026,1.313.1a.315.315,0,0,0,.3-.156.321.321,0,0,0-.008-.339Zm-.929.985a.32.32,0,0,0-.273.119l-.656.816-.249-1.015a.319.319,0,0,0-.2-.225l-.979-.371.895-.554a.324.324,0,0,0,.152-.258l.05-1.045.8.676a.325.325,0,0,0,.292.065l1.01-.276-.4.969a.323.323,0,0,0,.028.3l.574.876Z" fill="#8db9ca"/>
          <path id="Path_8595" data-name="Path 8595" d="M8.811,44.379l.608-1.487a.391.391,0,0,0-.465-.524l-1.549.422L6.179,41.753a.391.391,0,0,0-.643.28l-.077,1.6-1.365.845a.391.391,0,0,0,.067.7l1.5.569.383,1.559a.386.386,0,0,0,.3.289.4.4,0,0,0,.085.009.388.388,0,0,0,.31-.145l1-1.252,1.6.119a.383.383,0,0,0,.366-.192.388.388,0,0,0-.009-.412ZM7.659,45.59a.384.384,0,0,0-.333.145l-.8.995-.3-1.238a.391.391,0,0,0-.241-.275l-1.194-.452,1.08-.672a.39.39,0,0,0,.185-.314L6.118,42.5l.975.824a.39.39,0,0,0,.355.079l1.232-.335L8.2,44.254a.388.388,0,0,0,.035.362l.7,1.068Z" fill="#8db9ca"/>
          <path id="Path_8596" data-name="Path 8596" d="M38.407,34.563c.117-.017.228-.031.348-.051.232-.038.45-.079.668-.12-.217.038-.434.076-.665.114Z" fill="#8db9ca"/>
          <path id="Path_8597" data-name="Path 8597" d="M38.407,34.563c.117-.017.228-.031.348-.051.232-.038.45-.079.668-.12-.217.038-.434.076-.665.114Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8598" data-name="Path 8598" d="M45.3,59.8h-.007a9.259,9.259,0,0,1,1.437,1.025c.07.055.153.128.226.187h0c-.073-.061-.157-.134-.226-.189A9.244,9.244,0,0,0,45.3,59.8Z" fill="#8db9ca"/>
          <path id="Path_8599" data-name="Path 8599" d="M45.3,59.8h-.007a9.259,9.259,0,0,1,1.437,1.025c.07.055.153.128.226.187h0c-.073-.061-.157-.134-.226-.189A9.244,9.244,0,0,0,45.3,59.8Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8600" data-name="Path 8600" d="M30.135,42.917c-.025-1.237-.137-2.9-.247-4.486,0,.138,0,.281-.007.435C29.854,39.989,30.036,41.625,30.135,42.917Z" fill="#8db9ca"/>
          <path id="Path_8601" data-name="Path 8601" d="M30.135,42.917c-.025-1.237-.137-2.9-.247-4.486,0,.138,0,.281-.007.435C29.854,39.989,30.036,41.625,30.135,42.917Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_8602" data-name="Path 8602" d="M49.316,54.136,49.4,54c-.043,0-.087,0-.13,0C49.291,54.045,49.3,54.091,49.316,54.136Z" fill="#1b365d"/>
          <path id="Path_8603" data-name="Path 8603" d="M47.345,61.333c-.139-.12-.261-.219-.386-.321h0C47.084,61.115,47.206,61.213,47.345,61.333Z" fill="#1b365d"/>
          <path id="Path_8604" data-name="Path 8604" d="M38.991,51.527,39.3,53.3l2.482-.439C40.292,53.121,39,51.536,38.991,51.527Z" fill="#fceada"/>
          <path id="Path_8605" data-name="Path 8605" d="M39.821,46.02a.249.249,0,0,1,.076-.111l-.468.083.238,1.346A8.111,8.111,0,0,1,39.821,46.02Z" fill="#fceada"/>
          <path id="Path_8606" data-name="Path 8606" d="M40.335,46.122a3.792,3.792,0,0,0-.036,1.962,3.123,3.123,0,0,0,1.68-.19.244.244,0,0,1,.243.067L41.8,45.573l-1.607.284A.252.252,0,0,1,40.335,46.122Z" fill="#fceada"/>
          <path id="Path_8607" data-name="Path 8607" d="M42.291,48.353l-.014-.079a.25.25,0,0,1-.121.1Z" fill="#fceada"/>
          <path id="Path_8608" data-name="Path 8608" d="M43.966,50.645s-.676,1.946-2.172,2.214l2.49-.44-.313-1.775Z" fill="#fceada"/>
          <path id="Path_8609" data-name="Path 8609" d="M39.843,48.334l.077.438.65-.115A1.089,1.089,0,0,1,40,48.512.551.551,0,0,1,39.843,48.334Z" fill="#fceada"/>
          <path id="Path_8610" data-name="Path 8610" d="M38.991,51.524h0l4.019-.711Z" fill="#fceada"/>
          <path id="Path_8611" data-name="Path 8611" d="M44.952,59.586l.041-.041a34.879,34.879,0,0,0,3.934-4.816c.115-.238.235-.473.344-.714-.2-.818-.418-1.63-.612-2.3a10.474,10.474,0,0,0,1.11-6.3c-.092-.559.8.081,1.07-.984l-.007.005c.521-1.994,1.65-6.106.14-6.9-.092-.048-.159-.078-.226-.108a20.392,20.392,0,0,1-.988,4.316c-.482,1.2-1.627-7.4-2.4-8.461-1.66-2.257,1.037-.474-7.935,1.109-.218.041-.436.082-.668.12-.12.02-.231.034-.348.051-8.989,1.466-8.5.967-8.519,3.868.11,1.586.222,3.249.247,4.486.1,1.335.114,2.286-.284,1.919a.311.311,0,0,1-.086-.078A16.469,16.469,0,0,1,27.8,40.834c-.471.758.139,3.162,1.17,5.689a3.119,3.119,0,0,0,1.98,1.585c.142.211,1.35,3.685,2.676,5.165.063.439.128.93.189,1.441C34.677,55.735,37,57.889,42.5,59.46l.007,0,2.48.082-.044.044c.12.064.231.143.348.212H45.3C45.184,59.73,45.073,59.65,44.952,59.586Zm-11.8-19.02a.262.262,0,1,1-.172-.494,3.64,3.64,0,0,1,2.777.146.262.262,0,0,1-.112.5.251.251,0,0,1-.112-.026A3.117,3.117,0,0,0,33.148,40.566Zm2.765,3.222a.9.9,0,1,1,.731-1.047v.007h0A.9.9,0,0,1,35.913,43.788Zm7.243-4.733a3.638,3.638,0,0,1,2.431-1.35.262.262,0,0,1,.062.52,3.114,3.114,0,0,0-2.085,1.156.261.261,0,1,1-.408-.326ZM39.9,45.909l.3-.052,1.607-.284.422,2.388.055.313.014.079-.135.024-1.586.28-.65.115-.077-.438-.176-1-.238-1.346Zm1.9,6.95h-.008L39.3,53.3l-.313-1.772v0h0l4.019-.71.956-.169h.005l.313,1.775Zm2.757-10.6a.9.9,0,1,1,.731-1.047v.007h0A.9.9,0,0,1,44.551,42.262Z" fill="#fceada"/>
          <path id="Path_8612" data-name="Path 8612" d="M47.438,61.414l-.093-.081c-.139-.12-.261-.218-.387-.321-.073-.059-.156-.132-.226-.187A9.259,9.259,0,0,0,45.295,59.8c-.117-.069-.228-.148-.348-.212l.044-.044-2.48-.082c.06.022.12.041.182.062h0s-.1.091-.365.334c-.354.332-1.018.97-2.159,2.109l-.176.176-.712.712h0l0,0L40.1,63.95H46.8a18.29,18.29,0,0,1,1.351-1.89C47.893,61.817,47.659,61.607,47.438,61.414Z" fill="#d9232e"/>
          <path id="Path_8613" data-name="Path 8613" d="M39.987,62.144l.177-.176c1.143-1.14,1.806-1.777,2.159-2.109.26-.243.364-.333.364-.333-.064-.022-.126-.041-.189-.064h.013l-.007,0c-5.5-1.571-7.827-3.725-8.686-4.746-.066-.079-.126-.153-.176-.218a1.794,1.794,0,0,1-.251-.377,8.885,8.885,0,0,0-.154.9A12.221,12.221,0,0,0,36.2,63.95h1.97c.4-.4.779-.767,1.106-1.094Z" fill="#fff"/>
          <path id="Path_8614" data-name="Path 8614" d="M40.164,61.968h0c1.141-1.139,1.805-1.777,2.159-2.109h0C41.97,60.191,41.307,60.828,40.164,61.968Z" fill="#fff"/>
          <path id="Path_8615" data-name="Path 8615" d="M39.987,62.144l-.71.712h0l.712-.712.176-.176h0Z" fill="#fff"/>
          <path id="Path_8616" data-name="Path 8616" d="M42.687,59.526s-.1.09-.364.333h0c.26-.243.365-.334.365-.334h0c-.062-.021-.122-.04-.182-.062H42.5C42.561,59.485,42.623,59.5,42.687,59.526Z" fill="#fff"/>
          <path id="Path_8617" data-name="Path 8617" d="M49.4,54h.022l-.006-.024Z" fill="#fff"/>
          <path id="Path_8618" data-name="Path 8618" d="M48.927,54.729a35,35,0,0,1-2.9,4.977L45.3,59.8a9.244,9.244,0,0,1,1.431,1.023c.069.055.153.128.226.189a7.087,7.087,0,0,0,1.254-1.156,5.7,5.7,0,0,0,1.1-5.72c-.05.079-.114.182-.2.318C49.058,54.547,48.99,54.637,48.927,54.729Z" fill="#fff"/>
          <path id="Path_8619" data-name="Path 8619" d="M49.426,54H49.4l-.088.139a5.7,5.7,0,0,1-1.1,5.72,7.087,7.087,0,0,1-1.254,1.156c.125.1.247.2.386.321l.093.081c.221.193.456.4.718.644.563.517,1.239,1.145,2.005,1.892h1.027C51.324,62.36,50.43,58.337,49.426,54Z" fill="#fff"/>
          <path id="Path_8620" data-name="Path 8620" d="M44.952,59.586c.121.064.232.144.35.214l.721-.094a35,35,0,0,0,2.9-4.977,34.879,34.879,0,0,1-3.934,4.816Z" fill="#fff"/>
          <path id="Path_8621" data-name="Path 8621" d="M29.851,44.836c.4.367.387-.584.284-1.919C30.16,44.163,30.1,44.975,29.851,44.836Z" fill="#221e1f"/>
          <path id="Path_8622" data-name="Path 8622" d="M28.42,30.606c.243.245-4.483,1.892-1.807,7.4.39.789.768,1.812,1.19,2.824a16.462,16.462,0,0,0,1.962,3.923.65.65,0,0,0,.086.083c.245.139.309-.673.284-1.919-.1-1.292-.281-2.928-.254-4.051,0-.154.006-.3.007-.435.017-2.9-.47-2.4,8.519-3.868l.351-.057c.231-.038.448-.076.665-.114,8.972-1.583,6.275-3.366,7.935-1.109.773,1.061,1.918,9.661,2.4,8.461a20.392,20.392,0,0,0,.988-4.316v-.007a28,28,0,0,0,.339-5.173l0-.009c-.64-9.557-6.94-8.371-6.94-8.371a3.576,3.576,0,0,0-.6-1.171H33.282C30,24.872,26.3,28.483,28.42,30.606Z" fill="#221e1f"/>
          <path id="Path_8623" data-name="Path 8623" d="M35.641,40.716a.262.262,0,0,0,.112-.5,3.64,3.64,0,0,0-2.777-.146.262.262,0,1,0,.172.494,3.117,3.117,0,0,1,2.381.124A.251.251,0,0,0,35.641,40.716Z" fill="#221e1f"/>
          <path id="Path_8624" data-name="Path 8624" d="M43.36,39.479a.262.262,0,0,0,.2-.1,3.114,3.114,0,0,1,2.085-1.156.262.262,0,0,0-.062-.52,3.638,3.638,0,0,0-2.431,1.35.26.26,0,0,0,.2.424Z" fill="#221e1f"/>
          <path id="Path_8625" data-name="Path 8625" d="M43.966,50.645l-.956.169-4.019.711v0c.008.009,1.3,1.594,2.795,1.333h.008C43.29,52.591,43.966,50.646,43.966,50.645Z" fill="#e3727c"/>
          <path id="Path_8626" data-name="Path 8626" d="M39.667,47.338l.176,1a.551.551,0,0,0,.156.178,1.089,1.089,0,0,0,.571.145l1.586-.28a.25.25,0,0,0,.121-.1l-.055-.313a.244.244,0,0,0-.243-.067,3.123,3.123,0,0,1-1.68.19,3.792,3.792,0,0,1,.036-1.962.252.252,0,0,0-.142-.265l-.3.052a.249.249,0,0,0-.076.111A8.111,8.111,0,0,0,39.667,47.338Z" fill="#ce9c6b"/>
          <path id="Path_8627" data-name="Path 8627" d="M36.644,42.741a.75.75,0,1,0,0,.007h0Z" fill="#221e1f"/>
          <path id="Path_8628" data-name="Path 8628" d="M45.285,41.222h0v-.007a.75.75,0,1,0,0,.007Z" fill="#221e1f"/>
          <path id="Path_8629" data-name="Path 8629" d="M33.237,55.015a11.771,11.771,0,0,0-4.454,1.1c-2.65-3.528-5.425-11.485-5.425-11.485.623-2.8.762-16.167.786-19.158-1.355.986-4.022.858-4.022.858a11.1,11.1,0,0,1-2.555-.446c-1.419,2.536-3.875,21.963-4.049,24.895-.169,2.859,1.272,6.687,3.709,13.17H36.2A12.221,12.221,0,0,1,33.237,55.015Z" fill="#1b365d"/>
          <path id="Path_8630" data-name="Path 8630" d="M39.277,62.856c-.327.327-.7.7-1.106,1.094H40.1l-.822-1.092Z" fill="#1b365d"/>
          <path id="Path_8631" data-name="Path 8631" d="M47.438,61.414c.221.193.455.4.717.646A18.29,18.29,0,0,0,46.8,63.95h3.357c-.766-.747-1.442-1.375-2.005-1.892C47.894,61.817,47.659,61.607,47.438,61.414Z" fill="#1b365d"/>
          <path id="Path_8632" data-name="Path 8632" d="M67.992,48.144c-.118-1.994-2.16-10.915-3.923-17.2-.637-2.272-1.238-4.2-1.7-5.33a16.794,16.794,0,0,1-1.777.259,8.428,8.428,0,0,1-4.206-.722,1.11,1.11,0,0,0-.1.424s.007.523.023,1.38c.066,3.522.29,12.764.856,15.306,0,0-2.521,9.34-5.221,12.111A6.966,6.966,0,0,0,49.426,54c1,4.341,1.9,8.364,1.762,9.954H63.215c.249-.527.5-1.108.738-1.754C66.591,55.17,68.168,51.13,67.992,48.144Z" fill="#1b365d"/>
          <path id="Path_8633" data-name="Path 8633" d="M87.584,50.393c.021.1.032.208.048.312.232.338.455.678.673,1.018A6.969,6.969,0,0,0,88.273,51a7.053,7.053,0,0,0-5.5-6.194q.416.43.815.865A6.452,6.452,0,0,1,87.584,50.393Z" fill="#8db9ca"/>
          <path id="Path_8634" data-name="Path 8634" d="M80.563,44.676a7.053,7.053,0,1,0,1.382,14.038c.24-.024.476-.06.707-.106a7.052,7.052,0,0,0,5.653-6.885c-.218-.34-.441-.68-.673-1.018a6.452,6.452,0,1,1-7.674-5.333h0c.215-.043.432-.076.654-.1a6.427,6.427,0,0,1,2.979.4q-.4-.433-.815-.865A7.045,7.045,0,0,0,80.563,44.676Z" fill="#8db9ca"/>
          <path id="Path_8635" data-name="Path 8635" d="M78.907,49.6a.6.6,0,1,0-.549.648.6.6,0,0,0,.549-.648h0Z" fill="#8db9ca"/>
          <path id="Path_8636" data-name="Path 8636" d="M84.175,49.768a.6.6,0,0,0,.55-.646h0v0a.6.6,0,1,0-.549.648Z" fill="#8db9ca"/>
          <path id="Path_8637" data-name="Path 8637" d="M83.413,54.368a.154.154,0,0,0-.184.116,2.016,2.016,0,0,1-1.571,1.363,1.619,1.619,0,0,1-1.651-1.142.172.172,0,0,0,0-.039.152.152,0,0,0-.3.069,1.9,1.9,0,0,0,1.979,1.415,1.506,1.506,0,0,0,.2-.029,2.326,2.326,0,0,0,1.643-1.569A.154.154,0,0,0,83.413,54.368Z" fill="#8db9ca"/>
          <path id="Path_8638" data-name="Path 8638" d="M320.788,18.788a5.787,5.787,0,1,0-4.764,10.548q.271.121.546.214a5.787,5.787,0,0,0,4.218-10.762Zm2.579,6.973a5.285,5.285,0,1,1-3.29-6.711v-.008a3.938,3.938,0,0,1,.5.208A5.284,5.284,0,0,1,323.367,25.761Z" fill="#8db9ca"/>
          <path id="Path_8639" data-name="Path 8639" d="M316.943,21.847a.493.493,0,0,0,.657-.234h0a.493.493,0,1,0-.658.236Z" fill="#8db9ca"/>
          <path id="Path_8640" data-name="Path 8640" d="M321.692,23h0a.494.494,0,1,0,.237.657h0A.493.493,0,0,0,321.692,23Z" fill="#8db9ca"/>
          <path id="Path_8641" data-name="Path 8641" d="M318.663,26.853a1.651,1.651,0,0,1-1.673.325,1.327,1.327,0,0,1-.7-1.487.125.125,0,0,0-.063-.165h0a.122.122,0,0,0-.162.063,1.556,1.556,0,0,0,.826,1.816,1.511,1.511,0,0,0,.157.063,1.907,1.907,0,0,0,1.8-.444.125.125,0,1,0-.184-.17Z" fill="#8db9ca"/>
          <path id="Path_8642" data-name="Path 8642" d="M15.15,29.305A1.786,1.786,0,0,0,15.1,26.78l-.071-.065h-.006a1.718,1.718,0,0,0-2.322.148,1.724,1.724,0,0,0-2.33-.142,1.788,1.788,0,0,0-.183,2.521c.019.024.04.046.062.069l2,2.061a.627.627,0,0,0,.456.2.619.619,0,0,0,.424-.179l2.023-2.087Zm-.432-.413-2,2.063h-.029l-2-2.064a.514.514,0,0,1-.038-.042,1.178,1.178,0,0,1,.113-1.655,1.1,1.1,0,0,1,.694-.246h0a1.115,1.115,0,0,1,.825.362l.422.436.428-.442a1.112,1.112,0,0,1,1.508-.112l.04.037A1.178,1.178,0,0,1,14.718,28.892Z" fill="#8db9ca"/>
          <path id="Path_8643" data-name="Path 8643" d="M11.512,22.7h6.02a3.569,3.569,0,0,1,1.029-.679c2.02-.917,4.864-.091,4.864-.091a6.605,6.605,0,0,1,1.836-2.02c.844-.241.735,1.262.3,2.79H55.271v-1.23s0-2.387.734-2.387.919.919.919,1.836A1.809,1.809,0,0,0,58.279,22.7H59.29a20.564,20.564,0,0,1,3.873-.312c.562.113.984.022,1.186.312h4.236a1.758,1.758,0,0,0,1.758-1.758V7.688A1.758,1.758,0,0,0,68.585,5.93H11.512A1.758,1.758,0,0,0,9.754,7.688V20.939A1.758,1.758,0,0,0,11.512,22.7Zm46.217-9.254a.116.116,0,0,1,.071-.036l2.306-.336a.115.115,0,0,0,.089-.064l1.031-2.09a.117.117,0,0,1,.16-.043.113.113,0,0,1,.045.047l1.031,2.09a.118.118,0,0,0,.087.064l1.533.223v0l.774.112a.116.116,0,0,1,.073.038l0,.007,0,.006a.108.108,0,0,1,.021.075l0,0a.121.121,0,0,1-.038.073l-1.664,1.623a.116.116,0,0,0-.034.1l.394,2.3c0,.015-.006.027-.009.04a.135.135,0,0,1,0,.035l0,0a.31.31,0,0,1-.073.055l-.005,0a.108.108,0,0,1-.056-.008c-.007,0-.014,0-.021,0l-2.062-1.085a.121.121,0,0,0-.108,0l-2.06,1.084h0a.124.124,0,0,1-.076.012l-.007,0c-.007,0-.011-.008-.017-.011a.106.106,0,0,1-.053-.044h0a.109.109,0,0,1,0-.025.11.11,0,0,1-.011-.05l.046-.264h0l.35-2.036a.116.116,0,0,0-.034-.1l-1.67-1.627A.117.117,0,0,1,57.729,13.443Zm-10.327,0a.116.116,0,0,1,.071-.036l2.306-.336a.115.115,0,0,0,.089-.064l1.031-2.09a.117.117,0,0,1,.158-.05.115.115,0,0,1,.05.05l1.031,2.09a.118.118,0,0,0,.087.064l1.531.223v0l.774.112a.116.116,0,0,1,.073.038l0,.006a.091.091,0,0,1,.014.04.122.122,0,0,1,.012.04l0,.006a.121.121,0,0,1-.038.073l-1.668,1.627a.116.116,0,0,0-.034.1l.394,2.3c0,.008,0,.014,0,.021a.105.105,0,0,1-.007.05l-.005,0a.108.108,0,0,1-.052.044c-.006,0-.009.008-.015.009s-.006.007-.011.007a.112.112,0,0,1-.074-.011l-2.062-1.085a.117.117,0,0,0-.109,0l-2.062,1.085a.1.1,0,0,1-.052.005c-.008,0-.016,0-.024,0l0,0a.108.108,0,0,1-.052-.033c-.008-.007-.017-.01-.022-.018l-.005-.005a.116.116,0,0,1-.011-.069l0-.009.046-.264h0l.348-2.033a.115.115,0,0,0-.032-.1l-1.67-1.627A.117.117,0,0,1,47.4,13.447Zm-10.325,0a.116.116,0,0,1,.071-.036l2.306-.336a.115.115,0,0,0,.089-.064l1.031-2.09a.117.117,0,0,1,.157-.052.114.114,0,0,1,.052.052l1.031,2.09a.118.118,0,0,0,.087.064l1.533.223v0l.774.112a.116.116,0,0,1,.073.038l0,.007,0,.007a.112.112,0,0,1,.021.074l0,0a.116.116,0,0,1-.038.073L42.6,15.238a.116.116,0,0,0-.033.1l.394,2.3a.126.126,0,0,1-.011.074l-.007.006a.11.11,0,0,1-.045.037c-.008,0-.013.012-.022.014s-.006.006-.011.007a.112.112,0,0,1-.074-.011l-2.062-1.085a.117.117,0,0,0-.109,0l-2.062,1.085a.106.106,0,0,1-.047,0,.128.128,0,0,1-.027,0l0,0a.112.112,0,0,1-.062-.039s-.008-.006-.011-.01l-.008-.007a.115.115,0,0,1-.012-.075l.394-2.3a.113.113,0,0,0-.033-.1l-1.67-1.627A.117.117,0,0,1,37.077,13.447Zm-10.324,0a.116.116,0,0,1,.071-.036l2.306-.336a.115.115,0,0,0,.089-.064l1.031-2.09a.117.117,0,0,1,.157-.052.114.114,0,0,1,.052.052l1.031,2.09a.118.118,0,0,0,.087.064l1.533.223v0l.774.112a.116.116,0,0,1,.073.038l0,.007,0,.007a.112.112,0,0,1,.021.074l0,0a.121.121,0,0,1-.038.073L32.28,15.238a.116.116,0,0,0-.033.1l.394,2.3a.126.126,0,0,1-.011.074l-.007.006a.123.123,0,0,1-.044.037c-.009,0-.014.012-.023.014s-.006.006-.011.007a.112.112,0,0,1-.074-.011l-2.062-1.085a.117.117,0,0,0-.109,0l-.542.285-1.52.8a.106.106,0,0,1-.047,0,.128.128,0,0,1-.027,0l0,0a.106.106,0,0,1-.061-.039s-.009-.006-.012-.01l-.008-.007a.115.115,0,0,1-.012-.075l.191-1.113.2-1.187a.113.113,0,0,0-.033-.1l-1.67-1.627A.117.117,0,0,1,26.753,13.447Zm-10.324,0c.008-.008.019-.009.028-.014a.11.11,0,0,1,.043-.022l2.306-.336a.115.115,0,0,0,.089-.064l1.031-2.09a.117.117,0,0,1,.157-.052.114.114,0,0,1,.052.052l1.031,2.09a.118.118,0,0,0,.087.064l1.533.223v0l.774.112a.116.116,0,0,1,.073.038.113.113,0,0,1,.025.091v0a.111.111,0,0,1-.036.07L22.313,14.89l-.357.348a.116.116,0,0,0-.033.1l.394,2.3a.126.126,0,0,1-.011.074l-.007.006a.11.11,0,0,1-.045.037c-.008,0-.013.012-.022.014s-.006.006-.011.007a.112.112,0,0,1-.074-.011l-2.062-1.085a.117.117,0,0,0-.109,0l-2.062,1.085a.106.106,0,0,1-.047,0,.128.128,0,0,1-.027,0l0,0a.112.112,0,0,1-.062-.039s-.008-.006-.011-.01l-.008-.007a.115.115,0,0,1-.012-.075l.394-2.3a.113.113,0,0,0-.033-.1l-1.67-1.627A.117.117,0,0,1,16.429,13.447Z" fill="#fff"/>
          <path id="Path_8644" data-name="Path 8644" d="M18.866,13.349a.306.306,0,0,0,.245-.165l.919-1.78-.756,2.027a.306.306,0,0,1-.3.2l-2.1-.1q2.463.585,4.883,1.213A8.9,8.9,0,0,0,22.786,13.3l-1.533-.223a.118.118,0,0,1-.087-.064l-1.031-2.09a.114.114,0,0,0-.052-.052.117.117,0,0,0-.157.052L18.9,13.011a.115.115,0,0,1-.089.064l-2.306.336a.11.11,0,0,0-.043.022l.412.1Z" fill="#ffc801"/>
          <path id="Path_8645" data-name="Path 8645" d="M22.311,14.889h0l1.311-1.279a.111.111,0,0,0,.036-.07v0a.116.116,0,0,1-.034.071Z" fill="#ffc801"/>
          <path id="Path_8646" data-name="Path 8646" d="M20.086,16.674a.117.117,0,0,0-.109,0l-2.062,1.085a.11.11,0,0,1-.048.007.106.106,0,0,0,.047,0l2.062-1.085a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.074.011s.007-.005.011-.007a.112.112,0,0,1-.084-.007Z" fill="#ffc801"/>
          <path id="Path_8647" data-name="Path 8647" d="M21.957,15.235a.116.116,0,0,0-.034.1h0a.116.116,0,0,1,.033-.1l.357-.348h0Z" fill="#ffc801"/>
          <path id="Path_8648" data-name="Path 8648" d="M18.1,15.238a.113.113,0,0,1,.033.1l-.394,2.3a.115.115,0,0,0,.012.075l.008.007a.11.11,0,0,1-.019-.085l.046-.264a8.9,8.9,0,0,0,3.964-2.627q-2.421-.627-4.883-1.213h0l-.412-.1c-.009.005-.02.006-.028.014a.117.117,0,0,0,.006.164Z" fill="#ffc801"/>
          <path id="Path_8649" data-name="Path 8649" d="M19.274,13.431,20.03,11.4l-.919,1.78a.306.306,0,0,1-.245.165l-2,.182h0l2.1.1A.306.306,0,0,0,19.274,13.431Z" fill="#ffd753"/>
          <path id="Path_8650" data-name="Path 8650" d="M16.866,13.531h0Z" fill="#ffd753"/>
          <path id="Path_8651" data-name="Path 8651" d="M23.659,13.537a.113.113,0,0,0-.025-.091.116.116,0,0,0-.073-.038l-.774-.112v0l.774.113A.115.115,0,0,1,23.659,13.537Z" fill="#f8b911"/>
          <path id="Path_8652" data-name="Path 8652" d="M17.84,17.771a.128.128,0,0,0,.027,0,.1.1,0,0,1-.03,0Z" fill="#f8b911"/>
          <path id="Path_8653" data-name="Path 8653" d="M22.316,17.638a.115.115,0,0,1-.017.077l.007-.006a.126.126,0,0,0,.011-.074l-.394-2.3v0Z" fill="#f8b911"/>
          <path id="Path_8654" data-name="Path 8654" d="M22.311,14.889l1.314-1.281a.116.116,0,0,0-.065-.2l-.774-.113a8.9,8.9,0,0,1-1.031,1.446Z" fill="#f8b911"/>
          <path id="Path_8655" data-name="Path 8655" d="M21.957,15.235l.354-.346-.556-.145a8.9,8.9,0,0,1-3.964,2.627l-.046.264a.11.11,0,0,0,.019.085s.008.006.011.01a.112.112,0,0,0,.062.039.1.1,0,0,0,.03,0,.11.11,0,0,0,.048-.007l2.062-1.085a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.084.007c.009,0,.014-.01.022-.014a.11.11,0,0,0,.045-.037.115.115,0,0,0,.017-.077l-.394-2.3v0h0A.116.116,0,0,1,21.957,15.235Z" fill="#f8b911"/>
          <path id="Path_8656" data-name="Path 8656" d="M30.41,16.674a.117.117,0,0,0-.109,0l-.546.287h0l.542-.285a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.074.011c.005,0,.007-.005.011-.007a.112.112,0,0,1-.084-.007Z" fill="#ffc801"/>
          <path id="Path_8657" data-name="Path 8657" d="M28.429,15.238a.113.113,0,0,1,.033.1l-.2,1.187q.555.159,1.106.322A8.9,8.9,0,0,0,33.11,13.3l-1.533-.223a.118.118,0,0,1-.087-.064l-1.031-2.09a.114.114,0,0,0-.052-.052.117.117,0,0,0-.157.052l-1.031,2.09a.115.115,0,0,1-.089.064l-2.306.336a.116.116,0,0,0-.065.2Zm.761-1.889a.306.306,0,0,0,.245-.165l.919-1.78L29.6,13.431a.306.306,0,0,1-.3.2l-2.108-.1Z" fill="#ffc801"/>
          <path id="Path_8658" data-name="Path 8658" d="M32.281,15.235a.116.116,0,0,0-.034.1h0a.116.116,0,0,1,.033-.1l1.668-1.627a.121.121,0,0,0,.038-.073l0,0a.11.11,0,0,1-.035.074Z" fill="#ffc801"/>
          <path id="Path_8659" data-name="Path 8659" d="M28.239,17.759a.11.11,0,0,1-.048.007.106.106,0,0,0,.047,0l1.52-.8h0Z" fill="#ffc801"/>
          <path id="Path_8660" data-name="Path 8660" d="M28.115,17.371a8.867,8.867,0,0,0,1.25-.524q-.552-.162-1.106-.322l-.191,1.113a.115.115,0,0,0,.012.075l.008.007a.114.114,0,0,1-.019-.085Z" fill="#ffc801"/>
          <path id="Path_8661" data-name="Path 8661" d="M29.6,13.431l.756-2.027-.919,1.78a.306.306,0,0,1-.245.165l-2,.182,2.108.1A.306.306,0,0,0,29.6,13.431Z" fill="#ffd753"/>
          <path id="Path_8662" data-name="Path 8662" d="M33.961,13.453l0-.007a.116.116,0,0,0-.073-.038l-.774-.112v0l.774.113A.114.114,0,0,1,33.961,13.453Z" fill="#f8b911"/>
          <path id="Path_8663" data-name="Path 8663" d="M32.64,17.638a.115.115,0,0,1-.017.077l.007-.006a.126.126,0,0,0,.011-.074l-.394-2.3v0Z" fill="#f8b911"/>
          <path id="Path_8664" data-name="Path 8664" d="M28.164,17.771a.128.128,0,0,0,.027,0,.1.1,0,0,1-.03,0Z" fill="#f8b911"/>
          <path id="Path_8665" data-name="Path 8665" d="M29.365,16.847l.39.114.546-.287a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.084.007c.009,0,.014-.01.023-.014a.123.123,0,0,0,.044-.037.115.115,0,0,0,.017-.077l-.394-2.3v0h0a.116.116,0,0,1,.034-.1l1.668-1.627a.11.11,0,0,0,.035-.074.112.112,0,0,0-.021-.074l0-.007a.114.114,0,0,0-.077-.042L33.11,13.3A8.9,8.9,0,0,1,29.365,16.847Z" fill="#f8b911"/>
          <path id="Path_8666" data-name="Path 8666" d="M29.755,16.961l-.39-.114a8.867,8.867,0,0,1-1.25.524l-.046.264a.114.114,0,0,0,.019.085s.008.006.012.01a.106.106,0,0,0,.061.039.1.1,0,0,0,.03,0,.11.11,0,0,0,.048-.007Z" fill="#f8b911"/>
          <path id="Path_8667" data-name="Path 8667" d="M42.6,15.235a.116.116,0,0,0-.034.1h0a.116.116,0,0,1,.033-.1l1.668-1.627a.116.116,0,0,0,.038-.073l0,0a.11.11,0,0,1-.035.074Z" fill="#ffc801"/>
          <path id="Path_8668" data-name="Path 8668" d="M40.734,16.674a.117.117,0,0,0-.109,0l-2.062,1.085a.11.11,0,0,1-.048.007.106.106,0,0,0,.047,0l2.062-1.085a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.074.011c.005,0,.007-.005.011-.007a.112.112,0,0,1-.084-.007Z" fill="#ffc801"/>
          <path id="Path_8669" data-name="Path 8669" d="M38.753,15.238a.113.113,0,0,1,.033.1l-.394,2.3a.115.115,0,0,0,.012.075l.008.007a.114.114,0,0,1-.019-.085l.046-.264A8.907,8.907,0,0,0,43.434,13.3L41.9,13.075a.118.118,0,0,1-.087-.064l-1.031-2.09a.114.114,0,0,0-.052-.052.117.117,0,0,0-.157.052l-1.031,2.09a.115.115,0,0,1-.089.064l-2.306.336a.116.116,0,0,0-.065.2Zm.761-1.889a.306.306,0,0,0,.245-.165l.919-1.78-.756,2.027a.306.306,0,0,1-.3.2l-2.108-.1Z" fill="#ffc801"/>
          <path id="Path_8670" data-name="Path 8670" d="M39.922,13.431l.756-2.027-.919,1.78a.306.306,0,0,1-.245.165l-2,.182,2.108.1A.306.306,0,0,0,39.922,13.431Z" fill="#ffd753"/>
          <path id="Path_8671" data-name="Path 8671" d="M42.964,17.638a.115.115,0,0,1-.017.077l.007-.006a.126.126,0,0,0,.011-.074l-.394-2.3v0Z" fill="#f8b911"/>
          <path id="Path_8672" data-name="Path 8672" d="M44.285,13.453l0-.007a.116.116,0,0,0-.073-.038l-.774-.112v0l.774.113A.114.114,0,0,1,44.285,13.453Z" fill="#f8b911"/>
          <path id="Path_8673" data-name="Path 8673" d="M38.488,17.771a.128.128,0,0,0,.027,0,.1.1,0,0,1-.03,0Z" fill="#f8b911"/>
          <path id="Path_8674" data-name="Path 8674" d="M38.439,17.371l-.046.264a.114.114,0,0,0,.019.085s.008.006.011.01a.112.112,0,0,0,.062.039.1.1,0,0,0,.03,0,.11.11,0,0,0,.048-.007l2.062-1.085a.117.117,0,0,1,.109,0L42.8,17.759a.112.112,0,0,0,.084.007c.009,0,.014-.01.022-.014a.11.11,0,0,0,.045-.037.115.115,0,0,0,.017-.077l-.394-2.3v0h0a.116.116,0,0,1,.034-.1l1.668-1.627a.11.11,0,0,0,.035-.074.112.112,0,0,0-.021-.074l0-.007a.114.114,0,0,0-.077-.042l-.774-.113A8.907,8.907,0,0,1,38.439,17.371Z" fill="#f8b911"/>
          <path id="Path_8675" data-name="Path 8675" d="M52.927,15.235a.116.116,0,0,0-.034.1l.394,2.3a.1.1,0,0,1,0,.024c0-.007.006-.013,0-.021l-.394-2.3a.116.116,0,0,1,.034-.1L54.6,13.611a.121.121,0,0,0,.038-.073l0-.006a.115.115,0,0,1-.037.076Z" fill="#ffc801"/>
          <path id="Path_8676" data-name="Path 8676" d="M51.056,16.674a.117.117,0,0,0-.109,0l-2.062,1.085a.124.124,0,0,1-.051.008.1.1,0,0,0,.052-.005l2.062-1.085a.117.117,0,0,1,.109,0l2.062,1.085a.112.112,0,0,0,.074.011c.005,0,.006-.005.011-.007a.117.117,0,0,1-.086-.007Z" fill="#ffc801"/>
          <path id="Path_8677" data-name="Path 8677" d="M48.728,17.713l.005.005a.123.123,0,0,1-.016-.074A.116.116,0,0,0,48.728,17.713Z" fill="#ffc801"/>
          <path id="Path_8678" data-name="Path 8678" d="M49.078,15.238a.115.115,0,0,1,.032.1l-.348,2.033A8.912,8.912,0,0,0,53.756,13.3l-1.531-.223a.118.118,0,0,1-.087-.064l-1.031-2.09a.115.115,0,0,0-.05-.05.117.117,0,0,0-.158.05l-1.031,2.09a.115.115,0,0,1-.089.064l-2.306.336a.116.116,0,0,0-.065.2Zm.76-1.889a.306.306,0,0,0,.245-.165L51,11.4l-.756,2.027a.306.306,0,0,1-.3.2l-2.108-.1Z" fill="#ffc801"/>
          <path id="Path_8679" data-name="Path 8679" d="M50.246,13.431,51,11.4l-.919,1.78a.306.306,0,0,1-.245.165l-2,.182,2.108.1A.306.306,0,0,0,50.246,13.431Z" fill="#ffd753"/>
          <path id="Path_8680" data-name="Path 8680" d="M53.276,17.709a.105.105,0,0,0,.007-.05.11.11,0,0,1-.012.054Z" fill="#f8b911"/>
          <path id="Path_8681" data-name="Path 8681" d="M48.81,17.771c.008,0,.016,0,.024,0a.123.123,0,0,1-.027,0Z" fill="#f8b911"/>
          <path id="Path_8682" data-name="Path 8682" d="M54.606,13.452l0-.006a.116.116,0,0,0-.073-.038l-.774-.112v0l.776.113A.111.111,0,0,1,54.606,13.452Z" fill="#f8b911"/>
          <path id="Path_8683" data-name="Path 8683" d="M48.762,17.371h0l-.046.264,0,.009v-.006Z" fill="#f8b911"/>
          <path id="Path_8684" data-name="Path 8684" d="M48.762,17.371l-.046.267v.006a.123.123,0,0,0,.016.074c0,.008.014.011.022.018a.108.108,0,0,0,.052.033.123.123,0,0,0,.027,0,.124.124,0,0,0,.051-.008l2.062-1.085a.117.117,0,0,1,.109,0l2.062,1.085a.117.117,0,0,0,.086.007c.006,0,.009-.006.015-.009a.108.108,0,0,0,.052-.044.11.11,0,0,0,.012-.054.1.1,0,0,0,0-.024l-.394-2.3a.116.116,0,0,1,.034-.1L54.6,13.608a.115.115,0,0,0,.037-.076.122.122,0,0,0-.012-.04.091.091,0,0,0-.014-.04.111.111,0,0,0-.074-.041l-.776-.113A8.912,8.912,0,0,1,48.762,17.371Z" fill="#f8b911"/>
          <path id="Path_8685" data-name="Path 8685" d="M59.4,15.234a.116.116,0,0,1,.034.1l-.35,2.036A8.908,8.908,0,0,0,64.082,13.3l-1.533-.223a.118.118,0,0,1-.087-.064l-1.031-2.09a.113.113,0,0,0-.045-.047.117.117,0,0,0-.16.043l-1.031,2.09a.115.115,0,0,1-.089.064l-2.306.336a.116.116,0,0,0-.065.2Zm.757-1.885a.306.306,0,0,0,.245-.165l.919-1.78-.756,2.027a.306.306,0,0,1-.3.2l-2.108-.1Z" fill="#ffc801"/>
          <path id="Path_8686" data-name="Path 8686" d="M59.056,17.71h0a.076.076,0,0,1-.006-.026A.109.109,0,0,0,59.056,17.71Z" fill="#ffc801"/>
          <path id="Path_8687" data-name="Path 8687" d="M59.213,17.758h0l2.06-1.084h0Z" fill="#ffc801"/>
          <path id="Path_8688" data-name="Path 8688" d="M63.253,15.235a.116.116,0,0,0-.034.1l.394,2.3a.132.132,0,0,1-.006.039c0-.013.012-.025.009-.04l-.394-2.3a.116.116,0,0,1,.034-.1l1.664-1.623a.121.121,0,0,0,.038-.073l0,0a.114.114,0,0,1-.035.074Z" fill="#ffc801"/>
          <path id="Path_8689" data-name="Path 8689" d="M63.521,17.769l.005,0a.117.117,0,0,1-.061-.005A.108.108,0,0,0,63.521,17.769Z" fill="#ffc801"/>
          <path id="Path_8690" data-name="Path 8690" d="M60.57,13.431l.756-2.027-.919,1.78a.306.306,0,0,1-.245.165l-2,.182,2.108.1A.306.306,0,0,0,60.57,13.431Z" fill="#ffd753"/>
          <path id="Path_8691" data-name="Path 8691" d="M59.135,17.771a.124.124,0,0,0,.076-.012h0a.115.115,0,0,1-.085.008Z" fill="#f8b911"/>
          <path id="Path_8692" data-name="Path 8692" d="M59.089,17.37h0l-.046.264a.11.11,0,0,0,.011.05.114.114,0,0,1-.008-.051Z" fill="#f8b911"/>
          <path id="Path_8693" data-name="Path 8693" d="M61.385,16.673a.117.117,0,0,0-.109,0h0a.121.121,0,0,1,.108,0l2.062,1.085c.007,0,.014,0,.021,0s-.012,0-.018,0Z" fill="#f8b911"/>
          <path id="Path_8694" data-name="Path 8694" d="M64.933,13.453l0-.007a.116.116,0,0,0-.073-.038l-.774-.112v0l.774.113A.114.114,0,0,1,64.933,13.453Z" fill="#f8b911"/>
          <path id="Path_8695" data-name="Path 8695" d="M63.6,17.709a.135.135,0,0,0,0-.035.143.143,0,0,1-.008.037Z" fill="#f8b911"/>
          <path id="Path_8696" data-name="Path 8696" d="M59.089,17.37l-.045.264a.114.114,0,0,0,.008.051.076.076,0,0,0,.006.026.106.106,0,0,0,.053.044c.006,0,.01.009.017.011a.115.115,0,0,0,.085-.008l2.06-1.084h0a.117.117,0,0,1,.109,0l2.062,1.085c.006,0,.012,0,.018,0a.117.117,0,0,0,.061.005.31.31,0,0,0,.073-.055.143.143,0,0,0,.008-.037.132.132,0,0,0,.006-.039l-.394-2.3a.116.116,0,0,1,.034-.1l1.668-1.627a.114.114,0,0,0,.035-.074.108.108,0,0,0-.021-.075l0-.006a.114.114,0,0,0-.077-.042l-.774-.113A8.908,8.908,0,0,1,59.089,17.37Z" fill="#f8b911"/>
          <path id="Path_8697" data-name="Path 8697" d="M59.29,22.7h5.059c-.2-.29-.624-.2-1.186-.312A20.564,20.564,0,0,0,59.29,22.7Z" fill="#fceada"/>
          <path id="Path_8698" data-name="Path 8698" d="M58.574,22.752a1.787,1.787,0,0,1-.3-.055,1.809,1.809,0,0,1-1.356-1.781c0-.917-.185-1.836-.919-1.836s-.734,2.387-.734,2.387v2.2a1.753,1.753,0,0,0,1.117,1.478,8.428,8.428,0,0,0,4.206.722,16.794,16.794,0,0,0,1.777-.259c1.064-.236,1.958-.686,2.077-1.759a1.791,1.791,0,0,0-.1-1.156H59.29C59.006,22.728,58.75,22.752,58.574,22.752Z" fill="#fceada"/>
          <path id="Path_8699" data-name="Path 8699" d="M24.71,24.863a10.782,10.782,0,0,0,.853-2.166c.433-1.528.542-3.031-.3-2.79a6.605,6.605,0,0,0-1.836,2.02s-2.844-.826-4.864.091a3.569,3.569,0,0,0-1.029.679,3.006,3.006,0,0,0-.714,2.533c0,.283.315.5.749.655a11.1,11.1,0,0,0,2.555.446s2.667.128,4.022-.858A1.922,1.922,0,0,0,24.71,24.863Z" fill="#fceada"/>
          <path id="Path_8700" data-name="Path 8700" d="M294.578,8.5a.248.248,0,0,1-.025.18l-.012.018-.256.395,2.123,5.253a.78.78,0,0,1-.426,1.009l-7.588,3.074A.78.78,0,0,1,287.386,18l-2.126-5.246-.468-.108a.25.25,0,0,1,.112-.487l.155.036a.77.77,0,0,1,.448-.894h.005L293.1,8.225a.769.769,0,0,1,.94.324l.082-.127a.244.244,0,0,1,.447.051l-.005-.012a1.28,1.28,0,0,0-1.658-.7l-7.589,3.075a1.28,1.28,0,0,0-.7,1.658l2.306,5.692a1.271,1.271,0,0,0,1.658.7l7.589-3.074a1.281,1.281,0,0,0,.7-1.659Z" fill="#8db9ca"/>
          <path id="Path_8701" data-name="Path 8701" d="M294.04,8.549l-3.218,4.967-5.763-1.323a.762.762,0,0,0,.021.114l.18.445,5.621,1.292a.259.259,0,0,0,.056.006.249.249,0,0,0,.2-.115l3.144-4.846-.177-.438A.7.7,0,0,0,294.04,8.549Z" fill="#8db9ca"/>
          <path id="Path_8702" data-name="Path 8702" d="M285.059,12.193l-.155-.036a.25.25,0,0,0-.112.487l.468.108-.18-.445A.762.762,0,0,1,285.059,12.193Z" fill="#8db9ca"/>
          <path id="Path_8703" data-name="Path 8703" d="M294.122,8.422l-.082.127a.7.7,0,0,1,.068.1l.177.438.256-.395.012-.018a.248.248,0,0,0,.025-.18.16.16,0,0,0-.009-.023.244.244,0,0,0-.447-.051Z" fill="#8db9ca"/>
        </g>
        <g id="Group_3106" data-name="Group 3106">
          <path id="Path_8704" data-name="Path 8704" d="M215.724,40.114V36.708a2.493,2.493,0,0,0,.983-.673l1.36-1.52a2.5,2.5,0,0,0-.361-3.666,2.514,2.514,0,0,0,.138-.822v-1.92a2.5,2.5,0,0,0-2.5-2.5H210.4a2.5,2.5,0,0,0-2.341-1.621h-2.041a2.5,2.5,0,0,0-2.34,1.621H198.74a2.5,2.5,0,0,0-.964.194,2.492,2.492,0,0,0-2.112-1.174h-10.8a2.484,2.484,0,0,0-1.39.423,2.5,2.5,0,0,0-2.707-.995l-1.981.54a2.5,2.5,0,0,0-1.576,1.3,2.475,2.475,0,0,0-1.523-.531h-5.009l-.015-.031a2.5,2.5,0,0,0-2.678-1.438l-2.22.361a2.5,2.5,0,0,0-1.7,1.108H159.3a2.489,2.489,0,0,0-2.161,1.265,2.5,2.5,0,0,0-2.315-1.565h-5.185a2.5,2.5,0,0,0-2.53-1.17l-2.261.361a2.5,2.5,0,0,0-1.476.809h-4.191a2.49,2.49,0,0,0-1.756.723,2.483,2.483,0,0,0-1.441-.463h-.5a2.5,2.5,0,0,0-2.2-1.32H131.3a2.5,2.5,0,0,0-1.94.923,2.5,2.5,0,0,0-1.941-.923h-1.98a2.5,2.5,0,0,0-2.205,1.32h-.476a2.494,2.494,0,0,0-.956.191c-.288-.243-.582-.484-.886-.722a2.5,2.5,0,0,0-3.265.163l-1.341,1.28A2.5,2.5,0,0,0,116.481,30c.145.115.27.224.407.337l-.736.7a2.5,2.5,0,0,0,.254,3.825,24.806,24.806,0,0,1,2.075,1.673,55.712,55.712,0,0,1-2.608,6.316,2.5,2.5,0,0,0,1.205,3.368l1.92.88a2.428,2.428,0,0,0,2.528-.276,2.479,2.479,0,0,0,1.635.623h1.86a2.49,2.49,0,0,0,1.838-.805,2.485,2.485,0,0,0,1.583.566h1.841a2.581,2.581,0,0,0,.485-.047A2.5,2.5,0,0,0,132,47.49h1.781a4.2,4.2,0,0,0,3.433-1.57l1.046.663a2.471,2.471,0,0,0,3.243-.52,5.163,5.163,0,0,0,3.436,1.148h4.881a5.77,5.77,0,0,0,3.12-.771c.08-.05.145-.114.219-.17a2.484,2.484,0,0,0,.851.379A2.5,2.5,0,0,0,156,46.258l.511-.359,1.058.951a2.5,2.5,0,0,0,1.671.64,2.458,2.458,0,0,0,.459-.042,2.5,2.5,0,0,0,.527-.163,2.5,2.5,0,0,0,1.354.4,2.437,2.437,0,0,0,.415-.034,31.377,31.377,0,0,0,6.5-1.774,28.934,28.934,0,0,0,6.417,1.774,2.486,2.486,0,0,0,2.229-.755,2.464,2.464,0,0,0,1.217.329h1.921a2.492,2.492,0,0,0,1.921-.9h1.071l.577.519a2.5,2.5,0,0,0,3.969-.874c.183-.427.343-.88.492-1.345h.943l.225.892A2.5,2.5,0,0,0,191.9,47.41h1.781a4.579,4.579,0,0,0,3.012-1.029,2.482,2.482,0,0,0,1.644.63h17.344a2.5,2.5,0,0,0,2.5-2.5v-1.9A2.5,2.5,0,0,0,215.724,40.114ZM176.1,35.886v.187c-.043-.062-.1-.116-.143-.173C176.005,35.9,176.054,35.894,176.1,35.886Zm-19.3-1.447a29.952,29.952,0,0,1-.356,4.456c-.056-.071-.12-.148-.178-.221V34.618A2.5,2.5,0,0,0,156.8,34.439Zm19.062,6.312v.024l-.018,0Zm22.3-.623V36.991c.066.02.13.048.2.063V40.11h-.021C198.28,40.11,198.223,40.124,198.164,40.128Z" fill="#fff"/>
          <g id="Group_3897" data-name="Group 3897">
            <path id="Path_8705" data-name="Path 8705" d="M133.784,26.507H131.8v1.32h-3.881v-1.32h-1.98v1.32h-2.681v1.86h2.681v2.721h3v.96h-5.281V44.95h1.86V41.97l.521.98a8.632,8.632,0,0,0,1.38-2.961,6.046,6.046,0,0,0,1.08,2.781l.44-.6v2.541h1.841V41.25l.68,1.3a8.009,8.009,0,0,0,1.24-2.7,5.7,5.7,0,0,0,1.041,2.58l.5-.68v.96a.478.478,0,0,1-.54.54l-1.681-.08.48,1.82h1.781a1.652,1.652,0,0,0,1.84-1.88V33.368h-5.341v-.96h3V29.687h2.7v-1.86h-2.7ZM128.942,41.03a8.9,8.9,0,0,1-.9-4.481h-2.08v1.38h.82a7.472,7.472,0,0,1-1.261,3.341v-6.1h3.421Zm5.3-5.861V40.79a7.805,7.805,0,0,1-.921-4.241h-2.06v1.38h.78a6.511,6.511,0,0,1-1.26,3.121V35.169Zm-2.441-4.4h-3.881V29.687H131.8Z" fill="#68737a"/>
            <path id="Path_8706" data-name="Path 8706" d="M121.8,35.829l1.36-1.36a24.457,24.457,0,0,0-3.4-2.942l-1.38,1.321A20.889,20.889,0,0,1,121.8,35.829Z" fill="#68737a"/>
            <path id="Path_8707" data-name="Path 8707" d="M118.62,43.95l1.921.881a75.245,75.245,0,0,0,2.76-7.2l-1.8-.72A57.752,57.752,0,0,1,118.62,43.95Z" fill="#68737a"/>
            <path id="Path_8708" data-name="Path 8708" d="M121.761,31.128l1.34-1.36a23.625,23.625,0,0,0-3.221-3l-1.34,1.28A20.077,20.077,0,0,1,121.761,31.128Z" fill="#68737a"/>
            <path id="Path_8709" data-name="Path 8709" d="M156.264,30.367h-4.581l.52-1.04h3.121v-1.76h-6.862c-.16-.44-.3-.84-.46-1.2l-2.26.361c.14.259.28.54.42.84h-6.481v1.76h3.06l.42,1.04H138.74v1.8h17.524Zm-6.762,0h-4.16l-.421-1.04h5.1Z" fill="#68737a"/>
            <path id="Path_8710" data-name="Path 8710" d="M138.3,43.33l1.8,1.141a13.633,13.633,0,0,0,1.92-4.1l-2.041-.421A9.709,9.709,0,0,1,138.3,43.33Z" fill="#68737a"/>
            <path id="Path_8711" data-name="Path 8711" d="M154.264,32.868H140.741v6.361h7.321l-1.74,1.081a18.182,18.182,0,0,1,1.8,2.16l1.741-1.22a15.213,15.213,0,0,0-1.741-2.021h6.142Zm-2.041,4.8h-9.442v-.88h9.442Zm0-2.36h-9.442v-.861h9.442Z" fill="#68737a"/>
            <path id="Path_8712" data-name="Path 8712" d="M150.643,42.63a.918.918,0,0,1-.72.24h-3.881c-.6,0-.9-.26-.9-.74V40.05h-2.121v2.54c0,1.4.8,2.121,2.421,2.121h4.881a3.412,3.412,0,0,0,1.78-.381q.66-.419.9-2.52l-1.98-.661C150.963,41.97,150.843,42.47,150.643,42.63Z" fill="#68737a"/>
            <path id="Path_8713" data-name="Path 8713" d="M152.623,40.67a29.1,29.1,0,0,1,2.441,3.541l1.74-1.221a29.3,29.3,0,0,0-2.5-3.381Z" fill="#68737a"/>
            <path id="Path_8714" data-name="Path 8714" d="M174.543,39.029v-1.54H162.621V39.27H164a13.685,13.685,0,0,0,2.941,2.7,27.065,27.065,0,0,1-5.761,1.36l.9,1.86a27.464,27.464,0,0,0,6.941-2.04,24.787,24.787,0,0,0,6.8,2.04l.9-1.839a26.807,26.807,0,0,1-5.682-1.3A15.1,15.1,0,0,0,174.543,39.029Zm-5.66,2.08a11.381,11.381,0,0,1-2.6-1.839H171.7A16.776,16.776,0,0,1,168.883,41.109Z" fill="#68737a"/>
            <path id="Path_8715" data-name="Path 8715" d="M161.881,33.428h2.841v3.081h8.5V33.428h2.961v-1.92h-2.961V30.247H171.2v1.261h-4.441v-1.24h-2.04v1.24h-2.841V29.827h14.3v-1.96H169.5c-.2-.56-.42-1.06-.619-1.5l-2.221.361a10.6,10.6,0,0,1,.66,1.14H159.8v6.5a22.55,22.55,0,0,1-1.64,9.2l1.58,1.42c1.361-2.68,2.061-6.22,2.141-10.622Zm4.881,0H171.2v1.36h-4.441Z" fill="#68737a"/>
            <path id="Path_8716" data-name="Path 8716" d="M178.86,44.73h1.921v-.9h3.52V37.649H178.86Zm1.921-5.361H182.4v2.7h-1.619Z" fill="#68737a"/>
            <path id="Path_8717" data-name="Path 8717" d="M185.361,37.509a17.657,17.657,0,0,1-.939,6.042l1.6,1.439a19.907,19.907,0,0,0,1.282-7.621V29.007h6.881v13.3c0,.52-.2.8-.6.8-.521,0-1.061-.04-1.661-.1l.48,1.9h1.781c1.32,0,1.98-.64,1.98-1.9V27.127h-10.8Z" fill="#68737a"/>
            <path id="Path_8718" data-name="Path 8718" d="M188.082,36.789V42.13H193.4V36.789h-1.719v-1.28h2.04V33.788h-2.04v-1.38h2.04V30.647h-2.04v-1.14h-1.841v1.14H187.8v1.761h2.04v1.38H187.8v1.721h2.04v1.28Zm3.641,1.641v2.04h-1.94V38.43Z" fill="#68737a"/>
            <path id="Path_8719" data-name="Path 8719" d="M184.6,28.848h-1.9a20.167,20.167,0,0,0-.78-2.381l-1.981.54c.281.6.54,1.221.781,1.841h-2.3v1.88H184.6Z" fill="#68737a"/>
            <rect id="Rectangle_4163" data-name="Rectangle 4163" width="4.94" height="1.761" transform="translate(179.101 34.668)" fill="#68737a"/>
            <rect id="Rectangle_4164" data-name="Rectangle 4164" width="4.94" height="1.761" transform="translate(179.101 31.888)" fill="#68737a"/>
            <path id="Path_8720" data-name="Path 8720" d="M199.381,34.608a17.415,17.415,0,0,0,7.14-4.421v3.721h-5.16V41.57h12.363V33.908h-5.162v-2.1c2.3.74,4.561,1.6,6.782,2.56l1.36-1.52a81.431,81.431,0,0,0-8.142-2.481v-.34h7.282v-1.92h-7.282V26.486h-2.041v1.621H199.24v1.92h5.5a20.237,20.237,0,0,1-6.5,2.741Zm12.3,5.121H203.4v-1.08h8.283Zm0-3.98v1.14H203.4v-1.14Z" fill="#68737a"/>
            <rect id="Rectangle_4165" data-name="Rectangle 4165" width="17.344" height="1.9" transform="translate(198.84 42.61)" fill="#68737a"/>
          </g>
        </g>
        <g id="Component_1_1235" data-name="Component 1 1235">
          <g id="Group_2063" data-name="Group 2063">
            <g id="Rectangle_7" data-name="Rectangle 7">
              <path id="Path_8721" data-name="Path 8721" d="M251,14.95h42a19,19,0,0,1,19,19h0a19,19,0,0,1-19,19H251a19,19,0,0,1-19-19h0A19,19,0,0,1,251,14.95Z" fill="#fff"/>
              <path id="Path_8722" data-name="Path 8722" d="M293,52.95H251a19,19,0,0,1,0-38h42a19,19,0,0,1,0,38Zm-42-36a17,17,0,1,0,0,34h42a17,17,0,0,0,0-34Z" fill="#009cbd"/>
            </g>
            <g id="填寫" style="isolation: isolate">
              <g id="Group_3898" data-name="Group 3898" style="isolation: isolate">
                <path id="Path_8723" data-name="Path 8723" d="M263.922,25.787v-1.32h2.021v1.32h4.7v1.78h-4.7v.88h3.7v9.122h1.7V39.41H267.6a22.193,22.193,0,0,1,3.541,2.32l-1.261,1.46a22.288,22.288,0,0,0-3.8-2.76l1.1-1.02h-4.5l1.18,1.04a16.935,16.935,0,0,1-4.28,2.74l-1.221-1.56a17.169,17.169,0,0,0,3.9-2.22h-3.741v-1.4a42.137,42.137,0,0,1-5.3,1.679L252.7,37.67a21.682,21.682,0,0,0,2.22-.481V31.168h-2v-1.96h2v-4.6h2.021v4.6h1.821v1.96h-1.821v5.421c.6-.22,1.18-.46,1.741-.7v1.68h1.56V28.447h3.68v-.88h-4.7v-1.78Zm3.762,5.061v-.8H262.2v.8Zm0,2.22v-.8H262.2v.8Zm0,2.221v-.8H262.2v.8Zm0,2.28v-.86H262.2v.86Z" fill="#009cbd"/>
                <path id="Path_8724" data-name="Path 8724" d="M284.062,41.17c.721.04,1.42.06,2.081.06a1.435,1.435,0,0,0,1.42-.66,8.53,8.53,0,0,0,.46-2.94h-10.7c-.341.26-.68.5-1,.72l1.421.379a20.725,20.725,0,0,1-1.24,3.942l-1.88-.681a15.5,15.5,0,0,0,1.3-3.381c-.46.281-.941.561-1.421.821l-1.26-1.54a15.1,15.1,0,0,0,4.281-2.8h-1.74v-6.3a18.043,18.043,0,0,0,4.961-.78l.88,1.54a22.576,22.576,0,0,1-3.981.82v.72h3.582v1.56h-3.582v.8h8.722v-.78h-3.3v-1.56h3.3v-.82h-3.6v-1.62h5.482v6.421H279.9c-.24.28-.48.56-.72.82h10.862c-.06,1.721-.16,3.1-.3,4.181a4.687,4.687,0,0,1-.84,2.221,2.732,2.732,0,0,1-1.861.66h-2.481Zm6.461-11.382h-1.96v-2.06h-13.1v2.08H273.5V25.887h7.222a11.351,11.351,0,0,0-.7-1.1l2.161-.36a14.107,14.107,0,0,1,.68,1.46h7.661ZM281.1,41.811l-1.86.439a30.087,30.087,0,0,0-.6-3.42l1.7-.381C280.622,39.49,280.861,40.61,281.1,41.811Zm3.121-.8-1.781.421a15.743,15.743,0,0,0-.84-2.822l1.68-.339A21.867,21.867,0,0,1,284.223,41.01Zm2.961-.86-1.58.68a17.587,17.587,0,0,0-.961-2.32l1.541-.641A17.166,17.166,0,0,1,287.184,40.15Z" fill="#009cbd"/>
              </g>
            </g>
          </g>
        </g>
        <g id="Group_3900" data-name="Group 3900">
          <g id="Group_3899" data-name="Group 3899">
            <path id="Icon_awesome-hand-pointer-3" data-name="Icon awesome-hand-pointer-3" d="M318.93,44.572V49.62a2.115,2.115,0,0,1-.056.482l-1.683,7.148a2.1,2.1,0,0,1-2.048,1.622H304.2a2.1,2.1,0,0,1-1.7-.866L295.77,48.75a2.1,2.1,0,0,1,3.4-2.475l1.664,2.289V34.05a2.1,2.1,0,0,1,4.207,0V44.572h.429v-2.1a2.1,2.1,0,1,1,4.207,0v2.1h.421V43.309a2.1,2.1,0,0,1,4.207,0h0v1.262h.421a2.1,2.1,0,0,1,4.207,0Z" fill="#f8f9fa"/>
            <path id="Path_8725" data-name="Path 8725" d="M315.145,59.872H304.2a3.11,3.11,0,0,1-2.509-1.278l-6.735-9.255a3.1,3.1,0,0,1,4.873-3.836V34.05a3.1,3.1,0,1,1,6.207,0v5.723a3.1,3.1,0,0,1,4.207,1.125,3.1,3.1,0,0,1,4.786,1.143,3.1,3.1,0,0,1,4.9,2.53l0,5.049a3.132,3.132,0,0,1-.082.711l-1.683,7.148A3.089,3.089,0,0,1,315.145,59.872ZM297.468,46.409a1.094,1.094,0,0,0-.647.212,1.106,1.106,0,0,0-.243,1.541l6.735,9.255a1.108,1.108,0,0,0,.892.455h10.939a1.1,1.1,0,0,0,1.074-.85l1.682-7.15a1.053,1.053,0,0,0,.03-.252V44.49a1.1,1.1,0,0,0-2.2.081v1H313.3V43.309a1.1,1.1,0,1,0-2.207,0v2.263h-2.421v-3.1a1.1,1.1,0,1,0-2.207,0v3.1h-2.429V34.05a1.1,1.1,0,1,0-2.207,0V51.641l-3.473-4.778a1.1,1.1,0,0,0-.719-.44A1.154,1.154,0,0,0,297.468,46.409Z" fill="#20375a"/>
          </g>
        </g>
      </g>
    </g>
    <g id="Group_3106-2" data-name="Group 3106-2">
      <path id="Path_8726" data-name="Path 8726" d="M215.724,40.11v-3.4a2.493,2.493,0,0,0,.983-.673l1.36-1.52a2.5,2.5,0,0,0-.361-3.666,2.514,2.514,0,0,0,.138-.822v-1.92a2.5,2.5,0,0,0-2.5-2.5H210.4a2.5,2.5,0,0,0-2.341-1.621h-2.041a2.5,2.5,0,0,0-2.34,1.621H198.74a2.5,2.5,0,0,0-.964.194,2.492,2.492,0,0,0-2.112-1.174h-10.8a2.493,2.493,0,0,0-1.383.417,2.5,2.5,0,0,0-2.714-.989l-1.981.54a2.5,2.5,0,0,0-1.576,1.3,2.475,2.475,0,0,0-1.523-.531h-5.009l-.015-.031a2.5,2.5,0,0,0-2.678-1.438l-2.22.361a2.5,2.5,0,0,0-1.7,1.108H159.3a2.489,2.489,0,0,0-2.161,1.265,2.5,2.5,0,0,0-2.315-1.565h-5.185a2.5,2.5,0,0,0-2.53-1.17l-2.261.361a2.5,2.5,0,0,0-1.476.809h-4.191a2.49,2.49,0,0,0-1.756.723,2.483,2.483,0,0,0-1.441-.463h-.5a2.5,2.5,0,0,0-2.2-1.32H131.3a2.5,2.5,0,0,0-1.94.923,2.5,2.5,0,0,0-1.941-.923h-1.98a2.5,2.5,0,0,0-2.205,1.32h-.476a2.506,2.506,0,0,0-.955.189q-.431-.365-.887-.72a2.5,2.5,0,0,0-3.265.163l-1.341,1.28A2.5,2.5,0,0,0,116.481,30q.211.17.411.333l-.74.707a2.5,2.5,0,0,0,.254,3.825,25.583,25.583,0,0,1,2.082,1.669,55.715,55.715,0,0,1-2.615,6.32,2.5,2.5,0,0,0,1.205,3.368l1.92.88a2.5,2.5,0,0,0,1.924.067,2.433,2.433,0,0,0,.6-.328,2.493,2.493,0,0,0,1.635.608h1.86a2.49,2.49,0,0,0,1.838-.805,2.485,2.485,0,0,0,1.583.566h1.841a2.581,2.581,0,0,0,.485-.047A2.5,2.5,0,0,0,132,47.49h1.781a4.2,4.2,0,0,0,3.433-1.57l1.046.663a2.5,2.5,0,0,0,3.246-.5,5.192,5.192,0,0,0,3.433,1.125h4.881a5.77,5.77,0,0,0,3.12-.771c.078-.048.153-.1.224-.155A2.507,2.507,0,0,0,156,46.258l.511-.359,1.058.951a2.5,2.5,0,0,0,2.13.6,2.54,2.54,0,0,0,.524-.159,2.49,2.49,0,0,0,1.357.4,2.437,2.437,0,0,0,.415-.034,31.377,31.377,0,0,0,6.5-1.774,28.949,28.949,0,0,0,6.417,1.774,2.486,2.486,0,0,0,2.229-.755,2.464,2.464,0,0,0,1.217.329h1.921a2.492,2.492,0,0,0,1.921-.9h1.071l.577.519a2.5,2.5,0,0,0,3.969-.874q.276-.643.5-1.345h.936l.225.892A2.5,2.5,0,0,0,191.9,47.41h1.781a4.579,4.579,0,0,0,3.012-1.029,2.482,2.482,0,0,0,1.644.63h17.344a2.5,2.5,0,0,0,2.5-2.5v-1.9A2.5,2.5,0,0,0,215.724,40.11Zm-39.864.665-.018,0,.018-.021Zm.241-4.691c-.04-.058-.075-.119-.12-.174.041-.005.079-.019.12-.025Zm-19.837-1.466a2.438,2.438,0,0,0,.534-.182,29.86,29.86,0,0,1-.356,4.459c-.061-.077-.115-.148-.178-.227Zm41.9,5.51V36.991c.066.02.13.048.2.063V40.11h-.021C198.28,40.11,198.223,40.124,198.164,40.128Z" fill="#fff"/>
      <g id="滿意度調查-4" style="isolation: isolate">
        <g id="Group_3901" data-name="Group 3901" style="isolation: isolate">
          <path id="Path_8727" data-name="Path 8727" d="M123.161,34.469l-1.36,1.36a20.889,20.889,0,0,0-3.421-2.981l1.38-1.321A24.457,24.457,0,0,1,123.161,34.469Zm-.06-4.7-1.34,1.36a20.077,20.077,0,0,0-3.221-3.081l1.34-1.28A23.625,23.625,0,0,1,123.1,29.768Zm.2,7.861a75.245,75.245,0,0,1-2.76,7.2l-1.921-.881a57.752,57.752,0,0,0,2.881-7.041Zm2.641-9.8v-1.32h1.98v1.32H131.8v-1.32h1.981v1.32h2.7v1.861h-2.7v2.72h-3v.96h5.341V43.11a1.652,1.652,0,0,1-1.84,1.88H132.5l-.48-1.82,1.681.08a.478.478,0,0,0,.54-.54v-.96l-.5.68a5.7,5.7,0,0,1-1.041-2.58,8.009,8.009,0,0,1-1.24,2.7l-.68-1.3v3.461h-1.841V42.17l-.44.6a6.055,6.055,0,0,1-1.08-2.782,8.632,8.632,0,0,1-1.38,2.961l-.521-.98v2.98h-1.86V33.368h5.281v-.96h-3v-2.72h-2.681V27.827Zm.84,10.1h-.82v-1.38h2.08a8.9,8.9,0,0,0,.9,4.481V35.169h-3.421v6.1A7.472,7.472,0,0,0,126.782,37.929Zm1.14-7.161H131.8v-1.08h-3.881Zm4.121,7.161h-.78v-1.38h2.06a7.805,7.805,0,0,0,.921,4.241V35.169h-3.461V41.05A6.511,6.511,0,0,0,132.043,37.929Z" fill="#68737a"/>
          <path id="Path_8728" data-name="Path 8728" d="M142.021,40.37a13.633,13.633,0,0,1-1.92,4.1l-1.8-1.141a9.7,9.7,0,0,0,1.68-3.381Zm-2.34-11.043v-1.76h6.481c-.14-.3-.28-.581-.42-.84l2.26-.361c.16.361.3.761.46,1.2h6.862v1.76H152.2l-.52,1.04h4.581v1.8H138.74v-1.8h4.421l-.42-1.04Zm14.583,3.541v6.361h-6.142a15.213,15.213,0,0,1,1.741,2.021l-1.741,1.22a18.182,18.182,0,0,0-1.8-2.16l1.74-1.081h-7.321V32.868Zm-2.041,2.441v-.861h-9.442v.861Zm0,1.48h-9.442v.88h9.442Zm-6.781,7.922c-1.621,0-2.421-.721-2.421-2.121V40.05h2.121v2.08c0,.48.3.74.9.74h3.881a.918.918,0,0,0,.72-.24c.2-.16.32-.66.38-1.481l1.98.661q-.24,2.1-.9,2.52a3.412,3.412,0,0,1-1.78.381Zm4.06-14.344.52-1.04h-5.1l.421,1.04Zm7.3,12.623-1.74,1.221a29.1,29.1,0,0,0-2.441-3.541l1.681-1.061A29.3,29.3,0,0,1,156.8,42.99Z" fill="#68737a"/>
          <path id="Path_8729" data-name="Path 8729" d="M161.881,34.368c-.08,4.4-.78,7.942-2.141,10.622l-1.58-1.42a22.55,22.55,0,0,0,1.64-9.2v-6.5h7.522a10.6,10.6,0,0,0-.66-1.14l2.221-.361c.2.441.42.941.619,1.5h6.682v1.96h-14.3v1.681h2.841v-1.24h2.04v1.24H171.2V30.247h2.02v1.261h2.961v1.92h-2.961v3.081h-8.5V33.428h-2.841Zm12.662,3.121v1.54a15.1,15.1,0,0,1-3.5,3.021,26.807,26.807,0,0,0,5.682,1.3l-.9,1.839a24.787,24.787,0,0,1-6.8-2.04,27.464,27.464,0,0,1-6.941,2.04l-.9-1.86a27.065,27.065,0,0,0,5.761-1.36A13.685,13.685,0,0,1,164,39.27h-1.38V37.489Zm-5.66,3.62a16.776,16.776,0,0,0,2.82-1.839h-5.421A11.381,11.381,0,0,0,168.883,41.109Zm-2.121-6.321H171.2v-1.36h-4.441Z" fill="#68737a"/>
          <path id="Path_8730" data-name="Path 8730" d="M180.721,28.848c-.241-.62-.5-1.242-.781-1.841l1.981-.54a20.167,20.167,0,0,1,.78,2.381h1.9v1.88H178.42v-1.88ZM184.3,43.83h-3.52v.9H178.86V37.649H184.3Zm-.26-11.942v1.76H179.1v-1.76Zm0,2.78v1.761H179.1V34.668Zm-1.641,7.4v-2.7h-1.619v2.7Zm13.764.94c0,1.261-.66,1.9-1.98,1.9H192.4l-.48-1.9c.6.06,1.14.1,1.661.1.4,0,.6-.28.6-.8v-13.3H187.3v8.362a19.907,19.907,0,0,1-1.282,7.621l-1.6-1.439a17.657,17.657,0,0,0,.939-6.042V27.127h10.8Zm-6.321-6.221v-1.28H187.8V33.788h2.04v-1.38H187.8V30.647h2.04v-1.14h1.841v1.14h2.04v1.761h-2.04v1.38h2.04v1.721h-2.04v1.28H193.4V42.13h-5.321V36.789Zm1.88,1.641h-1.94v2.04h1.94Z" fill="#68737a"/>
          <path id="Path_8731" data-name="Path 8731" d="M206.521,33.908v-3.72a17.425,17.425,0,0,1-7.14,4.42l-1.141-1.84a20.237,20.237,0,0,0,6.5-2.741h-5.5v-1.92h7.281V26.486h2.041v1.621h7.282v1.92h-7.282v.34a81.431,81.431,0,0,1,8.142,2.481l-1.36,1.52c-2.221-.96-4.481-1.82-6.782-2.56v2.1h5.162V41.57H201.361V33.908Zm9.663,8.7v1.9H198.84v-1.9Zm-4.5-5.721v-1.14H203.4v1.14Zm0,1.76H203.4v1.08h8.283Z" fill="#68737a"/>
        </g>
      </g>
    </g>
    <g id="Component_1_1236" data-name="Component 1 1236">
      <g id="Group_2063-2" data-name="Group 2063-2">
        <g id="Rectangle_7-2" data-name="Rectangle 7-2">
          <path id="Path_8732" data-name="Path 8732" d="M251,14.95h42a19,19,0,0,1,19,19h0a19,19,0,0,1-19,19H251a19,19,0,0,1-19-19h0A19,19,0,0,1,251,14.95Z" fill="#fff"/>
          <path id="Path_8733" data-name="Path 8733" d="M293,52.95H251a19,19,0,0,1,0-38h42a19,19,0,0,1,0,38Zm-42-36a17,17,0,1,0,0,34h42a17,17,0,0,0,0-34Z" fill="#009cbd"/>
        </g>
        <g id="填寫-2" style="isolation: isolate">
          <g id="Group_3902" data-name="Group 3902" style="isolation: isolate">
            <path id="Path_8734" data-name="Path 8734" d="M263.922,25.787v-1.32h2.021v1.32h4.7v1.78h-4.7v.88h3.7v9.122h1.7V39.41H267.6a22.193,22.193,0,0,1,3.541,2.32l-1.261,1.46a22.288,22.288,0,0,0-3.8-2.76l1.1-1.02h-4.5l1.18,1.04a16.935,16.935,0,0,1-4.28,2.74l-1.221-1.56a17.169,17.169,0,0,0,3.9-2.22h-3.741v-1.4a42.137,42.137,0,0,1-5.3,1.679L252.7,37.67a21.682,21.682,0,0,0,2.22-.481V31.168h-2v-1.96h2v-4.6h2.021v4.6h1.821v1.96h-1.821v5.421c.6-.22,1.18-.46,1.741-.7v1.68h1.56V28.447h3.68v-.88h-4.7v-1.78Zm3.762,5.061v-.8H262.2v.8Zm0,2.22v-.8H262.2v.8Zm0,2.221v-.8H262.2v.8Zm0,2.28v-.86H262.2v.86Z" fill="#009cbd"/>
            <path id="Path_8735" data-name="Path 8735" d="M284.062,41.17c.721.04,1.42.06,2.081.06a1.435,1.435,0,0,0,1.42-.66,8.53,8.53,0,0,0,.46-2.94h-10.7c-.341.26-.68.5-1,.72l1.421.379a20.725,20.725,0,0,1-1.24,3.942l-1.88-.681a15.5,15.5,0,0,0,1.3-3.381c-.46.281-.941.561-1.421.821l-1.26-1.54a15.1,15.1,0,0,0,4.281-2.8h-1.74v-6.3a18.043,18.043,0,0,0,4.961-.78l.88,1.54a22.576,22.576,0,0,1-3.981.82v.72h3.582v1.56h-3.582v.8h8.722v-.78h-3.3v-1.56h3.3v-.82h-3.6v-1.62h5.482v6.421H279.9c-.24.28-.48.56-.72.82h10.862c-.06,1.721-.16,3.1-.3,4.181a4.687,4.687,0,0,1-.84,2.221,2.732,2.732,0,0,1-1.861.66h-2.481Zm6.461-11.382h-1.96v-2.06h-13.1v2.08H273.5V25.887h7.222a11.351,11.351,0,0,0-.7-1.1l2.161-.36a14.107,14.107,0,0,1,.68,1.46h7.661ZM281.1,41.811l-1.86.439a30.087,30.087,0,0,0-.6-3.42l1.7-.381C280.622,39.49,280.861,40.61,281.1,41.811Zm3.121-.8-1.781.421a15.743,15.743,0,0,0-.84-2.822l1.68-.339A21.867,21.867,0,0,1,284.223,41.01Zm2.961-.86-1.58.68a17.587,17.587,0,0,0-.961-2.32l1.541-.641A17.166,17.166,0,0,1,287.184,40.15Z" fill="#009cbd"/>
          </g>
        </g>
      </g>
    </g>
    <g id="Group_3903" data-name="Group 3903">
      <path id="Path_8736" data-name="Path 8736" d="M316.829,43.468a1.1,1.1,0,0,0-1.1,1.1v1H313.3V43.309a1.1,1.1,0,1,0-2.207,0v2.263h-2.421v-3.1a1.1,1.1,0,1,0-2.207,0v3.1h-2.429V34.05a1.1,1.1,0,1,0-2.207,0V51.641l-3.473-4.778a1.1,1.1,0,0,0-.719-.44,1.154,1.154,0,0,0-.174-.014,1.094,1.094,0,0,0-.647.212,1.106,1.106,0,0,0-.243,1.541l6.735,9.255a1.108,1.108,0,0,0,.892.455h10.939a1.1,1.1,0,0,0,1.074-.85l1.682-7.15a1.053,1.053,0,0,0,.03-.252V44.49A1.106,1.106,0,0,0,316.829,43.468Z" fill="#f8f9fa"/>
      <path id="Path_8737" data-name="Path 8737" d="M316.829,41.468a3.092,3.092,0,0,0-1.8.573,3.1,3.1,0,0,0-4.786-1.143,3.1,3.1,0,0,0-4.207-1.125V34.05a3.1,3.1,0,1,0-6.207,0V45.5a3.1,3.1,0,0,0-4.873,3.836l6.735,9.255a3.11,3.11,0,0,0,2.509,1.278h10.94a3.089,3.089,0,0,0,3.02-2.393l1.683-7.148a3.132,3.132,0,0,0,.082-.711l0-5.049A3.107,3.107,0,0,0,316.829,41.468Zm-1.685,16.4H304.2a1.108,1.108,0,0,1-.892-.455l-6.735-9.255a1.106,1.106,0,0,1,.243-1.541,1.094,1.094,0,0,1,.647-.212,1.154,1.154,0,0,1,.174.014,1.1,1.1,0,0,1,.719.44l3.473,4.778V34.05a1.1,1.1,0,1,1,2.207,0V45.572h2.429v-3.1a1.1,1.1,0,1,1,2.207,0v3.1H311.1V43.309a1.1,1.1,0,1,1,2.207,0v2.262h2.421v-1a1.1,1.1,0,0,1,2.2-.081v5.13a1.053,1.053,0,0,1-.03.252l-1.682,7.15A1.1,1.1,0,0,1,315.144,57.872Z" fill="#20375a"/>
    </g>
  </g>
</svg>
PAMapp/assets/images/satisfaction/satisfactionBtn_s_web.svg
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,274 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="700" height="110" viewBox="0 0 700 110">
  <defs>
    <clipPath id="clip-path">
      <path id="Path_7862" data-name="Path 7862" d="M822.069-1297.8v-91.667c0-5.062,4.677-9.166,10.448-9.166h679.1c5.77,0,10.448,4.1,10.448,9.166v91.667c0,5.062-4.678,9.167-10.448,9.167h-679.1C826.746-1288.632,822.069-1292.737,822.069-1297.8Z" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-2">
      <rect id="Rectangle_3891" data-name="Rectangle 3891" width="3.112" height="8.732" transform="translate(1390.038 -1320.255) rotate(-76.982)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-4">
      <rect id="Rectangle_3893" data-name="Rectangle 3893" width="4.874" height="2.825" transform="matrix(0.174, -0.985, 0.985, 0.174, 1391.363, -1326.489)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-6">
      <rect id="Rectangle_3895" data-name="Rectangle 3895" width="8.476" height="3.02" transform="translate(927.453 -1310.899) rotate(-10.018)" fill="none"/>
    </clipPath>
    <clipPath id="clip-path-8">
      <rect id="Rectangle_3897" data-name="Rectangle 3897" width="4.036" height="4.731" transform="translate(928.187 -1320.171) rotate(-10.018)" fill="none"/>
    </clipPath>
  </defs>
  <g id="satisfaction_s_web" data-name="satisfaction â€“ s â€“ web" transform="translate(-822.069 1398.632)">
    <g id="Group_3243" data-name="Group 3243" clip-path="url(#clip-path)">
      <g id="Group_3104" data-name="Group 3104">
        <g id="Group_3103" data-name="Group 3103">
          <rect id="Rectangle_3818" data-name="Rectangle 3818" width="710.448" height="140.522" transform="translate(817.89 -1402.812)" fill="#8db9ca"/>
          <path id="Path_7126" data-name="Path 7126" d="M564.595-1350.771s-74.6,73.017,18.44,116.651c11.3,5.3,24.977,8.966,49.851-2.645s56.626,4.843,74.561,28.884,53.215,106.964,166.9,124.955,163.858-70.936,160.494-180.538S698.3-1435.787,564.595-1350.771Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_7126-2" data-name="Path 7126-2" d="M1679.807-1350.669s61.159-59.866-15.12-95.641c-9.265-4.346-20.478-7.353-40.872,2.167s-46.423-3.97-61.131-23.681-43.63-87.7-136.837-102.446-134.348,58.16-131.589,148.028S1570.183-1280.966,1679.807-1350.669Z" fill="#fff" opacity="0.5" style="isolation: isolate"/>
          <path id="Path_7834" data-name="Path 7834" d="M1375.234-1357.222a.717.717,0,0,1-.146-.016.668.668,0,0,1-.506-.5l-.662-2.66-2.573-.975a.672.672,0,0,1-.386-.867.678.678,0,0,1,.271-.329l2.339-1.448.131-2.745a.672.672,0,0,1,.7-.639.671.671,0,0,1,.4.158l2.089,1.776,2.654-.721a.661.661,0,0,1,.677.209.666.666,0,0,1,.121.7l-1.045,2.545,1.509,2.3a.672.672,0,0,1,.017.708.66.66,0,0,1-.627.326l-2.744-.209-1.722,2.144A.661.661,0,0,1,1375.234-1357.222Zm-2.8-4.864,2.046.775a.67.67,0,0,1,.418.47l.52,2.121,1.371-1.705a.667.667,0,0,1,.57-.249l2.182.161-1.2-1.83a.671.671,0,0,1-.058-.627l.836-2.025-2.111.577a.677.677,0,0,1-.61-.136l-1.672-1.412-.1,2.183a.677.677,0,0,1-.318.539Zm5.165,2.319,2.694-.683-6.415-.14,5.332-2.319-5.466-1.212,1.009-2.6" fill="#8db9ca"/>
          <path id="Path_7835" data-name="Path 7835" d="M853.492-1303.236a.8.8,0,0,1-.177-.019.809.809,0,0,1-.617-.6l-.8-3.257-3.135-1.189a.817.817,0,0,1-.479-1.051.813.813,0,0,1,.339-.412l2.853-1.766.161-3.343a.816.816,0,0,1,.855-.777.813.813,0,0,1,.488.192l2.562,2.167,3.237-.882a.817.817,0,0,1,1,.574.817.817,0,0,1-.031.521l-1.27,3.107,1.839,2.806a.813.813,0,0,1,.019.861.8.8,0,0,1-.765.4l-3.344-.249-2.089,2.616A.815.815,0,0,1,853.492-1303.236Zm-3.412-5.932,2.495.944a.818.818,0,0,1,.5.575l.627,2.587,1.672-2.079a.8.8,0,0,1,.7-.3l2.66.2-1.463-2.232a.809.809,0,0,1-.073-.756l1.009-2.47-2.574.7a.815.815,0,0,1-.742-.165l-2.037-1.722-.13,2.664a.819.819,0,0,1-.386.657Zm6.3,2.823,3.285-.836-7.826-.171,6.505-2.83.769-2.77-6.958-1.543.752-.328" fill="#8db9ca"/>
          <g id="Group_1862" data-name="Group 1862">
            <g id="Ellipse_525" data-name="Ellipse 525">
              <path id="Path_7838" data-name="Path 7838" d="M1012.775-1280.243q-.725.146-1.478.222a14.738,14.738,0,0,1-16.11-13.223,14.738,14.738,0,0,1,13.223-16.111,14.737,14.737,0,0,1,16.11,13.223A14.736,14.736,0,0,1,1012.775-1280.243Zm-5.63-27.657a13.491,13.491,0,0,0-10.491,15.935,13.491,13.491,0,0,0,15.935,10.491,13.492,13.492,0,0,0,10.491-15.935,13.491,13.491,0,0,0-14.57-10.7h0c-.464.05-.918.119-1.367.209Z" fill="#8db9ca"/>
            </g>
            <g id="Group_1781" data-name="Group 1781">
              <path id="Path_6910" data-name="Path 6910" d="M1004.951-1299.072a1.253,1.253,0,0,1-1.15,1.35,1.253,1.253,0,0,1-1.349-1.15,1.254,1.254,0,0,1,1.143-1.349h0a1.255,1.255,0,0,1,1.354,1.145v0h0" fill="#8db9ca"/>
              <path id="Path_6911" data-name="Path 6911" d="M1017.106-1300.064a1.254,1.254,0,0,1-1.15,1.35,1.254,1.254,0,0,1-1.349-1.15,1.253,1.253,0,0,1,1.143-1.349h0a1.254,1.254,0,0,1,1.354,1.145v0h0" fill="#8db9ca"/>
              <path id="Path_7839" data-name="Path 7839" d="M1011.174-1285.439a3.272,3.272,0,0,1-.418.06,3.97,3.97,0,0,1-4.135-2.956.319.319,0,0,1,.237-.382.319.319,0,0,1,.382.238.366.366,0,0,1,.008.081,3.382,3.382,0,0,0,3.45,2.386,4.212,4.212,0,0,0,3.282-2.848.321.321,0,0,1,.385-.242.321.321,0,0,1,.242.384h0A4.859,4.859,0,0,1,1011.174-1285.439Z" fill="#8db9ca"/>
            </g>
          </g>
          <g id="Group_1862-2" data-name="Group 1862-2">
            <g id="Ellipse_525-2" data-name="Ellipse 525-2">
              <path id="Path_7840" data-name="Path 7840" d="M1483.558-1340.961q-.574-.193-1.14-.447a12.092,12.092,0,0,1-6.043-16,12.093,12.093,0,0,1,16-6.043,12.093,12.093,0,0,1,6.042,16A12.091,12.091,0,0,1,1483.558-1340.961Zm7.328-21.94a11.042,11.042,0,0,0-14.022,6.875,11.043,11.043,0,0,0,6.875,14.023,11.044,11.044,0,0,0,14.023-6.875,11.043,11.043,0,0,0-5.831-13.6h0a8.252,8.252,0,0,0-1.045-.435Z" fill="#8db9ca"/>
            </g>
            <g id="Group_1781-2" data-name="Group 1781-2">
              <path id="Path_6910-2" data-name="Path 6910-2" d="M1485.711-1357.546a1.03,1.03,0,0,1-1.373.49,1.03,1.03,0,0,1-.489-1.372,1.029,1.029,0,0,1,1.371-.49h0a1.028,1.028,0,0,1,.492,1.368v0h0" fill="#8db9ca"/>
              <path id="Path_6911-2" data-name="Path 6911-2" d="M1494.754-1353.272a1.032,1.032,0,0,1-1.373.494,1.033,1.033,0,0,1-.495-1.373,1.033,1.033,0,0,1,1.374-.495h0a1.029,1.029,0,0,1,.491,1.37h0" fill="#8db9ca"/>
              <path id="Path_7841" data-name="Path 7841" d="M1484.551-1345.313a3.2,3.2,0,0,1-.328-.132,3.252,3.252,0,0,1-1.726-3.8.256.256,0,0,1,.338-.132l.007,0a.261.261,0,0,1,.131.345,2.774,2.774,0,0,0,1.463,3.107,3.452,3.452,0,0,0,3.5-.679.261.261,0,0,1,.37-.015.262.262,0,0,1,.014.37A3.987,3.987,0,0,1,1484.551-1345.313Z" fill="#8db9ca"/>
            </g>
          </g>
          <path id="Path_7842" data-name="Path 7842" d="M866.61-1336.736a1.309,1.309,0,0,1-.952-.418l-4.18-4.306c-.046-.048-.089-.094-.129-.144a3.739,3.739,0,0,1,.382-5.268,3.6,3.6,0,0,1,4.869.3,3.59,3.59,0,0,1,4.852-.31h.012l.149.136a3.733,3.733,0,0,1,.112,5.277h0l-4.227,4.361A1.3,1.3,0,0,1,866.61-1336.736Zm-2.6-9.662a2.3,2.3,0,0,0-1.45.514,2.461,2.461,0,0,0-.236,3.458.926.926,0,0,0,.079.088l4.179,4.313h.061l4.179-4.311a2.462,2.462,0,0,0-.077-3.475l-.084-.077a2.321,2.321,0,0,0-3.151.234l-.894.924-.882-.911a2.335,2.335,0,0,0-1.724-.757Z" fill="#8db9ca"/>
          <g id="Icon_feather-mail" data-name="Icon feather-mail">
            <path id="Path_7860" data-name="Path 7860" d="M1424.083-1363.047a2.671,2.671,0,0,1-2.474-1.66l-4.818-11.893a2.674,2.674,0,0,1,1.463-3.465h0l15.857-6.425a2.674,2.674,0,0,1,3.465,1.463l4.818,11.893a2.677,2.677,0,0,1-1.462,3.467l-15.858,6.423A2.671,2.671,0,0,1,1424.083-1363.047Zm-5.432-16.05a1.628,1.628,0,0,0-.893,2.106l4.819,11.892a1.629,1.629,0,0,0,2.106.892l15.856-6.423a1.628,1.628,0,0,0,.89-2.109l-4.806-11.891a1.627,1.627,0,0,0-2.106-.891l-15.856,6.424Z" fill="#8db9ca"/>
            <path id="Path_7861" data-name="Path 7861" d="M1430-1373.349a.578.578,0,0,1-.117-.012l-12.723-2.926a.522.522,0,0,1-.371-.639.522.522,0,0,1,.6-.378l12.366,2.839,6.9-10.644a.523.523,0,0,1,.716-.184.523.523,0,0,1,.184.715l-.024.037-7.1,10.952A.52.52,0,0,1,1430-1373.349Z" fill="#8db9ca"/>
          </g>
          <rect id="Rectangle_3828" data-name="Rectangle 3828" width="391.791" height="125.373" transform="translate(1019.009 -1397.588)" fill="none"/>
          <g id="Group_3200" data-name="Group 3200">
            <path id="Path_7909" data-name="Path 7909" d="M1321.587-1332.958a1.551,1.551,0,0,1-.728-.175l-12.087-6.353-12.088,6.353a1.559,1.559,0,0,1-2.109-.642,1.557,1.557,0,0,1-.161-1l2.308-13.46-9.776-9.532a1.561,1.561,0,0,1-.027-2.207,1.557,1.557,0,0,1,.9-.456l13.514-1.964,6.044-12.245a1.561,1.561,0,0,1,2.093-.7,1.565,1.565,0,0,1,.7.7h0l6.051,12.23,13.514,1.964a1.56,1.56,0,0,1,1.328,1.762,1.561,1.561,0,0,1-.455.9l-9.777,9.532,2.308,13.46a1.571,1.571,0,0,1-1.3,1.805,1.627,1.627,0,0,1-.241.021Zm-33.15-25.806,9.581,9.338a1.556,1.556,0,0,1,.448,1.383l-2.261,13.185,11.844-6.225a1.549,1.549,0,0,1,1.452,0l11.84,6.225-2.269-13.185a1.57,1.57,0,0,1,.448-1.381l9.581-9.339-13.238-1.92a1.558,1.558,0,0,1-1.175-.855l-5.92-12-5.916,12a1.562,1.562,0,0,1-1.175.854Z" fill="#f5a817"/>
          </g>
          <g id="Group_1544" data-name="Group 1544">
            <path id="Path_7916" data-name="Path 7916" d="M1357.664-1333.978a16.633,16.633,0,0,1-3.475-8.129,26.832,26.832,0,0,1,1.236-9.013s1.232-2.281,1.843-.053-.183,5.789,1.072,7.8,1.389,3.251,2.539,1.579,1.656-3.14,2.775-2.368-.182,5.789-1.072,7.811-.03,2.445.241,4.931,2.25,19.287.935,22.168c0,0,10.3,3.535,13.741,5.232s-3.118,11.831-5.263,11.842-19.041-11.483-19.229-14.571S1356.491-1329.854,1357.664-1333.978Z" fill="#fceada"/>
            <path id="Path_6890" data-name="Path 6890" d="M1380.931-1290.512c4.192,1.677,19.28,1.257,24.31-5.449l4.19-8.383s-4.19.839-4.19-3.354a5.975,5.975,0,0,1,1.282-3.575c7.414-1.936,13.577-8.552,15.166-17.28,2.106-11.615-4.665-22.577-15.143-24.485s-20.683,5.962-22.8,17.576c-1.641,9.01,2.073,17.631,8.711,21.928.131,2.3-.228,6.323-3.994,8.351-5.447,2.934-3.771,2.514-5.867,2.934S1376.74-1292.188,1380.931-1290.512Z" fill="#fceada"/>
            <path id="Path_6891" data-name="Path 6891" d="M1406.7-1351.081c5.449.42,4.191,7.963,4.191,9.64s.42,3.354,3.354,4.6,3.773,2.514,5.029,5.449.838,7.966-1.258,9.641-3.772,3.772-2.1,7.963a5.736,5.736,0,0,0,7.125,3.354c1.258-.419,1.677-.837,2.935.42s3.772,3.772,7.963-1.258-.837-10.058-.837-10.058c1.258,0,6.287,0,5.867-6.289s-5.449-7.544-8.383-9.221a8.814,8.814,0,0,1-3.772-5.03c-2.934-7.963-4.606-10.478-4.606-10.478-6.286-8.8-16.764-5.868-16.764-5.868-.838-1.675-3.771-1.675-3.771-1.675-9.64-1.677-13.414,6.71-16.347,8.8a7.17,7.17,0,0,0-2.513,7.544c.419,2.1-4.193,5.87-6.71,6.288s-2.933,5.448.419,10.06,7.125,3.353,7.125,3.353c1.677.42,0-2.514,0-2.514a14.159,14.159,0,0,1,3.354-12.994,17.683,17.683,0,0,0,5.865-7.96c2.1-5.449,10.479-3.773,10.479-3.773A4.271,4.271,0,0,0,1406.7-1351.081Z" fill="#221e1f"/>
            <path id="Path_6892" data-name="Path 6892" d="M1406.289-1302.037a21.08,21.08,0,0,1-4.6,6.711c-3.353,3.352-12.9,1.209-15.013.3-1.927-.827.492-9.661.91-10.921s-3.026-2.124-4.55-2.124a21.541,21.541,0,0,0-4.549.606c-4.95,1.073-1.7,4.153-2.122,6.369a11.9,11.9,0,0,1-3.027,6.368c-1.257,1.258-2.53,1.785-2.728,2.729-1.214,5.762,5.761,7.278,5.761,7.278-.835,1.983-.218,10.044.3,12.13.909,3.639,4.82,17.8,3.033,24.261a90.794,90.794,0,0,0-2.426,34.573c2.012,15.423,4.548,31.236,4.548,31.236l42.764,1.516,2.124-15.77a66.637,66.637,0,0,0-2.731-40.637c-3.772-10.061-13.343-16.376-13.646-18.2a16.794,16.794,0,0,1-.3-6.974c.489-2.94.909-6.974,1.819-10.613,1.675,3.354,16.68-4.852,16.68-4.852,6.71-9.221-5.905-19.7-7.582-23.047s-8.575-4.086-9.833-3.666a15.571,15.571,0,0,1-3.7.412C1406.844-1304.149,1406.289-1302.037,1406.289-1302.037Z" fill="#eb1b2e"/>
            <path id="Path_7917" data-name="Path 7917" d="M1415.983-1272.679s8.439-3.1,10.263-4.309c0,0,1.82,7.278.607,10.921s-3.948,13.948-6.672,20.016a33.908,33.908,0,0,0-2.275,6.824c-.3,2.426-2.729,11.221-5.155,13.041s-3.947,3.336-6.671,3.336-4.853,0-3.64-1.516a22.626,22.626,0,0,0,2.729-5.458s-1.819,1.213-2.729.606.607-2.729,1.516-3.947a34.349,34.349,0,0,0,3.027-3.947,4.162,4.162,0,0,1,3.335-2.425c1.82-.3,1.82-5.762,2.123-8.189.31-2.481.91-13.647,2.122-17.9A25.109,25.109,0,0,0,1415.983-1272.679Z" fill="#fceada"/>
            <ellipse id="Ellipse_493" data-name="Ellipse 493" cx="1.676" cy="1.258" rx="1.676" ry="1.258" transform="translate(1393.411 -1298.603) rotate(-69.571)" fill="#eb1b2e"/>
            <path id="Path_6894" data-name="Path 6894" d="M1395.132-1301.2c-3.539-.843-5.111-4.984-5.177-5.16a.211.211,0,0,1,.124-.271.212.212,0,0,1,.271.125h0c.01.04,1.556,4.108,4.876,4.9,4.317,1.028,8.421-2.281,10.491-4.342a.209.209,0,0,1,.3,0,.209.209,0,0,1,0,.3c-1.842,1.842-5.292,4.661-9.127,4.661A7.574,7.574,0,0,1,1395.132-1301.2Z" fill="#68737a"/>
            <g id="Group_1783" data-name="Group 1783">
              <path id="Path_7918" data-name="Path 7918" d="M1405.341-1337a.329.329,0,0,1-.329-.329.329.329,0,0,1,.182-.295,6.214,6.214,0,0,1,4.714-.246.33.33,0,0,1,.194.423.328.328,0,0,1-.423.194,5.558,5.558,0,0,0-4.194.219A.328.328,0,0,1,1405.341-1337Z" fill="#221e1f"/>
              <path id="Path_7919" data-name="Path 7919" d="M1392.017-1339.131a.328.328,0,0,1-.264-.131,5.555,5.555,0,0,0-3.672-2.039.33.33,0,0,1-.3-.361.329.329,0,0,1,.362-.3,6.2,6.2,0,0,1,4.128,2.289.33.33,0,0,1-.066.461.333.333,0,0,1-.2.065Z" fill="#221e1f"/>
              <g id="Group_1764-3" data-name="Group 1764-3" opacity="0.8">
                <g id="Group_1763-3" data-name="Group 1763-3">
                  <g id="Group_3220" data-name="Group 3220">
                    <g id="Group_3230" data-name="Group 3230">
                      <g id="Group_3229" data-name="Group 3229" clip-path="url(#clip-path-2)">
                        <g id="Group_3219" data-name="Group 3219">
                          <g id="Group_1762-3" data-name="Group 1762-3">
                            <g id="Group_1761-3" data-name="Group 1761-3">
                              <g id="Group_3218" data-name="Group 3218">
                                <g id="Group_3228" data-name="Group 3228">
                                  <g id="Group_3227" data-name="Group 3227" clip-path="url(#clip-path-2)">
                                    <g id="Group_3217" data-name="Group 3217">
                                      <g id="Group_1760-3" data-name="Group 1760-3">
                                        <path id="Path_6902-3" data-name="Path 6902-3" d="M1390.743-1323.286s.976,3.421,3.553,4.015,4.952-2.049,4.952-2.049" fill="#e3727c"/>
                                      </g>
                                    </g>
                                  </g>
                                </g>
                              </g>
                            </g>
                          </g>
                        </g>
                      </g>
                    </g>
                  </g>
                </g>
              </g>
              <g id="Group_1768-3" data-name="Group 1768-3">
                <g id="Group_3224" data-name="Group 3224">
                  <g id="Group_3234" data-name="Group 3234">
                    <g id="Group_3233" data-name="Group 3233" clip-path="url(#clip-path-4)">
                      <g id="Group_3223" data-name="Group 3223">
                        <g id="Group_1767-3" data-name="Group 1767-3">
                          <g id="Group_1766-3" data-name="Group 1766-3">
                            <g id="Group_3222" data-name="Group 3222">
                              <g id="Group_3232" data-name="Group 3232">
                                <g id="Group_3231" data-name="Group 3231" clip-path="url(#clip-path-4)">
                                  <g id="Group_3221" data-name="Group 3221">
                                    <g id="Group_1765-3" data-name="Group 1765-3">
                                      <path id="Path_6903-3" data-name="Path 6903-3" d="M1394-1326.456s-1.821.041-2.15-.7,1.029-3.684,1.029-3.684" fill="none" stroke="#ce9c6b" stroke-linecap="round" stroke-miterlimit="10.003" stroke-width="0.523"/>
                                    </g>
                                  </g>
                                </g>
                              </g>
                            </g>
                          </g>
                        </g>
                      </g>
                    </g>
                  </g>
                </g>
              </g>
              <path id="Path_6904-3" data-name="Path 6904-3" d="M1403.608-1333.365h0a1.56,1.56,0,0,1,1.809-1.263h0a1.562,1.562,0,0,1,1.266,1.809,1.561,1.561,0,0,1-1.809,1.267,1.562,1.562,0,0,1-1.267-1.81v0" fill="#221e1f"/>
              <path id="Path_6905-3" data-name="Path 6905-3" d="M1388.693-1336h0a1.559,1.559,0,0,1,1.807-1.263h0a1.562,1.562,0,0,1,1.264,1.81,1.561,1.561,0,0,1-1.81,1.263,1.559,1.559,0,0,1-1.263-1.809h0" fill="#221e1f"/>
            </g>
          </g>
          <g id="Group_1543" data-name="Group 1543">
            <path id="Path_6879" data-name="Path 6879" d="M962.437-1231a368.788,368.788,0,0,1,13.428,48.013l-32.55,1.222-2.849-12.614-3.255,13.427s-34.18,0-34.18-.406c0-11.808,4.882-49.234,4.882-49.234Z" fill="#a5a4a4"/>
            <path id="Path_6880" data-name="Path 6880" d="M918.087-1305.056s-11.24-.023-13.889,8.809c0,0-5.074,8.883-5.888,12.953s-.31,2.886,2.945,7.361,6.255,48.179,6.255,48.179,16.274,4.07,25.633,4.07,27.261-3.257,30.11-5.7c0,0,2.77-38.9.711-50.968,1.173-3.533,3.154-7.685,3.826-10.306,0,0-12.783-16.943-23.1-16.09a9.563,9.563,0,0,1-1.778,9.813,12.021,12.021,0,0,1-15.054,2.849C922.974-1296.517,918.087-1305.056,918.087-1305.056Z" fill="#1b365d"/>
            <path id="Path_6881" data-name="Path 6881" d="M947.311-1322.787c-.453,1.785-1.948.713-1.794,1.649a17.555,17.555,0,0,1-1.86,10.559c.325,1.123.694,2.484,1.025,3.855a58.724,58.724,0,0,1-5.443,9.539l-4.145.538c-10.268-1.192-14.619-4.5-16.006-5.8-.138-1.936-.394-3.924-.622-5.521-2.223-2.481-4.247-8.3-4.485-8.657a5.231,5.231,0,0,1-3.319-2.657c-1.728-4.235-2.75-8.264-1.961-9.535a27.578,27.578,0,0,0,3.289,6.577c1.558,1.916-.28-14.043-.185-18.01.154-5.754-1.165,3.536,15.252.838,16.389-2.7,10.915-10.015,13.757-6.14,1.289,1.78,3.868,20.29,4.675,18.269a34.168,34.168,0,0,0,1.657-7.245c.116.05.23.1.387.184,2.531,1.331.639,8.223-.234,11.565" fill="#fceada"/>
            <path id="Path_6882" data-name="Path 6882" d="M943.315-1239.141l-6.505,8.952-6.51-9.361s-.652-40.134,1.914-46.562c-.385-.6-2.773-3.789-4.285-5.79l1.193-1.2c3.582-3.582,4.525-4.388,4.525-4.388-.107-.037-.211-.069-.316-.107l4.178.137-.074.074a15.577,15.577,0,0,1,2.992,2.073c.67.526,1.44,1.192,2.385,2.07a30.785,30.785,0,0,0-3.756,5.761c4.036,4.071,4.666,43.863,4.666,43.863" fill="#d9232e"/>
            <path id="Path_6883" data-name="Path 6883" d="M933.651-1297.489s-.947.807-4.526,4.39l-1.193,1.193c-.949.949-2.1,2.07-3.406,3.371-1.475-.49-8.566-8.918-6.459-18.014a3,3,0,0,0,.421.632c1.158,1.508,4.917,5.482,14.853,8.319.1.039.209.071.316.108" fill="#fff"/>
            <path id="Path_6884" data-name="Path 6884" d="M947.379-1288.885c-1.793-1.792-3.337-3.23-4.565-4.358-.947-.872-1.722-1.544-2.385-2.07a15.509,15.509,0,0,0-2.985-2.073l.068-.069a58.515,58.515,0,0,0,6.917-8.533c.317-.526.5-.808.5-.808,2.1,9.095,3.932,17.383,2.457,17.909" fill="#fff"/>
            <path id="Path_6885" data-name="Path 6885" d="M947.724-1343.206a46.863,46.863,0,0,1-.568,8.67,34.161,34.161,0,0,1-1.657,7.246c-.808,2.011-2.727-12.4-4.023-14.181-2.849-3.875,1.973-.646-14.414,2.05-16.425,2.7-14.72,1.552-14.878,7.307-.1,3.966,1.369,11.783-.194,9.867a27.679,27.679,0,0,1-3.289-6.575c-.707-1.7-1.341-3.411-1.994-4.733-4.485-9.232,3.436-11.992,3.028-12.4-5.185-5.186,10.373-15.671,14.247-16.278,10.537-1.7,12.106,4.985,12.106,4.985s10.559-1.988,11.631,14.03" fill="#221e1f"/>
            <path id="Path_6889" data-name="Path 6889" d="M964.066-1227.749l1.222,2.85a99.166,99.166,0,0,1-28.889,5.7,114.929,114.929,0,0,1-29.7-3.662l.355-3.246s16.734,4.468,28.939,3.655A161.2,161.2,0,0,0,964.066-1227.749Z" fill="#72502b"/>
            <g id="Group_1770" data-name="Group 1770">
              <path id="Path_6900" data-name="Path 6900" d="M917.516-1329.679a5.711,5.711,0,0,1,4.322.227" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10.003" stroke-width="0.523"/>
              <path id="Path_6901" data-name="Path 6901" d="M934.775-1331.524a5.7,5.7,0,0,1,3.785-2.1" fill="none" stroke="#221e1f" stroke-linecap="round" stroke-miterlimit="10.003" stroke-width="0.523"/>
              <g id="Group_1764" data-name="Group 1764" opacity="0.8">
                <g id="Group_1763" data-name="Group 1763">
                  <g id="Group_3086" data-name="Group 3086">
                    <g id="Group_3238" data-name="Group 3238">
                      <g id="Group_3237" data-name="Group 3237" clip-path="url(#clip-path-6)">
                        <g id="Group_3085" data-name="Group 3085">
                          <g id="Group_1762" data-name="Group 1762">
                            <g id="Group_1761" data-name="Group 1761">
                              <g id="Group_3084" data-name="Group 3084">
                                <g id="Group_3236" data-name="Group 3236">
                                  <g id="Group_3235" data-name="Group 3235" clip-path="url(#clip-path-6)">
                                    <g id="Group_3083" data-name="Group 3083">
                                      <g id="Group_1760" data-name="Group 1760">
                                        <path id="Path_6902" data-name="Path 6902" d="M927.451-1310.9s2.179,2.682,4.693,2.238,3.647-3.713,3.647-3.713" fill="#e3727c"/>
                                      </g>
                                    </g>
                                  </g>
                                </g>
                              </g>
                            </g>
                          </g>
                        </g>
                      </g>
                    </g>
                  </g>
                </g>
              </g>
              <g id="Group_1769" data-name="Group 1769" opacity="0.8">
                <g id="Group_1768" data-name="Group 1768">
                  <g id="Group_3090" data-name="Group 3090">
                    <g id="Group_3242" data-name="Group 3242">
                      <g id="Group_3241" data-name="Group 3241" clip-path="url(#clip-path-8)">
                        <g id="Group_3089" data-name="Group 3089">
                          <g id="Group_1767" data-name="Group 1767">
                            <g id="Group_1766" data-name="Group 1766">
                              <g id="Group_3088" data-name="Group 3088">
                                <g id="Group_3240" data-name="Group 3240">
                                  <g id="Group_3239" data-name="Group 3239" clip-path="url(#clip-path-8)">
                                    <g id="Group_3087" data-name="Group 3087">
                                      <g id="Group_1765" data-name="Group 1765">
                                        <path id="Path_6903" data-name="Path 6903" d="M929.275-1320.038s-.631,3.206.119,3.732,3.2-.259,3.2-.259" fill="none" stroke="#ce9c6b" stroke-linecap="round" stroke-miterlimit="10.003" stroke-width="0.523"/>
                                      </g>
                                    </g>
                                  </g>
                                </g>
                              </g>
                            </g>
                          </g>
                        </g>
                      </g>
                    </g>
                  </g>
                </g>
              </g>
              <path id="Path_6904" data-name="Path 6904" d="M923.524-1325.608a1.509,1.509,0,0,1-1.229,1.744,1.509,1.509,0,0,1-1.744-1.23,1.508,1.508,0,0,1,1.215-1.74h0a1.508,1.508,0,0,1,1.753,1.215l0,.011h0" fill="#221e1f"/>
              <path id="Path_6905" data-name="Path 6905" d="M938-1328.165a1.508,1.508,0,0,1-1.23,1.743,1.508,1.508,0,0,1-1.743-1.229,1.508,1.508,0,0,1,1.215-1.741h0a1.508,1.508,0,0,1,1.752,1.216l0,.011h0" fill="#221e1f"/>
            </g>
            <path id="Path_7836" data-name="Path 7836" d="M902.575-1355.572s-.146,27.822-1.324,33.12c0,0,6.771,19.429,11.776,21.789s-11.776,23.257-11.776,23.257-5.3.59-9.721-11.188-7.068-18.545-6.771-23.552,4.564-38.716,6.919-41.953S902.575-1358.517,902.575-1355.572Z" fill="#1b365d"/>
            <path id="Path_7837" data-name="Path 7837" d="M956.452-1354.394s.293,22.669,1.473,27.967c0,0-5.125,18.989-10.132,21.344s11.776,23.259,11.776,23.259,5.3.588,9.721-11.188,7.065-18.547,6.77-23.552-7.828-36.065-10.184-39.3S956.452-1357.338,956.452-1354.394Z" fill="#1b365d"/>
          </g>
          <g id="Group_3102" data-name="Group 3102">
            <rect id="Rectangle_3827" data-name="Rectangle 3827" width="101.55" height="28.102" rx="2.946" transform="translate(878.45 -1387.316)" fill="#fff"/>
            <g id="Group_3101" data-name="Group 3101">
              <g id="Group_3092" data-name="Group 3092">
                <path id="Path_7843" data-name="Path 7843" d="M895.849-1378.951l1.728,3.5a.193.193,0,0,0,.146.107l3.867.563a.2.2,0,0,1,.167.218.193.193,0,0,1-.06.118l-2.8,2.727a.2.2,0,0,0-.057.167l.661,3.855a.2.2,0,0,1-.16.227.194.194,0,0,1-.123-.019l-3.456-1.819a.2.2,0,0,0-.183,0l-3.456,1.819a.2.2,0,0,1-.265-.081.194.194,0,0,1-.02-.127l.66-3.855a.186.186,0,0,0-.055-.167l-2.8-2.727a.2.2,0,0,1-.01-.275.2.2,0,0,1,.119-.061l3.865-.563a.19.19,0,0,0,.149-.107l1.728-3.5a.2.2,0,0,1,.263-.087A.2.2,0,0,1,895.849-1378.951Z" fill="#ffc801"/>
                <g id="Group_3091" data-name="Group 3091">
                  <path id="Path_7844" data-name="Path 7844" d="M895.673-1378.141l-1.54,2.983a.511.511,0,0,1-.411.276l-3.352.306,3.533.167a.513.513,0,0,0,.5-.335Z" fill="#ffd753"/>
                </g>
                <path id="Path_7845" data-name="Path 7845" d="M891.921-1368.14l-.077.442a.2.2,0,0,0,.158.228.207.207,0,0,0,.127-.02l3.455-1.819a.2.2,0,0,1,.183,0l3.456,1.819a.2.2,0,0,0,.264-.084.191.191,0,0,0,.019-.124l-.66-3.855a.2.2,0,0,1,.057-.168l2.8-2.726a.194.194,0,0,0,.015-.273.2.2,0,0,0-.123-.063l-1.3-.187A14.928,14.928,0,0,1,891.921-1368.14Z" fill="#f8b911"/>
              </g>
              <g id="Group_3094" data-name="Group 3094">
                <path id="Path_7846" data-name="Path 7846" d="M913.153-1378.951l1.728,3.5a.191.191,0,0,0,.146.107l3.866.563a.194.194,0,0,1,.171.213.2.2,0,0,1-.064.123l-2.795,2.727a.192.192,0,0,0-.057.167l.66,3.855a.2.2,0,0,1-.159.227.2.2,0,0,1-.124-.019l-3.456-1.819a.2.2,0,0,0-.183,0l-3.456,1.819a.2.2,0,0,1-.265-.081.207.207,0,0,1-.02-.127l.661-3.855a.19.19,0,0,0-.056-.167l-2.8-2.727a.2.2,0,0,1-.009-.275.194.194,0,0,1,.118-.061l3.865-.563a.193.193,0,0,0,.15-.107l1.728-3.5a.2.2,0,0,1,.263-.087A.2.2,0,0,1,913.153-1378.951Z" fill="#ffc801"/>
                <g id="Group_3093" data-name="Group 3093">
                  <path id="Path_7847" data-name="Path 7847" d="M912.977-1378.141l-1.541,2.983a.511.511,0,0,1-.41.276l-3.352.306,3.533.167a.515.515,0,0,0,.5-.335Z" fill="#ffd753"/>
                </g>
                <path id="Path_7848" data-name="Path 7848" d="M909.224-1368.14l-.077.442a.2.2,0,0,0,.158.228.206.206,0,0,0,.127-.02l3.456-1.819a.2.2,0,0,1,.183,0l3.456,1.819a.2.2,0,0,0,.264-.084.2.2,0,0,0,.019-.124l-.66-3.855a.2.2,0,0,1,.056-.168l2.8-2.726a.194.194,0,0,0,.015-.273.2.2,0,0,0-.122-.063l-1.3-.187A14.933,14.933,0,0,1,909.224-1368.14Z" fill="#f8b911"/>
              </g>
              <g id="Group_3096" data-name="Group 3096">
                <path id="Path_7849" data-name="Path 7849" d="M930.456-1378.951l1.728,3.5a.193.193,0,0,0,.146.107l3.867.563a.193.193,0,0,1,.17.213.2.2,0,0,1-.063.123l-2.8,2.727a.2.2,0,0,0-.057.167l.661,3.855a.2.2,0,0,1-.16.227.2.2,0,0,1-.124-.019l-3.456-1.819a.2.2,0,0,0-.182,0l-3.456,1.819a.2.2,0,0,1-.265-.081.194.194,0,0,1-.02-.127l.66-3.855a.186.186,0,0,0-.055-.167l-2.8-2.727a.2.2,0,0,1-.01-.275.194.194,0,0,1,.119-.061l3.865-.563a.192.192,0,0,0,.149-.107l1.728-3.5a.2.2,0,0,1,.263-.087A.2.2,0,0,1,930.456-1378.951Z" fill="#ffc801"/>
                <g id="Group_3095" data-name="Group 3095">
                  <path id="Path_7850" data-name="Path 7850" d="M930.28-1378.141l-1.54,2.983a.511.511,0,0,1-.411.276l-3.352.306,3.533.167a.513.513,0,0,0,.5-.335Z" fill="#ffd753"/>
                </g>
                <path id="Path_7851" data-name="Path 7851" d="M926.528-1368.14l-.078.442a.2.2,0,0,0,.159.228.2.2,0,0,0,.126-.02l3.456-1.819a.2.2,0,0,1,.183,0l3.456,1.819a.2.2,0,0,0,.264-.084.191.191,0,0,0,.019-.124l-.66-3.855a.2.2,0,0,1,.057-.168l2.8-2.726a.194.194,0,0,0,.015-.273.2.2,0,0,0-.123-.063l-1.3-.187A14.928,14.928,0,0,1,926.528-1368.14Z" fill="#f8b911"/>
              </g>
              <g id="Group_3098" data-name="Group 3098">
                <path id="Path_7852" data-name="Path 7852" d="M947.76-1378.951l1.728,3.5a.19.19,0,0,0,.146.107l3.866.563a.192.192,0,0,1,.17.213.191.191,0,0,1-.063.123l-2.795,2.727a.192.192,0,0,0-.057.167l.66,3.855a.2.2,0,0,1-.159.227.2.2,0,0,1-.124-.019l-3.456-1.819a.2.2,0,0,0-.183,0l-3.456,1.819a.2.2,0,0,1-.265-.081.207.207,0,0,1-.02-.127l.661-3.855a.191.191,0,0,0-.054-.167l-2.8-2.727a.2.2,0,0,1-.01-.275.2.2,0,0,1,.119-.061l3.865-.563a.19.19,0,0,0,.149-.107l1.728-3.5a.2.2,0,0,1,.264-.084A.192.192,0,0,1,947.76-1378.951Z" fill="#ffc801"/>
                <g id="Group_3097" data-name="Group 3097">
                  <path id="Path_7853" data-name="Path 7853" d="M947.584-1378.141l-1.541,2.983a.511.511,0,0,1-.41.276l-3.352.306,3.533.167a.515.515,0,0,0,.5-.335Z" fill="#ffd753"/>
                </g>
                <path id="Path_7854" data-name="Path 7854" d="M943.828-1368.14l-.077.442a.2.2,0,0,0,.158.228.2.2,0,0,0,.126-.02l3.456-1.819a.2.2,0,0,1,.183,0l3.456,1.819a.2.2,0,0,0,.264-.084.191.191,0,0,0,.019-.124l-.66-3.855a.2.2,0,0,1,.057-.168l2.8-2.726a.194.194,0,0,0,.015-.273.2.2,0,0,0-.123-.063l-1.3-.187A14.927,14.927,0,0,1,943.828-1368.14Z" fill="#f8b911"/>
              </g>
              <g id="Group_3100" data-name="Group 3100">
                <path id="Path_7855" data-name="Path 7855" d="M965.063-1378.951l1.728,3.5a.193.193,0,0,0,.146.107l3.867.563a.193.193,0,0,1,.17.213.2.2,0,0,1-.063.123l-2.789,2.72a.193.193,0,0,0-.057.167l.66,3.855a.2.2,0,0,1-.159.227.191.191,0,0,1-.124-.019l-3.456-1.818a.2.2,0,0,0-.183,0l-3.456,1.818a.2.2,0,0,1-.265-.081.206.206,0,0,1-.02-.127l.662-3.855a.193.193,0,0,0-.057-.167l-2.8-2.727a.2.2,0,0,1-.009-.275.193.193,0,0,1,.118-.06l3.865-.563a.193.193,0,0,0,.149-.108l1.728-3.5a.2.2,0,0,1,.268-.072A.193.193,0,0,1,965.063-1378.951Z" fill="#ffc801"/>
                <g id="Group_3099" data-name="Group 3099">
                  <path id="Path_7856" data-name="Path 7856" d="M964.887-1378.141l-1.54,2.983a.512.512,0,0,1-.411.276l-3.352.306,3.533.167a.513.513,0,0,0,.5-.335Z" fill="#ffd753"/>
                </g>
                <path id="Path_7857" data-name="Path 7857" d="M961.134-1368.14l-.077.442a.2.2,0,0,0,.159.228.2.2,0,0,0,.126-.02l3.456-1.819a.2.2,0,0,1,.183,0l3.456,1.819a.2.2,0,0,0,.264-.084.19.19,0,0,0,.019-.124l-.66-3.855a.2.2,0,0,1,.057-.168l2.8-2.726a.194.194,0,0,0,.015-.273.2.2,0,0,0-.123-.063l-1.3-.187A14.926,14.926,0,0,1,961.134-1368.14Z" fill="#f8b911"/>
              </g>
            </g>
            <path id="Path_7858" data-name="Path 7858" d="M954.737-1361.275s0-4,1.23-4,1.541,1.54,1.541,3.077a3.034,3.034,0,0,0,2.767,3.077c1.54,0,6.154-.923,7.691-.615s2.46-.308,2.154,2.461-3.688,3.077-6.46,3.382-8.921-.614-8.921-3.687Z" fill="#fceada"/>
            <path id="Path_7859" data-name="Path 7859" d="M895.828-1353.123s6.151.305,7.689-2.461,3.077-8.921.924-8.306a11.076,11.076,0,0,0-3.078,3.386s-4.766-1.385-8.152.152-2.921,3.845-2.921,5.384S895.828-1353.123,895.828-1353.123Z" fill="#fceada"/>
          </g>
        </g>
      </g>
    </g>
    <g id="Group_3906" data-name="Group 3906" transform="translate(3171.069 8787.829)">
      <g id="Group_3106-2" data-name="Group 3106-2" transform="translate(-2204.933 -10168.411)">
        <path id="Path_8726" data-name="Path 8726" d="M215.724,40.11v-3.4a2.493,2.493,0,0,0,.983-.673l1.36-1.52a2.5,2.5,0,0,0-.361-3.666,2.514,2.514,0,0,0,.138-.822v-1.92a2.5,2.5,0,0,0-2.5-2.5H210.4a2.5,2.5,0,0,0-2.341-1.621h-2.041a2.5,2.5,0,0,0-2.34,1.621H198.74a2.5,2.5,0,0,0-.964.194,2.492,2.492,0,0,0-2.112-1.174h-10.8a2.493,2.493,0,0,0-1.383.417,2.5,2.5,0,0,0-2.714-.989l-1.981.54a2.5,2.5,0,0,0-1.576,1.3,2.475,2.475,0,0,0-1.523-.531h-5.009l-.015-.031a2.5,2.5,0,0,0-2.678-1.438l-2.22.361a2.5,2.5,0,0,0-1.7,1.108H159.3a2.489,2.489,0,0,0-2.161,1.265,2.5,2.5,0,0,0-2.315-1.565h-5.185a2.5,2.5,0,0,0-2.53-1.17l-2.261.361a2.5,2.5,0,0,0-1.476.809h-4.191a2.49,2.49,0,0,0-1.756.723,2.483,2.483,0,0,0-1.441-.463h-.5a2.5,2.5,0,0,0-2.2-1.32H131.3a2.5,2.5,0,0,0-1.94.923,2.5,2.5,0,0,0-1.941-.923h-1.98a2.5,2.5,0,0,0-2.205,1.32h-.476a2.506,2.506,0,0,0-.955.189q-.431-.365-.887-.72a2.5,2.5,0,0,0-3.265.163l-1.341,1.28A2.5,2.5,0,0,0,116.481,30q.211.17.411.333l-.74.707a2.5,2.5,0,0,0,.254,3.825,25.583,25.583,0,0,1,2.082,1.669,55.715,55.715,0,0,1-2.615,6.32,2.5,2.5,0,0,0,1.205,3.368l1.92.88a2.5,2.5,0,0,0,1.924.067,2.433,2.433,0,0,0,.6-.328,2.493,2.493,0,0,0,1.635.608h1.86a2.49,2.49,0,0,0,1.838-.805,2.485,2.485,0,0,0,1.583.566h1.841a2.581,2.581,0,0,0,.485-.047A2.5,2.5,0,0,0,132,47.49h1.781a4.2,4.2,0,0,0,3.433-1.57l1.046.663a2.5,2.5,0,0,0,3.246-.5,5.192,5.192,0,0,0,3.433,1.125h4.881a5.77,5.77,0,0,0,3.12-.771c.078-.048.153-.1.224-.155A2.507,2.507,0,0,0,156,46.258l.511-.359,1.058.951a2.5,2.5,0,0,0,2.13.6,2.54,2.54,0,0,0,.524-.159,2.49,2.49,0,0,0,1.357.4,2.437,2.437,0,0,0,.415-.034,31.377,31.377,0,0,0,6.5-1.774,28.949,28.949,0,0,0,6.417,1.774,2.486,2.486,0,0,0,2.229-.755,2.464,2.464,0,0,0,1.217.329h1.921a2.492,2.492,0,0,0,1.921-.9h1.071l.577.519a2.5,2.5,0,0,0,3.969-.874q.276-.643.5-1.345h.936l.225.892A2.5,2.5,0,0,0,191.9,47.41h1.781a4.579,4.579,0,0,0,3.012-1.029,2.482,2.482,0,0,0,1.644.63h17.344a2.5,2.5,0,0,0,2.5-2.5v-1.9A2.5,2.5,0,0,0,215.724,40.11Zm-39.864.665-.018,0,.018-.021Zm.241-4.691c-.04-.058-.075-.119-.12-.174.041-.005.079-.019.12-.025Zm-19.837-1.466a2.438,2.438,0,0,0,.534-.182,29.86,29.86,0,0,1-.356,4.459c-.061-.077-.115-.148-.178-.227Zm41.9,5.51V36.991c.066.02.13.048.2.063V40.11h-.021C198.28,40.11,198.223,40.124,198.164,40.128Z" fill="#fff"/>
        <g id="滿意度調查-4" style="isolation: isolate">
          <g id="Group_3901" data-name="Group 3901" style="isolation: isolate">
            <path id="Path_8727" data-name="Path 8727" d="M123.161,34.469l-1.36,1.36a20.889,20.889,0,0,0-3.421-2.981l1.38-1.321A24.457,24.457,0,0,1,123.161,34.469Zm-.06-4.7-1.34,1.36a20.077,20.077,0,0,0-3.221-3.081l1.34-1.28A23.625,23.625,0,0,1,123.1,29.768Zm.2,7.861a75.245,75.245,0,0,1-2.76,7.2l-1.921-.881a57.752,57.752,0,0,0,2.881-7.041Zm2.641-9.8v-1.32h1.98v1.32H131.8v-1.32h1.981v1.32h2.7v1.861h-2.7v2.72h-3v.96h5.341V43.11a1.652,1.652,0,0,1-1.84,1.88H132.5l-.48-1.82,1.681.08a.478.478,0,0,0,.54-.54v-.96l-.5.68a5.7,5.7,0,0,1-1.041-2.58,8.009,8.009,0,0,1-1.24,2.7l-.68-1.3v3.461h-1.841V42.17l-.44.6a6.055,6.055,0,0,1-1.08-2.782,8.632,8.632,0,0,1-1.38,2.961l-.521-.98v2.98h-1.86V33.368h5.281v-.96h-3v-2.72h-2.681V27.827Zm.84,10.1h-.82v-1.38h2.08a8.9,8.9,0,0,0,.9,4.481V35.169h-3.421v6.1A7.472,7.472,0,0,0,126.782,37.929Zm1.14-7.161H131.8v-1.08h-3.881Zm4.121,7.161h-.78v-1.38h2.06a7.805,7.805,0,0,0,.921,4.241V35.169h-3.461V41.05A6.511,6.511,0,0,0,132.043,37.929Z" fill="#68737a"/>
            <path id="Path_8728" data-name="Path 8728" d="M142.021,40.37a13.633,13.633,0,0,1-1.92,4.1l-1.8-1.141a9.7,9.7,0,0,0,1.68-3.381Zm-2.34-11.043v-1.76h6.481c-.14-.3-.28-.581-.42-.84l2.26-.361c.16.361.3.761.46,1.2h6.862v1.76H152.2l-.52,1.04h4.581v1.8H138.74v-1.8h4.421l-.42-1.04Zm14.583,3.541v6.361h-6.142a15.213,15.213,0,0,1,1.741,2.021l-1.741,1.22a18.182,18.182,0,0,0-1.8-2.16l1.74-1.081h-7.321V32.868Zm-2.041,2.441v-.861h-9.442v.861Zm0,1.48h-9.442v.88h9.442Zm-6.781,7.922c-1.621,0-2.421-.721-2.421-2.121V40.05h2.121v2.08c0,.48.3.74.9.74h3.881a.918.918,0,0,0,.72-.24c.2-.16.32-.66.38-1.481l1.98.661q-.24,2.1-.9,2.52a3.412,3.412,0,0,1-1.78.381Zm4.06-14.344.52-1.04h-5.1l.421,1.04Zm7.3,12.623-1.74,1.221a29.1,29.1,0,0,0-2.441-3.541l1.681-1.061A29.3,29.3,0,0,1,156.8,42.99Z" fill="#68737a"/>
            <path id="Path_8729" data-name="Path 8729" d="M161.881,34.368c-.08,4.4-.78,7.942-2.141,10.622l-1.58-1.42a22.55,22.55,0,0,0,1.64-9.2v-6.5h7.522a10.6,10.6,0,0,0-.66-1.14l2.221-.361c.2.441.42.941.619,1.5h6.682v1.96h-14.3v1.681h2.841v-1.24h2.04v1.24H171.2V30.247h2.02v1.261h2.961v1.92h-2.961v3.081h-8.5V33.428h-2.841Zm12.662,3.121v1.54a15.1,15.1,0,0,1-3.5,3.021,26.807,26.807,0,0,0,5.682,1.3l-.9,1.839a24.787,24.787,0,0,1-6.8-2.04,27.464,27.464,0,0,1-6.941,2.04l-.9-1.86a27.065,27.065,0,0,0,5.761-1.36A13.685,13.685,0,0,1,164,39.27h-1.38V37.489Zm-5.66,3.62a16.776,16.776,0,0,0,2.82-1.839h-5.421A11.381,11.381,0,0,0,168.883,41.109Zm-2.121-6.321H171.2v-1.36h-4.441Z" fill="#68737a"/>
            <path id="Path_8730" data-name="Path 8730" d="M180.721,28.848c-.241-.62-.5-1.242-.781-1.841l1.981-.54a20.167,20.167,0,0,1,.78,2.381h1.9v1.88H178.42v-1.88ZM184.3,43.83h-3.52v.9H178.86V37.649H184.3Zm-.26-11.942v1.76H179.1v-1.76Zm0,2.78v1.761H179.1V34.668Zm-1.641,7.4v-2.7h-1.619v2.7Zm13.764.94c0,1.261-.66,1.9-1.98,1.9H192.4l-.48-1.9c.6.06,1.14.1,1.661.1.4,0,.6-.28.6-.8v-13.3H187.3v8.362a19.907,19.907,0,0,1-1.282,7.621l-1.6-1.439a17.657,17.657,0,0,0,.939-6.042V27.127h10.8Zm-6.321-6.221v-1.28H187.8V33.788h2.04v-1.38H187.8V30.647h2.04v-1.14h1.841v1.14h2.04v1.761h-2.04v1.38h2.04v1.721h-2.04v1.28H193.4V42.13h-5.321V36.789Zm1.88,1.641h-1.94v2.04h1.94Z" fill="#68737a"/>
            <path id="Path_8731" data-name="Path 8731" d="M206.521,33.908v-3.72a17.425,17.425,0,0,1-7.14,4.42l-1.141-1.84a20.237,20.237,0,0,0,6.5-2.741h-5.5v-1.92h7.281V26.486h2.041v1.621h7.282v1.92h-7.282v.34a81.431,81.431,0,0,1,8.142,2.481l-1.36,1.52c-2.221-.96-4.481-1.82-6.782-2.56v2.1h5.162V41.57H201.361V33.908Zm9.663,8.7v1.9H198.84v-1.9Zm-4.5-5.721v-1.14H203.4v1.14Zm0,1.76H203.4v1.08h8.283Z" fill="#68737a"/>
          </g>
        </g>
      </g>
      <g id="Component_1_1236" data-name="Component 1 1236" transform="translate(-2204.933 -10168.411)">
        <g id="Group_2063-2" data-name="Group 2063-2">
          <g id="Rectangle_7-2" data-name="Rectangle 7-2">
            <path id="Path_8732" data-name="Path 8732" d="M251,14.95h42a19,19,0,0,1,19,19h0a19,19,0,0,1-19,19H251a19,19,0,0,1-19-19h0A19,19,0,0,1,251,14.95Z" fill="#fff"/>
            <path id="Path_8733" data-name="Path 8733" d="M293,52.95H251a19,19,0,0,1,0-38h42a19,19,0,0,1,0,38Zm-42-36a17,17,0,1,0,0,34h42a17,17,0,0,0,0-34Z" fill="#009cbd"/>
          </g>
          <g id="填寫-2" style="isolation: isolate">
            <g id="Group_3902" data-name="Group 3902" style="isolation: isolate">
              <path id="Path_8734" data-name="Path 8734" d="M263.922,25.787v-1.32h2.021v1.32h4.7v1.78h-4.7v.88h3.7v9.122h1.7V39.41H267.6a22.193,22.193,0,0,1,3.541,2.32l-1.261,1.46a22.288,22.288,0,0,0-3.8-2.76l1.1-1.02h-4.5l1.18,1.04a16.935,16.935,0,0,1-4.28,2.74l-1.221-1.56a17.169,17.169,0,0,0,3.9-2.22h-3.741v-1.4a42.137,42.137,0,0,1-5.3,1.679L252.7,37.67a21.682,21.682,0,0,0,2.22-.481V31.168h-2v-1.96h2v-4.6h2.021v4.6h1.821v1.96h-1.821v5.421c.6-.22,1.18-.46,1.741-.7v1.68h1.56V28.447h3.68v-.88h-4.7v-1.78Zm3.762,5.061v-.8H262.2v.8Zm0,2.22v-.8H262.2v.8Zm0,2.221v-.8H262.2v.8Zm0,2.28v-.86H262.2v.86Z" fill="#009cbd"/>
              <path id="Path_8735" data-name="Path 8735" d="M284.062,41.17c.721.04,1.42.06,2.081.06a1.435,1.435,0,0,0,1.42-.66,8.53,8.53,0,0,0,.46-2.94h-10.7c-.341.26-.68.5-1,.72l1.421.379a20.725,20.725,0,0,1-1.24,3.942l-1.88-.681a15.5,15.5,0,0,0,1.3-3.381c-.46.281-.941.561-1.421.821l-1.26-1.54a15.1,15.1,0,0,0,4.281-2.8h-1.74v-6.3a18.043,18.043,0,0,0,4.961-.78l.88,1.54a22.576,22.576,0,0,1-3.981.82v.72h3.582v1.56h-3.582v.8h8.722v-.78h-3.3v-1.56h3.3v-.82h-3.6v-1.62h5.482v6.421H279.9c-.24.28-.48.56-.72.82h10.862c-.06,1.721-.16,3.1-.3,4.181a4.687,4.687,0,0,1-.84,2.221,2.732,2.732,0,0,1-1.861.66h-2.481Zm6.461-11.382h-1.96v-2.06h-13.1v2.08H273.5V25.887h7.222a11.351,11.351,0,0,0-.7-1.1l2.161-.36a14.107,14.107,0,0,1,.68,1.46h7.661ZM281.1,41.811l-1.86.439a30.087,30.087,0,0,0-.6-3.42l1.7-.381C280.622,39.49,280.861,40.61,281.1,41.811Zm3.121-.8-1.781.421a15.743,15.743,0,0,0-.84-2.822l1.68-.339A21.867,21.867,0,0,1,284.223,41.01Zm2.961-.86-1.58.68a17.587,17.587,0,0,0-.961-2.32l1.541-.641A17.166,17.166,0,0,1,287.184,40.15Z" fill="#009cbd"/>
            </g>
          </g>
        </g>
      </g>
      <g id="Group_3905" data-name="Group 3905" transform="translate(-2204.933 -10168.411)">
        <path id="Path_8736" data-name="Path 8736" d="M316.829,43.468a1.1,1.1,0,0,0-1.1,1.1v1H313.3V43.309a1.1,1.1,0,1,0-2.207,0v2.263h-2.421v-3.1a1.1,1.1,0,1,0-2.207,0v3.1h-2.429V34.05a1.1,1.1,0,1,0-2.207,0V51.641l-3.473-4.778a1.1,1.1,0,0,0-.719-.44,1.154,1.154,0,0,0-.174-.014,1.094,1.094,0,0,0-.647.212,1.106,1.106,0,0,0-.243,1.541l6.735,9.255a1.108,1.108,0,0,0,.892.455h10.939a1.1,1.1,0,0,0,1.074-.85l1.682-7.15a1.053,1.053,0,0,0,.03-.252V44.49A1.106,1.106,0,0,0,316.829,43.468Z" fill="#f8f9fa"/>
        <path id="Path_8737" data-name="Path 8737" d="M316.829,41.468a3.092,3.092,0,0,0-1.8.573,3.1,3.1,0,0,0-4.786-1.143,3.1,3.1,0,0,0-4.207-1.125V34.05a3.1,3.1,0,1,0-6.207,0V45.5a3.1,3.1,0,0,0-4.873,3.836l6.735,9.255a3.11,3.11,0,0,0,2.509,1.278h10.94a3.089,3.089,0,0,0,3.02-2.393l1.683-7.148a3.132,3.132,0,0,0,.082-.711l0-5.049A3.107,3.107,0,0,0,316.829,41.468Zm-1.685,16.4H304.2a1.108,1.108,0,0,1-.892-.455l-6.735-9.255a1.106,1.106,0,0,1,.243-1.541,1.094,1.094,0,0,1,.647-.212,1.154,1.154,0,0,1,.174.014,1.1,1.1,0,0,1,.719.44l3.473,4.778V34.05a1.1,1.1,0,1,1,2.207,0V45.572h2.429v-3.1a1.1,1.1,0,1,1,2.207,0v3.1H311.1V43.309a1.1,1.1,0,1,1,2.207,0v2.262h2.421v-1a1.1,1.1,0,0,1,2.2-.081v5.13a1.053,1.053,0,0,1-.03.252l-1.682,7.15A1.1,1.1,0,0,1,315.144,57.872Z" fill="#20375a"/>
      </g>
    </g>
  </g>
</svg>
PAMapp/assets/images/satisfaction/satisfactionBtn_web.svg
PAMapp/assets/images/taiwan-logo.png

PAMapp/assets/scss/_common.scss
@@ -91,4 +91,50 @@
        line-height: 40px;
        padding-right: 10px;
    }
}
}
.remind-container{
  margin-top: 13px;
  margin-bottom: 20px;
  display: flex;
      .remind-date{
          display: flex;
          flex-direction: column;
          align-items: center;
          font-weight: bold;
          width: 70px;
          background-color: #fff;
          border-radius: 6px;
          border-bottom: 1px solid #CCCCCC;
          border-right: 1px solid #CCCCCC;
          border-left: 1px solid #CCCCCC;
      }
      .remind-content-txt{
        display: flex;
        flex-direction: column;
        border: 1px solid #CCCCCC;
        flex:1;
        border-radius: 5px;
        padding: 10px;
        background-color: #fff;
      }
      .mb-3{
        margin-bottom: 3px;
      }
      .mt-2{
        margin-top:2px;
      }
      .date-year{
        color: #fff;
        align-items: center;
        display: flex;
        justify-content: center;
      }
      .bgc-primary-red{
        background-color:$PRIMARY_RED;
        width: 70.5px;
        border-top-left-radius:6px;
        border-top-right-radius:6px;
        border: 1px solid #CCCCCC;
      }
}
PAMapp/assets/scss/_variable.scss
@@ -10,6 +10,7 @@
$SKY_BLUE: #009CBD;
$LIGHT_BLUE: #8DB9CA;
$DARK_BLUE: #1B365D;
$LIGHT_RED: #DA3738;
$BEIGE: #A89968;
$PRUDENTIAL_GREY: #68737A;
$LIGHT_GREY: #D0D0CE;
@@ -19,5 +20,5 @@
// DEVICE BREAKPOINT
$DESKTOP_BREAKPOINT: 768px;
$DESKTOP_NAV_BAR: 110px;
$DESKTOP_NAV_BAR: 90px;
$MOB_NAV_BAR: 53px;
PAMapp/assets/scss/utilities/_heading.scss
@@ -35,12 +35,21 @@
  font-size: 14px;
}
.xxsTxt {
  font-size: 12px;
}
.text--bold {
  font-weight: bold !important;
}
.text--regular {
  font-weight: normal !important;
  font-weight: lighter;
}
.text--lighter {
  font-weight: lighter;
}
.text--center {
@@ -51,12 +60,24 @@
  text-align: left;
}
.text--right {
  text-align: right;
}
.text--primary {
  color: $PRIMARY_RED;
}
.text--black{
  color: $PRIMARY_BLACK;
}
.text--orange {
  color: $ORANGE;
}
.text--black{
  color: $PRIMARY_BLACK;
}
.text--dark-blue {
@@ -92,4 +113,24 @@
  font-size: 18px;
  color: $ORANGE;
  cursor: pointer;
}
}
.text--underline {
  text-decoration: underline;
}
.pam-link-button {
  @extend .fix-chrome-click--issue;
  @extend .smTxt;
  @extend .text--bold;
  @extend .text--primary;
  @extend .cursor--pointer;
}
.pam-link-button--lg {
  @extend .fix-chrome-click--issue;
  @extend .mdTxt;
  @extend .text--bold;
  @extend .text--primary;
  @extend .cursor--pointer;
}
PAMapp/assets/scss/utilities/_icon.scss
@@ -9,3 +9,9 @@
      color: $YELLOW;
    }
}
.down-icon {
  color: #ED1B2E;
  font-size: 25px;
  align-self: center;
}
PAMapp/assets/scss/utilities/_utilities.scss
@@ -5,6 +5,10 @@
  margin-bottom: 50px;
}
.mt-50 {
  margin-top: 50px;
}
.mt-30 {
  margin-top: 30px;
}
@@ -21,6 +25,7 @@
  margin-bottom: 20px;
}
.mt-10 {
  margin-top: 10px;
}
@@ -30,6 +35,10 @@
.mb-10 {
  margin-bottom: 10px;
}
.ml-5 {
  margin-left: 5px;
}
.ml-10{
@@ -42,6 +51,10 @@
.mr-30{
  margin-right: 30px;
}
.my-10 {
  margin:10px 0;
}
.pt-30 {
@@ -95,3 +108,7 @@
    font-size: #{$fontSize} + 'px';
  }
}
.text--break-all {
  word-break: break-all
}
PAMapp/assets/scss/vendors/_elementUI.scss
@@ -12,3 +12,8 @@
@import './elementUI/dialog';
@import './elementUI/messageBox';
@import './elementUI/input';
@import './elementUI/tree';
@import './elementUI/upload';
@import './elementUI/textarea';
@import './elementUI/dateTimePicker';
@import './elementUI/select';
PAMapp/assets/scss/vendors/elementUI/_dateTimePicker.scss
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,85 @@
.pam-date.el-input,.pam-time.el-input {
    .el-input__inner {
        padding-left: 10px;
        height: 46px;
        border: 1px solid #707070;
    }
    .el-input__prefix {
        left:auto;
        right: 10px;
        top: 50%;
        transform: translateY(-50%);
        color: $PRIMARY_BLACK;
    }
    .el-input__suffix {
        right: 25px;
    }
}
.pam-date.el-input {
    width: 58%;
}
.pam-time.el-input {
    width: 38%;
}
.pam-time-popper {
    .time-select-item {
        font-size: 18px;
        &.selected {
            color: $CORAL;
        }
    }
}
.pam-date-popper {
    .el-date-picker__header {
        .el-picker-panel__icon-btn:hover, .el-date-picker__header-label:hover {
            color: $CORAL;
        }
    }
    .el-picker-panel__body {
        .el-picker-panel__content {
            .el-date-table {
                .el-date-table__row {
                    td.today span {
                        color: $CORAL;
                    }
                    td.current span {
                        background-color: $CORAL;
                    }
                    td.available:hover {
                        color: $CORAL;
                    }
                    td.today.current span {
                        color: $PRIMARY_WHITE;
                    }
                }
            }
            .el-year-table {
                td.current .cell {
                    color: $CORAL;
                }
                td.today .cell {
                    color: $CORAL;
                }
                td.available .cell:hover {
                    color: $CORAL;
                }
            }
            .el-month-table {
                td.current .cell {
                    color: $CORAL;
                }
                td.today .cell {
                    color: $CORAL;
                }
                td .cell:hover {
                    color: $CORAL;
                }
            }
        }
    }
}
PAMapp/assets/scss/vendors/elementUI/_dialog.scss
@@ -35,3 +35,38 @@
    }
  }
}
.pam-dialog-review {
  .review-content {
    display: flex;
    flex-direction: row;
    justify-content: space-evenly;
  }
  .review-text {
    width: 60%;
    line-height: 28px;
    @extend .p;
    @extend .text--lighter;
  }
  .review-score {
    display: flex;
    justify-content: center;
    margin-bottom: 30px;
  }
  .review-btn {
    display: flex;
    justify-content: center;
  }
}
.pam-dialog-reserved {
  .reserved-info {
    font-size: 20px;
    overflow-y:scroll;
    height: 400px;
  }
  .reserved-btn {
    display: flex;
    justify-content: center;
  }
}
PAMapp/assets/scss/vendors/elementUI/_input.scss
@@ -1,3 +1,37 @@
.el-input__inner:focus{
  border-color:#DCDFE6;
}
.input-radius > .el-input__inner {
  border-radius: 10px;
}
.el-input__inner {
  font-size: 18px;
}
.pam-appointment-textarea {
  &.is-disabled {
    .el-textarea__inner {
      color: #222222;
      border: 1px solid #707070;
      &::placeholder {
        color: #A7A8AA;
      }
    }
  }
  .el-textarea__inner {
      border: 1px solid #707070;
      padding: 10px 20px;
      box-sizing: border-box;
      border-radius: 5px;
      font-size: 18px;
      &:focus {
          outline: none;
          border: solid 1px $SKY_BLUE;
      }
  }
}
PAMapp/assets/scss/vendors/elementUI/_radio.scss
@@ -18,36 +18,53 @@
        .el-radio__label {
            text-align: center;
            color: $PRIMARY_BLACK;
            display: block;
            line-height: 110px;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            padding-left: 0;
            background-size: cover;
            background-position: center;
            background-repeat: no-repeat;
            height: 100%;
            @extend .mdTxt;
            .subtitle {
                margin-top: 10px;
                @extend .smTxt_bold;
                color: $PRUDENTIAL_GREY;
            }
        }
        &.is-checked {
            background-color: $PEACH;
            .el-radio__label {
                color: $PRIMARY_WHITE;
                .subtitle {
                    color: $PRIMARY_WHITE;
                    font-weight: lighter;
                }
            }
        }
    }
}
.pam-single__select--col{
.pam-single__select--col {
    width: 100%;
    display: flex;
    flex-direction: column;
    justify-content: center;
    margin-top: 30px;
    .el-radio-button{
        @extend .fix-chrome-click--issue;
        width: 100%;
        margin-top: 30px;
        margin-right: 10px;
        &.is-active{
            .el-radio-button__inner{
                color:$DARK_BLUE;
                font-weight: bolder;
                background-color: $CORAL;
                color: $PRIMARY_WHITE;
                transition: 0s;
            }
        }
        &:focus:not(.is-focus):not(:active):not(.is-disabled){
@@ -58,9 +75,11 @@
            color:$PRIMARY_BLACK; ;
            background-color:$PRIMARY_WHITE;
            box-shadow: none;
            width: 100%;
            font-size: 20px;
            font-weight: normal;
            transition: 0s;
            border: 1px $LIGHT_GREY solid;
            border-radius: 50px;
        }
    }
}
@@ -75,6 +94,22 @@
        background-image: url('~/assets/images/quickFilter/btn_man.svg');
    }
}
.btn_unlimited {
    .el-radio__label {
        background-image: url('~/assets/images/quickFilter/btn_unlimited.svg');
    }
}
.btn_senior {
    .el-radio__label {
        background-image: url('~/assets/images/quickFilter/btn_senior.svg');
    }
}
.btn_young {
    .el-radio__label {
        background-image: url('~/assets/images/quickFilter/btn_young.svg');
    }
}
.pam-single-btn.el-radio-group{
  .el-radio {
    padding: 10px 20px;
@@ -110,5 +145,5 @@
        }
      }
    }
}
  }
}
PAMapp/assets/scss/vendors/elementUI/_rate.scss
@@ -1,6 +1,5 @@
.pam-quickFilter-rate {
.pam-rate {
  height: auto;
  margin-top: 30px;
  display: flex;
  justify-content: center;
  @extend .fix-chrome-click--issue;
@@ -40,3 +39,20 @@
    }
  }
}
.pam-satisfaction-rate {
  height: auto;
  display: flex;
  justify-content: center;
  margin-top: 10px;
  @extend .fix-chrome-click--issue;
  .el-rate__item {
    .el-rate__icon {
      font-size: 30px;
    }
    .el-icon-star-off {
      color: $PRIMARY_BLACK !important;
    }
  }
}
PAMapp/assets/scss/vendors/elementUI/_select.scss
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,42 @@
.pam-select.el-select {
  width: 100%;
  .el-input {
    &__inner {
      padding-left: 20px;
      height: 46px;
      border: 1px solid #707070;
      border-radius: 5px;
      font-size: 20px;
    }
    &__icon {
      color: #ED1B2E;
      font-size: 25px;
      transform: none;
    }
  }
  .is-focus {
    .el-input__inner {
      border-color: #707070;
    }
  }
  .el-icon-arrow-up {
    font-family: 'icomoon' !important;
    speak: never;
    font-style: normal;
    font-weight: normal;
    font-variant: normal;
    text-transform: none;
    line-height: 1;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    &:before {
      content: "\e910";
    }
  }
}
.el-select-dropdown__item {
  padding: 0 10px;
}
PAMapp/assets/scss/vendors/elementUI/_textarea.scss
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,8 @@
.el-textarea__inner {
    border: 1px solid #707070;
    padding: 10px 20px;
    font-size: 18px;
    &::placeholder {
        font-size: 18px;
    }
}
PAMapp/assets/scss/vendors/elementUI/_tree.scss
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,90 @@
.el-tree {
    position: static;
    background: transparent;
    .el-tree-node {
        white-space: pre-wrap;
        word-break: break-all;
        .el-tree-node__content {
            border: solid 2px #CCCCCC;
            padding: 10px 10px 10px 20px;
            border-radius: 10px;
            color: #68737A;
            justify-content: space-between;
            flex-direction: row-reverse;
            margin-bottom: 10px;
            height: auto;
            .el-tree-node__expand-icon {
                @extend .pam-icon;
                @extend .icon--primary;
                &.expanded::before {
                    content: "\e900";
                    display: inline-block;
                    transform: rotate(90deg);
                }
            }
            .el-tree-node__label {
                @extend .mdTxt;
                width: 85%;
                display: block;
                padding-left: 20px;
                line-height: 27px;
                word-wrap: break-word;
                height: auto;
            }
        }
        &.is-expanded > .el-tree-node__content {
            background-color: #F68C96;
            border: solid 2px #F68C96;
            .el-tree-node__label,.el-tree-node__expand-icon {
                color: $PRIMARY_WHITE;
            }
        }
        .el-tree-node__children {
            margin-bottom: 10px;
            .el-tree-node {
                .el-tree-node__content  {
                    flex-direction: row;
                    border: 0px;
                    padding: 0 !important;
                    margin-bottom: 0;
                    .el-tree-node__expand-icon {
                        display: none;
                    }
                    .el-tree-node__label {
                        @extend .p;
                        line-height: 27px;
                        width: 100%;
                        font-weight: lighter;
                        padding-right: 10px;
                        // line-break: loose;
                        // display: flex;
                        // justify-content: space-between;
                        // text-align: justify;
                        // text-align-last: left;
                        // text-justify:inter-ideograph;
                        // word-break: break-all;
                        // &:after{
                        //     display:inline-block;
                        //     content:'';
                        //     overflow:hidden;
                        //     width:100%;
                        //     height: 0;
                        // }
                    }
                }
            }
        }
    }
}
PAMapp/assets/scss/vendors/elementUI/_upload.scss
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,16 @@
.pam-avatar-uploader{
  display: flex;
  justify-content: center;
  margin-top: 10px;
  .el-upload{
    @extend .fix-chrome-click--issue;
    .pam-avatar-uploader--title{
      font-size: 20px;
      letter-spacing: 2px;
    }
    &:focus{
      border-color: $PRIMARY_BLACK;
      color: $PRIMARY_BLACK;
    }
  }
}
PAMapp/assets/ts/api/appointment.ts
Àɮפw§R°£
PAMapp/assets/ts/api/consultant.ts
Àɮפw§R°£
PAMapp/assets/ts/api/share.ts
Àɮפw§R°£
PAMapp/assets/ts/errorService.ts
Àɮפw§R°£
PAMapp/assets/ts/models/AppointmentDetail.ts
Àɮפw§R°£
PAMapp/assets/ts/models/account.model.ts
Àɮפw§R°£
PAMapp/assets/ts/models/appointment.model.ts
Àɮפw§R°£
PAMapp/assets/ts/models/consultant.model.ts
Àɮפw§R°£
PAMapp/assets/ts/models/enum/Role.ts
Àɮפw§R°£
PAMapp/components/AddAndReservedBtns.vue
@@ -1,10 +1,10 @@
<template>
    <el-row type="flex" justify="center" :class="cusClass">
        <el-button @click="addConsultant(agentInfo)" :disabled="isAdded">
            <span> {{isAdded ? '已加入顧問清單' : '+ é¡§å•æ¸…å–®'}}</span>
            <span> {{ isAdded ? '已加入顧問清單' : '+ é¡§å•æ¸…å–®' }}</span>
        </el-button>
        <el-button
            @click="reserveCommunication"
            @click="navigateToReservationForm"
            type="primary"
        >進行預約</el-button>
    </el-row>
@@ -12,28 +12,42 @@
<script lang="ts">
import { Vue, Component, Prop, Emit, Action, State, namespace } from 'nuxt-property-decorator';
import { Consultant } from '~/assets/ts/models/consultant.model';
import { Consultant } from '~/shared/models/consultant.model';
const localStorage = namespace('localStorage');
@Component
export default class AddAndReservedBtns extends Vue {
    @Action addToMyConsultantList!: (consultantToAdd: Consultant) => Promise<boolean>
    @State('myConsultantList') myConsultantList!: Consultant[];
    @Prop() agentInfo!: Consultant;
    @Prop() cusClass!: string;
    @Action
    addToMyConsultantList!: (consultantToAdd: Consultant) => Promise<boolean>
    @State('myConsultantList')
    myConsultantList!: Consultant[];
    @Prop()
    agentInfo!: Consultant;
    @Prop()
    cusClass!: string;
    isVisiblePopUp = false;
    addConsultant(item: Consultant) {
    //////////////////////////////////////////////////////////////////////
    @Emit('openPopUp')
    openPopUp(popUpTxt: string = '成功加入顧問清單'): string {
        return popUpTxt;
    }
    //////////////////////////////////////////////////////////////////////
    addConsultant(item: Consultant): void {
        this.addToMyConsultantList(item).then(addOk => {
            addOk && this.openPopUp();
        });
    }
    reserveCommunication() {
    navigateToReservationForm(): void {
        this.$router.push(`/questionnaire/${this.agentInfo.agentNo}`);
    }
    @Emit('openPopUp') openPopUp(popUpTxt: string = '成功加入顧問清單') {
        return popUpTxt
    }
    get isAdded() {
@@ -41,4 +55,4 @@
                ? true : false
    }
}
</script>
</script>
PAMapp/components/AddressPicker.vue
@@ -1,12 +1,12 @@
<template>
    <div class="text--center">
      <div class="subTitle mb-10">所在地區</div>
      <div class="subTitle mb-10">服務地區</div>
      <el-input
          type="text"
          class="p mt-10 cursor--pointer "
          class="p mt-10 cursor--pointer input-radius"
          tabindex="-1"
          v-model="keyWord"
          @change="searchDistrict"
          @input="searchDistrict"
          placeholder="請輸入關鍵字"
      ></el-input>
      <Ui-ScrollPicker
@@ -23,17 +23,30 @@
<script lang="ts">
import { Vue, Component, Emit } from 'nuxt-property-decorator';
import { taiwanCities } from '~/shared/const/taiwan-cities';
@Component
export default class AddressPicker extends Vue {
    options = ['基隆市', '台北市', '新北市', '桃園市', '新竹市', '新竹縣', '苗栗縣', '台中市', '彰化縣', '南投縣', '雲林縣', '嘉義市', '嘉義縣', '台南市', '高雄市', '屏東縣', '台東縣', '花蓮縣', '宜蘭縣', '澎湖縣', '金門縣', '連江縣'];
    keyWord = '';
    options      : string[] = taiwanCities;
    keyWord      : string   = '';
    filterOptions: string[] = [];
    district = '台北市';
    district     : string   = '台北市';
    //////////////////////////////////////////////////////////////////////
    mounted() {
        this.filterOptions = JSON.parse(JSON.stringify(this.options));
    }
    //////////////////////////////////////////////////////////////////////
    @Emit('confirm')
    confirm(): string {
        return this.district;
    }
    //////////////////////////////////////////////////////////////////////
    searchDistrict() {
        this.filterOptions = this.options.filter(e => e.match(this.keyWord));
@@ -43,10 +56,7 @@
        this.district = value;
    }
    @Emit('confirm')
    confirm() {
        return this.district;
    }
}
</script>
PAMapp/components/Appointment/AppointmentClosedInfo.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,74 @@
<template>
    <section class="close-appointment-detail">
        <div class="close-appointment-detail-nav">
          <div class="mdTxt">結案方式</div>
          <div class="mdTxt text--primary text--underline cursor--pointer" @click="editAppointmentHasClosed">編輯</div>
        </div>
        <span class="mt-10 mb-30">{{ displayClosedType }}</span>
        <template v-if="appointmentDetail.appointmentClosedInfo.policyholderIdentityId && appointmentDetail.communicateStatus === 'done'">
          <div class="mdTxt mb-10">保戶身份證字號</div>
          <div class="mb-30">{{ appointmentDetail.appointmentClosedInfo.policyholderIdentityId }}</div>
        </template>
        <template v-if="appointmentDetail.appointmentClosedInfo.planCode && appointmentDetail.communicateStatus === 'done'">
          <div class="mdTxt mb-10">商品代碼Plan Code</div>
          <div class="mb-30">{{ appointmentDetail.appointmentClosedInfo.planCode }}</div>
        </template>
        <template v-if="appointmentDetail.appointmentClosedInfo.closedReason && appointmentDetail.communicateStatus !== 'done'">
          <div class="mdTxt mb-10">未成交原因</div>
          <div >{{ appointmentDetail.appointmentClosedInfo.closedReason | toFailReasonLabel }}</div>
          <div v-if="appointmentDetail.appointmentClosedInfo.closedOtherReason" class="mt-10">{{ appointmentDetail.appointmentClosedInfo.closedOtherReason }}</div>
          <div class="mb-30"></div>
        </template>
        <template v-if="appointmentDetail.appointmentClosedInfo.policyEntryDate && appointmentDetail.communicateStatus === 'done'">
          <div class="mdTxt mb-10">進件時間</div>
          <div class="mb-30">{{ appointmentDetail.appointmentClosedInfo.policyEntryDate | formatDate }}</div>
        </template>
        <div class="mdTxt mb-10">備註</div>
        <div>{{ appointmentDetail.appointmentClosedInfo.remark || '無' }}</div>
    </section>
</template>
<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator';
import { Appointment } from '~/shared/models/appointment.model';
import { ContactStatus } from '~/shared/models/enum/contact-status';
@Component
export default class AppointmentClosedInfo extends Vue {
    @Prop()
    appointmentDetail!: Appointment;
    contactStatus = ContactStatus;
    //////////////////////////////////////////////////////////////////////
    editAppointmentHasClosed(): void{
      this.$router.push(`/appointment/${this.appointmentDetail.id}/close`);
    }
    get displayClosedType(): string {
      let closedType = '成交';
      switch (this.appointmentDetail.communicateStatus) {
        case this.contactStatus.CLOSE:
          closedType = '未成交';
          break;
        case this.contactStatus.CANCEL:
          closedType = '取消';
          break;
      }
      return closedType;
    }
}
</script>
<style lang="scss" scoped>
</style>
PAMapp/components/Appointment/AppointmentInterviewList.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,76 @@
<template>
    <div>
        <div class="interview__header">
            <div class="mdTxt">約訪紀錄</div>
            <div class="pam-link-button"
            @click="addInterview">+新增</div>
        </div>
        <InterviewCard :interviewList="displayAppointmentList"></InterviewCard>
        <section class="text--right mt-30 interview-check-more" v-if="interviewList.length > 3">
                <div class="pam-link-button" @click="readAllList = !readAllList">
                  {{ readAllList ?  '顯示較少' : '展開看更多' }}
                  <i :class="readAllList ? 'icon-top' : 'icon-down'"></i>
                  </div>
        </section>
    </div>
</template>
<script lang="ts">
import { Vue, Component, Prop, Watch, namespace } from 'nuxt-property-decorator';
import { InterviewRecord } from '~/shared/models/appointment.model';
@Component
export default class AppointmentInterviewList extends Vue {
  @Prop()
  interviewList!: InterviewRecord[];
  appointmentId!: string;
  displayList: InterviewRecord[] = [];
  readAllList = false;
  get displayAppointmentList(): InterviewRecord[] {
    return this.readAllList ? this.displayList : this.displayList.slice(0, 3);
  }
  //////////////////////////////////////////////////////////////////////
  mounted() {
      this.appointmentId = this.$route.params.appointmentId;
  }
  //////////////////////////////////////////////////////////////////////
  @Watch('interviewList', {immediate: true})
  updateInterviewList() {
      if (this.interviewList && this.interviewList.length > 0) {
          this.displayList = this.interviewList
            .map((i) => ({ ...i, sortDate: new Date(i.interviewDate)}))
            .sort((preItem, nextItem) => +nextItem.sortDate - +preItem.sortDate);
      }
  }
  //////////////////////////////////////////////////////////////////////
  addInterview(): void {
    this.$router.push(`/appointment/${this.appointmentId}/interview/new`);
  }
}
</script>
<style lang="scss" scoped>
.interview__header {
  display        : flex;
  justify-content: space-between;
  margin-bottom  : 10px;
}
.interview-check-more{
  display: flex;
  justify-content: center;
}
</style>
PAMapp/components/Appointment/AppointmentProgress.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,119 @@
<template>
    <div class="appointment-progress">
      <div
        class="appointment-progress__indicator"
        :style="{ width: indicatorLineWidth }">
        <div class="line"></div>
        <div
          class="circle"
          v-for="(step, index) in stepList"
          :class="{ 'activate': index < displayCurrentStep }"
          :key="index">
        </div>
      </div>
      <div class="appointment-progress__status-label xxsTxt text--bold ml-5">
        {{ displayStatusLabel }}
      </div>
    </div>
</template>
<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator';
@Component
export default class AppointmentProgress extends Vue {
  @Prop()
  totalStep?: number;
  @Prop()
  currentStep!: 'picked' | 'reserved' | 'contacted' | 'done' | 'closed' | 'cancel';
  //////////////////////////////////////////////////////////////////////
  get stepList(): number[] {
    const tempList: number[] = [];
    for(let i = 0; i < (this.totalStep || 3); i ++) {
      tempList.push(i);
    }
    return tempList;
  }
  get indicatorLineWidth(): string {
    const connectLineGutter = 10;
    return ((this.totalStep || 3) * 10 + connectLineGutter) + 'px';
  }
  get displayCurrentStep(): number {
    let step: number = 1;
    switch (this.currentStep) {
      case 'contacted':
        step = 2;
        break;
      case 'done':
        step = 3;
        break;
      case 'closed':
        step = 3;
        break;
      case 'cancel':
        step = 3;
        break;
    }
    return step;
  }
  get displayStatusLabel(): '未聯絡' | '約訪中' | '成交' | '未成交' | '已取消' {
    let label: '未聯絡' | '約訪中' | '成交' | '未成交' | '已取消' = '未聯絡';
    switch (this.currentStep) {
      case 'contacted':
        label = '約訪中';
        break;
      case 'done':
        label = '成交';
        break;
      case 'closed':
        label = '未成交';
        break;
      case 'cancel':
        label = '已取消';
        break;
    }
    return label;
  }
}
</script>
<style lang="scss" scoped>
.appointment-progress{
  display: flex;
  .appointment-progress__indicator {
    align-items    : center;
    display        : flex;
    justify-content: space-between;
    position       : relative;
    .circle {
      background-color: white;
      border          : 1px solid #CCCCCC;
      border-radius   : 50%;
      height          : 8px;
      margin          : 0;
      width           : 8px;
      z-index         : 5;
      &.activate {
        background-color: $BEIGE;
      }
    }
    .line {
      background-color: #707070;
      height          : 3px;
      left            : 5%;
      position        : absolute;
      width           : 90%;
    }
  }
}
</style>
PAMapp/components/Appointment/AppointmentRecordList.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,53 @@
<template>
    <div class="record-log-component">
        <div class="mdTxt mt-30 mb-10">系統通知紀錄</div>
            <InterviewRecordCard :noticeLogsList="displayLogs.slice(0, 3)"></InterviewRecordCard>
            <section class="text--center mt-30" v-if="displayLogs.length > 3">
                <div class="pam-link-button"
                    @click="readMoreBtn"
                >展開看更多
                <i class="icon-expand"></i></div>
            </section>
    </div>
</template>
<script lang="ts">
import { Vue, Component, Prop, Watch } from 'nuxt-property-decorator';
import { NoticeLogs } from '~/shared/models/appointment.model';
@Component
export default class AppointmentRecordList extends Vue {
    @Prop()
    noticeLogs!: NoticeLogs[];
    appointmentId: string       = '';
    displayLogs  : NoticeLogs[] = [];
    //////////////////////////////////////////////////////////////////////
    mounted() {
        this.appointmentId = this.$route.params.appointmentId;
    }
    //////////////////////////////////////////////////////////////////////
    @Watch('noticeLogs', {immediate: true})
    onNoticeLogsChange() {
      if (this.noticeLogs.length) {
        this.displayLogs = this.noticeLogs
                            .map((i) => ({ ...i, sortDate: new Date(i.createdDate)}))
                            .sort((preItem, nextItem) => +nextItem.sortDate - +preItem.sortDate);
      }
    }
    //////////////////////////////////////////////////////////////////////
    readMoreBtn() {
        this.$router.push(`/appointment/${this.appointmentId}/recordList`);
    }
}
</script>
PAMapp/components/BackActionBar.vue
@@ -1,22 +1,40 @@
<template>
    <nav class="pam-back-action-bar fix-chrome-click--issue">
        <a @click="pushRouterByLoginRole" v-if="questionnaireState">
          <i class="icon-left "></i>{{ label }}
        <a @click="goBack">
            <i class="icon-left "></i>
        </a>
        <div class="label">{{ label }}</div>
    </nav>
</template>
<script lang="ts">
import { namespace } from 'nuxt-property-decorator';
import { Vue, Component,} from 'vue-property-decorator';
import { Role } from '~/assets/ts/models/enum/Role';
import * as _ from 'lodash';
const roleStorage = namespace('localStorage');
import * as _ from 'lodash';
import { Role } from '~/shared/models/enum/Role';
const appointmentStore = namespace('appointment.store');
const roleStorage      = namespace('localStorage');
@Component
export default class UiCarousel extends Vue {
  @roleStorage.Getter currentRole!:string;
  questionnaireState: boolean = true;
  @roleStorage.Getter
  currentRole!:string;
  @appointmentStore.Getter
  isCloseAppointment!: boolean;
  //////////////////////////////////////////////////////////////////////
  goBack(): void {
    const pathName = this.$route.name;
    pathName?.includes('myConsultantList')
      ? this.$router.push('/')
      : this.$router.go(-1);
  }
  get label(): string {
    if (this.$route.name) {
      const routeName = this.$route.name.split('-')[0];
@@ -35,7 +53,10 @@
          featureLabel = '我的顧問清單';
          break;
        case 'agentInfo':
          featureLabel = _.isEqual(this.currentRole,Role.ADMIN) ? '查看帳號資訊' : '業務員資訊'
          const agentFeatureLabel = this.$route.name.includes('edit') ? '編輯帳號資訊' : '查看帳號資訊';
          featureLabel = _.isEqual(this.currentRole,Role.ADMIN)
                  ? agentFeatureLabel
                  : '業務員資訊'
          break;
        default:
          featureLabel = '回首頁';
@@ -46,6 +67,7 @@
        case 'notification':
          featureLabel = '通知';
          break;
        case 'userReviewsRecord':
        case 'record':
          featureLabel = '查看紀錄';
          break;
@@ -55,6 +77,29 @@
        case 'consultantAccountSetting':
          featureLabel = '查看帳號資訊';
          break;
        case 'faq':
          featureLabel = 'F&Q å¸¸è¦‹å•é¡Œ';
          break;
        case 'appointment':
          const appointmentFeatureLabel = this.$route.name.includes('close')
                                                            ? '結案'
                                                            : this.isCloseAppointment ? '結案明細' : '預約資訊';
          const inInterview = this.$route.name.includes('interview');
          const addNewInterview = this.$route.name.includes('new');
          const interviewList = this.$route.name.includes('interviewList');
          const recordList = this.$route.name.includes('recordList');
          if (interviewList) {
            featureLabel = '約訪紀錄';
          } else if (recordList) {
            featureLabel = '系統通知紀錄';
          } else if (inInterview) {
            featureLabel = addNewInterview
                  ? '新增約訪紀錄'
                  : '編輯約訪紀錄';
          } else {
            featureLabel = appointmentFeatureLabel;
          }
          break;
      }
      return featureLabel;
    } else {
@@ -62,44 +107,43 @@
    }
  }
  pushRouterByLoginRole():void{
    const pathName = this.$route.name;
    pathName?.includes('myConsultantList') ? this.$router.push('/') : this.$router.go(-1);
  }
  set label(value) {
    this.questionnaireState = value === '進行預約' ? this.currentRole === Role.USER : true;
  }
}
</script>
<style lang="scss" scoped>
.pam-back-action-bar {
  height: $MOB_NAV_BAR;
  border: 1px solid #CCCCCC;
  display: flex;
  align-items: center;
  position: fixed;
  top: $MOB_NAV_BAR;
  left: 0;
  width: 100%;
  height          : $MOB_NAV_BAR;
  border          : 1px solid #CCCCCC;
  display         : flex;
  align-items     : center;
  position        : fixed;
  top             : $MOB_NAV_BAR;
  left            : 0;
  width           : 100%;
  background-color: $PRIMARY_WHITE;
  z-index: 6;
  z-index         : 6;
  font-size       : 20px;
  font-weight     : bold;
  i {
    font-size: 20px;
    display      : block;
    padding-right: 14px;
  }
  a {
    cursor: pointer;
    font-size: 24px;
    font-weight: bold;
    padding: 20px;
    cursor : pointer;
    padding: 0 20px;
    width  : 26px;
  }
  .label {
    margin   : 0 auto;
    transform: translateX(-33px);
  }
}
@include desktop {
  .pam-back-action-bar {
    top: $DESKTOP_NAV_BAR;
    top      : $DESKTOP_NAV_BAR;
    font-size: 24px;
  }
}
</style>
PAMapp/components/Client/ClientCard.vue
@@ -2,33 +2,35 @@
    <div>
        <el-row
            type="flex"
            ref="clientCardRef"
            class="rowStyle cursor--pointer"
            justify="space-between"
            :class="{'new': !isView && isReserved}"
            @click.native="openDetail"
            :class="{'new': newAppointment }"
            @click.native="viewAppointmentDetail"
        >
            <el-col :xs="1" :sm="1" class="unread" align="middle" v-if="isReserved">
        <div class="test">
            <div class="unread" v-if="isReserved">
                <div class="circle" v-if="!isRead"></div>
            </el-col>
            <el-col :xs="5" :sm="3" align="middle">
                <el-avatar
                    :size="50"
                    src=""
                ></el-avatar>
                <div class="satisfaction">
                    <template v-if="client.satisfactionScore">
                        <i class="icon-star pam-icon icon--yellow satisfaction"></i>
                        <span>{{client.satisfactionScore}}</span>
                    </template>
                    <template v-else>
                        <div class="unfilled">未填滿意度</div>
                    </template>
            </div>
            <div class="pl-10">
                <div class="smTxt_bold name">{{ client.name || 'NO NAME' }}</div>
                <div  v-if="client.communicateStatus === contactStatus.RESERVED" class="my-10 xsTxt">預約成功</div>
                <div
                  class="xsTxt mb-10 mt-10"
                  v-else-if="client.communicateStatus === contactStatus.CONTACTED">
                  ç´„訪紀錄
                </div>
            </el-col>
            <el-col :xs="14" :sm="14" class="pl-10">
                <div class="smTxt_bold name">{{client.name}}</div>
                <div class="message">預約成功</div>
                <div class="professionals">
                <div
                  class="xsTxt mb-10 mt-10"
                  v-else>
                  æ»¿æ„åº¦
                  <span v-if="client.satisfactionScore" class="xsTxt text--primary">
                    <UiReviewScore :score="client.satisfactionScore"></UiReviewScore>
                  </span>
                  <span v-else class="xsTxt text--mid_grey">未填</span>
                </div>
                <div class="professionals mb-10" v-if="client.communicateStatus === contactStatus.RESERVED">
                    <template v-if="client.requirement">
                        <span
                            v-for="(item, index) in requirements"
@@ -41,36 +43,71 @@
                        >(客戶未提供需求項目)</span>
                    </template>
                </div>
            </el-col>
            <el-col class="flex-column contactInfo" :xs="4" :sm="6">
                <AppointmentProgress
                  :currentStep="client.communicateStatus"
                ></AppointmentProgress>
            </div>
        </div>
            <!-- <el-col :xs="5" :sm="3" align="middle">
                <el-avatar
                    :size="50"
                ></el-avatar>
                <div class="satisfaction" v-if="!hideReviews">
                    <template v-if="client.satisfactionScore">
                        <i class="icon-star pam-icon icon--yellow satisfaction"></i>
                        <span>{{client.satisfactionScore}}</span>
                    </template>
                    <template v-else>
                        <div class="unfilled">未填滿意度</div>
                    </template>
                </div>
            </el-col> -->
            <div class="flex-column contactInfo" :xs="4" :sm="6">
                <div
                    class="smTxt_bold fix-chrome-click--issue"
                    :class="{'unread-txt': reservedTxt === '未讀', 'read-txt': reservedTxt !== '未讀'}"
                >{{reservedTxt}}</div>
                  class="invite-msg smTxt_bold"
                  @click.stop="showAddInterviewDialog"
                  v-if="client.communicateStatus === contactStatus.RESERVED">
                  å‚³é€ç´„訪通知
                </div>
                <div
                    class="date xsTxt text--mid_grey"
                >{{date}}</div>
                  class="invite-msg smTxt_bold"
                  @click.stop="navigateToCloseAppointment"
                  v-else-if="client.communicateStatus === contactStatus.CONTACTED">
                  çµæ¡ˆ
                </div>
                <div
                  class="invite-msg smTxt_bold"
                  @click.stop="inviteReview"
                  v-else-if="!client.satisfactionScore">
                  ç™¼é€æ»¿æ„åº¦
                </div>
                <div
                    class="date xsTxt text--black"
                >{{ date }}</div>
                <div
                    class="xsTxt text--mid_grey"
                >{{time}}</div>
            </el-col>
                >{{ time }}</div>
            </div>
        </el-row>
        <Ui-Dialog
            :isVisible.sync="isVisibleDialog"
            :width="width"
            @closeDialog="close"
            :isVisible.sync="isShowInformDialog"
            :width="dialogWidth"
            @closeDialog="closeInformDialog"
            class="pam-myDemand-dialog"
        >
            <h5 class="subTitle text--center mb-30"
            >{{isReserved ? '預約資訊' : '已聯絡資訊'}}</h5>
            <p v-if='isReserved'
                class="smTxt text-right"
                class="smTxt text--right"
            ><span v-if="isRead">{{client.consultantReadTime | formatDate}}</span> å·²è®€</p>
            <p
                v-if="!isReserved"
                class="smTxt text-right"
                class="smTxt text--right"
            >{{client.contactTime | formatDate}} è¯çµ¡</p>
            <p class="smTxt">{{client.appointmentDate | formatDate}} é ç´„</p>
@@ -85,18 +122,66 @@
                <p v-for="(item, index) in hopeContactTime"
                    :key="index"
                >連絡時段{{index + 1 | formatNumber}}:<span>{{ item | formatHopeContactTime}}</span></p>
            </div>
            <div class="mt-30">
                <div class="memoTitleStyle">
                    <div class="mdTxt">內容描述</div>
                    <div
                        class="smTxt text--bold text--primary cursor--pointer text--underline edit"
                        @click='editMemo'
                    >編輯</div>
                </div>
                <div class="mt-30 text--center" v-if="isReserved">
                    <el-button @click="markAppointment">標註為已連絡</el-button>
                <el-input
                    class="mt-10 pam-appointment-textarea"
                    type="textarea"
                    :rows="3"
                    maxlength="100"
                    placeholder="請輸入,限100字。"
                    :disabled="!isEdit"
                    v-model="memo"
                >
                </el-input>
                <div class="mt-10 smTxt text--bold text--primary text--right fixed-Height">
                    <template v-if="isEdit">
                        <span class="cursor--pointer" @click="cancelEditMemo">取消</span>
                        <span class="pl-20 cursor--pointer" @click="saveMemo">儲存</span>
                    </template>
                </div>
            </div>
            <div class="mt-30 text--center" v-if="isReserved">
                <el-button @click="markAppointment">標註為已連絡</el-button>
            </div>
        </Ui-Dialog>
        <InterviewMsg
          :client="client"
          :isVisible.sync="isShowAddInterviewDialog">
        </InterviewMsg>
        <PopUpFrame :isOpen.sync="isShowInviteReviewDialog">
          <div class="text--middle invite-review">
            <div class="mb-30 mt-10">已發送滿意度</div>
            <div class="text--primary text--middle cursor--pointer text--underline" @click="isShowInviteReviewDialog = false" :size="'250px'">我知道了</div>
          </div>
        </PopUpFrame>
    </div>
</template>
<script lang="ts">
import { Vue, Component, Prop, Action } from 'nuxt-property-decorator';
import { isMobileDevice } from '~/assets/ts/device';
import { ClientInfo, markAsContact, recordRead } from '~/assets/ts/api/appointment';
import { Vue, Component, Prop, namespace, Watch } from 'nuxt-property-decorator';
import appointmentService from '~/shared/services/appointment.service';
import myConsultantService from '~/shared/services/my-consultant.service';
import UtilsService from '~/shared/services/utils.service';
import { hideReviews } from '~/shared/const/hide-reviews';
import { ElRow } from 'element-ui/types/row';
import { Appointment, AppointmentMemoInfo } from '~/shared/models/appointment.model';
import { ContactStatus } from '~/shared/models/enum/contact-status';
import reviewsService from '~/shared/services/reviews.service';
const appointmentStore = namespace('appointment.store');
const localStorage     = namespace('localStorage');
@Component({
    filters: {
@@ -118,12 +203,183 @@
    }
})
export default class ClientList extends Vue {
    @Action updateMyAppointment!: (data: ClientInfo) => void
    @Action storeConsultantList!: () => void;
    @Prop()
    client!: Appointment;
    @Prop() client!: ClientInfo;
    isVisibleDialog = false;
    width = '';
    @appointmentStore.Action
    updateMyAppointmentList!: (data: Appointment) => void;
    @appointmentStore.Action
    getAppointmentDetail!: (appointmentId: number) => Promise<Appointment>;
    @appointmentStore.Action
    updateAppointmentDetail!: (id: number) => Appointment;
    @appointmentStore.Getter
    appointmentProgress!: ContactStatus;
    @localStorage.Mutation
    storageClearAppointmentIdFromMsg!: () => void;
    contactStatus            = ContactStatus;
    dialogWidth              = '';
    hideReviews              = hideReviews;
    isEdit                   = false;
    isShowAddInterviewDialog = false;
    isShowInformDialog       = false;
    isShowInviteReviewDialog = false;
    memo                     = '';
    memoInfo: AppointmentMemoInfo = {
        appointmentId: 0,
        content      : '',
        id           : 0
    };
    //////////////////////////////////////////////////////////////////////
    @Watch('$route', {immediate: true})
    onRouteChange() {
        const appointmentIdFromMsg = this.$route.query.appointmentId;
        if (appointmentIdFromMsg && +appointmentIdFromMsg === this.client.id) {
            this.openDetail();
        }
    }
    //////////////////////////////////////////////////////////////////////
    mounted() {
        this.memoInfo = this.client.appointmentMemoList.length > 0
            ? JSON.parse(JSON.stringify(this.client.appointmentMemoList[0]))
            : {appointmentId: 0, content: '', id: 0};
        this.memo = this.memoInfo.content;
    }
    //////////////////////////////////////////////////////////////////////
    viewAppointmentDetail(): void {
      this.getAppointmentDetail(this.client.id).then((_) => {
        const unread = !this.client.consultantReadTime;
        if (unread) {
          this.readAppointment();
        }
        this.$router.push(`/appointment/${this.client.id}`);
      });
    }
    showAddInterviewDialog(): void {
      this.isShowAddInterviewDialog = true;
    }
    navigateToCloseAppointment(): void {
      this.getAppointmentDetail(this.client.id).then((_) => {
        this.$router.push(`/appointment/${this.client.id}/close`);
      });
    }
    inviteReview(): void {
        reviewsService.sendSatisfactionToClient(this.client.id).then(res => {
            this.isShowInviteReviewDialog = true ;
        })
    }
    openDetail() {
        setTimeout(() => {
            (this.$refs.clientCardRef as any).$el.classList.add('currentShowStyle');
        }, 0)
        this.dialogWidth = UtilsService.isMobileDevice() ? '80%' : '';
        this.isShowInformDialog = true;
    }
    markAppointment() {
        myConsultantService.markAsContact(this.client.id).then(data => {
            this.updateMyAppointmentList(data);
            this.isShowInformDialog = false;
        })
    }
    closeInformDialog(): void {
        this.readAppointment();
        this.isEdit = false;
        this.clearAppointmentIdFromMsg();
    }
    private readAppointment(): void {
      appointmentService.recordRead(this.client.id).then((_) => {
          const updatedClient = {...this.client};
          updatedClient.consultantReadTime = new Date().toString();
          this.updateMyAppointmentList(updatedClient);
          this.updateAppointmentDetail(this.client.id);
      });
    }
    private clearAppointmentIdFromMsg() {
        this.storageClearAppointmentIdFromMsg();
        this.$router.push({query: {}});
        setTimeout(() => {
            (this.$refs.clientCardRef as ElRow).$el.classList.remove('currentShowStyle')
        },1000)
    }
    saveMemo() {
        if (this.client.appointmentMemoList.length > 0) {
            const params = {
                content: this.memo,
                id: this.client.appointmentMemoList[0].id
            };
            this.updateMemo(params);
            return;
        }
        const params = {
            content: this.memo,
            appointmentId: this.client.id,
        }
        this.createMemo(params);
    }
    private createMemo(params) {
        appointmentService.createMemo(params).then(memoRes => {
            this.storeMemo(memoRes);
        });
    }
    private updateMemo(params) {
        appointmentService.updateMemo(params).then(memoRes => {
            this.storeMemo(memoRes);
        });
    }
    private storeMemo(memoRes) {
        this.memoInfo = memoRes;
        this.memo = this.memoInfo.content;
        this.client.appointmentMemoList[0] = this.memoInfo;
        this.isEdit = false;
    }
    editMemo() {
        this.isEdit = !this.isEdit;
        this.memo = this.memoInfo.content;
    }
    cancelEditMemo() {
        this.isEdit = false;
        this.memo = this.memoInfo.content;
    }
    get newAppointment(): boolean {
      return !this.client.consultantViewTime
            && this.client.communicateStatus === 'reserved';
    }
    get isReserved() {
      return this.client.communicateStatus === 'reserved';
    }
    get isRead() {
      return !!this.client.consultantReadTime;
    }
    get requirements() {
        return this.client.requirement.split(',');
@@ -133,7 +389,7 @@
        if (this.client.gender) {
            return this.client.gender === 'male' ? '男性' : '女性';
        }
        return ''
        return '';
    }
    get hopeContactTime() {
@@ -141,19 +397,7 @@
        return contactList.filter(item => !!item && item !== ",")
    }
    get isReserved() {
        return this.client.communicateStatus === 'reserved';
    }
    get isRead() {
        return !!this.client.consultantReadTime;
    }
    get isView() {
        return !!this.client.consultantViewTime;
    }
    get reservedTxt() {
    get reservedTxt(): string {
        if (this.isReserved) {
            return this.client.consultantReadTime ? '已讀' : '未讀';
        } else {
@@ -161,52 +405,22 @@
        }
    }
    get latestUpdateTime() {
    get displayTime(): string {
        if (this.isReserved) {
            return this.client.consultantReadTime ? this.client.consultantReadTime : this.client.appointmentDate;
            return this.client.appointmentDate;
        } else {
            return this.client.contactTime;
            return this.client.lastModifiedDate;
        }
    }
    get time() {
        const formatDate = (this.$options.filters as any).formatDate(this.latestUpdateTime);
        return formatDate.split(' ')[1]
    }
    get date() {
        const formatDate = (this.$options.filters as any).formatDate(this.latestUpdateTime);
        const formatDate = (this.$options.filters as any).formatDate(this.displayTime);
        return formatDate.split(' ')[0];
    }
    openDetail() {
        this.width = isMobileDevice() ? '80%' : '';
        this.isVisibleDialog = true;
    }
    markAppointment() {
        markAsContact(this.client.id).then(data => {
            // TODO: è¦æŽ¥å¾Œå°å‚³å›žçš„ updated client è³‡æ–™ - Ben 2021/11/16
            const updatedClient = {...this.client};
            updatedClient.communicateStatus = 'contacted';
            updatedClient.contactTime = new Date();
            this.updateMyAppointment(updatedClient);
            this.isVisibleDialog = false;
        })
    }
    close() {
        if (!this.client.consultantReadTime) {
            recordRead(this.client.id).then(res => {
                const updatedClient = {...this.client};
                updatedClient.consultantReadTime = new Date();
                this.updateMyAppointment(updatedClient);
            });
        }
    get time() {
        const formatDate = (this.$options.filters as any).formatDate(this.displayTime);
        return formatDate.split(' ')[1]
    }
}
@@ -214,93 +428,104 @@
<style lang="scss" scoped>
    .rowStyle {
        padding: 10px 15px 10px 5px;
        background-color: $PRIMARY_WHITE;
        margin-bottom: 10px;
        display: flex;
        justify-content: space-between;
        border-left     : solid 4px transparent;
        display         : flex;
        justify-content : space-between;
        margin-bottom   : 10px;
        padding         : 10px 15px 10px 5px;
        transition: background-color 0.5s;
        &.new {
            border-left: solid 4px $YELLOW;
            border-color: $YELLOW;
        }
        &.currentShowStyle {
            background-color: rgba(236, 195, 178, 0.5);
            transition      : background-color 0.5s;
        }
        .unread {
            align-self: center;
            .circle {
                width: 10px;
                height: 10px;
                border-radius: 50px;
                background-color: $PRIMARY_RED;
                margin: auto;
                border-radius   : 50%;
                height          : 10px;
                margin          : auto;
                width           : 10px;
            }
        }
        .satisfaction {
            font-size: 12px;
            font-size  : 12px;
            font-weight: bold;
            margin-top: 5px;
            margin-top : 5px;
            .unfilled {
                color      : $MID_GREY;
                font-weight: lighter;
                color: $MID_GREY;
            }
        }
        .message {
            margin:10px 0;
        }
        .professionals {
            overflow: hidden;
            white-space: nowrap;
            overflow     : hidden;
            text-overflow: ellipsis;
            display: -webkit-box;
            -webkit-box-orient: vertical;
            -webkit-line-clamp: 1;
            .professionalsTxt {
                font-size: 12px;
                font-weight: bold;
                font-size   : 12px;
                margin-right: 5px;
            }
            }
            .noProfessionalsTxt {
                color: $PRUDENTIAL_GREY;
                color      : $PRUDENTIAL_GREY;
                font-weight: lighter;
            }
        }
        .contactInfo {
            text-align: right;
            .date {
                font-size: 12px;
            }
        }
        .unread-txt {
            @extend .text--primary;
        }
        .read-txt {
            color: $SKY_BLUE;
        }
    }
    .flex-column {
        display: flex;
        flex-direction: column;
        display        : flex;
        flex-direction : column;
        justify-content: space-between;
    }
    .dialogTxt {
        font-size: 20px;
        overflow-y:scroll;
        max-height: 45vh;
        font-size : 20px;
        max-height: 25vh;
        overflow-y: scroll;
        @include desktop {
            height: 400px;
        }
    }
    .text-right {
        text-align: right;
    .memoTitleStyle {
        display        : flex;
        flex-direction : row;
        justify-content: space-between;
       .edit {
            align-self: flex-end;
        }
    }
    .fixed-Height {
        height: 16px;
    }
    .test{
        display: flex;
    }
    .invite-msg{
      width: 96px;
      color: $PRIMARY_RED;
      @extend .text--underline;
    }
  .invite-review{
    align-items   : center;
    display       : flex;
    flex-direction: column;
  }
</style>
PAMapp/components/Client/ClientList.vue
@@ -2,14 +2,14 @@
    <div>
        <template v-if="clients.length > 0">
            <ClientCard
                v-for="(client, index) in clients"
                :key="index"
                v-for="(client) in clients"
                :key="client.id"
                :client="client"
            ></ClientCard>
        </template>
        <template v-else>
            <div class="emptyRowStyle">
                <div class="smTxt txt">{{title === 'reservedList' ? '您目前無已預約客戶' : '您目前無已聯絡客戶'}}</div>
            <div class="client-list--empty">
                <div class="smTxt txt">{{ noDataPlaceholder }}</div>
            </div>
        </template>
    </div>
@@ -17,17 +17,31 @@
<script lang='ts'>
import { Vue, Component, Prop } from 'nuxt-property-decorator';
import { ClientInfo } from '~/assets/ts/api/appointment';
import { Appointment } from '~/shared/models/appointment.model';
@Component
export default class ClientList extends Vue {
    @Prop() clients!: ClientInfo[];
    @Prop() clients!: Appointment[];
    @Prop() title!: string;
    //////////////////////////////////////////////////////////////////////
    get noDataPlaceholder(): string {
      let noDataWording = '您目前無已結案的預約單';
      if (this.title === 'contactedList') {
        noDataWording = '您目前無約訪中的預約單';
      }
      if (this.title === 'reservedList') {
        noDataWording = '您目前無未聯絡的預約單';
      }
      return noDataWording;
    }
}
</script>
<style lang="scss" scoped>
    .emptyRowStyle {
    .client-list--empty {
        background-color: $PRIMARY_WHITE;
        width: 100%;
        height: 100px;
@@ -40,4 +54,4 @@
            margin-left: 17px;
        }
    }
</style>
</style>
PAMapp/components/Consultant-ques.vue
@@ -2,86 +2,70 @@
    <div>
        <div class="pam-tags">
            <div class="pb-10" v-for="(qaItem,index) in questionList" :key="index">
                <el-button  class="tags" :class="{'active': qaItem.selected}"
                <el-button  class="tags" :class="{ 'active': qaItem.selected }"
                @click="selectQuestion(index)">
                {{qaItem.name}}
                {{ qaItem.name }}
                </el-button>
            </div>
        </div>
    </div>
</template>
<script lang="ts">
import { Vue, Component, Emit, Prop} from 'vue-property-decorator';
import { consultantQuestions } from '~/shared/const/consult-questions';
@Component
    export default class ConsultantQues extends Vue{
        showDialog = false;
        other = '';
        otherQuestion = '';
      @Prop({ default: () => []})
      selectedQuestions!: string[];
        @Prop({ default: () => []}) selectedQuestions!: string[];
      other         : string = '';
      otherQuestion : string = '';
        get questionList(): any[] {
          return this.defaultQuestionList.map((question) => {
            const isSeleted = (quesName: string): boolean => this.selectedQuestions.some((question) => question === quesName);
            if (isSeleted(question.name)) {
                question.selected = true;
              }
            return question;
            }
          );
        }
      questionList: ConsultQuestionWithSelect[] = [];
        defaultQuestionList = [
          {
            name:'健康與保障',
            selected:false
          },
          {
            name:'子女教育',
            selected:false
          },
          {
            name:'資產規劃',
            selected:false
          },
          {
            name:'樂活退休',
            selected:false
          },
          {
            name:'保單健檢/規劃',
            selected:false
          },
          {
            name:'分紅保單',
            selected:false
      //////////////////////////////////////////////////////////////////////
      mounted() {
        const isSelected = (quesName: string): boolean => this.selectedQuestions.some((question) => question === quesName);
        this.questionList = consultantQuestions.map((consultQuestion) => {
          return {
            name: consultQuestion,
            selected: isSelected(consultQuestion)
          }
        ];
        })
      }
        @Emit('change')
        selectQuestion(questionIndex: number): any[] {
            this.questionList[questionIndex].selected = !this.questionList[questionIndex].selected;
            return this.questionList;
        }
      //////////////////////////////////////////////////////////////////////
      @Emit('change')
      selectQuestion(questionIndex: number): any[] {
          this.questionList[questionIndex].selected = !this.questionList[questionIndex].selected;
          return this.questionList;
      }
    }
    interface ConsultQuestionWithSelect {
      name    : string;
      selected: boolean;
    }
</script>
<style lang="scss">
.con-input{
    input:focus,textarea:focus {
    outline: none;
    border: 1px solid #ED1B2E;
    border : 1px solid #ED1B2E;
  }
}
.other-input{
    height: 50px;
    width:316px;
    border:1px solid #CCCCCC;
    height    : 50px;
    width     : 316px;
    border    : 1px solid #CCCCCC;
    margin-top: 10px;
}
@@ -90,10 +74,10 @@
}
.qa-dialog-footer{
    display: flex;
    display        : flex;
    justify-content: center;
    font-size: 20px;
    color: red;
    font-size      : 20px;
    color          : red;
}
.el-dialog__wrapper{
@@ -101,39 +85,38 @@
}
.qa-dialog{
    overflow:hidden;
    height: 500px;
    overflow  : hidden;
    height    : 500px;
    margin-top: 20px;
}
.qaTextTitle{
    font-size: 20px;
    font-family: bold;
    display: flex;
    font-size      : 20px;
    font-family    : bold;
    display        : flex;
    justify-content: center;
    align-items: center;
    margin-top: -15px;
    align-items    : center;
    margin-top     : -15px;
}
.qa-title{
    font-size: 20px;
    font-size    : 20px;
    margin-bottom: 10px;
}
.qa-content{
    font-size: 18px;
    font-size    : 18px;
    margin-bottom: 10px;
}
@include desktop
{
  .pam-tags{
      display:flex;
      flex-wrap:wrap;
      display  : flex;
      flex-wrap: wrap;
  }
  .tags{
      margin-right: 10px;
      height: 47px;
      height      : 47px;
  }
}
</style>
PAMapp/components/Consultant/ConsultantCard.vue
@@ -1,67 +1,75 @@
<template>
    <div>
        <el-row type="flex" class="rowStyle">
        <el-row type="flex" class="rowStyle" :class="{'new': !agentInfo.customerViewTime }">
            <el-col class="flex_column pl-5" :xs="5" :sm="3">
                <UiAvatar
                    :size="50"
                    :agentNo="agentInfo.agentNo"
                    @click.native="showAgentDetail(agentInfo.agentNo)"
                ></UiAvatar>
                <div v-if="!hideReviews" style="display: flex; justify-content: flex-start; align-items: center; margin-top: 6px; font-size: 12px">
                    <i v-if="isAppointment ? agentInfo.appointmentScore : agentInfo.avgScore"
                      class="icon-star pam-icon icon--yellow satisfaction"
                       style="margin-top: 0"></i>
                    <template v-if="isAppointment">
                      <template v-if="agentInfo.appointmentStatus === 'closed'
                                    || agentInfo.appointmentStatus === 'done'">
                        <span v-if="agentInfo.appointmentScore">
                            {{ agentInfo.appointmentScore }}
                        </span>
                        <div class="unfilled text--center "
                            style="display:flex"
                            v-else>未填<br />滿意度</div>
                      </template>
                    </template>
                    <template v-else>
                      <span v-if="agentInfo.avgScore">{{ agentInfo.avgScore }}</span>
                      <span class="unfilled text--center "
                          style="display:flex" v-else>尚無<br />滿意度</span>
                    </template>
            <el-col :xs="2" :sm="1" :class="{'state': agentInfo.new}"></el-col>
            <el-col :xs="22" :sm="23">
                <el-row type="flex">
                    <el-col class="flex_column" :xs="5" :sm="3">
                        <UiAvatar
                            :size="50"
                            :fileName="avatarFileName"
                            @click.native="showAgentDetail(agentInfo.agentNo)"
                        ></UiAvatar>
                        <div>
                            <i class="icon-star pam-icon icon--yellow satisfaction"  v-if="!(latestContactedAppointment && !latestContactedAppointment.satisfactionScore)"></i>
                            <span v-if="agentInfo.contactStatus === 'contacted' && latestContactedAppointment && latestContactedAppointment.satisfactionScore">
                                {{ latestContactedAppointment && latestContactedAppointment.satisfactionScore}}
                            </span>
                            <div class="unfilled text--center "
                                style="display:flex"
                                v-if="agentInfo.contactStatus === 'contacted' &&
                                latestContactedAppointment && !latestContactedAppointment.satisfactionScore">未填<br />滿意度</div>
                            <span v-if="agentInfo.contactStatus !== 'contacted'">{{ agentInfo.avgScore }}</span>
                        </div>
                    </el-col>
                    <el-col :xs="10" :sm="15">
                        <div class="smTxt_bold name">{{agentInfo.name}}</div>
                        <div class="professionals">
                            <span
                                class="professionalsTxt"
                                v-for="(expertise, index) in agentInfo.expertise"
                                :key="index"
                            >#{{expertise}}</span>
                        </div>
                        <div
                            class="delete"
                            v-if="agentInfo.contactStatus === 'picked'
                                || !agentInfo.contactStatus"
                            @click="removeAgent"
                        >移除</div>
                    </el-col>
                    <el-col class="flex_column" :xs="9" :sm="6">
                        <el-button
                            class="smTxt_bold outline_btn"
                            @click="reserveCommunication"
                            :class="agentInfo.contactStatus + 'Btn'"
                        >{{ contactTxt }}</el-button>
                        <div class="updateTime">
                            {{ displayTime | formatDate }}
                        </div>
                    </el-col>
                </el-row>
                </div>
            </el-col>
            <el-col :xs="10" :sm="15">
                <div class="smTxt_bold name">{{agentInfo.name}}</div>
                <div class="professionals">
                    <span
                        class="professionalsTxt"
                        v-for="(expertise, index) in agentInfo.expertise"
                        :key="index"
                    >#{{expertise}}</span>
                </div>
                <div
                    class="delete"
                    v-if="showRemoveBtn"
                    @click="isRemoveAgentPopup = true"
                >移除</div>
                <div
                    v-if="notScoreAppointmentYet && (agentInfo.appointmentStatus === 'closed' || agentInfo.appointmentStatus === 'done')"
                    class="text--primary text--underline cursor--pointer xsTxt text--bold"
                    @click="reviewsBtn = true">給予滿意度評分</div>
            </el-col>
            <el-col class="flex_column" :xs="9" :sm="6">
                <el-button
                    class="smTxt_bold outline_btn"
                    @click="reservedOrShowAppointmentInfo"
                    :class="actionBtnStyle"
                >{{ actionBtnLabel }}</el-button>
                <div class="updateTime mt-10">
                    {{ (isAppointment ? agentInfo.appointmentLastModifiedDate : agentInfo.updateTime)  | formatDate }}
                </div>
            </el-col>
        </el-row>
        <Ui-Dialog
            :isVisible.sync="isVisibleDialog"
            :width="width"
            class="pam-myDemand-dialog"
            class="pam-myDemand-dialog pam-dialog-reserved"
        >
            <div v-if="appointmentDetail">
                <h5 class="subTitle text--center mb-30">預約成功</h5>
                <p class="smTxt">{{appointmentDetail.appointmentDate | formatDate}}</p>
                <div class="dialogInfo">
                <p class="smTxt">{{appointmentDetail.appointmentDate | formatDate}} å»ºç«‹</p>
                <div class="reserved-info">
                    <p>姓名:{{appointmentDetail.name}}</p>
                    <p>電話:{{appointmentDetail.phone}}</p>
                    <p>Email:{{appointmentDetail.email}}</p>
@@ -73,36 +81,45 @@
                        v-for="(item, index) in hopeContactTime"
                        :key="index"
                    >連絡時段{{index + 1 | formatNumber}}:{{ item | formatHopeContactTime }}</p>
                    <div v-if="appointmentDetail.satisfactionScore">
                    <div v-if="appointmentDetail.appointmentScore">
                        <div class="mdTxt mt-10 mb-10">滿意度</div>
                            <el-rate
                            :value="appointmentDetail.satisfactionScore"
                            class="pam-myDemand-dialog__rate"
                            disabled>
                            </el-rate>
                        </div>
                        <el-rate
                        :value="appointmentDetail.appointmentScore"
                        class="pam-myDemand-dialog__rate"
                        disabled>
                        </el-rate>
                    </div>
                </div>
                <div v-if="agentInfo.contactStatus === 'contacted'
                        && !appointmentDetail.satisfactionScore" class="dialogInfo-btn">
                <div v-if="notScoreAppointmentYet && (agentInfo.appointmentStatus === 'closed' || agentInfo.appointmentStatus === 'done')" class="reserved-btn">
                    <el-button type="primary"
                        @click.native="reviewsBtn = true">給予滿意度評分</el-button>
                </div>
                <div v-if="agentInfo.contactStatus === 'reserved'" class="text--center mt-10">
                <div v-if="agentInfo.contactStatus === 'reserved' && !isAppointment" class="text--center mt-10">
                    <el-button @click="isCancelPopup = true">取消預約</el-button>
                    <el-button @click="edit" type="primary">編輯</el-button>
                </div>
            </div>
        </Ui-Dialog>
        <PopUpFrame :isOpen.sync="reviewsBtn">
            <div class="mdTxt">
        <PopUpFrame :isOpen.sync="reviewsBtn" class="reviewDialog-content">
            <div class="mdTxt pam-dialog-review">
                ä¿éšªé¡§å•æ»¿æ„åº¦
                <span class="hint">選取星星</span>
                <div class="dialogInfo-score">
                    <el-rate v-model="inputScore" class="pam-quickFilter-rate"></el-rate>
                <div class="mt-30 review-content">
                    <UiAvatar :size="80" :agentNo="agentInfo.agentNo"></UiAvatar>
                    <div class="review-text">對於顧問
                        <span class="text--primary">{{agentInfo.name}}</span>
                        çš„æ•´é«”服務,您給予幾顆星評價?
                    </div>
                </div>
                <div class="dialogInfo-btn">
                <div class="review-score">
                    <el-rate v-model="inputScore" class="pam-rate mt-30"></el-rate>
                </div>
                <div class="review-btn">
                    <el-button
                        type="primary"
                        :disabled="!inputScore"
@@ -114,8 +131,23 @@
        <PopUpFrame :isOpen.sync="isCancelPopup">
            <div class="text--center mdTxt">是否取消此筆預約?</div>
            <div class="text--center mt-30">
                <el-button @click="isCancelPopup = false">取消</el-button>
                <el-button @click="cancel" type="primary">確定</el-button>
                <el-button @click="isCancelPopup = false">否</el-button>
                <el-button @click="cancel" type="primary">是</el-button>
            </div>
        </PopUpFrame>
        <PopUpFrame  :isOpen.sync="isConfirmPopup">
            <div class="text--center mdTxt">已成功{{confirmTxt}}</div>
            <div class="text--center mt-30">
                <el-button @click="isConfirmPopup = false" type="primary">確定</el-button>
            </div>
        </PopUpFrame>
        <PopUpFrame :isOpen.sync="isRemoveAgentPopup">
            <div class="text--center mdTxt">是否移除顧問 <span class="text--primary">{{agentInfo.name}}</span>?</div>
            <div class="text--center mt-30">
                <el-button @click="isRemoveAgentPopup = false">否</el-button>
                <el-button @click="removeAgent" type="primary">是</el-button>
            </div>
        </PopUpFrame>
    </div>
@@ -123,12 +155,17 @@
<script lang="ts">
import { Vue, Component, Prop, Action, namespace } from 'nuxt-property-decorator';
import { getAppointmentDetail, UserReviewsConsultantsParams, userReviewsConsultants, cancelAppointment } from '~/assets/ts/api/consultant';
import { Consultant, Appointment } from '~/assets/ts/models/consultant.model';
import { isMobileDevice } from '~/assets/ts/device';
import { Role } from '~/assets/ts/models/enum/Role';
const roleStorage = namespace('localStorage');
import appointmentService from '~/shared/services/appointment.service';
import reviewsService from '~/shared/services/reviews.service';
import UtilsService from '~/shared/services/utils.service';
import { hideReviews } from '~/shared/const/hide-reviews';
import { Consultant, ConsultantWithAppointmentId } from '~/shared/models/consultant.model';
import { Appointment } from '~/shared/models/appointment.model';
import { SatisfactionType } from '~/shared/models/enum/satisfaction-type';
import { UserReviewParams } from '~/shared/models/reviews.model';
const localStorage = namespace('localStorage');
@Component({
    filters: {
        formatNumber(index: number) {
@@ -149,10 +186,12 @@
    }
})
export default class ConsultantCard extends Vue {
    @Action removeFromMyConsultantList!: (agentNo: string) => Promise<boolean>;
    @Action storeConsultantList!: any;
    @Prop() agentInfo!: Consultant;
    @roleStorage.Getter currentRole!:string;
    @Prop()
    agentInfo!: Consultant | ConsultantWithAppointmentId;
    @localStorage.State('current_role')
    currentRole!: string;
    isVisibleDialog = false;
    reviewsBtn = false;
@@ -160,44 +199,10 @@
    width: string = '';
    inputScore = 0;
    isCancelPopup = false;
    get latestContactedAppointment(): Appointment | null {
        if (!(this.agentInfo && this.agentInfo.appointments && this.agentInfo.appointments.length)) return null;
        const contactedAppointments: Appointment[] =  this.agentInfo.appointments
                                                        .filter((appointment) => appointment.communicateStatus === 'contacted')
                                                        .sort((preAppointment, nextAppointment) => +nextAppointment.appointmentDate - +preAppointment.appointmentDate);
        return contactedAppointments[0];
    }
    get latestReservedAppointment(): Appointment {
        return this.agentInfo.appointments!
                .filter((appointment) => appointment.communicateStatus !== 'contacted')
                .map((reversedAppointment) => {
                  return {
                    ...reversedAppointment,
                    sortDate: new Date(reversedAppointment.appointmentDate)
                  }
                })
                .sort((preAppointment, nextAppointment) => +nextAppointment.sortDate - +preAppointment.sortDate)[0];
    }
    get displayTime(): string {
        let time: Date | string = '';
        switch(this.agentInfo.contactStatus) {
            case 'reserved':
                time = this.agentInfo.updateTime
                break;
            case 'contacted':
                time = this.agentInfo.updateTime
                break;
            case 'picked':
                time = this.agentInfo.createTime
                break;
        }
        if (typeof time !== 'string') {
          time.toString();
        }
        return time as string;
    }
    hideReviews = hideReviews;
    isConfirmPopup = false;
    isRemoveAgentPopup = false;
    confirmTxt = '';
    appointmentDetail: any = {
        age               : '',
@@ -219,8 +224,40 @@
        otherRequirement  : null,
        phone             : "",
        requirement       : '',
        satisfactionScore : 0,
        appointmentScore : 0,
    };
    get notScoreAppointmentYet(): boolean {
      const isAppointment = !!this.agentInfo['appointmentStatus'];
      return isAppointment
            ? !this.agentInfo['appointmentScore']
            : !this.agentInfo.avgScore
    }
    get isAppointment(): boolean {
      return !!this.agentInfo['appointmentStatus'];
    }
    get latestNotClosedAppointment(): Appointment {
        return this.agentInfo.appointments!
                .filter((appointment) => appointment.communicateStatus === 'reserved' || appointment.communicateStatus === 'contacted')
                .map((reversedAppointment) => {
                    return {
                    ...reversedAppointment,
                    sortDate: new Date(reversedAppointment.appointmentDate)
                    }
                })
                .sort((preAppointment, nextAppointment) => +nextAppointment.sortDate - +preAppointment.sortDate)[0];
    }
    get showRemoveBtn(): boolean {
      const isAppointment = !!this.agentInfo['appointmentStatus'];
      if (isAppointment) {
        return false;
      } else {
        return this.agentInfo.contactStatus === 'picked' || !this.agentInfo.contactStatus;
      }
    }
    get avatarFileName() {
        return this.agentInfo.img;
@@ -232,50 +269,105 @@
        }
        return ''
    }
    get contactTxt() {
    get actionBtnLabel() {
      const isAppointment = !!this.agentInfo['appointmentStatus'];
      if (isAppointment) {
        if (this.agentInfo['appointmentStatus'] === 'contacted') {
            return '已聯絡';
        }
        if (this.agentInfo['appointmentStatus'] === 'reserved') {
            return '已預約';
        }
        if (this.agentInfo['appointmentStatus'] === 'done') {
            return '已成交';
        }
        if (this.agentInfo['appointmentStatus'] === 'closed') {
            return '未成交';
        }
      } else {
        if (this.agentInfo.contactStatus === 'contacted') {
            return '已聯絡';
        }
        if (this.agentInfo.contactStatus === 'reserved') {
            return '已預約';
        }
      }
        return '進行預約';
    }
    get actionBtnStyle() {
      const isAppointment = !!this.agentInfo['appointmentStatus'];
      if (isAppointment) {
        if (this.agentInfo['appointmentStatus'] === 'contacted') {
            return 'contactedBtn';
        }
        if (this.agentInfo['appointmentStatus'] === 'reserved') {
            return 'reservedBtn';
        }
        if (this.agentInfo['appointmentStatus'] === 'done') {
            return 'doneBtn';
        }
        if (this.agentInfo['appointmentStatus'] === 'closed') {
            return 'closedBtn';
        }
      } else {
        if (this.agentInfo.contactStatus === 'contacted') {
            return 'contactedBtn';
        }
        if (this.agentInfo.contactStatus === 'reserved') {
            return 'reservedBtn';
        }
      }
    }
    get hopeContactTime() {
        const contactList = this.appointmentDetail.hopeContactTime
            .split("'").map(item => item.slice(0, item.length));
        return contactList.filter(item => !!item && item !== ",")
            .split("'").map((item: any) => item.slice(0, item.length));
        return contactList.filter((item: any) => !!item && item !== ",")
    }
    reserveCommunication() {
        const contactStatus = this.agentInfo.contactStatus;
        if (!contactStatus || contactStatus === 'picked') {
            this.currentRole === Role.USER
                ? this.$router.push(`/questionnaire/${this.agentInfo.agentNo}`)
                : this.$router.push('/login');
    //////////////////////////////////////////////////////////////////////
    @Action
    removeFromMyConsultantList!: (agentNo: string) => Promise<boolean>;
    @Action
    storeConsultantList!: () => void;
    reservedOrShowAppointmentInfo() {
      const isAppointment = !!this.agentInfo['appointmentStatus'];
      const contactStatus = this.agentInfo.contactStatus;
        if (!isAppointment && (!contactStatus || contactStatus === 'picked')) {
            this.$router.push(`/questionnaire/${this.agentInfo.agentNo}`);
        } else {
            this.openPopUp();
        }
    }
    openPopUp() {
      const appointmentId = this.agentInfo.contactStatus === 'contacted'
                          ? this.latestContactedAppointment?.id
                          : this.latestReservedAppointment.id;
    openPopUp(): void {
      const isAppointment = !!this.agentInfo['appointmentStatus'];
      const appointmentId = isAppointment
                          ? this.agentInfo['appointmentId']
                          : this.latestNotClosedAppointment.id;
        getAppointmentDetail(appointmentId!).then(res => {
        appointmentService.getAppointmentDetail(appointmentId!).then(res => {
            this.appointmentDetail = {
                ...this.appointmentDetail,
                ...res.data
                ...res,
                appointmentScore:  this.agentInfo['appointmentScore'],
            };
            this.width = isMobileDevice() ? '80%' : '';
            this.width = UtilsService.isMobileDevice() ? '80%' : '';
            this.isVisibleDialog = true;
        });
    }
    removeAgent() {
        this.removeFromMyConsultantList(this.agentInfo.agentNo).then((removeOk) => {
            this.isRemoveAgentPopup = false;
            setTimeout(() => {
                this.confirmTxt = '移除顧問';
                this.isConfirmPopup = true;
            }, 300);
        });
    }
@@ -284,23 +376,34 @@
    }
    userReviewsConsultants() {
        const reviewParams: UserReviewsConsultantsParams = {
            appointmentId: this.appointmentDetail.id,
            score: this.inputScore,
        }
        this.appointmentDetail.satisfactionScore = this.inputScore;
      const isAppointment = !!this.agentInfo['appointmentStatus'];
      const appointmentId = isAppointment
                          ? this.agentInfo['appointmentId']
                          : this.latestNotClosedAppointment.id;
        userReviewsConsultants(reviewParams).then((res) => {
        const reviewParams: UserReviewParams = {
            appointmentId: appointmentId,
            score: this.inputScore,
            type : SatisfactionType.APPOINTMENT,
        }
        this.appointmentDetail.appointmentScore = this.inputScore;
        reviewsService.userReviewsConsultants(reviewParams).then((res) => {
            this.reviewsBtn = false;
            this.storeConsultantList();
        });
    }
    cancel() {
        cancelAppointment(this.latestReservedAppointment.id).then(res => {
        appointmentService.cancelAppointment(this.latestNotClosedAppointment.id).then(res => {
            this.storeConsultantList();
            this.isVisibleDialog = false;
            this.isCancelPopup = false;
            setTimeout(() => {
                this.confirmTxt = '取消此筆預約';
                this.isConfirmPopup = true;
            }, 300);
        });
    }
@@ -319,13 +422,10 @@
        margin-bottom: 10px;
        display: flex;
        justify-content: space-between;
        border-left: 4px solid transparent;
        .state {
            width: 10px;
            height: 10px;
            border-radius: 50px;
            background-color: $YELLOW;
            margin: auto 0;
        &.new {
            border-color: $YELLOW;
        }
        .satisfaction {
@@ -354,6 +454,7 @@
        }
        .delete {
            display: inline-block;
            color: $PRIMARY_RED;
            font-size: 14px;
            font-weight: bold;
@@ -382,6 +483,28 @@
            }
        }
        .doneBtn {
            color: $BEIGE;
            border-color: $BEIGE;
            &:focus {
                color: $PRIMARY_WHITE;
                background-color: $BEIGE;
                opacity: 0.5;
            }
        }
        .closedBtn {
            color: $PRUDENTIAL_GREY;
            border-color: $PRUDENTIAL_GREY;
            &:focus {
                color: $PRIMARY_WHITE;
                background-color: $PRUDENTIAL_GREY;
                opacity: 0.5;
            }
        }
        .updateTime {
            font-size: 12px;
            font-weight: bold;
@@ -395,20 +518,4 @@
        flex-direction: column;
        justify-content: space-between;
    }
    .dialogInfo {
        font-size: 20px;
        overflow-y:scroll;
        height: 400px;
    }
    .dialogInfo-btn{
        display: flex;
        justify-content: center;
    }
    .dialogInfo-score{
        display: flex;
        justify-content: center;
        margin-bottom: 50px;
    }
</style>
PAMapp/components/Consultant/ConsultantList.vue
@@ -1,6 +1,5 @@
<template>
    <div>
        <template v-if="agentList.length > 0">
            <ConsultantCard
                v-for="(agent, index) in agentList"
@@ -8,12 +7,12 @@
                :agentInfo="agent"
            ></ConsultantCard>
        </template>
        <template v-if="isLogin && agentList.length === 0">
        <template v-if="isUserLogin && agentList.length === 0">
            <div class="emptyRowStyle">
                <div class="smTxt txt">您目前無已選顧問</div>
                <div class="smTxt txt">{{ noDataPlaceholder }}</div>
            </div>
        </template>
        <template v-if="!isLogin">
        <template v-if="!isUserLogin">
            <div class="emptyRowStyle">
                <div class="mdTxt login fix-chrome-click--issue" @click="$router.push('/login')">登入 | è¨»å†Š</div>
                <div class="smTxt txt ">查看更多</div>
@@ -23,24 +22,38 @@
</template>
<script lang="ts">
import { Vue, Component, Prop, namespace } from 'nuxt-property-decorator';
import { Consultant } from '~/assets/ts/models/consultant.model';
import { Role } from '~/assets/ts/models/enum/Role';
const roleStorage = namespace('localStorage');
import { Consultant } from '~/shared/models/consultant.model';
import { Vue, Component, Prop } from 'nuxt-property-decorator';
import authService from '~/shared/services/auth.service';
@Component
export default class ConsultantList extends Vue {
    @Prop() agents!: Consultant[];
    @roleStorage.Getter currentRole!:string;
    @Prop()
    agents!: Consultant[];
    get isLogin() {
        return this.currentRole === Role.USER;
    }
    @Prop()
    title! : string;
    isUserLogin = false;
    //////////////////////////////////////////////////////////////////////
    get agentList(){
        return this.agents.map((agentDto)=>
            ({...agentDto,customerScore:0,})
        )
      return this.agents.map((agentDto)=>
          ({...agentDto,customerScore:0,})
      )
    }
    get noDataPlaceholder(): string {
      return this.title === 'contactedList'
                          ? '您目前無已聯絡顧問'
                          : '您目前無已選顧問';
    }
    //////////////////////////////////////////////////////////////////////
    mounted() {
      this.isUserLogin = authService.isUserLogin();
    }
}
PAMapp/components/Consultant/ConsultantSwiper.vue
@@ -10,17 +10,26 @@
          :key="index"
        >
            <div class="consultantCardStyle" >
              <UiAvatar :size="80" :fileName="agentInfo.img" class="mb-10"></UiAvatar>
              <UiAvatar
                class="mb-10"
                :size="80"
                :agentNo="agentInfo.agentNo"
              >
              </UiAvatar>
              <div class="name">{{agentInfo.name}}</div>
              <div>
              <div v-if="!hideReviews" style="display: flex; align-items: center; justify-content: center; margin-top: 4px">
                <i class="icon-star pam-icon icon--yellow"></i>
                <span class="satisfaction">{{agentInfo.avgScore}}</span>
              </div>
          </div>
        </swiper-slide>
        <div class="swiper-button-prev" slot="button-prev"></div>
        <div class="swiper-button-next" slot="button-next"></div>
        <div class="swiper-button-prev" slot="button-prev">
          <i class="icon-left"></i>
        </div>
        <div class="swiper-button-next" slot="button-next">
          <i class="icon-right"></i>
        </div>
    </swiper>
</div>
</template>
@@ -28,13 +37,16 @@
<script lang="ts">
import { Vue, Component, Prop } from 'vue-property-decorator';
import { SwiperOptions } from 'swiper';
import { Consultant } from '~/assets/ts/models/consultant.model';
import { Consultant } from '~/shared/models/consultant.model';
import { hideReviews } from '~/shared/const/hide-reviews';
@Component
export default class UiSwiper extends Vue {
    @Prop() agents!: Consultant[];
    @Prop()
    agents!: Consultant[];
    hideReviews = hideReviews ;
    swiperOptions: SwiperOptions = {
      loop: false,
        slideToClickedSlide: false,
@@ -53,6 +65,8 @@
          }
        }
    }
    //////////////////////////////////////////////////////////////////////
    clkItem(loopIndex: number, realIndex: number) {
      const agentNo = this.agents[loopIndex].agentNo;
@@ -82,9 +96,12 @@
    height: 100%;
    &:after {
      display: none;
    }
    .icon-right,.icon-left {
      font-size: 20px;
      font-weight: bold;
      color: #707A81;
      color: $CORAL;
    }
    &.swiper-button-disabled {
PAMapp/components/DateTimePicker.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,65 @@
<template>
    <div class="dateTime">
        <UiDatePicker
            @changeDate="changeDateTime($event, 'date')"
            :isPastDateDisabled="isPastDateDisabled"
            :isFutureDateDisabled="isFutureDateDisabled"
            :defaultValue="defaultValue"
        ></UiDatePicker>
        <UiTimePicker
            @changeTime="changeDateTime($event, 'time')"
            :defaultValue="defaultValue"
            :isPastDateDisabled="isPastDateDisabled"
            :isFutureDateDisabled="isFutureDateDisabled"
            :changeDate="changeDate"
        ></UiTimePicker>
    </div>
</template>
<script lang="ts">
import { Component, Emit, Prop, Vue, Watch } from "nuxt-property-decorator";
@Component
export default class DateTimePicker extends Vue {
    changeDate: Date | string = '';
    changeTime!: string;
    @Prop()
    defaultValue!: string;
    @Prop()
    isPastDateDisabled!: boolean;
    @Prop()
    isFutureDateDisabled!: boolean;
    @Emit('changeDateTime')
    changeDateTime(event, type) {
        if (type === 'date') {
            this.changeDate = event;
        }
        if (type === 'time') {
            this.changeTime = event;
        }
        if (this.changeDate && this.changeTime) {
            const hour = this.changeTime.split(':')[0];
            const minute = this.changeTime.split(':')[1];
            const interViewTime = new Date(this.changeDate).setHours(+hour, +minute);
            return new Date(interViewTime);
        }
        return '';
    }
}
</script>
<style lang="scss" scoped>
.dateTime {
    display: flex;
    flex-direction: row;
    justify-content: space-between;
    font-size: 20px;
}
</style>
PAMapp/components/Footer.vue
@@ -20,7 +20,7 @@
          <li class="pam-footer-contact__item">(專員接聽時間:週一 ~ é€±äº” 08:00~20:00 åŠé€±å…­ã€æ—¥åŠä¾‹å‡æ—¥09:00~17:30)</li>
        </ul>
      </section>
      <section class="pam-footer-copywrite">本網站由保誠人壽與保經代共同合作</section>
      <section class="pam-footer-copywriting">本網站由保誠人壽與保經代共同合作</section>
    </footer>
</template>
@@ -44,18 +44,19 @@
  label: string;
  url: string;
}
</script>
<style lang="scss" scoped>
.pam-footer {
  border-top: 1px solid #CCCCCC;
  border-top      : 1px solid #CCCCCC;
  background-color: $PRIMARY_WHITE;
  .pam-footer-nav {
    padding: 10px 20px;
    .pam-footer-nav__list {
      display: flex;
      list-style: none;
      flex-wrap: wrap;
      display        : flex;
      list-style     : none;
      flex-wrap      : wrap;
      justify-content: center;
      .pam-footer-nav__item {
        padding: 10px 0 10px 10px;
@@ -65,7 +66,7 @@
        @extend .cursor--pointer;
         a, a:hover, a:focus, a:active {
              text-decoration: none;
              color: inherit;
              color          : inherit;
        }
        &:nth-of-type(3) {
          .pam-footer-nav__item-pipe {
@@ -79,37 +80,37 @@
    }
  }
  .pam-footer-contact {
    padding: 10px 20px;
    display: flex;
    padding       : 10px 20px;
    display       : flex;
    flex-direction: column;
    .pam-footer-contact__list {
      display: flex;
      list-style: none;
      flex-wrap: wrap;
      display        : flex;
      list-style     : none;
      flex-wrap      : wrap;
      justify-content: center;
      .pam-footer-contact__item {
        color: $PRUDENTIAL_GREY;
        font-size: 12px;
        text-align: center;
        color      : $PRUDENTIAL_GREY;
        font-size  : 12px;
        text-align : center;
        line-height: 20px;
        @extend .text--bold;
        .phone {
          color: $PRIMARY_BLACK;
          color    : $PRIMARY_BLACK;
          font-size: 14px;
          @extend .text--bold;
        }
      }
    }
  }
  .pam-footer-copywrite {
  .pam-footer-copywriting {
    background-color: $PRIMARY_RED;
    display: flex;
    justify-content: center;
    color: $PRIMARY_WHITE;
    padding: 10px 0;
    font-size: 12px;
    font-weight: bold;
    line-height: 20px;
    display         : flex;
    justify-content : center;
    color           : $PRIMARY_WHITE;
    padding         : 10px 0;
    font-size       : 12px;
    font-weight     : bold;
    line-height     : 20px;
  }
}
</style>
PAMapp/components/Interview/InterviewAdd.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,269 @@
<template>
  <div class="edit-appointment-record">
      <div class="edit-appointment-record-date" v-if="interviewId && interviewRecord">
          <span>{{interviewRecord.createdDate | formatDate}} å»ºç«‹</span>
          <span>{{interviewRecord.lastModifiedDate | formatDate}} æ›´æ–°</span>
      </div>
      <el-row class="mdTxt mb-10">
          <el-col :xs="16" :sm="20">
            <span :class="{'required': !interviewId || isEdit}">約訪時間</span>
          </el-col>
          <el-col :xs="8" :sm="4" class="text--right" v-if="interviewId">
              <span
                v-if="!isEdit"
                class="mr-10 text--primary  cursor--pointer"
                @click="showCancelPopUp = true"
              ><i class="icon-delet"></i></span>
              <span
                v-if="!isEdit"
                class="text--primary  cursor--pointer"
                @click="isEdit = !isEdit"
              ><i class="icon-edit"></i></span>
          </el-col>
      </el-row>
      <template v-if="!interviewId || isEdit">
          <DateTimePicker
            @changeDateTime="interviewTime = $event"
            :defaultValue="defaultValue"
          ></DateTimePicker>
      </template>
      <template v-else>
          <div class="fs-20 mt-20">
              {{formatInterviewDate}}
          </div>
      </template>
      <div class="mdTxt mb-10 mt-30" :class="{'required': !interviewId || isEdit}">約訪紀錄</div>
      <template v-if="!interviewId || isEdit">
          <el-input
            type="textarea"
            :rows="5"
            placeholder="請輸入約訪紀錄"
            resize="none"
            v-model="content"
        >
        </el-input>
      </template>
      <template v-else>
          <div class="fs-20 mt-20">
              {{content}}
          </div>
      </template>
      <div class="edit-appointment-record-btn" v-if="!interviewId || isEdit">
          <el-button @click="cancel">取消</el-button>
          <el-button
            :disabled="!interviewTime || !content"
            @click="saveInterviewRecord"
          >確定</el-button>
      </div>
      <PopUpFrame :isOpen.sync="showCancelPopUp"
         @closePopUp="showCancelPopUp = false"
      >
        <div class="text--center mdTxt">是否刪除此筆約訪記錄?</div>
        <div class="text--center mt-30">
            <el-button @click="showCancelPopUp = false">否</el-button>
            <el-button @click="deleteInterviewRecord" type="primary">是</el-button>
        </div>
      </PopUpFrame>
      <PopUpFrame :isOpen.sync="showConfirmPopup"
        @closePopUp="closePopup">
        <div class="text--center mdTxt">{{confirmTxt}}!</div>
        <div class="text--center mt-30">
            <el-button @click="closePopup" type="primary">確定</el-button>
        </div>
      </PopUpFrame>
      <PopUpFrame :isOpen.sync="showFutureDateConfirmPopup"
        @closePopUp="closePopup">
        <div class="text--center mdTxt">{{confirmTxt}}!</div>
        <div class="text--center mdTxt">立即發送約訪通知?</div>
        <div class="text--center mt-30 confirm-btn">
            <el-button @click="closePopup">先不發送</el-button>
            <el-button @click="showInterviewMsgPopup = true" type="primary">傳送約訪通知</el-button>
        </div>
      </PopUpFrame>
      <InterviewMsg
        :isVisible.sync="showInterviewMsgPopup"
        :client="appointmentDetail"
        :defaultValue="interviewTime"
        @closeDialog="closePopup"
      ></InterviewMsg>
  </div>
</template>
<script lang="ts">
import { Appointment, InterviewRecord, InterviewRecordInfo } from '~/shared/models/appointment.model';
import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
import appointmentService from '~/shared/services/appointment.service';
const appointmentStore = namespace('appointment.store');
@Component
export default class InterviewAdd extends Vue {
    @appointmentStore.State
    appointmentDetail!: Appointment;
    @appointmentStore.Action
    updateAppointmentDetail!: (id: number) => Appointment;
    interviewTime = '';
    content = '';
    interviewId = '';
    appointmentId = '';
    confirmTxt: '新增成功' | '編輯成功' | '刪除成功' = '新增成功';
    isEdit = false;
    showConfirmPopup = false;
    showCancelPopUp = false;
    showInterviewMsgPopup = false;
    showFutureDateConfirmPopup = false;
    defaultValue = '';
    interviewRecord!: InterviewRecord;
    ////////////////////////////////////////////////////////////////////
    mounted() {
        this.interviewId = this.$route.params.interviewId;
        this.appointmentId = this.$route.params.appointmentId;
        this.onAppointmentDetailChange();
    }
    ////////////////////////////////////////////////////////////////////
    @Watch('appointmentDetail', {immediate: true})
    onAppointmentDetailChange() {
        if (this.appointmentDetail && this.appointmentDetail.id === +this.appointmentId) {
            this.interviewRecord = this.appointmentDetail.interviewRecordDTOs
                .filter(item => item.id === +this.interviewId)[0];
                if (this.interviewRecord && this.interviewId) {
                    this.content = this.interviewRecord.content;
                    this.defaultValue = this.interviewRecord.interviewDate;
                }
        }
    }
    ////////////////////////////////////////////////////////////////////
    saveInterviewRecord() {
        const interviewRecordInfo: InterviewRecordInfo = {
            content: this.content,
            interviewDate: this.interviewTime,
            appointmentId: +this.appointmentId
        };
        if (!this.interviewId) {
            this.createdRecord(interviewRecordInfo);
        } else {
            const updateInterviewRecord = {
                ...interviewRecordInfo,
                id: +this.interviewId
            }
            this.updateRecord(updateInterviewRecord);
        }
    }
    private createdRecord(interviewRecordInfo) {
        appointmentService.createInterviewRecord(interviewRecordInfo).then(res => {
            this.showPopUp('新增成功');
        });
    }
    private updateRecord(updateInterviewRecord) {
        appointmentService.updateInterviewRecord(updateInterviewRecord).then(res => {
            this.showPopUp('編輯成功');
        });
    }
    private showPopUp(confirmTxt) {
        this.confirmTxt = confirmTxt;
        this.updateAppointmentDetail(+this.appointmentId);
        if (new Date(this.interviewTime).getTime() >= new Date().getTime()) {
            this.showFutureDateConfirmPopup = true;
        } else {
            this.showConfirmPopup = true;
        }
    }
    deleteInterviewRecord() {
        appointmentService.deleteInterviewRecord(this.interviewId).then(res => {
            this.confirmTxt = '刪除成功';
            this.showConfirmPopup = true;
            this.updateAppointmentDetail(+this.appointmentId);
        });
    }
    cancel() {
        if (this.interviewId) {
           this.content = this.interviewRecord.content;
           this.defaultValue = this.interviewRecord.interviewDate;
           this.isEdit = false;
        } else {
           this.$router.go(-1);
        }
    }
    closePopup() {
        this.$router.go(-1);
    }
    ////////////////////////////////////////////////////////////////////
    get formatInterviewDate() {
        const interviewDate = new Date(this.interviewRecord.interviewDate);
        const hours = interviewDate.getHours();
        const minutes = interviewDate.getMinutes();
        return `${interviewDate.getFullYear()}/${interviewDate.getMonth() + 1}/${interviewDate.getDate()} ${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}`;
    }
}
</script>
<style lang="scss" >
.edit-appointment-record {
    padding-left : 10px;
    padding-right: 10px;
    .edit-appointment-record-date{
        color          : #68737A;
        display        : flex;
        justify-content: space-between;
        margin-bottom  : 26px;
    }
}
.edit-appointment-record-btn{
    margin-top: 30px;
    display: flex;
    justify-content: center;
}
.el-textarea__inner {
    border: 1px solid #707070;
    padding: 10px 20px;
    font-size: 20px;
    &::placeholder {
        font-size: 20px;
    }
}
.required {
      position: relative;
      &::before {
        content: '*';
        position: absolute;
        color: #FF0000;
        transform: translate(-12px, 0);
        z-index: 5;
      }
    }
.confirm-btn{
  display: flex;
  justify-content: center;
}
</style>
PAMapp/components/Interview/InterviewCard.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,176 @@
<template>
    <div>
      <template v-if="!interviewList.length">
          <span class="record-card record-card--empty" style="display:flex">
            ç„¡ç´„訪紀錄
          </span>
      </template>
      <template v-else>
        <div class="interview--future">
          <div class="record-card mb-10"
                v-for="(item, index) in futureList"
                :key="index + 'feature'"
                @click="editInterview(item)"
          >
            <div class="remind-container">
              <div class="remind-date mr-10">
                <div class="mb-3 smTxt bgc-primary-red date-year">
                  <div class="mb-3 mt-2">
                    <UiDateFormat
                            class="date bold"
                            :date="item.interviewDate"
                            onlyShowSection="YEAR" />
                  </div>
                </div>
              <div class="p mt-5">
                <UiDateFormat
                            class="mt-5 line-space time"
                            :date="item.interviewDate"
                            onlyShowSection="DATE" />
              </div>
            </div>
            <div class="remind-content-txt">
              <div style="display:flex">
                <UiDateFormat
                            class="mt-5 line-space mb-3 time"
                            :date="item.interviewDate"
                            onlyShowSection="TIME" />
              </div>
                <div class="interview-card-content">{{item.content}}</div>
            </div>
          </div>
            </div>
        </div>
        <section class="interview--past" v-if="pastList.length">
            <div class="record-card mb-10"
                v-for="(item, index) in pastList"
                :key="index + 'past'"
                @click="editInterview(item)"
            >
              <div class="remind-container">
                <div class="remind-date mr-10">
                  <div class="mb-3 smTxt bgc-primary-red date-year">
                    <div class="mb-3 mt-2">
                      <UiDateFormat
                            class=" date"
                            :date="item.interviewDate"
                            onlyShowSection="YEAR" />
                    </div>
                    </div>
                  <div class="p mt-5">
                    <UiDateFormat
                            class="mt-5 line-space time"
                            :date="item.interviewDate"
                            onlyShowSection="DATE" />
                  </div>
                </div>
                <div class="remind-content-txt">
                  <div style="display:flex">
                    <UiDateFormat
                            class="mt-5 line-space mb-3 time"
                            :date="item.interviewDate"
                            onlyShowSection="TIME" />
                  </div>
                    <div class="interview-card-content">{{item.content}}</div>
                </div>
              </div>
            </div>
        </section>
      </template>
    </div>
</template>
<script lang="ts">
import { Component, Prop, Vue, Watch } from "nuxt-property-decorator";
import { InterviewRecord } from "~/shared/models/appointment.model";
@Component
export default class InterviewCard extends Vue {
    @Prop()
    interviewList!: InterviewRecord[];
    futureList: InterviewRecord[] = [];
    pastList: InterviewRecord[] = [];
    appointmentId!: number;
    mounted() {
        this.appointmentId = +this.$route.params.appointmentId;
    }
    @Watch('interviewList', {immediate: true})
    onInterviewListChange() {
        if (this.interviewList.length > 0) {
            this.futureList = this.interviewList
            .filter(item => new Date(item.interviewDate).getTime() >= new Date().getTime())
            .sort((preItem, nextItem) => +new Date(nextItem.interviewDate) - +new Date(preItem.interviewDate));
          this.pastList = this.interviewList
            .filter(item =>  new Date(item.interviewDate).getTime() < new Date().getTime())
            .sort((preItem, nextItem) => +new Date(nextItem.interviewDate) - +new Date(preItem.interviewDate));
        }
    }
    editInterview(interviewRecord) {
        this.$router.push(`/appointment/${this.appointmentId}/interview/${interviewRecord.id}`);
    }
}
</script>
<style lang="scss" scoped>
.interview--future{
    .record{
        display: flex;
        justify-content: space-between;
        margin-bottom: 10px;
    }
}
.interview--past {
    margin-top: 10px;
    border-top: 1px solid #CCCCCC;
    padding-top: 17px;
    margin-top: 17px;
}
.record-card {
    height: 64px;
    margin-bottom: 20px;
    .record-card-date{
        display: flex;
        flex-direction: column;
        margin-left: 10px;
        margin-right: 10px;
        margin-top: 10px;
    }
    .record-card-content{
        height: 42px;
        margin-top: 10px;
        margin-right: 10px;
        line-height: 1.2;
    }
  &.record-card--empty {
    align-items     : center;
    background-color: #fff;
    color           : $MID_GREY;
    justify-content : center;
  }
}
.interview-card-content{
 overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        word-break: break-all;
        word-wrap: break-word;
        -webkit-line-clamp: 2;
}
.line-space{
    letter-spacing: 1px;
}
</style>
PAMapp/components/Interview/InterviewMsg.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,176 @@
<template>
  <div class="interview-msg-component">
    <el-dialog
      :visible.sync="dialogVisible"
      :width="dialogWidth"
      @close="closeDialog"
      :lock-scroll="false"
        >
        <div class="subTitle msg-dialog-title">約訪通知</div>
      <div class="send-msg-nav">
        <div class="mdTxt">通知內容</div>
      </div>
      <el-input
        type="textarea"
        :autosize="true"
        placeholder="約訪通知"
        resize="none"
        v-model="interviewTxt">
        </el-input>
      <div v-if="client.phone">
        <div class="mdTxt mt-30 mb-10 required">預計約訪時段</div>
        <DateTimePicker
          @changeDateTime="interviewTime = $event"
          :isPastDateDisabled="true"
          :defaultValue="defaultValue"
        ></DateTimePicker>
      </div>
      <div class="msg-dialog-btn">
        <el-button @click="addInterview"  :disabled="isBtnDisabled">傳送</el-button>
      </div>
        </el-dialog>
        <PopUpFrame
          :isOpen.sync="isShowSuccessAlert"
          @closePopUp="closeAllDialog">
        <div class="text--middle invite-review">
            <div class="mb-30 mt-10">已發送約訪通知</div>
            <div class="text--primary text--middle cursor--pointer text--underline" @click="closeAllDialog " :size="'250px'">我知道了</div>
          </div>
        </PopUpFrame>
  </div>
</template>
<script lang="ts">
import { Vue, Component, Prop, PropSync, Emit, namespace } from 'nuxt-property-decorator';
import appointmentService from '~/shared/services/appointment.service';
import { Appointment, ToInformAppointment } from '~/shared/models/appointment.model';
import { AgentInfo } from '~/shared/models/agent-info.model';
const loginStore = namespace('login.store');
const appointmentStore = namespace('appointment.store');
@Component
export default class InterviewMsg extends Vue {
    @appointmentStore.Action
    updateAppointmentDetail!: (id: number) => Appointment;
    @appointmentStore.Action
    getMyAppointmentList!: () => Promise<Appointment[]>;
    @PropSync('isVisible')
    dialogVisible!: boolean;
    @Prop({default:'90%'})
    dialogWidth!:string;
    @Prop()
    client!: Appointment;
    @Prop()
    defaultValue!: string;
    @Emit('closeDialog')
    closeDialog() {
        return;
    }
    @loginStore.State
    loginConsultant!: AgentInfo;
    isShowSuccessAlert = false;
    interviewTxt = "";
    interviewTime = '';
    //////////////////////////////////////////////////////////////////////
    mounted() {
      if(this.loginConsultant.phoneNumber && this.loginConsultant.email)
      {
        this.interviewTxt = "您好!我是保誠媒合平台的保險顧問" + this.loginConsultant.name + ",感謝您的預約!我預計會在下述的時間與您聯繫"+"\n"+"以下是我的電話號碼/Email:"+"\n" + this.loginConsultant.phoneNumber + "\n" + this.loginConsultant.email + "\n"+"若此時間不方便,請與我聯繫!謝謝!"}
        else if (!this.loginConsultant.phoneNumber && this.loginConsultant.email)
          {
            this.interviewTxt = "您好!我是保誠媒合平台的保險顧問" + this.loginConsultant.name + ",感謝您的預約!我預計會在下述的時間與您聯繫"+"\n"+"以下是我的Email:"+"\n" + this.loginConsultant.email + "\n"+"若此時間不方便,請與我聯繫!謝謝!"
        }
        else
        this.interviewTxt = "您好!我是保誠媒合平台的保險顧問" + this.loginConsultant.name + ",感謝您的預約!我預計會在下述的時間與您聯繫"+"\n"+"以下是我的電話號碼:"+"\n" + this.loginConsultant.phoneNumber + "\n"+"若此時間不方便,請與我聯繫!謝謝!"
    }
    addInterview() {
      const appointmentInformation: ToInformAppointment = {
        appointmentId: this.client.id,
        email        : this.client?.email,
        interviewDate: this.interviewTime,
        message      : this.interviewTxt,
        phone        : this.client?.phone,
      };
      appointmentService.informAppointment(appointmentInformation).then((_) => {
        this.isShowSuccessAlert = true ;
      });
    }
    closeAllDialog() {
      this.isShowSuccessAlert = false ;
      this.dialogVisible = false;
      this.updateAppointmentDetail(this.client.id);
      this.getMyAppointmentList();
    }
    get isBtnDisabled() :Boolean {
      const isFormValid = this.client.phone ? this.interviewTxt && this.interviewTime :this.interviewTxt
      return !isFormValid
    }
}
</script>
<style lang="scss" >
.interview-msg-component{
  .required {
  position: relative;
  &::before {
      content: '*';
      position: absolute;
      color: #FF0000;
      transform: translate(-12px, 0);
    }
  }
  .msg-dialog-title{
    display: flex;
    justify-content: center;
    margin-bottom:30px;
    color: $PRIMARY_BLACK;
  }
  .send-msg-nav{
    display: flex;
    justify-content: space-between;
    margin-bottom: 10px;
    color: $PRIMARY_BLACK;
  }
  .el-dialog{
    width:90%
  }
  .el-textarea__inner{
    font-size: 20px;
    padding:10px;
    text-align: justify;
    font-weight: 600;
  }
  .msg-dialog-btn{
    margin-top: 30px;
    display: flex;
    justify-content: center;
  }
  .invite-review{
      display: flex;
      flex-direction: column;
      align-items: center;
    }
}
</style>
PAMapp/components/Interview/InterviewRecordCard.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,98 @@
<template>
    <div class="record-log-component">
        <div v-for="(item, index) in noticeLogsList"
                :key="index">
                <section
                    class="record-log-card"
                >
                    <div class="record-log-card-date-container">
                        <div class="record-log-card-date-container-circle">
                            <div>
                                <UiDateFormat
                                    class="xxsTxt bold line-height"
                                    :date="item.createdDate"
                                    onlyShowSection="YEAR" />
                            </div>
                            <div>
                                <UiDateFormat
                                    class="xxsTxt bold line-height"
                                    :date="item.createdDate"
                                    onlyShowSection="DATE" />
                            </div>
                            <div>
                                <UiDateFormat
                                    class="xxsTxt mt-4 line-space"
                                    :date="item.createdDate"
                                    onlyShowSection="TIME" />
                            </div>
                        </div>
                    </div>
                        <div class="record-log-msg">
                            <div>發送約訪通知
                                <span v-if="item.email && item.phone">(手機簡訊、Email)</span>
                                <span v-else-if="item.email">(Email)</span>
                                <span v-else>(手機簡訊)</span>
                            </div>
                            <div v-if="item.phone" class="mt-10">預約{{item.interviewDate | formatDate}}</div>
                        </div>
                </section>
                <div class="time-line"></div>
            </div>
    </div>
</template>
<script lang="ts">
import { Component, Prop, Vue } from "nuxt-property-decorator";
import { NoticeLogs } from "~/shared/models/appointment.model";
@Component
export default class RecordCard extends Vue {
    @Prop()
    noticeLogsList!: NoticeLogs[];
}
</script>
<style lang="scss" scoped>
.record-log-component{
    display: flex;
    flex-direction: column;
    .record-log-card{
        display: flex;
        .record-log-card-date-container{
            position:relative;
            .record-log-card-date-container-circle{
                display: flex;
                flex-direction: column;
                width: 56px;
                height: 56px;
                border-radius: 50%;
                border:1px solid $PRIMARY_BLACK;
                justify-content: center;
                align-items: center;
                align-content: center;
                background-color:#1B365D;
                color: #fff;
            }
        }
    }
}
.mt-4{
    margin-top: 4px;
}
.line-space{
    letter-spacing: 1px;
}
.line-height{
    line-height:1.2;
}
.time-line{
    border-left: 1px solid black;
    height: 30px;
    margin-left: 28px;
}
.record-log-msg{
    margin-left: 13px;
    margin-top: 10px;
}
</style>
PAMapp/components/NavBar.vue
@@ -7,13 +7,32 @@
      <div class="pam-header__title--sub">預約我的幸福守護者</div>
    </div>
    <div class="pam-header__action-bar">
      <!-- <i class="icon-bell text--dark-blue cursor--pointer fix-chrome-click--issue"
        @click="$router.push('/notification')"></i> -->
      <i
        v-if="isShowNotification"
        class="icon-bell text--dark-blue cursor--pointer"
        @click="$router.push('/notification')"
      >
        <span :class="{'newNotification': isNewNotification}"></span>
      </i>
        <el-dropdown :class="{'is-open':isOpenDropdown}"
          ref="dropdown"
          trigger="click"
          @command="routerNavigateTo">
          <i class="icon-avatar text--dark-blue cursor--pointer fix-chrome-click--issue" @click="isOpenDropdown =!isOpenDropdown" @blur="isOpenDropdown =false"></i>
          <div
            @click="isOpenDropdown =!isOpenDropdown"
            @blur="isOpenDropdown =false">
            <template v-if="isAdminLogin">
              <UiAvatar
              :size="30"
              :agentNo="consultantId"
              class="admin-avatar"
              ></UiAvatar>
            </template>
            <template v-else>
              <i class="icon-avatar text--dark-blue cursor--pointer fix-chrome-click--issue"></i>
            </template>
          </div>
          <el-dropdown-menu
            class="pam-header__dropdown">
            <template v-for="(item,index) in navBarList">
@@ -33,18 +52,47 @@
<script lang="ts">
  import { Vue, Component } from 'vue-property-decorator';
  import { namespace } from 'nuxt-property-decorator';
  import { Role } from '~/assets/ts/models/enum/Role';
  import { Action, namespace, State, Watch } from 'nuxt-property-decorator';
  import { Role } from '~/shared/models/enum/Role';
  import * as _ from 'lodash';
  import { NotificationList } from '~/shared/models/reviews.model';
  import { AppointmentLog } from '~/shared/models/appointment.model';
  const roleStorage = namespace('localStorage');
  @Component
  export default class NavBar extends Vue {
    @roleStorage.Mutation storageClear!: () => void;
    @roleStorage.Getter idToken!: string | null;
    @roleStorage.Getter currentRole!: string | null;
    @roleStorage.Getter consultantId!: string | null;
    @roleStorage.Getter
    idToken!: string | null;
    @roleStorage.Getter
    currentRole!: string | null;
    @roleStorage.Getter
    consultantId!: string | null;
    @roleStorage.Mutation
    storageClear!: () => void;
    @roleStorage.Getter
    isAdminLogin!: boolean;
    @roleStorage.Getter
    isUserLogin!: boolean;
    @Action
    storeMyPersonalNotification!: () => void;
    @State
    notificationList!: NotificationList[];
    @Action
    storeMyAppointmentReviewLog!: () => void;
    @State
    unReviewLogList!: AppointmentLog[];
    isOpenDropdown = false;
    navBarList = [{
        authorityOfRoleList: [Role.NOT_LOGIN],
@@ -77,6 +125,11 @@
        title: '我的顧問清單',
      },
      {
        authorityOfRoleList: [Role.NOT_LOGIN, Role.USER],
        routeUrl: '/faq',
        title: 'F&Q å¸¸è¦‹å•é¡Œ',
      },
      {
        authorityOfRoleList: [Role.USER, Role.ADMIN],
        routeUrl: '',
        title: '登出',
@@ -87,12 +140,18 @@
        title: '顧問登入',
      },
    ];
    login_role = Role.NOT_LOGIN;
    isOpenDropdown = false;
    get loginRole(): Role {
      return this.idToken && this.currentRole ? (this.currentRole as Role): Role.NOT_LOGIN;
    //////////////////////////////////////////////////////////////////////
    @Watch('$route', {immediate: true})
    onRouterChange() {
        if (this.currentRole) {
          this.storeMyPersonalNotification();
          this.storeMyAppointmentReviewLog();
        }
    }
    //////////////////////////////////////////////////////////////////////
    routerNavigateTo(url: string): void {
      (this.$refs.dropdown as any).hide();
@@ -110,6 +169,26 @@
      this.storageClear();
      _.isEqual(this.$route.name, 'index') ? location.reload() : this.$router.push('/');
    }
    get loginRole(): Role {
      return this.idToken && this.currentRole ? (this.currentRole as Role): Role.NOT_LOGIN;
    }
    get isShowNotification() {
      if (this.isUserLogin) {
        return this.notificationList.length || this.unReviewLogList.length;
      }
      if (this.isAdminLogin) {
        return this.notificationList.length
      }
    }
    get isNewNotification() {
      if (this.currentRole) {
        return this.notificationList.filter(item => !item.readDate).length;
      }
    }
  }
</script>
@@ -175,9 +254,30 @@
      i {
        padding: 0px 15px;
        @extend .fix-chrome-click--issue;
        @media screen and (max-width: 352px) {
          padding: 0px 10px;
        }
      }
      .admin-avatar {
        margin: 0px 15px;
        @media screen and (max-width: 352px) {
          margin: 0px 10px;
        }
      }
      .icon-bell {
        position: relative;
        .newNotification {
          position: absolute;
          width: 10px;
          height: 10px;
          top: 0;
          right: 15px;
          border-radius: 50px;
          background: $PRIMARY_RED;
        }
      }
    }
@@ -200,11 +300,11 @@
      height: $DESKTOP_NAV_BAR;
      .pam-header__logo {
        width: 180px;
        height: 100%;
        width: 160px;
        height: 70px;
        margin: 0;
        background-image: url('~/assets/images/logo.png');
        background-size: cover;
        background-size: contain;
        background-repeat: no-repeat;
        background-position: center;
      }
PAMapp/components/QuickFilter/QuickFilterConsultantList.vue
@@ -19,7 +19,7 @@
            >
                <UiAvatar
                    :size="200"
                    :fileName="item.img"
                    :agentNo="item.agentNo"
                    class="mx-auto"
                    @click.native="showAgentDetail(item.agentNo)"
                ></UiAvatar>
@@ -31,7 +31,7 @@
                        <div class="smTxt_bold mb-10 text--prudential_grey">服務資歷</div>
                        <div class="mb-10">{{item.seniority}}</div>
                    </el-col>
                    <el-col :span="12">
                    <el-col :span="12" v-if="!hideReviews">
                        <div class="smTxt_bold mb-10 text--prudential_grey">客戶滿意度</div>
                        <div>
                            <i class="icon-star pam-icon icon--yellow "></i>
@@ -79,20 +79,25 @@
</template>
<script lang="ts">
import { Consultant } from '~/shared/models/consultant.model';
import { ElCarousel } from 'element-ui/types/carousel';
import { hideReviews } from '~/shared/const/hide-reviews';
import { Vue, Component, Prop } from 'vue-property-decorator';
import { Consultant } from '~/assets/ts/models/consultant.model';
@Component
export default class QuickFilterConsultantList extends Vue {
    @Prop() consultantList!: Consultant[];
    @Prop()
    consultantList!: Consultant[];
    isVisiblePopUp = false;
    popUpTxt = '成功加入顧問清單';
    startPosition = 0;
    endPosition = 0;
    startYPosition = 0;
    endYPosition = 0;
    hideReviews = hideReviews ;
    //////////////////////////////////////////////////////////////////
    moveStart(event: TouchEvent) {
        this.startPosition = event.changedTouches[0].clientX;
@@ -114,13 +119,7 @@
        }
    }
    nextCard() {
        (this.$refs.carouselRef as ElCarousel).next();
    }
    prevCard() {
        (this.$refs.carouselRef as ElCarousel).prev();
    }
    //////////////////////////////////////////////////////////////////
    openPopUp(txt: string) {
        this.popUpTxt = txt;
@@ -130,6 +129,15 @@
    showAgentDetail(agentNo: string): void {
        this.$router.push(`/agentInfo/${agentNo}`);
    }
    nextCard() {
        (this.$refs.carouselRef as ElCarousel).next();
    }
    prevCard() {
        (this.$refs.carouselRef as ElCarousel).prev();
    }
}
</script>
@@ -216,4 +224,4 @@
        }
    }
</style>
</style>
PAMapp/components/QuickFilter/QuickFilterSelector.vue
@@ -2,7 +2,7 @@
    <div>
        <div class="mb-10" v-if="questionOption.title !== '顧問性別'">
            <span class="mdTxt"
            >{{questionOption.title === '顧問滿意度' ? '保險顧問滿意度' : questionOption.title}}
            >{{questionOption.title}}
            </span>
            <span
                class="smTxt_bold text--primary"
@@ -14,7 +14,10 @@
            >選取星星</span>
        </div>
        <div class="quickBtnBlock" v-if="questionOption.name === 'communicationStyles'">
        <!-------------------- æºé€šé¢¨æ ¼ -------------------->
        <div class="quickBtnBlock"
            v-if="questionOption.name === 'communicationStyles'"
        >
            <el-checkbox-group
                class="pam-quickFilter-checkbox"
                v-model="pickedItem.communicationStyles"
@@ -29,8 +32,29 @@
                ></el-checkbox>
            </el-checkbox-group>
        </div>
        <div class="quickBtnBlock" v-else-if="questionOption.name === 'gender'">
        <!-------------------- å¹´è³‡ -------------------->
        <div class="quickBtnBlock"
            v-else-if="questionOption.name === 'seniority'"
        >
            <el-radio-group
                class="pam-quickFilter-radio pam-radio-group"
                v-model="pickedItem.seniority"
            >
                <el-radio
                    v-for="(i, index) in questionOption.detail"
                    :key="index"
                    :label="i.value"
                    :class="i.className"
                >
                    <div>{{i.name}}</div>
                    <div class="subtitle">{{i.subTitle}}</div>
                </el-radio>
            </el-radio-group>
        </div>
        <!-------------------- æ€§åˆ¥ -------------------->
        <div class="quickBtnBlock"
            v-else-if="questionOption.name === 'gender'"
        >
            <el-radio-group
                class="pam-quickFilter-radio"
                v-model="pickedItem.gender"
@@ -43,10 +67,11 @@
                >{{i.name}}</el-radio>
            </el-radio-group>
        </div>
        <!-------------------- æ»¿æ„åº¦ -------------------->
        <div v-else>
            <el-rate
                class="pam-quickFilter-rate"
            v-if="!hideReviews"
                class="pam-rate mt-30"
                v-model="pickedItem.avgScore"
            ></el-rate>
        </div>
@@ -65,53 +90,58 @@
<script lang="ts">
import { Vue, Component, Prop, Watch, Emit } from 'nuxt-property-decorator';
import { FastQueryParams } from '~/assets/ts/api/consultant';
import { QuestionOption } from '~/pages/quickFilter/index.vue';
import { hideReviews } from '~/shared/const/hide-reviews';
import { FastQueryParams, QuestionOption, Selected } from '~/shared/models/quick-filter.model';
@Component
export default class QuickFilterDrawer extends Vue {
    @Prop()
    questionOption!: QuestionOption;
    @Prop()
    isOpenQuestionPopUp!: boolean;
    @Prop()
    confirmItem!: Selected[];
    pickedItem: FastQueryParams = {
        communicationStyles: [],
        status: '',
        gender: '',
        avgScore: 0
        avgScore: 0,
        seniority: ''
    }
    hideReviews = hideReviews ;
    @Prop() questionOption!: QuestionOption;
    @Prop() isOpenQuestionPopUp!: boolean;
    @Prop() confirmItem!: Selected[];
    //////////////////////////////////////////////////////////////////
    @Watch('isOpenQuestionPopUp', {immediate: true}) onPopUpChange() {
    @Watch('isOpenQuestionPopUp', {immediate: true})
    onPopUpChange() {
        this.pickedItem = {
            communicationStyles: this.communicationStyles,
            communicationStyles: this.getCommunicationStyles(),
            status: '',
            gender: this.gender,
            avgScore: this.avgScore
            gender: this.getGender(),
            avgScore: this.getAvgScore(),
            seniority: this.getSeniority()
        }
    }
    get gender() {
        const filter = this.confirmItem.filter(item => item.option === 'gender');
        return filter.length > 0 ? filter[0].value : '';
    @Emit('confirm')
    confirm() {
        const name = this.questionOption.name;
        return {
            option: name,
            value: this.pickedItem[name]
        }
    }
    get avgScore() {
        const filter = this.confirmItem.filter(item => item.option === 'avgScore');
        return filter.length > 0 ? filter[0].value : 0;
    }
    get communicationStyles() {
        return this.confirmItem
            .filter(item => item.option === 'communicationStyles')
            .map(item => item.value);
    }
    //////////////////////////////////////////////////////////////////
    get isDisabled() {
        const name = this.questionOption.name;
        return name === 'gender' && !this.pickedItem[name]
            || name === 'avgScore' && !this.pickedItem[name]
            || name === 'communicationStyles' && !this.pickedItem[name].length
            || name === 'seniority' && !this.pickedItem[name]
    }
    selectedCommunicationStyles() {
@@ -120,20 +150,32 @@
        }
    }
    @Emit('confirm')
    confirm() {
        const name = this.questionOption.name;
        return {
            option: this.questionOption.name,
            value: this.pickedItem[name]
        }
    //////////////////////////////////////////////////////////////////
    private getGender(): string {
        return this.filterSingleSelected('gender');
    }
}
    private getAvgScore(): number {
        return this.filterSingleSelected('avgScore');
    }
export interface Selected {
    option: string;
    value: any;
    private getCommunicationStyles(): string[] {
        return this.confirmItem
            .filter(item => item.option === 'communicationStyles')
            .map(item => item.value);
    }
    private getSeniority(): string {
        return this.filterSingleSelected('seniority');
    }
    private filterSingleSelected(name: string) {
        const filter = this.confirmItem.filter(item => item.option === name);
        return filter.length > 0
            ? filter[0].value
            : (name === 'avgScore' ? 0 : '');
    }
}
</script>
@@ -142,8 +184,12 @@
    .quickBtnBlock {
        display: flex;
        justify-content: space-between;
        align-content: space-between;
        flex-wrap: wrap;
    }
</style>
    .pam-radio-group {
        height: 240px;
        flex-wrap: wrap;
    }
</style>
PAMapp/components/ReviewRecords/ReviewRecords.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,126 @@
<template>
<div class="user-reviews-page">
    <section class="mdTxt">
        æŸ¥çœ‹ç´€éŒ„
    </section>
    <section class="user-reviews-header">
        <div class="header-title mdTxt">
            æ»¿æ„åº¦ç´€éŒ„
        </div>
    </section>
    <div class="user-reviews-page">
      <template v-if="reviewLogList.length">
        <section class="user-reviews-content">
            <div
                class="user-reviews-card"
                v-for="(appointmentLog, index) in reviewLogList"
                :key="index">
                <div class="user-reviews-card-content" v-if="isUserLogin">
                    æ‚¨å°<span class="mdTxt">{{ ` ${appointmentLog.type === 'APPOINTMENT' ? appointmentLog.agentName : '平台'} ` }}</span>做了 <UiReviewScore :score="appointmentLog.score" /> è©•價!
                </div>
                <div class="user-reviews-card-content" v-else>
                    {{ `${appointmentLog.customerName} `}} å°æ‚¨åšäº† <UiReviewScore :score="appointmentLog.score" /> è©•價!
                </div>
                <div class="user-reviews-card-date">
                    <div class="date">
                        <UiDateFormat
                            :date="appointmentLog.lastModifiedDate"
                            onlyShowSection="DAY" />
                    </div>
                    <div class="time">
                        <UiDateFormat
                            :date="appointmentLog.lastModifiedDate"
                            onlyShowSection="TIME" />
                    </div>
                </div>
            </div>
        </section>
      </template>
      <template v-else>
                <section class="user-reviews-content">
            <div
                class="user-reviews-card empty">
                <div class="user-reviews-card-content">
                    æš«ç„¡è³‡æ–™
                </div>
            </div>
        </section>
      </template>
    </div>
</div>
</template>
<script lang="ts">
import { AppointmentLog } from '~/shared/models/appointment.model';
import { Vue, Component, Prop, Watch } from 'nuxt-property-decorator';
import authService from '~/shared/services/auth.service';
@Component
export default  class ReviewRecords extends Vue{
    @Prop()
    reviewLogList!: AppointmentLog[];
    isUserLogin = false;
    //////////////////////////////////////////////////////////////////////
    mounted() {
      this.isUserLogin = authService.isUserLogin();
    }
}
</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;
                }
            }
            &.empty {
              border-color: transparent;
            }
        }
    }
}
@include desktop{
    .user-reviews-card-content{
        flex: 1;
    }
}
</style>
PAMapp/components/Ui/UiAvatar.vue
@@ -11,11 +11,14 @@
@Component
export default class UiAvatar extends Vue {
    @Prop() size!: number;
    @Prop() fileName!: string;
    @Prop()
    size!: number;
    @Prop()
    agentNo!: string;
    get imgSrc() {
        return process.env.BASE_URL + '/consultant/avatar/' + this.fileName;
        return process.env.BASE_URL + '/consultant/avatar/' + this.agentNo;
    }
}
</script>
</script>
PAMapp/components/Ui/UiCarousel.vue
@@ -1,18 +1,25 @@
<template>
<div>
    <el-carousel
        :autoplay="true"
        indicator-position="outside"
        arrow="never"
        trigger="click"
        class="pam-home-carousel"
    >
        <el-carousel-item class="banner-img">
        <el-carousel-item class="banner-img-style banner1-img">
            <div class="text--center mt-30 banner-info">
                <h1 class="banner-title mb-10">個人化媒合頂尖顧問</h1>
                <p class="banner-txt text--PRIMARY_WHITE">您的聲音,由我們來傾聽。</p>
                <p class="banner-txt text--PRIMARY_WHITE">讓我們幫您快速找到合適您的顧問,</p>
                <p class="banner-txt text--PRIMARY_WHITE">解決保險大小煩惱。事不宜遲,立刻行動。</p>
            </div>
        </el-carousel-item>
        <el-carousel-item class="banner-img-style banner2-img">
            <div class="text--center mt-30 banner-info">
                <h1 class="banner-title mb-10">多元媒合方式</h1>
                <p class="banner-txt text--PRIMARY_WHITE">輕鬆滑出理想顧問</p>
                <p class="banner-txt text--PRIMARY_WHITE">媒合成功顧問主動聯繫</p>
            </div>
        </el-carousel-item>
    </el-carousel>
@@ -29,13 +36,19 @@
</script>
<style lang="scss" scoped>
.banner-img {
.banner-img-style {
    width: 100%;
    height: 100%;
    background-image: url('~/assets/images/index_banner_mob.svg');
    background-repeat: no-repeat;
    background-size: cover;
    background-position: bottom;
}
.banner1-img {
    background-image: url('~/assets/images/index_banner_mob.svg');
}
.banner2-img {
    background-image: url('~/assets/images/index_banner2_mob.svg');
}
.banner-info {
@@ -50,9 +63,13 @@
}
@media (min-width: 576px) {
    .banner-img {
    .banner1-img {
        background-image: url('~/assets/images/index_banner_web.svg');
    }
    .banner2-img {
        background-image: url('~/assets/images/index_banner2_web.svg');
    }
}
@include desktop {
PAMapp/components/Ui/UiDateFormat.vue
@@ -9,14 +9,17 @@
@Component
export default class UiDateFormat extends Vue {
    @Prop() date!: Date | string;
    @Prop() onlyShowSection!: 'DAY' | 'TIME';
    compareTarget!: Date;
    @Prop()
    date!: Date | string;
    @Prop()
    onlyShowSection!: 'YEAR' | 'DATE' | 'DAY' | 'TIME';
    compareTarget!: Date;
    displayValue = '';
    @Watch('date', {immediate: true}) formattedDate(): void {
    @Watch('date', {immediate: true})
    formattedDate(): void {
        if (!this.date) return;
        const toDatePromise = new Promise((resolve, reject) => {
@@ -35,7 +38,7 @@
                    const isThisYear = (compareDate: Date): boolean => {
                        return compareDate.getFullYear() === _now.getFullYear();
                    };
                    const minutes = compareTarget.getMinutes() > 9 ?  compareTarget.getMinutes() : `0${compareTarget.getMinutes()}`;
                    const thisYearDayLabel = isToday(compareTarget) ? `今天` : `${compareTarget.getMonth() + 1}/${compareTarget.getDate()}`;
@@ -43,15 +46,21 @@
                        this.displayValue = isThisYear(compareTarget) ? thisYearDayLabel : `${compareTarget.getFullYear()}/${compareTarget.getMonth() + 1}/${compareTarget.getDate()}`;
                    } else if (this.onlyShowSection === 'TIME') {
                        this.displayValue = `${compareTarget.getHours()}:${minutes}`;
                    } else if (this.onlyShowSection === 'DATE') {
                        this.displayValue = isThisYear(compareTarget)
                            ? thisYearDayLabel
                            : `${compareTarget.getMonth() + 1}/${compareTarget.getDate()}`;
                    } else if (this.onlyShowSection === 'YEAR') {
                        this.displayValue = `${compareTarget.getFullYear()}`;
                    }
                    if (this.onlyShowSection) return;
                    this.displayValue = isThisYear(compareTarget)
                        ? `${thisYearDayLabel} ${compareTarget.getHours()}:${minutes}`
                    this.displayValue = isThisYear(compareTarget)
                        ? `${thisYearDayLabel} ${compareTarget.getHours()}:${minutes}`
                        : `${compareTarget.getFullYear()}/${compareTarget.getMonth() + 1}/${compareTarget.getDate()} ${compareTarget.getHours()}:${minutes}`;
                }
                }
        )}
}
</script>
</script>
PAMapp/components/Ui/UiDatePicker.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,71 @@
<template>
    <el-date-picker
        class="pam-date cursor--pointer"
        popper-class="pam-date-popper"
        v-model="dateValue"
        :clearable="false"
        type="date"
        :editable="false"
        format="yyyy/MM/dd"
        placeholder="選擇日期"
        prefix-icon="icon-down down-icon"
        :picker-options="pickerOptions"
        @change="changeDate"
    >
    </el-date-picker>
</template>
<script lang="ts">
import { Component, Emit, Prop, PropSync, Vue, Watch } from "nuxt-property-decorator";
@Component
export default class UiDatePicker extends Vue {
    dateValue: Date | string = '';
    @Prop()
    defaultValue!: string;
    @Prop({default: false})
    isPastDateDisabled!: boolean;
    @Prop({default: false})
    isFutureDateDisabled!: boolean;
    @Emit('changeDate')
    changeDate() {
        return this.dateValue;
    }
    @Watch('defaultValue', {immediate: true})
    updateDefault() {
        if (this.defaultValue) {
            this.dateValue = new Date(this.defaultValue);
            this.changeDate();
        }
    }
    get pickerOptions() {
        const date = new Date();
        const currentDate = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
        if (this.isPastDateDisabled) {
            return {
                disabledDate(time: Date) {
                    const pickedDate = `${time.getFullYear()}/${time.getMonth() + 1}/${time.getDate()}`;
                    return new Date(pickedDate).getTime() < new Date(currentDate).getTime();
                }
            }
        }
        if (this.isFutureDateDisabled) {
            return {
                disabledDate(time: Date) {
                    const pickedDate = `${time.getFullYear()}/${time.getMonth() + 1}/${time.getDate()}`;
                    return new Date(pickedDate).getTime() > new Date(currentDate).getTime();
                }
            }
        }
    }
}
</script>
PAMapp/components/Ui/UiDialog.vue
@@ -17,11 +17,15 @@
@Component
export default class UiDialog extends Vue {
    @PropSync('isVisible') dialogVisible!: boolean;
    @Prop() width!: string;
    @PropSync('isVisible')
    dialogVisible!: boolean;
    @Emit('closeDialog') closeDialog() {
    @Prop()
    width!: string;
    @Emit('closeDialog')
    closeDialog() {
        return;
    }
}
</script>
</script>
PAMapp/components/Ui/UiDrawer.vue
@@ -17,10 +17,14 @@
@Component
export default class UiDialog extends Vue {
    @PropSync('isVisible') drawerVisible!: boolean;
    @Prop() size!: number;
    @PropSync('isVisible')
    drawerVisible!: boolean;
    @Emit('closeDrawer') closeDrawer() {
    @Prop()
    size!: number;
    @Emit('closeDrawer')
    closeDrawer() {
        return;
    }
}
@@ -34,4 +38,4 @@
        border-radius: 10px;
        margin: 10px auto 13px auto;
    }
</style>
</style>
PAMapp/components/Ui/UiField.vue
@@ -3,7 +3,7 @@
      v-if="fieldDisplayDevice === 'ALL'
      || fieldDisplayDevice === currentDevice">
      <div class="pam-field__label">
        <div class="pam-field__title"><i :class="fieldIcon"></i>{{ fieldLabel }}</div>
        <div class="pam-field__title" :style="{ 'font-size': fieldLabelSize }"><i :class="fieldIcon"></i>{{ fieldLabel }}</div>
      </div>
      <p class="pam-field__content">
        <slot></slot>
@@ -13,21 +13,36 @@
<script lang="ts">
import { Vue, Component, Prop } from 'vue-property-decorator';
import { isMobileDevice } from '~/assets/ts/device';
import UtilsService from '~/shared/services/utils.service';
@Component
export default class UiField extends Vue {
  @Prop() span!: number;
  @Prop() icon!: string;
  @Prop() label!: string;
  @Prop() content!: string;
  @Prop() displayDevice!: 'MOBILE' | 'DESKTOP' | 'ALL';
  @Prop()
  span!: number;
  @Prop()
  icon!: string;
  @Prop()
  label!: string;
  @Prop()
  content!: string;
  @Prop()
  labelSize?: number;
  @Prop()
  displayDevice!: 'MOBILE' | 'DESKTOP' | 'ALL';
  currentDevice: 'MOBILE' | 'DESKTOP' = 'MOBILE';
  //////////////////////////////////////////////////////////////////
  mounted(): void {
    this.currentDevice = isMobileDevice() ? 'MOBILE' : 'DESKTOP';
    this.currentDevice = UtilsService.isMobileDevice() ? 'MOBILE' : 'DESKTOP';
  }
  get fieldSpan(): number {
@@ -46,29 +61,34 @@
    return this.displayDevice || 'ALL';
  }
  get fieldLabelSize(): string {
    return (this.labelSize || 16) + 'px';
  }
}
</script>
<style lang="scss" scoped>
.pam-field {
  display: flex;
  display       : flex;
  flex-direction: column;
  .pam-field__label {
    display: flex;
    align-items: center;
    display    : flex;
    .pam-icon {
      font-size: 12px;
    }
    .pam-field__title {
      font-size: 16px;
      font-weight: bold;
      display: flex;
      align-items: center;
      display    : flex;
      font-weight: bold;
    }
  }
  .pam-field__content {
    padding-top: 10px;
    display    : flex;
    // padding-top: 10px;
    white-space: pre-line;
    line-height: 1.5;
  }
}
</style>
PAMapp/components/Ui/UiGoToTop.vue
@@ -16,11 +16,19 @@
export default class UiGoToTop extends Vue {
    buttonDisplay = 'none';
    //////////////////////////////////////////////////////////////////
    created() {
        if (process.browser) {
            document.body.addEventListener('scroll', this.scrollFunction);
        }
    }
    destroyed() {
        document.body.removeEventListener('scroll', this.scrollFunction);
    }
    //////////////////////////////////////////////////////////////////
    scrollFunction() {
        if (document.body.scrollTop > 300 || document.documentElement.scrollTop > 300) {
@@ -33,10 +41,6 @@
    topFunction() {
        document.body.scrollTop = 0;
        document.documentElement.scrollTop = 0;
    }
    destroyed() {
        document.body.removeEventListener('scroll', this.scrollFunction);
    }
}
</script>
@@ -66,4 +70,4 @@
      background-color: $MID_GREY;
  }
}
</style>
</style>
PAMapp/components/Ui/UiPagination.vue
@@ -1,6 +1,6 @@
<template>
    <el-pagination
        :current-page.sync="currentPage"
        :current-page.sync="syncCurrentPage"
        layout="prev, pager, next"
        :total="totalList.length"
        :page-size="pageSize"
@@ -11,23 +11,40 @@
</template>
<script lang="ts">
import { Vue, Component, Prop, Emit, Watch } from 'nuxt-property-decorator';
import { Consultant } from '~/assets/ts/models/consultant.model';
import { Vue, Component, Prop, Emit, Watch, PropSync } from 'nuxt-property-decorator';
import { Consultant } from '~/shared/models/consultant.model';
@Component
export default class UiPagination extends Vue {
    @Prop() totalList!: Consultant[];
    @Prop()
    totalList!: Consultant[];
    @Prop({default: 5}) pageSize!: number;
    currentPage = 1;
    @PropSync('currentPage', {default: 1}) syncCurrentPage!: number;
    pageList: Consultant[] = [];
    mounted() {
        this.handleCurrentChange(this.currentPage);
    }
    //////////////////////////////////////////////////////////////////
    @Emit('changePage') changePage(): Consultant[] {
    @Emit('changePage')
    changePage(): Consultant[] {
        return this.pageList
    }
    @Watch('totalList')
    watchTotalList(newValue: Consultant[]) {
        if (newValue) {
            this.handleCurrentChange(this.syncCurrentPage);
        }
    }
    //////////////////////////////////////////////////////////////////
    mounted() {
        this.handleCurrentChange(this.syncCurrentPage);
    }
    //////////////////////////////////////////////////////////////////
    handleCurrentChange(currentPage: number) {
@@ -38,12 +55,6 @@
        if (this.totalList) {
            this.pageList = this.totalList.slice(this.pageSize * currentPage - this.pageSize, this.pageSize * currentPage)
            this.changePage();
        }
    }
    @Watch('totalList') watchTotalList(newValue: Consultant[]) {
        if (newValue) {
            this.handleCurrentChange(this.currentPage);
        }
    }
}
PAMapp/components/Ui/UiReviewScore.vue
@@ -14,6 +14,7 @@
@Component
export default class UiReviewScore extends Vue {
    @Prop() score!: number;
    @Prop()
    score!: number;
}
</script>
</script>
PAMapp/components/Ui/UiScrollPicker.vue
@@ -14,12 +14,16 @@
export default class UiScrollPicker extends Vue {
     // https://reposhub.com/vuejs/form-input/wan2land-vue-scroll-picker.html
     @Prop() options!: string[];
     @Prop() initValue!: string;
     @Prop()
     options!: string[];
     @Emit('change') selValue(value: string) {
     @Prop()
     initValue!: string;
     @Emit('change')
     selValue(value: string) {
          return value
     }
}
</script>
</script>
PAMapp/components/Ui/UiSelect.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,26 @@
 <template>
  <el-select v-model="syncedCloseReason" class="pam-select" ref="select">
    <el-option
      v-for="(item,index) in options"
      :key="index"
      :label="item.key"
      :value="item.value">
      {{ item.key }}
    </el-option>
  </el-select>
</template>
<script lang="ts">
import { Vue, Component, PropSync, Prop} from 'nuxt-property-decorator';
@Component
export default class UiSelect extends Vue {
  @PropSync('closeReason', { type: String, default: 'other' })
  syncedCloseReason!: string;
  @Prop({ type:Array , default:()=>[] })
  options!: object[];
}
</script>
PAMapp/components/Ui/UiTags.vue
@@ -16,9 +16,10 @@
@Component
export default class UiTags extends Vue {
    @Emit('removeTag') removeTag() {
    @Emit('removeTag')
    removeTag() {
        return;
    }
}
</script>
</script>
PAMapp/components/Ui/UiTimePicker.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,118 @@
<template>
    <el-time-select
        class="pam-time cursor--pointer"
        popper-class="pam-time-popper"
        v-model="timeValue"
        :clearable="false"
        :editable="false"
        :picker-options="pickerOptions"
        placeholder="選擇時間"
        prefix-icon="icon-down down-icon"
        value-format="timestamp"
        @change="changeTime"
    >
    </el-time-select>
</template>
<script lang="ts">
import { Component, Emit, Prop, Vue, Watch } from "nuxt-property-decorator";
@Component
export default class UiTimePicker extends Vue {
    timeValue = '';
    @Prop()
    defaultValue!: string;
    @Prop({default: ''})
    changeDate!: Date | string;
    @Prop()
    isPastDateDisabled!: boolean;
    @Prop()
    isFutureDateDisabled!: boolean;
    ///////////////////////////////////////////////////////////////////////
    @Emit('changeTime')
    changeTime() {
        return this.timeValue;
    }
    @Watch('defaultValue', {immediate: true})
    updateDefault() {
        if (this.defaultValue) {
            const defaultDate = new Date(this.defaultValue);
            this.timeValue = this.formatTimeString(defaultDate);
            this.changeTime();
        }
    }
    ///////////////////////////////////////////////////////////////////////
    get pickerOptions() {
        let minTime = '';
        let maxTime = '';
        const currentDate = new Date();
        if (this.changeDate && this.isPickedToday(currentDate)) {
            if (this.isPastDateDisabled) {
                minTime = this.formatTimeString(currentDate);
                this.isPickedDisableTime(currentDate, minTime);
            }
            if (this.isFutureDateDisabled) {
                maxTime = this.formatTimeString(currentDate);
                this.isPickedDisableTime(currentDate, maxTime);
            }
        }
        return {
            start: '09:00',
            step: '00:15',
            end: '21:00',
            minTime: minTime,
            maxTime: maxTime
        }
    }
    private isPickedDisableTime(currentDate: Date, minMaxTime: string) {
        const currentTime = this.getTimeValue(currentDate, minMaxTime);
        const pickedTime = this.getTimeValue(currentDate, this.timeValue);
        if (this.isPastDateDisabled && pickedTime < currentTime) {
            this.timeValue = '';
            this.changeTime();
        }
        if (this.isFutureDateDisabled && currentTime < pickedTime) {
            this.timeValue = '';
            this.changeTime();
        }
    }
    private isPickedToday(currentDate: Date) {
        const pickedDate = new Date(this.changeDate);
        const today = this.formatDateString(currentDate);
        const picked = this.formatDateString(pickedDate);
        return today === picked;
    }
    private getTimeValue(date: Date, time: string) {
        const hour = time.split(':')[0];
        const minute = time.split(':')[1];
        return date.setHours(+hour, +minute);
    }
    private formatDateString(date: Date) {
        return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
    }
    private formatTimeString(date: Date) {
        const hours = date.getHours();
        const minutes = date.getMinutes();
        return `${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}`;
    }
}
</script>
PAMapp/components/careerSelect.vue
@@ -1,6 +1,6 @@
<template>
  <div>
    <div class="mdTxt pt-10 pb-10">職業</div>
    <div class="mdTxt pt-10 pb-10">您的職業</div>
      <div class="ques-career__select" @click="openPopUp">
        <div class="ques-career__select-input">
          <span v-if="!syncCareerSelect">請選擇</span>
@@ -10,9 +10,9 @@
          <i class="icon-down down-icon"></i>
        </div>
      </div>
      <PopUpFrame :isOpen.sync="showJobDrawer">
      <PopUpFrame :isOpen.sync="showJobDrawer" :dialogWidth="'400px'">
        <div class="pam-career">
          <div class="subTitle">職業</div>
          <div class="subTitle">您的職業</div>
          <el-radio-group class="pam-single__select--col" v-model="career" @change="handleChange">
            <el-radio-button v-for="(career,index) in options"
              :key="index"
@@ -20,14 +20,16 @@
              {{career.title}}
            </el-radio-button>
          </el-radio-group>
          <div class="mt-10" v-if="career === '其他'">
            <input class="pam-career__other-input"
          <div class="mt-20 h-50 pam-career__other">
            <input
              v-if="career === '其他'"
              class="pam-career__other-input"
              :class="{'warning':!career_Other}"
              v-model="career_Other" >
          </div>
          <el-button type="primary"
            class="pam-career__confirm"
            :disabled="isCareerVerifyFailed"
            :disabled="!isCareerValid"
            @click="patchCareer">
              ç¢ºå®š
          </el-button>
@@ -35,19 +37,23 @@
      </PopUpFrame>
  </div>
</template>
<script lang="ts">
  import { Component , PropSync , Vue} from "vue-property-decorator";
  import * as _ from 'lodash';
  @Component
  export default class CareerSelect extends Vue {
    @PropSync('careerSelect',{ type: String, default :''}) syncCareerSelect! :string;
    @PropSync('careerSelect',{ type: String, default :''})
    syncCareerSelect! :string;
    showJobDrawer = false;
    career='';
    career_Other='';
    options= [
    career        = '';
    career_Other  = '';
    options = [
      {
        title:'外勤',
        label:'外勤'
@@ -61,21 +67,21 @@
        label:'其他'
      }
    ];
    get isCareerVerifyFailed():boolean{
      return !this.career || (_.isEqual(this.career,'其他')&&!this.career_Other) ;
    }
    handleChange(event:any):void{
    //////////////////////////////////////////////////////////////////////
    handleChange(event:any): void{
      if(event !== '其他'){
        this.career_Other='';
        this.career_Other = '';
      }
    }
    openPopUp():void{
    openPopUp(): void{
      this.showJobDrawer = true;
      this.patchInitValue();
    }
    patchInitValue():void{
    patchInitValue(): void{
      if(this.syncCareerSelect){
        if(_.includes(['外勤','內勤'],this.syncCareerSelect)){
          this.career = this.syncCareerSelect;
@@ -86,64 +92,78 @@
      }
    }
    patchCareer():boolean {
    patchCareer(): void {
      this.showJobDrawer = false;
      this.syncCareerSelect = this.career === '其他' ? _.cloneDeep(this.career_Other):_.cloneDeep(this.career);
      return true;
      this.syncCareerSelect = this.career === '其他'
                          ? _.cloneDeep(this.career_Other)
                          : _.cloneDeep(this.career);
    }
    get isCareerValid(): boolean {
      return !!(this.career === '其他'
            ? this.career_Other
            : this.career);
    }
  }
</script>
<style lang="scss" scoped>
  .pam-career{
    display: flex;
    display       : flex;
    flex-direction: column;
    align-items: center;
    align-items   : center;
  }
  .ques-career__select{
    position: relative;
    height: 50px;
    position          : relative;
    height            : 50px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    padding: 15px;
    border-radius:10px;
    border:1px solid #D0D0CE ;
    background-color: $PRIMARY_WHITE;
    -moz-box-sizing   : border-box;
    box-sizing        : border-box;
    padding           : 15px;
    border-radius     : 10px;
    border            : 1px solid #D0D0CE ;
    background-color  : $PRIMARY_WHITE;
    .ques-career__select-input{
      width: 90%;
    }
    .ques-career__select--icon{
      position: absolute;
      top: 0px;
      right: 15px;
      top     : 0px;
      right   : 15px;
      .down-icon{
        color:#ED1B2E;
        font-size: 25px;
        display: flex;
        color          : #ED1B2E;
        font-size      : 25px;
        display        : flex;
        justify-content: flex-end;
        padding-top: 11px;
        margin-left: -20px;
        padding-top    : 11px;
        margin-left    : -20px;
      }
    }
  }
  .pam-career__other-input{
  .h-50 {
    height: 50px;
  }
  .pam-career__other {
    width: 100%;
    border: 1px #CCCCCC solid;
    width: 300px;
    padding-left: 15px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    &.warning{
      border: 1px $PRIMARY_RED solid;
    .pam-career__other-input {
      height            : 50px;
      border            : 1px #CCCCCC solid;
      width             : 100%;
      padding-left      : 15px;
      -webkit-box-sizing: border-box;
      -moz-box-sizing   : border-box;
      box-sizing        : border-box;
      border-radius     : 10px;
      &.warning{
        border: 1px $PRIMARY_RED solid;
      }
    }
  }
  .pam-career__confirm{
    width: 120px;
    height: 50px;
    margin-top: 30px;
    width     : 120px;
    height    : 50px;
    margin-top: 20px;
  }
</style>
PAMapp/components/editConsultantAvatar.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,133 @@
<template>
  <div>
    <el-upload
      class="pam-avatar-uploader"
      ref="upload"
      action="#"
      :auto-upload="false"
      :on-change="handleAvatarUploaded"
      :show-file-list="false"
      accept="image/png, image/jpeg, image/jpg">
        <el-avatar
          :size="150"
          :src="imgSrc"
          class="pam-avatar cursor--pointer fix-chrome-click--issue"
        ></el-avatar>
            <div class="text--center mt-10">
              <el-button
              >設定相片</el-button>
            </div>
    </el-upload>
      <div
        v-if="showResetAvatarBtn"
        class="pam-avatar-uploader__action-label text--center mt-10 cursor--pointer"
        style="line-height: 1.5"
        >
        <i class="icon-information"></i>
        è«‹æŒ‰é é¢æœ€ä¸‹æ–¹çš„送出按鈕來更新照片,
        <span class="text--primary cursor--pointer text--underline" @click="resetAvatar">或點此取消</span>
      </div>
  </div>
</template>
<script lang="ts">
  import { Vue, Component, Prop, PropSync } from 'nuxt-property-decorator';
  import { MessageBox } from 'element-ui';
  import { MessageBoxData } from 'element-ui/types/message-box';
  import _ from 'lodash';
  import myConsultantService from '~/shared/services/my-consultant.service';
  @Component
  export default class editConsultantAvatar extends Vue {
    @Prop({type:String, default:""})
    agentNo!:string;
    @PropSync('photoBase64',{type:String, default:""})
    syncPhotoBase64!:string;
    _imgSrc: string = '';
    imgSrc: string='';
    //////////////////////////////////////////////////////////////////////
    mounted() {
      if(this.agentNo) this.initConsultantAvatar()
    }
    private initConsultantAvatar(): void {
      myConsultantService.getConsultantAvatar(this.agentNo)
      .then(base64=>
       this.splitBase64WithCommon(base64)
      )
    }
    //////////////////////////////////////////////////////////////////////
    resetAvatar(): void {
      this.imgSrc = this._imgSrc;
    }
    handleAvatarUploaded(file:any): void {
      const isFollowUploadRule =_.includes(file.raw.type,'image/');
      isFollowUploadRule ? this.getImgSrc(file) : this.showFileUploadErrorMsg()
    }
    private getImgSrc(file:any):void{
      const blob = file.raw;
      this.blobToBase64(blob).then(base64=>{
        this.splitBase64WithCommon(base64 as string);
      });
    }
    private blobToBase64(blob:File):Promise<string | ArrayBuffer | null> {
      return new Promise((resolve,reject) => {
        const reader = new FileReader();
        reader.readAsDataURL(blob);
        reader.onloadend = () => {
          resolve(reader.result)
        };
      });
    }
    private splitBase64WithCommon(base64: string): void {
      const splitBase64= _.split(base64, ','); // ç‚ºäº†æŠŠ data:image , base64 è§£æžåˆ†é–‹;
      this.syncPhotoBase64 = splitBase64[1];
      // NOTE: å› ç‚ºç›®å‰ä»¥ agentNO å–å¾— avatar æœƒå¤±æ•—,
      // æ•…加上此判斷來防範不預期顯示'取消按鈕'的狀況。 [Tomas, 2022/1/3]
      if (!this._imgSrc) {
        this._imgSrc = base64;
      }
      this.imgSrc = base64;
    }
    private showFileUploadErrorMsg():Promise<MessageBoxData>{
       return MessageBox({
          message:`<div class="message-header">上傳格式有誤</div>
                    <div class="message-content">請上傳正確圖檔</div>`,
          dangerouslyUseHTMLString: true,
          showClose:false,
          showConfirmButton:true,
          confirmButtonText:'確認',
          customClass:'pam-message-box',
          closeOnClickModal:false,
        });
    }
    get showResetAvatarBtn(): boolean {
      // NOTE: å› ç‚ºç›®å‰ä»¥ agentNO å–å¾— avatar æœƒå¤±æ•—,
      // æ•…加上此判斷來防範不預期顯示'取消按鈕'的狀況。 [Tomas, 2022/1/3]
      if (!this._imgSrc && !this.imgSrc) return false;
      return this._imgSrc !== this.imgSrc;
    }
  }
</script>
<style lang="scss" scoped>
</style>
PAMapp/components/loading.vue
@@ -17,16 +17,23 @@
    }
  })
  export default class Loading extends Vue {
    isLoading = false;
    defaultOptions = {
      animationData: require('@/assets/lottie/loading.json')
    };
    //////////////////////////////////////////////////////////////////////
    start(): void {
      this.isLoading = true;
    }
    finish(): void {
      this.isLoading = false;
    }
  }
</script>
@@ -38,7 +45,7 @@
    background-color: rgba(#222222, 0.5);
    width: 100%;
    height: 100%;
    z-index: 99;
    z-index: 2500;
    display: flex;
    justify-content: center;
    align-items: center;
PAMapp/components/multiSelectBtn.vue
@@ -5,7 +5,7 @@
        v-for="(option, index) in options"
        :key="index"
        :label="option.label">
          {{option.title}}
          {{ option.title }}
        </el-checkbox>
      <template v-if="nameOfSelectAll">
        <button class="pam-selectAll-btn cursor--pointer fix-chrome-click--issue" :class="{'selected':isSelectAll}" :model="isSelectAll" @click="selectAll">
@@ -14,7 +14,7 @@
      </template>
      <template v-if="nameOfOtherOption">
        <button class="pam-selectAll-btn cursor--pointer fix-chrome-click--issue" :class="{'selected':isSelectOtherOption}" :model="isSelectOtherOption" @click="selectOther">
         {{nameOfOtherOption}}
         {{ nameOfOtherOption }}
        </button>
        <div>
          <input class="pam-muti-select-other cursor--pointer " v-if="isSelectOtherOption" v-model="syncOtherSelect" placeholder="請輸入,限20字">
@@ -25,31 +25,59 @@
</template>
<script lang="ts">
  import { Vue, Component, Prop, PropSync} from 'vue-property-decorator';
  import { OptionBtnDto } from './singleSelectBtn.vue';
  import { Vue, Component, Prop, PropSync, Watch} from 'vue-property-decorator';
import { OptionBtnDto } from '~/shared/models/optionBtnDto.model';
  @Component
  export default class MultiSelectBtn extends Vue {
    @PropSync('mutiSelect',{type:Array,default:()=>[]}) syncMutiSelect!:string[];
    @Prop({default:()=>[]}) options!:OptionBtnDto[];
    @Prop({default:''}) nameOfSelectAll!:string;
    @PropSync('otherSelect',{default:''}) syncOtherSelect!:string;
    @Prop({type:String,default:''}) nameOfOtherOption!:string;
    @PropSync('mutiSelect',{type:Array,default:()=>[]})
    syncMutiSelect!:string[];
    @Prop({default:()=>[]})
    options!:OptionBtnDto[];
    @Prop({default:''})
    nameOfSelectAll!:string;
    @PropSync('otherSelect',{default:''})
    syncOtherSelect!:string;
    @Prop({type:String,default:''})
    nameOfOtherOption!:string;
    @Prop()
    maxLength? : number;
    @Watch('syncMutiSelect')
    onMutiSelectChange(): void {
      if (!this.maxLength) return;
      if (this.syncMutiSelect.length > this.maxLength) {
        this.syncMutiSelect.shift();
      }
    }
    isSelectOtherOption=false;
    isSelectAll=false;
    //////////////////////////////////////////////////////////////////////
    updated() {
      this.isSelectAll = this.syncMutiSelect.length === this.options.length;
    }
    selectAll():void{
    //////////////////////////////////////////////////////////////////////
    selectAll():void {
      this.isSelectAll= !this.isSelectAll;
      this.syncMutiSelect = this.isSelectAll ? this.optionsFormat(this.options):[];
    }
    optionsFormat(optios:OptionBtnDto[]):string[]{
      return optios.map(o=>o.title);
    optionsFormat(options:OptionBtnDto[]): string[] {
      return options.map((option)=> option.title );
    }
    selectOther():void{
    selectOther(): void {
      this.isSelectOtherOption = !this.isSelectOtherOption;
      if(!this.isSelectOtherOption){
        this.syncOtherSelect = '';
@@ -60,26 +88,26 @@
<style lang="scss" scoped>
  .pam-selectAll-btn{
    padding: 6px 20px;
    border: 1px $LIGHT_GREY solid;
    padding         : 10px 20px;
    border          : 1px $LIGHT_GREY solid;
    background-color: $PRIMARY_WHITE;
    border-radius: 30px;
    color: $PRIMARY_BLACK;
    font-size: 20px;
    margin-right: 10px;
    margin-bottom: 10px;
    border-radius   : 30px;
    color           : $PRIMARY_BLACK;
    font-size       : 20px;
    margin-right    : 10px;
    margin-bottom   : 10px;
    &.selected{
      background-color:$CORAL;
      color: $PRIMARY_WHITE;
      background-color: $CORAL;
      color           : $PRIMARY_WHITE;
    }
  }
  .pam-muti-select-other {
    height: 50px;
    padding: 5px;
    -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
    -moz-box-sizing: border-box;    /* Firefox, other Gecko */
    box-sizing: border-box;
    width: 316px;
    border: 1px solid #CCCCCC;
    height            : 50px;
    padding           : 5px;
    -webkit-box-sizing: border-box;         /* Safari/Chrome, other WebKit */
    -moz-box-sizing   : border-box;         /* Firefox, other Gecko */
    box-sizing        : border-box;
    width             : 316px;
    border            : 1px solid #CCCCCC;
  }
</style>
PAMapp/components/phoneContactTimePicker.vue
@@ -2,13 +2,13 @@
<template>
  <div>
    <div class="mt-10" v-for="(scheduleDto,index) in syncScheduleList" :key="index">
      <div class="mdTxt">{{titleFormatByIndex(index)}}</div>
    <div class="mt-10" v-for="(scheduleDto,index) in scheduleList" :key="index">
      <div class="mdTxt">{{index | titleFormatByIndex}}</div>
      <div class="pam-contact-schedule cursor--pointer fix-chrome-click--issue" @click="openPopUp(scheduleDto,index)">
        <div class="pam-contact-schedule__text">
          <template v-if="checkFormHasDone(scheduleDto)">
            <p>{{optionsFormat(scheduleDto.selectWeekOptions,weekOptions)}}</p>
            <p>{{optionsFormat(scheduleDto.selectTimesOptions,timesOfDayOptions)}}</p>
            <p>{{ scheduleDto.selectWeekOptions | optionsFormat(weekOptions)}}</p>
            <p>{{ scheduleDto.selectTimesOptions| optionsFormat(timesOfDayOptions)}}</p>
          </template>
          <template v-else>
            è«‹é¸æ“‡
@@ -17,51 +17,51 @@
        <div class="pam-contact-schedule__icon">
          <i v-if="checkFormHasDone(scheduleDto)"
            class="icon-delet"
            :class="{'disable':syncScheduleList.length===1}"
            @click.stop="deleteScheduleItem(index)">
            :class="{'disable':scheduleList.length===1}"
            @click.stop="deleteScheduleByIndex(index)">
          </i>
          <i v-else class="icon-calender"></i>
        </div>
      </div>
    </div>
    <div class="pam-add-schedule cursor--pointer"
      :class="{'disable':!checkFormHasDone(syncScheduleList[syncScheduleList && syncScheduleList.length && syncScheduleList.length - 1])|| syncScheduleList.length ===7}"
      :class="{'disable': !checkFormHasDone(scheduleList[scheduleList.length && scheduleList.length - 1]) || scheduleList.length===7 }"
      @click="addNewSchedule">
      <i class="icon-add"></i>
      æ–°å¢žæ™‚段
    </div>
    <PopUpFrame class="pam-popUpFrame"
      :isOpen.sync="isOpenByStep_1"
      :dialogWidth="dialogWidth">
        <div class="pam-popUp-title">{{popUpTitle}}</div>
      dialogWidth="376px"
      :isOpen.sync="isOpenByDayPopUp">
        <div class="pam-popUp-title">{{scheduleIndex | titleFormatByIndex}}</div>
          <MultiSelectBtn class="mt-30"
            :mutiSelect.sync="initPickerControl.selectWeekOptions"
            :options="weekOptions.options"
            :nameOfSelectAll="weekOptions.selectAll">
          </MultiSelectBtn>
          <div class="pam-popUp-confirm-bolck mt-30">
          <div class="pam-popUp-confirm-block  mt-30">
            <button class="pam-select-confirm"
              :class="[initPickerControl.selectWeekOptions.length?'el-button--primary' :'is-disabled']"
              @click="confirmByStep_1">
              @click="confirmBySelectDay">
              ç¢ºå®š
            </button>
          </div>
    </PopUpFrame>
    <PopUpFrame class="pam-popUpFrame"
      :isOpen.sync="isOpenByStep_2"
      :dialogWidth="dialogWidth">
        <div class="pam-popUp-title">{{popUpTitle}}</div>
      dialogWidth="376px"
      :isOpen.sync="isOpenByTimePopUp">
        <div class="pam-popUp-title">{{scheduleIndex | titleFormatByIndex}}</div>
        <MultiSelectBtn class="mt-30"
          :mutiSelect.sync="initPickerControl.selectTimesOptions"
          :options="timesOfDayOptions.options"
          :nameOfSelectAll="timesOfDayOptions.selectAll">
        </MultiSelectBtn>
        <div class="pam-popUp-confirm-bolck mt-30">
        <div class="pam-popUp-confirm-block  mt-30">
          <button class="pam-select-confirm"
            :class="[initPickerControl.selectTimesOptions.length ?'el-button--primary' :'is-disabled']"
            @click="confirmByStep_2">
            @click="confirmBySelectTime">
            ç¢ºå®š
          </button>
        </div>
@@ -70,180 +70,165 @@
</template>
<script lang="ts">
  import { Component,PropSync,Vue } from "nuxt-property-decorator";
  import { Component, Prop, PropSync, Vue } from "nuxt-property-decorator";
  import { dayTimeFrames } from "~/shared/const/day-time-frames";
  import { OptionBtnDto, OptionDto } from "~/shared/models/optionBtnDto.model";
  import { weekDays } from "~/shared/const/week-days";
  import * as _ from "lodash";
import { OptionBtnDto } from "./singleSelectBtn.vue";
  @Component
  @Component({
    filters:{
      titleFormatByIndex(index:number):string{
        const chineseNumber = ['一','二','三','四','五','六','七','八','九','十'];
        return '時段'+chineseNumber[index];
      },
      optionsFormat(selectedOptions:string[]|[], compareOptions:OptionDto): string{
        return _.isEqual(selectedOptions.length,compareOptions.options.length)
                ? compareOptions.selectAll
                : _.join(selectedOptions,',');
      },
    }
  })
  export default class PhoneContactTimePicker extends Vue {
    @PropSync('scheduleList',{type:Array,default:()=>[]}) syncScheduleList!:scheduleDto[];
    private weekOptions ={
      selectAll:'每天',
      options:[
        {
          title:'禮拜一',
          label:'禮拜一'
        },
         {
          title:'禮拜二',
          label:'禮拜二'
        },
         {
          title:'禮拜三',
          label:'禮拜三'
        },
         {
          title:'禮拜四',
          label:'禮拜四'
        },
         {
          title:'禮拜五',
          label:'禮拜五'
        }, {
          title:'禮拜六',
          label:'禮拜六'
        },
         {
          title:'禮拜日',
          label:'禮拜日'
        },
      ],
    };
    private timesOfDayOptions ={
      selectAll:'全天',
      options:[
        {
          title:'9:00~12:00',
          label:'9:00~12:00',
        },
        {
          title:'12:00~14:00',
           label:'12:00~14:00',
        },
        {
          title:'14:00~18:00',
           label:'14:00~18:00',
        },
        {
          title:'18:00~21:00',
          label:'18:00~21:00',
        }
      ],
    };
    private dialogWidth="376px";
    private selectedSchedule!:scheduleDto;
    @Prop({type:Array,default:()=>[]})
    scheduleList!:scheduleDto[];
    // popUp frame
    private isOpenByStep_1=false;
    private isOpenByStep_2=false;
    private popUpTitle='';
    private initPickerControl={
      selectWeekOptions:[] as string[],
      selectTimesOptions:[] as string[],
    weekOptions = {
      selectAll: '每天',
      options  : weekDays,
    };
    timesOfDayOptions = {
      selectAll: '全天',
      options  : dayTimeFrames,
    };
    initPickerControl:scheduleDto = {
      selectWeekOptions : [],
      selectTimesOptions: [],
    }
    popUpMode     : TimePickerMode = TimePickerMode.NONE;
    scheduleIndex : number         = 0;
    //////////////////////////////////////////////////////////////////////
    get isOpenByDayPopUp(): boolean{
      return _.isEqual(this.popUpMode , TimePickerMode.SELECT_DAY)
    }
    set isOpenByDayPopUp(value:boolean){
      this.popUpMode = TimePickerMode.NONE;
    }
    get isOpenByTimePopUp(): boolean{
      return _.isEqual(this.popUpMode , TimePickerMode.SELECT_TIME);
    }
    set isOpenByTimePopUp(value:boolean){
      this.popUpMode = TimePickerMode.NONE;
    }
    //////////////////////////////////////////////////////////////////////
    openPopUp(schedule:scheduleDto,index:number):void{
      this.isOpenByStep_1 = true;
      this.popUpTitle = this.titleFormatByIndex(index);
      this.selectedSchedule = schedule;
      this.initPickerControl = _.cloneDeep(schedule);
      this.popUpMode = TimePickerMode.SELECT_DAY;
      this.scheduleIndex = index;
    }
    confirmByStep_1():void{
      this.isOpenByStep_1=false;
      this.isOpenByStep_2=true;
    confirmBySelectDay(): void {
      this.popUpMode = TimePickerMode.SELECT_TIME;
    }
    confirmByStep_2():void{
      this.isOpenByStep_2=false;
      // TODO: code ref
      this.selectedSchedule.selectWeekOptions = this.getOptionsBySort(this.weekOptions.options,this.initPickerControl.selectWeekOptions);
      this.selectedSchedule.selectTimesOptions = this.getOptionsBySort(this.timesOfDayOptions.options,this.initPickerControl.selectTimesOptions);
    confirmBySelectTime(): void {
      this.popUpMode = TimePickerMode.NONE;
      // detect array change to parent
      this.$set( this.scheduleList, this.scheduleIndex, this.initPickerFormatSort(this.initPickerControl) );
    }
    getOptionsBySort(options:OptionBtnDto[],selectedOptions:string[]):string[]{
      return options.map( o => _.includes(selectedOptions,o.title) ? o.title :'').filter(String);
      // return
    private initPickerFormatSort(initPickerControl:scheduleDto):scheduleDto{
      _.keys(initPickerControl).forEach(keyName=>{
        const options = _.isEqual(keyName,'selectWeekOptions') ? weekDays : dayTimeFrames;
        initPickerControl[keyName] = this.getOptionsBySort(initPickerControl[keyName],options);
      })
      return initPickerControl;
    }
    addNewSchedule():void{
    // è³‡æ–™é‡æ–°æŽ’序,回復一開始清單順序
    private getOptionsBySort( selectedOptions:string[] , options:OptionBtnDto[]): string[] {
      return options.map( o => _.includes(selectedOptions , o.label) ? o.label as string : '').filter(String);
    }
    addNewSchedule(): void {
      const newScheduleDto={
        selectWeekOptions:[],
        selectTimesOptions:[],
      }
      this.syncScheduleList.push(newScheduleDto)
      this.scheduleList.push(newScheduleDto)
    }
    deleteScheduleItem(index:number):void{
      this.syncScheduleList.splice(index,1);
    deleteScheduleByIndex(index:number): void {
      this.scheduleList.splice(index,1);
    }
    checkFormHasDone(item:scheduleDto):boolean{
      if (!item) return false;
      return item.selectWeekOptions?.length>0 && item.selectTimesOptions?.length>0;
    }
    titleFormatByIndex(index:number):string{
      const chineseNumber = ['一','二','三','四','五','六','七','八','九','十']
      return '時段'+chineseNumber[index];
    }
    optionsFormat(options:OptionBtnDto[],needToCompareList:OptionDto):string{
      return _.isEqual(options.length,needToCompareList.options.length) ? needToCompareList.selectAll: _.join(options,',');
    checkFormHasDone(item:scheduleDto): boolean {
      return item&&item.selectWeekOptions?.length > 0
          && item.selectTimesOptions?.length > 0;
    }
  }
  export interface scheduleDto{
    selectWeekOptions:string[]|[];
    selectTimesOptions:string[]|[];
  enum TimePickerMode{
    SELECT_DAY="selectDay",
    SELECT_TIME="selectTime",
    NONE=""
  }
  type scheduleKey = keyof scheduleDto
  interface OptionDto{
    selectAll:string,
    options:string[],
  interface scheduleDto {
    selectWeekOptions : string[]|[];
    selectTimesOptions: string[]|[];
  }
</script>
<style lang="scss" scoped>
  .pam-popUp-title{
    font-size: 24px;
    color:$PRIMARY_BLACK;
    display: flex;
    font-size      : 24px;
    color          : $PRIMARY_BLACK;
    display        : flex;
    justify-content: center;
  }
  .pam-popUp-confirm-bolck{
    display: flex;
  .pam-popUp-confirm-block {
    display        : flex;
    justify-content: center;
  }
  .pam-contact-schedule{
    width: inherit;
    background:$PRIMARY_WHITE;
    border: 1px solid $LIGHT_GREY;
    padding: 12px 20px;
    border-radius: 10px;
    display: flex;
    width          : inherit;
    background     : $PRIMARY_WHITE;
    border         : 1px solid $LIGHT_GREY;
    padding        : 12px 20px;
    border-radius  : 10px;
    display        : flex;
    justify-content: space-between;
    margin-top: 10px;
    margin-top     : 10px;
  }
  .pam-contact-schedule__text{
    align-self: center;
    font-size: 20px;
    width: 85%;
    font-size : 20px;
    width     : 85%;
    word-break: break-all;
    color: $PRUDENTIAL_GREY;
    color     : $PRUDENTIAL_GREY;
  }
  .pam-contact-schedule__icon{
    width: 15%;
    display: flex;
    align-items: center;
    width          : 15%;
    display        : flex;
    align-items    : center;
    justify-content: flex-end;
    color: $PRIMARY_RED;
    font-size: 25px;
    color          : $PRIMARY_RED;
    font-size      : 25px;
    .disable{
      color:$LIGHT_GREY;
      color         : $LIGHT_GREY;
      pointer-events: none;
    }
  }
  .pam-add-schedule{
    color: $PRIMARY_RED;
    color     : $PRIMARY_RED;
    margin-top: 10px;
    font-size: 20px;
    font-size : 20px;
     &.disable{
        color:$LIGHT_GREY;
        color         : $LIGHT_GREY;
        pointer-events: none;
    }
  }
PAMapp/components/popUpFrame.vue
@@ -1,44 +1,59 @@
<template>
  <div>
    <Ui-Drawer :isVisible.sync="isUseDrawer"
    @closeDrawer="closePopUp"
    :size="drawerSize">
      <slot></slot>
    </Ui-Drawer>
    <Ui-Dialog :isVisible.sync="isUseDialog"
    @closeDialog="closePopUp"
    :width="dialogWidth">
      <slot></slot>
    </Ui-Dialog>
  </div>
</template>
<script lang="ts">
  import { Vue, Component, Prop,Emit, Watch, PropSync} from 'vue-property-decorator';
  import { isMobileDevice } from '../assets/ts/device';
  import { Vue, Component, Prop, Emit, PropSync} from 'vue-property-decorator';
  import UtilsService from '~/shared/services/utils.service';
  @Component
  export default class PopUpFrame extends Vue {
    @PropSync('isOpen',{type:Boolean,default:false}) syncIsOpen!:boolean;
    @Prop({default:'auto'}) drawerSize!:string; // element UI drawer default size
    @Prop({default:'50%'}) dialogWidth!:string; // element UI dialog default width
    private get isUseDrawer() : boolean {
      return this.syncIsOpen && isMobileDevice();
    }
    private set isUseDrawer(value: boolean) {
      this.$emit('update:isOpen',value);
    }
    @PropSync('isOpen',{type:Boolean,default:false})
    syncIsOpen!:boolean;
    private get isUseDialog() : boolean {
      return this.syncIsOpen && !isMobileDevice();
    }
    private set isUseDialog(value: boolean) {
      this.$emit('update:isOpen',value);
    }
    @Prop({default:'auto'})
    drawerSize!:string; // element UI drawer default size
    @Prop({default:'50%'})
    dialogWidth!:string; // element UI dialog default width
    //////////////////////////////////////////////////////////////////////
    @Emit('closePopUp') closePopUp() {
        return;
      return;
    }
    //////////////////////////////////////////////////////////////////////
    get isUseDrawer() : boolean {
      return this.syncIsOpen && UtilsService.isMobileDevice();
    }
    set isUseDrawer(value: boolean) {
      this.syncIsOpen = value
    }
    get isUseDialog() : boolean {
      return this.syncIsOpen && !UtilsService.isMobileDevice();
    }
    set isUseDialog(value: boolean) {
      this.syncIsOpen = value
    }
  }
</script>
PAMapp/components/singleSelectBtn.vue
@@ -20,25 +20,22 @@
<script lang="ts">
  import { Component, Prop, PropSync, Vue } from "nuxt-property-decorator";
  import { OptionBtnDto } from "~/shared/models/optionBtnDto.model";
  import * as _ from 'lodash';
  @Component
  export default class SingleSelectBtn extends Vue {
    @PropSync('singleSelected', { default: '' }) syncSingleSelected!: string | number;
    @Prop({ type:Array , default:()=>[] }) options!:OptionBtnDto[];
    // ä¸»è¦è§£æ±ºæŒ‰éˆ•點擊兩次能回到,未點選的狀態
    patchValue(value: string): void {
    @PropSync('singleSelected', { default: '' })
    syncSingleSelected!: string | number;
    @Prop({ type:Array , default:()=>[] })
    options!:OptionBtnDto[];
    //////////////////////////////////////////////////////////////////////
    patchValue(value: string | number): void {
      // ä¸»è¦è§£æ±ºæŒ‰éˆ•點擊兩次能回到,未點選的狀態
      this.syncSingleSelected = _.isEqual(this.syncSingleSelected, value) ? "" : value;
    }
  }
  export interface OptionBtnDto {
    title: string,
    subTitle?: string,
    label: string | number,
  }
</script>
<style lang="scss"
  scoped>
</style>
PAMapp/layouts/default.vue
@@ -7,15 +7,15 @@
      :class="bannerClassName">
      <div class="pam-banner__text text--dark-blue">
        <div class="mt-5"
          v-for="(item,index) in getBannerTextList"
          v-for="(bannerText, index) in bannerTextList"
          :key="index">
          {{item}}
          {{ bannerText }}
        </div>
      </div>
    </div>
    <div
      class="pam-container"
      :class="[containClassName,{'mt-navBar': bannerClassName === 'pam-no-banner'}]"
      :class="[containClassName, {'mt-navBar': bannerClassName === 'pam-no-banner'} ]"
    >
      <Nuxt class="pam-page-container"></Nuxt>
    </div>
@@ -27,53 +27,60 @@
  import { Vue, Component } from 'vue-property-decorator';
  import * as _ from 'lodash';
  @Component
  export default class DefaultLayout extends Vue {
    private bannerTextDto:BannerDto= {
      [RouterPage.RECOMMEND_CONSULTANT]: ['輸入問題回答', '依照你的需求推薦嚴選顧問'],
      [RouterPage.QUICK_FILTER]: ['點選下方選項', '尋找你的BEST Match'],
      [RouterPage.MY_CONSULTANT_LIST]:[],
      [RouterPage.QUESTIONNAIRE]:[],
    }
    get getBannerTextList(): string[] {
      return this.bannerTextDto[this.route] ? this.bannerTextDto[this.route] : [];
    };
    get route(): string{
      const routeName = this.$route.name;
      return routeName ? routeName:'';
      return routeName ? routeName : '';
    };
    get bannerClassName() {
      return this.routeFormatBannerClass(this.route);
    };
    // format to {page}-banner or pam-no-banner tag
    private routeFormatBannerClass(route: string): string {
      const needBannerTags = ['recommendConsultant', 'quickFilter', 'myConsultantList-consultantList', 'myConsultantList-contactedList', 'myAppointmentList-appointmentList', 'myAppointmentList-contactedList', 'login'];
      return _.includes(needBannerTags, route) ? route + '-banner' : 'pam-no-banner';
    get bannerTextList(): string[] {
      return this.bannerText[this.route];
    };
    get containClassName(): string {
      return this.routeFormatContainClass(this.route);
    };
    get bannerClassName() {
      return this.routeFormatBannerClass(this.route);
    };
    //////////////////////////////////////////////////////////////////////
    // format to {page}-container tag
    private routeFormatContainClass(route: string): string {
      const needContainBgTags = ['recommendConsultant', 'questionnaire-agentNo'];
      return _.includes(needContainBgTags, route) ? route + '-container' : '';
      const needContainBgRoutes = ['recommendConsultant', 'questionnaire-agentNo'];
      return _.includes(needContainBgRoutes, route) ? route + '-container' : '';
    };
    // format to {page}-banner or pam-no-banner tag
    private routeFormatBannerClass(route: string): string {
      const needBannerRoutes = ['recommendConsultant', 'quickFilter', 'myConsultantList-consultantList', 'myConsultantList-contactedList', 'myAppointmentList-appointmentList', 'myAppointmentList-contactedList', 'login', 'notification'];
      return _.includes(needBannerRoutes, route) ? route + '-banner' : 'pam-no-banner';
    };
    private bannerText: FeatureBannerTitle= {
      [FeaturePage.RECOMMEND_CONSULTANT]: ['輸入問題回答', '依照您的需求推薦嚴選顧問'],
      [FeaturePage.QUICK_FILTER]        : ['點選下方選項', '尋找您的BEST Match'],
      [FeaturePage.MY_CONSULTANT_LIST]  : [],
      [FeaturePage.QUESTIONNAIRE]       : [],
    }
  }
  enum RouterPage {
  enum FeaturePage {
    RECOMMEND_CONSULTANT = 'recommendConsultant',
    QUICK_FILTER = "quickFilter",
    MY_CONSULTANT_LIST = "myConsultantList",
    QUESTIONNAIRE = 'questionnaire',
    QUICK_FILTER         = "quickFilter",
    MY_CONSULTANT_LIST   = "myConsultantList",
    QUESTIONNAIRE        = 'questionnaire',
  }
  type BannerDto={
    [x:string]:string[];
  interface FeatureBannerTitle {
    [x:string]: string[];
  };
</script>
<style lang="scss"
@@ -107,6 +114,9 @@
  }
  @include desktop {
    .pam-banner  {
      height: 150px;
    }
    .mt-navBar {
      margin-top: calc($DESKTOP_NAV_BAR + $MOB_NAV_BAR);
    }
@@ -120,8 +130,6 @@
      margin: 30px auto 0px auto;
    }
  }
  .pam-banner__text {
    font-size: 18px;
@@ -144,8 +152,8 @@
      background-image: url('~/assets/images/quickFilter/banner_mob.svg');
    }
    @media (min-width: 768px) {
      &-banner {
    @include desktop {
        &-banner {
        background-image: url('~/assets/images/quickFilter/banner_web.svg');
      }
    }
@@ -162,7 +170,7 @@
      background-size: contain;
    }
    @media (min-width: 768px) {
    @include desktop {
      &-banner {
        background-image: url('~/assets/images/recommendConsultant/banner_web.svg');
        background-size: cover;
@@ -173,6 +181,7 @@
        background-size: cover;
      }
    }
  }
  .myConsultantList-consultantList,.myConsultantList-contactedList {
@@ -180,7 +189,7 @@
      background-image: url('~/assets/images/myConsultantList/banner_mob.svg');
    }
    @media (min-width: 768px) {
    @include desktop {
      &-banner {
        background-image: url('~/assets/images/myConsultantList/banner_web.svg');
      }
@@ -193,7 +202,7 @@
      background-size: contain;
    }
    @media (min-width: 768px) {
    @include desktop {
      &-container {
        background-image: url('~/assets/images/recommendConsultant/bg_flower_web.svg');
        background-size: cover;
@@ -206,11 +215,23 @@
      background-image: url('~/assets/images/login/login_mob.svg');
    }
    @media (min-width: 768px) {
    @include desktop {
      &-banner {
        background-image: url('~/assets/images/login/login_web.svg');
      }
    }
  }
  .notification {
    &-banner {
      background-image: url('~/assets/images/notification/banner_mob.svg');
    }
    @include desktop {
      &-banner {
        background-image: url('~/assets/images/notification/banner_web.svg');
      }
    }
  }
</style>
PAMapp/middleware/errorRoute.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,15 @@
import { Middleware } from '@nuxt/types';
const errorRoute: Middleware = (context) => {
  if (!context.route.name) {
    const isAdminLogin = context.store.getters['localStorage/isAdminLogin'];
    if (isAdminLogin) {
      context.redirect('/myAppointmentList/appointmentList');
      return;
    }
    context.redirect('/')
  }
}
export default errorRoute;
PAMapp/middleware/errorRouteMiddleware.ts
Àɮפw§R°£
PAMapp/middleware/getUrlQuery.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,26 @@
import { Middleware } from '@nuxt/types';
const getUrlQuery: Middleware = (context) => {
  const currentRouteName = context.route.name;
  const satisfactionIdFromMsg = context.route.query.appointmentId;
  const queryNotContactAppointmentId = context.route.query.notContactAppointmentId;
  const isUserLogin = context.store.getters['localStorage/isUserLogin'];
  if (currentRouteName === 'index' && queryNotContactAppointmentId) {
    context.store.commit('localStorage/storageNotContactAppointmentIdFromMsg', queryNotContactAppointmentId);
    if (!isUserLogin) {
      context.redirect('/login');
    }
  }
  if (currentRouteName === 'index' && satisfactionIdFromMsg) {
    context.store.commit('localStorage/storageSatisfactionIdFromMsg', satisfactionIdFromMsg);
    if (!isUserLogin) {
      context.redirect('/login');
    }
  }
}
export default getUrlQuery
PAMapp/middleware/myAppointment.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,19 @@
import { Middleware } from '@nuxt/types';
const myAppointment: Middleware = (context) => {
  const appointmentIdFromMsg = context.route.query.appointmentId;
  if (appointmentIdFromMsg) {
    context.store.commit('localStorage/storageAppointmentIdFromMsg', appointmentIdFromMsg);
  };
  const isAdminLogin = context.store.getters['localStorage/isAdminLogin'];
  if (isAdminLogin) {
    if (context.route.name === 'myAppointmentList') {
      context.redirect('/myAppointmentList/appointmentList')
    }
  } else {
    context.redirect('/consultantLogin');
  }
}
export default myAppointment
PAMapp/middleware/myAppointmentMiddleware.ts
Àɮפw§R°£
PAMapp/nuxt.config.js
@@ -39,6 +39,8 @@
    '~/plugins/vue-scroll-picker',
    '~/plugins/filters/date.filter.ts',
    '~/plugins/filters/age.filter.ts',
    '~/plugins/filters/appointment-fail-reason.filter.ts',
    '~/plugins/filters/serve-area.filter.ts',
  ],
  // Auto import components: https://go.nuxtjs.dev/config-components
@@ -70,6 +72,6 @@
  },
  router: {
    base: process.env.ENV === 'uat' ? '/pam/' : '',
    middleware: 'errorRouteMiddleware'
    middleware: ['getUrlQuery', 'errorRoute']
  }
}
PAMapp/pages/accountSetting/index.vue
@@ -1,133 +1,221 @@
<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 class="pam-account-setting">
    <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>
    <!-- NOTE: ä¸»è¦è¯çµ¡æ–¹å¼ -->
    <div class="pam-paragraph account-info" v-if="!isPrimaryContactTypeEmail">
      <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>
    <div class="pam-paragraph account-info" v-if="isPrimaryContactTypeEmail">
      <div class="account-info__title text--middle">綁定</div>
      <div class="account-info__input" :class="{'edit': !userEmailDisabled }">
        <div class="text--middle mb-10">Email</div>
        <el-input
              :disabled ="userEmailDisabled"
              type="textarea"
              autosize
              resize="none"
              v-model="emailValue"
              :class="{'is-invalid': !emailValid }"
              ref="userEmail"
              class="account-info__input-text text--break-all"
              style="margin-left:-10px"
              :placeholder="emailValue || '尚未提供 Email'">
          </el-input>
        <div class="account-info__input-error">
            <span v-show="!emailValue" class="error">信箱格式有誤</span>
        </div>
      </div>
    </div>
    <!-- NOTE: å‚™ç”¨è¯çµ¡æ–¹å¼ -->
    <div
      v-if="(!defaultUserSetting.phone || !defaultUserSetting.email) && !otherContactType"
      class="text--underline text--primary"
      @click="editOtherContactType">+其他備用聯繫方式</div>
    <template v-if="(defaultUserSetting.phone && defaultUserSetting.email) || otherContactType">
      <div v-if="!isPrimaryContactTypeEmail">
         <div class="pam-paragraph account-info">
        <div class="account-info__title text--middle">備用</div>
          <div class="account-info__input " :class="{'edit': !userEmailDisabled }" >
          <div class="text--middle mb-10 account-info-dele-other-contact-type">
            <div>Email</div>
            <div class="account-info__icon text--middle">
              <i class="icon-delet" v-if="defaultUserSetting.mail" @click="isShowDeleteDialog = true"></i>
              <i class="icon-edit"  @click="editField('userEmail')" :class="{'icon-color-change': !userEmailDisabled}"></i>
            </div>
          </div>
          <el-input
              type="textarea"
              autosize
              :disabled="userEmailDisabled"
              resize="none"
              v-model="emailValue"
              :class="{'is-invalid': !emailValid }"
              ref="userEmail"
              class="account-info__input-text text--break-all"
              style="margin-left:-10px"
              :placeholder="emailValue || '尚未提供 Email'">
          </el-input>
            <div class="account-info__input-error">
              <span v-show="!emailValid" class="error">信箱格式有誤</span>
            </div>
        </div>
          </div>
      </div>
      <div class="pam-paragraph account-info" v-if="isPrimaryContactTypeEmail">
        <div class="account-info__title text--middle">備用</div>
          <div class="account-info__input" :class="{'edit': !userPhoneDisabled }">
          <div class="text--middle mb-10 account-info-dele-other-contact-type">
            <div>手機號碼</div>
            <div class="account-info__icon text--middle">
              <i class="icon-delet" v-if="defaultUserSetting.phone" @click="isShowDeleteDialog = true"></i>
              <i class="icon-edit" @click="editField('userPhone')" :class="{'icon-color-change': !userPhoneDisabled}"></i>
            </div>
          </div>
          <input
            v-model="phoneValue"
            :disabled="userPhoneDisabled"
            :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>
    </template>
    <PopUpFrame :isOpen.sync="updateDone">
      <div class="text--center mdTxt fs-18">
        <p class="mt-20 text--center ">帳號資訊更新成功</p>
        <el-button
                type="primary"
                @click="confirmUpdateAndBackToHome"
                class="mt-20"
              >我知道了</el-button>
      </div>
    </PopUpFrame>
    <PopUpFrame :isOpen.sync="isShowDeleteDialog">
      <div class="text--center mdTxt fs-18">
      <p class="mt-20 text--center ">是否確認刪除備用欄位?</p>
          <el-button
              @click="isShowDeleteDialog = false"
              class="mt-20"
            >取消</el-button>
        <el-button
                type="primary"
                @click="deleteOtherContactType"
                class="mt-20"
              >確認刪除</el-button>
      </div>
    </PopUpFrame>
    <div class="pam-paragraph account-confirm">
      <el-button :disabled="isSubmitBtnDisabled "
        @click.native="updateAccountSetting">
          é€å‡º
      </el-button>
    </div>
  </div>
</template>
<script lang="ts">
import { Vue,Component } from 'vue-property-decorator'
import { getUserAccountSetting, updateAccountSetting } from '~/assets/ts/api/consultant';
import { UserSetting } from '~/assets/ts/models/account.model';
import { namespace } from 'vuex-class';
import _ from 'lodash';
import accountSettingService from '~/shared/services/account-setting.service';
import { UserSetting } from '~/shared/models/account.model';
const localStorageStore = namespace('localStorage');
@Component
export default class AccountSetting extends Vue {
        _userSetting!: UserSetting;
        userNameDisabled = true;
        userPhoneDisabled = true;
        userEmailDisabled = true ;
        userNameValue = '';
        phoneValue = '' ;
        emailValue = '' ;
        onEditMode = false;
        formValidStatus = {
            name: true,
  @localStorageStore.Getter
  isPrimaryContactTypeEmail!: boolean;
  defaultUserSetting: UserSetting = {
    name :  '',
    phone:  '',
    email:  '',
  };
  userNameDisabled  = true;
  userPhoneDisabled = true;
  userEmailDisabled = true ;
  otherContactType = false;
  isShowDeleteDialog = false;
  updateDone        = false;
  userNameValue     = '';
  phoneValue        = '' ;
  emailValue        = '' ;
  formValidStatus = {
            name : true,
            phone: true,
            email: true,
        };
    };
        get nameValid(): boolean {
            this.formValidStatus.name = this.userNameValue ? true : false;
            return this.formValidStatus.name;
////////////////////////////////////////////////////////////
  mounted(){
            accountSettingService.getUserAccountSetting().then((userInfo: UserSetting)=>{
                this.defaultUserSetting = _.cloneDeep({
                    name : userInfo.name || '',
                    phone: userInfo.phone || '',
                    email: userInfo.email || '',
                });
                this.phoneValue    = this.defaultUserSetting.phone!;
                this.userNameValue = this.defaultUserSetting.name!;
                this.emailValue    = this.defaultUserSetting.email!;
            })
        }
////////////////////////////////////////////////////////////
        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;
  editField(fieldName: string): void {
            const enablePromise = new Promise((resolve, reject) => { // æ­¤ç‚ºpromise語法
                resolve((this as any)[`${fieldName}Disabled`] = false);
            });
@@ -136,178 +224,161 @@
                targetInput.focus();
            });
        }
  updateAccountSetting(): void {
      const editSettingInfo: UserSetting = {
          name: this.userNameValue,
          phone: this.phoneValue,
          email: this.emailValue
      }
      accountSettingService.updateAccountSetting(editSettingInfo).then((res: any) => {
          this.resetSettingForm();
          this.updateDone = true;
          this.defaultUserSetting = editSettingInfo;
      });
  }
        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
            }
            updateAccountSetting(editSettingInfo).then((res: any) => {
                console.log('updateRes:', res);
                this.resetSettingForm();
            });
        }
        private resetSettingForm(): void {
            this.onEditMode = false;
  private resetSettingForm(): void {
            this.userNameDisabled = true;
            this.userPhoneDisabled = true;
            this.userEmailDisabled = true ;
        }
        mounted(){
            getUserAccountSetting().then((userInfo: UserSetting)=>{
                this._userSetting = {
                    name: userInfo.name || '',
                    phone: userInfo.phone || '',
                    email: userInfo.email || '',
                };
  editOtherContactType(){
    this.otherContactType = true;
    setTimeout(() => {
      if (this.isPrimaryContactTypeEmail) {
        this.editField('userPhone');
      } else {
        this.editField('userEmail');
      }
    }, 0);
  }
                this.phoneValue = this._userSetting.phone!;
                this.userNameValue = this._userSetting.name!;
                this.emailValue = this._userSetting.email!;
            })
  deleteOtherContactType(): void {
    const editSettingInfo: UserSetting = {
        name: this.userNameValue,
        phone: '',
        email: '',
    };
    if (this.isPrimaryContactTypeEmail) {
      editSettingInfo.email = this.emailValue;
    } else {
      editSettingInfo.phone = this.phoneValue;
    }
    accountSettingService.updateAccountSetting(editSettingInfo).then((res: any) => {
        this.resetSettingForm();
        this.updateDone = true;
        if (this.isPrimaryContactTypeEmail) {
          this.phoneValue = '';
          this.defaultUserSetting.phone = '';
        } else {
          this.emailValue = '';
          this.defaultUserSetting.email = '';
        }
        this.isShowDeleteDialog = false;
        this.otherContactType = false;
    });
  }
////////////////////////////////////////////////////////////
  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;
        }
  get isSubmitBtnDisabled(): boolean {
            const isFormValid = this.formValidStatus.name && this.formValidStatus.phone && this.formValidStatus.email;
            const isOtherContactTypeChange = this.isPrimaryContactTypeEmail
                                            ? this.defaultUserSetting.phone !== this.phoneValue
                                            : this.defaultUserSetting.email !== this.emailValue;
            return !isFormValid
                  || (this.userNameValue === this.defaultUserSetting.name
                  && !isOtherContactTypeChange);
        }
  confirmUpdateAndBackToHome():void{
      this.updateDone = false
      this.$router.push('/accountSetting')
  }
}
</script>
<style lang="scss" scoped>
.account-page{
    .block{
        display: flex;
<style lang="scss">
.pam-account-setting {
  .account-info{
    display: flex;
    align-items: baseline;
    border-bottom: 1px gray solid;
    padding: 15px 15px 15px 30px;
    .account-info__title{
      width: 58px;
    }
    .account-page-title{
    .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;
        margin-bottom: 34px;
        &:disabled{
          padding: 0px;
        }
      }
      .account-info__input-error{
        @extend .smTxt_bold,.text--primary;
        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;
            font-size: 20px;
            display: flex;
            flex-direction: column;
            align-items: flex-start;
        }
        &.edit {
            input {
                border: 1px solid lightgray;
                background-color: #fff;
            }
        }
    .account-info__icon{
      margin-left: 20px;
      .icon-color-change{
        color:$PRIMARY_RED;
      }
    }
    .account-setting-btn{
        display: flex;
        justify-content: center;
    }
}
.error-txt{
    padding-bottom: 10px;
    .error {
        @extend .smTxt_bold;
        @extend .text--primary;
        height: 16px;
        }
}
.name-input{
            width: 184px;
            height:27px;
            margin-bottom: 20px;
            font-size: 20px;
            margin-top: -3px;
        }
.setting-title{
            margin-left: 28px;
            margin-bottom:10px;
            width: 58px;
            font-size: 20px;
        }
.header{
  }
  .account-confirm{
    display: flex;
    align-items: baseline;
}
.contact-input{
    font-size: 20px;
    margin-bottom: 10px;
    text-overflow: ellipsis;
    margin-top: 10px;
    width: 184px;
}
.input{
    border: 0;
    background-color: rgba(0,0,0,0) ;
    outline-color: gainsboro;
}
.input:focus{
    background-color: #fff;
}
.icon-color-change{
    color:$PRIMARY_RED;
    font-size: 20px;
}
.icon{
    font-size:20px;
    // color:#1B365D;
}
@include desktop{
    .header{
    justify-content: center;
  }
  .account-info-dele-other-contact-type{
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    }
    .setting-title{
            margin-bottom:10px;
            width: 58px;
            font-size: 18px;
            font-weight: bold;
        }
    .account-page{
    .account-page-title{
        font-size: 20px;
        margin-bottom: 34px;
        font-weight: bold;
    }
    }
    .account-card{
        display: flex;
        flex-direction: column;
        border-bottom: 1px solid gray;
        margin-bottom: 33px;
        .contact-type{
            margin-left: 10px;
            font-size: 20px;
        }
    }
    .name-input{
        width: 550px;
    }
    .contact-input{
        width:550px
    }
    }
  }
</style>
  .el-textarea__inner{
    background-color: rgba(0,0,0,0) ;
    border: none !important;
    padding:1px !important;
  }
}
</style>
PAMapp/pages/agentInfo/_agentNo.vue
@@ -3,14 +3,18 @@
      <el-row
        type="flex"
        justify="center">
        <UiAvatar :size="150" :fileName="agentInfo.img"></UiAvatar>
        <UiAvatar
          :size="150"
          :agentNo="agentInfo.agentNo">
        </UiAvatar>
      </el-row>
      <el-row
        type="flex"
        class="pt-10"
        justify="center"
        align="middle">
        align="middle" v-if="!hideReviews">
        <!-- TODO:隱藏滿意度 -->
          <i class="pam-icon icon--primary icon-star"></i>
          <h3 class="mdTxt">{{ agentInfo.avgScore }}</h3>
      </el-row>
@@ -20,6 +24,15 @@
        class="pt-10"
        justify="center">
        <h3 class="mdTxt">{{ agentName }}</h3>
      </el-row>
      <el-row
        v-if="currentRole === role.ADMIN"
        type="flex"
        class="pam-paragraph">
        <UiField :span="12" icon="phone" label="手機號碼">
          {{ agentInfo.phoneNumber }}
        </UiField>
      </el-row>
      <el-row
@@ -34,7 +47,7 @@
        type="flex"
        class="pam-paragraph">
        <UiField icon="company" label="服務地區">
          {{ agentInfo.serveArea }}
          {{ agentInfo.serveArea | toServeArea }}
        </UiField>
      </el-row>
@@ -109,12 +122,21 @@
        </el-col>
      </el-row>
      <div class="consultant-edit-btn">
        <UiField icon="flag" label="溝通風格">
          <div class="text--orange bold pr-10 "
            v-for="(communicationStyle, index) in displayCommunicationStyleList"
            :key="index">
              #{{ communicationStyle }}</div>
        </UiField>
    </div>
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField icon="flag" label="專長領域">
          <div class="pam-field-experts">
            <div class="text--orange bold pr-10" v-for="(expert, index) in agentInfo.expertises" :key="index">
            <div class="text--orange bold pr-10" v-for="(expert, index) in agentInfo.expertise" :key="index">
              #{{ expert }}
            </div>
          </div>
@@ -124,7 +146,7 @@
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField icon="comment" label="個人理念">
        <UiField icon="comment" label="個人理念" class="agent-info-textarea">
          {{ agentInfo.concept }}
        </UiField>
      </el-row>
@@ -132,9 +154,9 @@
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField icon="school" label="個人背景">
          <span v-for="(experience, index) in agentInfo.experiences" :key="index">
            {{ experience }}<span v-if="index !== agentInfo.experiences.length - 1">, </span>
        <UiField icon="school" label="個人背景" class="agent-info-textarea">
          <span>
            {{ agentInfo.experiences }}
          </span>
        </UiField>
      </el-row>
@@ -142,7 +164,7 @@
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField icon="trophy" label="得獎經歷">
        <UiField icon="trophy" label="得獎經歷" class="agent-info-textarea">
          {{ agentInfo.awards }}
        </UiField>
      </el-row>
@@ -181,6 +203,9 @@
            </div>
        </div>
    </PopUpFrame>
    <div class="consultant-edit-btn" v-if="currentRole === role.ADMIN">
      <el-button type="primary" @click.native="$router.push(`/agentInfo/edit/${agentInfo.agentNo}`)">編輯帳戶資訊</el-button>
    </div>
    </div>
</template>
@@ -188,33 +213,39 @@
import { Context } from '@nuxt/types';
import { namespace } from 'nuxt-property-decorator';
import { Vue, Component } from 'vue-property-decorator';
import { getConsultantDetail } from '~/assets/ts/api/consultant';
import { Role } from '~/assets/ts//models/enum/Role';
import myConsultantService from '~/shared/services/my-consultant.service';
import { AgentInfo } from '~/shared/models/agent-info.model';
import { hideReviews } from '~/shared/const/hide-reviews';
import { Role } from '~/shared/models/enum/Role';
const roleStorage = namespace('localStorage');
@Component
export default class AgentInfoComponent extends Vue {
  @roleStorage.Getter currentRole!:string|null;
  role = Role;
  agentInfo!: AgentInfo;
  role = Role;
  isAlertAddSuccess = false;
  isAlertFieldInfo = false;
  fieldInfoTitle = '';
  fieldInfoDesc = '';
  hideReviews = hideReviews ;
  //////////////////////////////////////////////////////////////////////
  async asyncData(context: Context) {
    const agentNo = context.route.params.agentNo;
    let agentInfo = {};
    await getConsultantDetail(agentNo).then((res) => agentInfo = res.data )
    return {
      agentInfo
      agentInfo: await myConsultantService.getConsultantDetail(agentNo).then((res) => res)
    }
  }
  get agentName(): string {
    return `${this.agentInfo.name}(${this.agentInfo.role})`;
  }
  //////////////////////////////////////////////////////////////////////
  alertAddSuccess() {
  alertAddSuccess(): void {
      this.isAlertAddSuccess = true;
  }
@@ -231,27 +262,17 @@
        break;
    }
  }
  get agentName(): string {
    return `${this.agentInfo.name}(${this.agentInfo.role})`;
  }
  get displayCommunicationStyleList(): string[] {
    return this.agentInfo.communicationStyle.split('、').filter((item) => item);
  }
}
interface AgentInfo {
  name            : string;
  agentNo         : string;
  role            : string;
  img             : string;
  avgScore        : number;
  title           : string;
  phoneNumber     : string;
  serveArea       : string;
  companyAddress  : string;
  lastestLoginTime: Date | null;
  seniority       : string;
  suitability     : number;
  evaluation      : number;
  expertises      : string[];
  concept         : string;
  experiences     : string[];
  awards          : string;
}
</script>
<style lang="scss">
@@ -303,5 +324,16 @@
  flex-wrap: wrap;
  line-height: 24px;
}
.consultant-edit-btn{
  display: flex;
  justify-content: center;
}
.pam-field{
  display: flex;
}
.agent-info-textarea{
  word-break: break-all;
  word-wrap: break-word;
}
</style>
PAMapp/pages/agentInfo/edit/_agentNo.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,520 @@
<template>
    <div class="edit-agent-info-page">
      <el-row
        type="flex"
        justify="center">
        <EditConsultantAvatar
          :agentNo="agentInfo.agentNo"
          :photoBase64.sync="editInfoValue.photoBase64"/>
      </el-row>
      <!-- NOTE: æˆ‘認為編輯頁面不需要顯示 avgScore,先隱藏 [Tomas, 2022/2/10 13:55] -->
      <!-- <el-row
        type="flex"
        class="pt-10"
        justify="center"
        align="middle" v-if="!hideReviews">
          <i class="pam-icon icon--primary icon-star"></i>
          <h3 class="mdTxt">{{ agentInfo.avgScore }}</h3>
      </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">
        <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">
        <UiField :span="24" icon="agent" label="頭銜">
          <el-input  v-model="editInfoValue.title" class="mt-10"></el-input>
        </UiField>
      </el-row>
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField icon="company" label="服務地區">
          <MultiSelectBtn class="mt-30"
            :mutiSelect.sync="editInfoValue.serveArea"
            :nameOfSelectAll="'全台'"
            :options="serveAreaOptions"
            >
          </MultiSelectBtn>
        </UiField>
      </el-row>
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField icon="address" label="公司地址">
          <el-input  v-model="editInfoValue.companyAddress" class="mt-10"></el-input>
        </UiField>
      </el-row>
      <el-row
        type="flex"
        class="pam-paragraph">
        <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>
      </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">
                <i class="pam-icon icon-thumbs-up"
                  ></i>諮詢度表現 <i class="pl-5 text--primary icon-information" @click="alertFieldInfo('evaluation')"></i>
              </div>
            </div>
            <div class="xsTxt">
              {{ agentInfo.evaluation }}/50 (近一個月/累計)
            </div>
          </div>
          <div class="pam-field__content pam-field-evaluation pt-10">
            <el-progress :show-text="false" :stroke-width="15" :percentage="agentInfo.evaluation * 2"></el-progress>
          </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">
                <i class="pam-icon icon-flag"
                  ></i>溝通風格  <span class="hint text--bold">(可複選,最多2項)</span>
              </div>
            </div>
            <MultiSelectBtn class="mt-30"
              :mutiSelect.sync="editInfoValue.communicationStyle"
              :options="agentCommunicationStyleList"
              :maxLength="2"
            >
            </MultiSelectBtn>
          </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">
                <i class="pam-icon icon-flag"
                  ></i>專長領域  <span class="hint text--bold">(可複選)</span>
              </div>
            </div>
            <MultiSelectBtn class="mt-30"
              :mutiSelect.sync="editInfoValue.expertise"
              :options="agentExpertList"
            >
            </MultiSelectBtn>
          </div>
        </el-col>
      </el-row>
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField icon="comment" label="個人理念">
          <el-input type="textarea" autosize v-model="editInfoValue.concept" class="mt-10"></el-input>
        </UiField>
      </el-row>
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField icon="school" label="個人背景">
            <el-input
              autosize
              type="textarea"
              class="mt-10"
              v-model="editInfoValue.experiences">
            </el-input>
        </UiField>
      </el-row>
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField icon="trophy" label="得獎經歷">
          <el-input type="textarea" autosize style="height:70%" v-model="editInfoValue.awards" class="mt-10"></el-input>
        </UiField>
      </el-row>
    <PopUpFrame
      :isOpen.sync="isAlertFieldInfo"
      >
        <div class="text--center mdTxt fs-18">
            <p>{{ fieldInfoTitle }}</p>
            <p class="mt-20 text--left text--regular">{{ fieldInfoDesc }}</p>
            <div class="text--center mt-30">
              <el-button
                type="primary"
                @click="isAlertFieldInfo = false"
              >我知道了</el-button>
            </div>
        </div>
    </PopUpFrame>
    <PopUpFrame :isOpen.sync="isInfoUpdate">
      <div class="text--center mdTxt fs-18">
        <p class="mt-20 text--center ">帳號資訊更新成功</p>
        <el-button
                type="primary"
                @click="backToInfo"
                class="mt-20"
              >我知道了</el-button>
      </div>
    </PopUpFrame>
    <div class="pam-paragraph account-confirm">
      <el-button :disabled="isSubmitBtnDisabled"
        @click.native="editAgentInfoSetting">
          é€å‡º
      </el-button>
    </div>
    </div>
</template>
<script lang="ts">
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 { AgentInfo } from '~/shared/models/agent-info.model';
import { hideReviews } from '~/shared/const/hide-reviews';
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 AgentInfoEditComponent extends Vue {
  @localStorageTest.State
  current_role: any;
  @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         : [] as string[],
    companyAddress    : '',
    seniorityYear     : 1,
    seniorityMonth    : 0,
    concept           : '',
    experiences       : '',
    awards            : '',
    communicationStyle: [] as string[],
    photoBase64       : '',
    phoneNumber       : ''
  };
  communicationStyleList: string[] = agentCommunicationStyleList;
  role           = Role;
  agentExpertList = [
    {
        title:'健康與保障',
        label:'健康與保障'
    },
    {
        title:'子女教育',
        label:'子女教育'
    },
    {
        title:'資產規劃',
        label:'資產規劃'
    },
    {
        title:'樂活退休',
        label:'樂活退休'
    },
    {
        title:'保單健檢/規劃',
        label:'保單健檢/規劃'
    },
    {
        title:'分紅保單',
        label:'分紅保單'
    }];
  agentCommunicationStyleList = [
    {
        title:'謹慎務實',
        label:'謹慎務實'
    },
    {
        title:'明快主動',
        label:'明快主動'
    },
    {
        title:'耐心傾聽',
        label:'耐心傾聽'
    },
    {
        title:'健談風趣',
        label:'健談風趣'
    }];
  //////////////////////////////////////////////////////////////////////
  async asyncData(context: Context) {
    const agentNo = context.route.params.agentNo;
    return {
      agentInfo: await myConsultantService.getConsultantDetail(agentNo).then((res) => res)
    }
  }
  mounted(){
    this.setAgentInfo(this.agentInfo);
  }
  private setAgentInfo(agentInfo: AgentInfo): void {
    const [agentYear, _yearUnit , agentMonth, _monthUnit] =  agentInfo.seniority.split(" ");
    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 || '',
      seniorityYear     : agentYear? +agentYear : 0,
      seniorityMonth    : agentMonth ? +agentMonth : 0,
      concept           : agentInfo.concept || '',
      experiences       : agentInfo.experiences  || '',
      awards            : agentInfo.awards || '',
      communicationStyle: agentInfo.communicationStyle || '',
      photoBase64       : ''
    };
    this.editInfoValue = {
      ...this.defaultAgentInfoSetting,
      expertise          : _.cloneDeep(this.defaultAgentInfoSetting.expertise),
      // TODO: ç¢ºèªå¾Œç«¯æ­¤æ¬„位後端應改為以" , "隔開 [Tomas, 2021/12/28]
      communicationStyle : this.defaultAgentInfoSetting.communicationStyle.split('、'),
    }
  }
  //////////////////////////////////////////////////////////////////////
  editAgentInfoSetting(): void {
    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);
    });
  }
  backToInfo() {
    this.isInfoUpdate = false
    this.$router.push(`/agentInfo/${this.agentInfo.agentNo}`);
  }
  selectCommunicationStyles(): void {
    if (this.editInfoValue.communicationStyle.length > 2) {
            this.editInfoValue.communicationStyle.shift();
        }
  }
  alertFieldInfo(field: string): void {
    this.isAlertFieldInfo = true;
    switch(field) {
      case 'suitability':
        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
            ? rule.test(this.editInfoValue.phoneNumber) && _.isEqual(this.editInfoValue.phoneNumber.length,10)
            : true;
        }
  get isSubmitBtnDisabled(): boolean {
      const isFormValid =  this.editInfoValue.name
                        && this.editInfoValue.title
                        && this.editInfoValue.companyAddress
                        && this.editInfoValue.serveArea
                        && this.editInfoValue.concept
                        && this.editInfoValue.experiences
                        && this.editInfoValue.phoneNumber.length
                        && this.editInfoValue.seniorityYear
                        && this.editInfoValue.expertise.length
                        && this.editInfoValue.communicationStyle.length;
      return !isFormValid
  }
}
</script>
<style lang="scss">
.pam-icon {
  font-size    : 15px;
  padding-right: 8px;
  color        : $PRUDENTIAL_GREY;
  &.icon--primary {
    color: $PRIMARY_RED;
  }
}
.pam-field {
  display: flex;
  flex-direction: column;
  .pam-field__label {
    display: flex;
    align-items: center;
    .pam-icon {
      font-size: 12px;
    }
    .pam-field__title {
      font-size  : 16px;
      font-weight: bold;
      display    : flex;
      align-items: center;
    }
  }
}
.pam-field-suitability {
  .el-progress-bar__inner {
    background-color: $LIGHT_BLUE !important;
  }
}
.pam-field-evaluation {
  .el-progress-bar__inner {
    background-color: $TEAL_GREEN!important;
  }
}
.pam-field-experts {
  display  : flex;
  flex-wrap: wrap;
}
.pam-progress__label {
  justify-content: space-between;
  flex-wrap  : wrap;
  line-height: 24px;
}
.account-confirm{
  display: flex;
  justify-content: center;
}
.seniority-input{
  width       : 60px;
  margin-right: 5px;
}
.el-input--suffix .el-input__inner {
  padding-right: 20px;
}
</style>
PAMapp/pages/appointment/_appointmentId/close/index.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,313 @@
<template>
  <div class="appointment-client-detail-close-page">
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField label="歸檔方式" :labelSize="20">
          <SingleSelectBtn class="mt-10"
            :singleSelected.sync="appointmentCloseInfo.selectCloseOption"
            :options="closeOptions" />
        </UiField>
      </el-row>
      <template v-if="appointmentCloseInfo.selectCloseOption === contactStatus.DONE">
        <el-row
          type="flex"
          class="pam-paragraph" style="flex-direction: column">
          <UiField label="身分證字號/居留證字號" :labelSize="20" class="required">
            <input
              class="appointment-client-detail-close__input"
              :class="{'is-invalid':!identityIdValid}"
              v-model="appointmentCloseInfo.policyholderIdentityId"
              placeholder="請輸入"
              type="text">
          </UiField>
          <div class="error mt-5 mb-5" v-show="!identityIdValid">
            <span>身分證字號格式有誤</span>
          </div>
        </el-row>
        <el-row
          type="flex"
          class="pam-paragraph">
          <UiField label="商品代碼Plan Code" :labelSize="20" class="required">
            <input
              class="appointment-client-detail-close__input"
              v-model="appointmentCloseInfo.planCode"
              placeholder="請輸入"
              type="text">
          </UiField>
        </el-row>
        <el-row
          type="flex"
          class="pam-paragraph">
          <UiField label="進件時間" :labelSize="20" class="required">
            <DateTimePicker
              :defaultValue="appointmentCloseInfo.policyEntryDate"
              @changeDateTime="appointmentCloseDate = $event"></DateTimePicker>
          </UiField>
        </el-row>
      </template>
      <template v-if="appointmentCloseInfo.selectCloseOption === contactStatus.CLOSE">
        <el-row
          class="pam-paragraph">
          <UiField label="未成交原因" :labelSize="20" class="required">
            <UiSelect :closeReason.sync="appointmentCloseInfo.closedReason"
              :options="appointmentFailReason"/>
          </UiField>
          <input
            v-if="appointmentCloseInfo.closedReason === 'other'
                || appointmentCloseInfo.closedReason === 'no_suitable_commodity'"
            class="appointment-client-detail-close__input mt-10"
            v-model="appointmentCloseInfo.closedOtherReason"
            placeholder="請輸入原因,限50字。"
            type="text">
        </el-row>
      </template>
      <el-row
        type="flex"
        class="pam-paragraph">
        <UiField label="備註" :labelSize="20">
          <el-input
            type="textarea"
            :rows="3"
            placeholder="請輸入"
            v-model="appointmentCloseInfo.remark"
            resize="none">
          </el-input>
        </UiField>
      </el-row>
      <el-row
        type="flex"
        justify="center"
        class="pam-paragraph">
        <el-button @click="$router.go(-1)">取消</el-button>
        <el-button @click="closeAppointment" :disabled="isSubmitBtnDisabled">確認</el-button>
      </el-row>
      <PopUpFrame :isOpen.sync="isShowSuccessAlert">
        <div class="text--middle invite-review">
          <div  class="mb-30 mt-10">結案成功</div>
          <el-button type="primary" @click="closeAlert">確定</el-button>
        </div>
      </PopUpFrame>
  </div>
</template>
<script lang="ts">
import { namespace } from 'nuxt-property-decorator';
import { Vue, Component } from 'vue-property-decorator';
import { Appointment, ToCloseAppointment, ToDoneAppointment } from '~/shared/models/appointment.model';
import appointmentService from '~/shared/services/appointment.service';
import { appointmentFailReasonList } from '~/shared/const/appointment-fail-reason-list';
import { ContactStatus } from '~/shared/models/enum/contact-status';
const appointmentStore = namespace('appointment.store');
@Component
export default class AppointmentDetailCloseComponent extends Vue {
  @appointmentStore.Action
  updateAppointmentDetail!: (appointmentId: number) => Appointment;
  @appointmentStore.State('appointmentDetail')
  appointmentDetail!: Appointment;
  contactStatus = ContactStatus;
  appointmentCloseDate = '';
  isShowSuccessAlert = false;
  appointmentCloseInfo = {
    closedOtherReason     : '',
    closedReason          : 'other',
    planCode              : '',
    policyEntryDate       : '',
    policyholderIdentityId: '',
    remark                : '',
    selectCloseOption     : this.contactStatus.DONE,
  };
  closeOptions = [
    {
      title:'成交',
      label: this.contactStatus.DONE,
    },
    {
      title:'未成交',
      label: this.contactStatus.CLOSE,
    }
  ];
  appointmentFailReason = appointmentFailReasonList;
  //////////////////////////////////////////////////////////////////////
  mounted() {
    const appointmentId = +this.$route.params.appointmentId;
    const closedInfo = this.appointmentDetail.appointmentClosedInfo;
    if (this.appointmentDetail.id === appointmentId
        && (this.appointmentDetail.communicateStatus === this.contactStatus.DONE
        || this.appointmentDetail.communicateStatus === this.contactStatus.CLOSE
        || this.appointmentDetail.communicateStatus === this.contactStatus.CANCEL)
        ) {
        this.appointmentCloseInfo = {
        closedOtherReason     : closedInfo?.closedOtherReason,
        closedReason          : closedInfo?.closedReason,
        planCode              : closedInfo?.planCode,
        policyEntryDate       : closedInfo?.policyEntryDate,
        policyholderIdentityId: closedInfo?.policyholderIdentityId,
        remark                : closedInfo?.remark,
        selectCloseOption     : this.appointmentDetail.communicateStatus === this.contactStatus.DONE
                                ? this.contactStatus.DONE
                                : this.contactStatus.CLOSE
      };
      this.appointmentCloseDate = closedInfo?.policyEntryDate;
    }
  }
  //////////////////////////////////////////////////////////////////////
  closeAppointment(): void {
    const appointmentId = +this.$route.params.appointmentId;
    if (this.appointmentCloseInfo.selectCloseOption === this.contactStatus.DONE) {
      const toDoneAppointment: ToDoneAppointment = {
        appointmentId         : appointmentId,
        contactStatus         : this.contactStatus.DONE,
        planCode              : this.appointmentCloseInfo.planCode,
        policyEntryDate       : this.appointmentCloseDate,
        policyholderIdentityId: this.appointmentCloseInfo.policyholderIdentityId,
        remark                : this.appointmentCloseInfo.remark,
      }
      appointmentService.closeAppointment(toDoneAppointment).then((_) => this.updateAppointmentDetail(appointmentId));
      this.isShowSuccessAlert = true;
    } else {
      const toCloseAppointment: ToCloseAppointment = {
        appointmentId    : appointmentId,
        closedOtherReason: this.appointmentCloseInfo.closedOtherReason,
        closedReason     : this.appointmentCloseInfo.closedReason,
        contactStatus    : this.contactStatus.CLOSE,
        remark           : this.appointmentCloseInfo.remark,
      }
      appointmentService.closeAppointment(toCloseAppointment).then((_) => {
        this.updateAppointmentDetail(appointmentId);
        this.isShowSuccessAlert = true;
      });
    }
  }
  closeAlert(){
    this.isShowSuccessAlert = false ;
    this.$router.push(`/myAppointmentList/contactedList`);
  }
  checkIdentityId(id) {
    const tab = 'ABCDEFGHJKLMNPQRSTUVXYWZIO';
    const weight = [9, 8, 7, 6, 5, 4, 3, 2, 1, 1];
    if (id.length !== 10) return false;
    let i = tab.indexOf(id.charAt(0)) + 10;
    if (i === 9) return false;
    let sum = Math.floor((i % 100) / 10) + (i % 10) * 9;
    for (i = 1; i < 10; i += 1) {
      let v = parseInt(id.charAt(i), 10);
      if (i === 1 && Number.isNaN(v)) {
        switch (id.charAt(i)) {
          case 'A':
            v = 0;
            break;
          case 'B':
            v = 1;
            break;
          case 'C':
            v = 2;
            break;
          case 'D':
            v = 3;
            break;
          default:
            return false;
        }
      } else if (i === 1 && ([1, 2, 8, 9].indexOf(v) === -1)) {
        return false;
      }
      if (i > 1 && Number.isNaN(v)) return false;
      sum += v * weight[i];
    }
    if (sum % 10 !== 0) return false;
    return true;
  }
  get isSubmitBtnDisabled() {
    const {
      selectCloseOption,
      policyholderIdentityId,
      planCode,
      closedReason,
      closedOtherReason,
      remark
    } = this.appointmentCloseInfo;
    if (selectCloseOption === this.contactStatus.DONE) {
      return !policyholderIdentityId || !this.identityIdValid || !planCode || !this.appointmentCloseDate
    } else if (closedReason === 'other' || closedReason === 'no_suitable_commodity') {
      return !closedOtherReason
    }
    return false
  }
  get identityIdValid() {
    const identityId = this.appointmentCloseInfo.policyholderIdentityId;
    return identityId ? this.checkIdentityId(identityId) : true;
  }
}
</script>
<style lang="scss" scoped>
.appointment-close__remark,
.appointment-client-detail-close__input {
  border-radius: 5px;
  border   : 1px solid #707070;
  font-size: 20px;
  padding  : 10px 20px;
  width    : 100%;
  box-sizing: border-box;
  &::placeholder {
    color: $MID_GREY;
  }
  &.is-invalid {
    border-color: $PRIMARY_RED !important;
  }
}
.invite-review{
  display: flex;
  flex-direction: column;
  align-items: center;
}
 .error {
    @extend .smTxt_bold;
    @extend .text--primary;
    height: 16px;
  }
  .required {
    position: relative;
    &::before {
      content: '*';
      font-size: 15px;
      font-weight: bold;
      position: absolute;
      color: #FF0000;
      transform: translateX(-2px);
      z-index: 5;
    }
  }
</style>
PAMapp/pages/appointment/_appointmentId/index.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,304 @@
<template>
  <div class="appointment-client-detail-page">
    <div class="date-detail">
      <div>{{ appointmentDetail.appointmentDate | formatDate }}預約</div>
      <div>{{ appointmentDetail.consultantReadTime | formatDate }}
        <span v-if="appointmentDetail.consultantReadTime">已讀</span>
      </div>
    </div>
    <AppointmentProgress
      class="mt-10"
      :currentStep="appointmentProgress"
    ></AppointmentProgress>
    <section class="client-detail">
      <div class="client-detail-info mb-30">
        <div class="client-detail-info__avatar">
          <div class="circle">
            {{ appointmentDetail.name || 'NO NAME' }}
            <div class="sm-circle sm-circle-male" v-if="appointmentDetail.gender === 'male'">
              <i class="icon-sex-male sex-icon"></i>
            </div>
            <div class="sm-circle sm-circle-female" v-if="appointmentDetail.gender === 'female'">
              <i class="icon-sex-female sex-icon"></i>
            </div>
          </div>
        </div>
        <div class="client-detail-info__information">
          <div>{{ appointmentDetail.age | toAgeLabel }}</div>
          <div>{{ appointmentDetail.phone }}</div>
          <div class="text--underline text--break-all">
            {{ appointmentDetail.email }}
          </div>
        </div>
      </div>
      <div class="client-detail-demand mt-10">
        <div class="client-detail-demand__demand-list mb-10">
          <div class="client-detail-demand__demand-list-label">需求</div>
          <div class="client-detail-demand__demand-list-content">{{ appointmentDetail.requirement }}</div>
        </div>
        <div class="client-detail-demand__demand-list">
          <div class="client-detail-demand__demand-list-label">聯絡<br />時段</div>
          <div class="client-detail-demand__demand-list-content">
            <div v-for="(hopeContactTime, index) in hopeContactTimeList" :key="index"
              :class="{'mt-10': index > 0, 'pb-10': true, 'hope-contact-time__line': index + 1 < hopeContactTimeList.length }">
              <div v-for="(item, index) in getHopeContactTimeContent(hopeContactTime)" :key="index" :class="{'mt-10': index < 0 }">
                {{ item }}
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class=" btn-center" v-if="showWhenAppointmentHasClosed">
        <el-button @click="inviteReview">發送滿意度</el-button>
      </div>
      <div class="client-detail-action" v-if="showWhenAppointmentHasContacted">
        <el-button @click="closeAppointment" class="desktop-client-detail-action-btn" >結案</el-button>
        <el-button @click="sendMsg" style="margin-left: 0px">通知約訪</el-button>
      </div>
     <div class=" btn-center" v-if="showWhenAppointmentHasCreate">
        <el-button @click="sendMsg">傳送約訪通知</el-button>
      </div>
    </section>
    <template v-if="showWhenAppointmentHasClosed">
      <AppointmentClosedInfo :appointmentDetail="appointmentDetail" />
    </template>
    <InterviewMsg
      :isVisible.sync="isVisibleDialog"
      :client="appointmentDetail">
    </InterviewMsg>
    <section class="mt-30" v-if="!showWhenAppointmentHasCreate">
      <AppointmentInterviewList :interviewList="appointmentDetail.interviewRecordDTOs" />
    </section>
    <section class="mt-30" v-if="!showWhenAppointmentHasCreate">
      <AppointmentRecordList :noticeLogs="appointmentDetail.appointmentNoticeLogs" />
    </section>
    <PopUpFrame :isOpen.sync="isShowInviteReviewDialog">
          <div class="text--middle invite-review">
            <div class="mb-30 mt-10">已發送滿意度</div>
            <div class="text--primary text--middle cursor--pointer text--underline" @click="isShowInviteReviewDialog = false" :size="'250px'">我知道了</div>
          </div>
        </PopUpFrame>
  </div>
</template>
<script lang="ts">
import { Vue, Component } from 'vue-property-decorator';
import { namespace } from 'nuxt-property-decorator';
import { Appointment } from '~/shared/models/appointment.model';
import { ContactStatus } from '~/shared/models/enum/contact-status';
import reviewsService from '~/shared/services/reviews.service';
const appointmentStore = namespace('appointment.store');
@Component
export default class AppointmentDetailComponent extends Vue {
  @appointmentStore.State('appointmentDetail')
  appointmentDetail!: Appointment;
  @appointmentStore.Getter('appointmentProgress')
  appointmentProgress!: ContactStatus;
  isVisibleDialog = false;
  isShowInviteReviewDialog = false ;
  interviewTxt = "";
  contactStatus = ContactStatus;
  //////////////////////////////////////////////////////////////////////
  closeAppointment(): void {
    this.$router.push(`/appointment/${this.appointmentDetail.id}/close`);
  }
  sendMsg():void {
    this.isVisibleDialog = true;
  }
  editAppointmentHasClosed(): void{
    this.$router.push(`/appointment/${this.appointmentDetail.id}/close`);
  }
  get showWhenAppointmentHasClosed(): boolean {
    return this.appointmentDetail.communicateStatus === this.contactStatus.DONE
        || this.appointmentDetail.communicateStatus === this.contactStatus.CLOSE
        || this.appointmentDetail.communicateStatus === this.contactStatus.CANCEL;
  }
  get showWhenAppointmentHasCreate(): boolean {
    return this.appointmentDetail.communicateStatus === this.contactStatus.PICKED
        || this.appointmentDetail.communicateStatus === this.contactStatus.RESERVED;
  }
  get showWhenAppointmentHasContacted() :boolean {
    return this.appointmentDetail.communicateStatus === this.contactStatus.CONTACTED;
  }
  get hopeContactTimeList(): any[] {
    return this.appointmentDetail.hopeContactTime.split("','")
  }
  getHopeContactTimeContent(hopeContactTimeString: string): string[] {
    const result = hopeContactTimeString.replaceAll("'", '').split('、');
    return result;
  }
  inviteReview(): void {
    reviewsService.sendSatisfactionToClient(this.appointmentDetail.id).then(res => {
        this.isShowInviteReviewDialog = true;
    });
  }
}
</script>
<style lang="scss">
.appointment-client-detail-page{
  .date-detail{
    display        : flex;
    font-size      : 16px;
    color          : #68737A;
    justify-content: space-between;
    margin-bottom  : 2px;
  }
  .client-detail{
    background-color: #fff;
    margin-top:10px;
    padding: 17px 21px;
    .client-detail-info {
      display: flex;
      .client-detail-info__avatar{
        display: flex;
        margin-right: 22px;
        .circle{
          height: 100px;
          width: 100px;
          border-radius: 50%;
          background-image: url('~/assets/images/appointment/avatar_bg.svg');
          position: relative;
          display: flex;
          justify-content: center;
          align-items: center;
          .sm-circle{
            position: absolute;
            height: 30px;
            width: 30px;
            border-radius: 50%;
            background-color: #fff;
            bottom: 0;
            right: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            .sex-icon {
              font-size: 20px;
              &.icon-sex-male{
                color: $SKY_BLUE;
              }
              &.icon-sex-female{
                color: $CORAL;
              }
            }
            &-male {
              border: 1px solid $SKY_BLUE;
            }
            &-female {
              border: 1px solid $LIGHT_RED;
            }
          }
        }
      }
      .client-detail-info__information{
        font-size: 20px;
        line-height: 1.6;
      }
    }
    .client-detail-demand{
      background-color: #fff;
      font-size: 20px;
      display: flex;
      flex-direction: column;
      .client-detail-demand__demand-list{
        display: flex;
      }
      .client-detail-demand__hope-contact-time{
        display: flex;
      }
      .client-detail-demand__demand-list-label {
        @extend .mb-10;
        @extend .mdTxt;
        @extend .mr-10;
        line-height: 1.3;
        color     : $DARK_BLUE;
        flex-basis: auto;
        min-width : 40px;
      }
      .client-detail-demand__demand-list-content {
        text-align: justify;
        line-height: 1.3;
        text-justify: auto;
        word-break: break-all;
      }
    }
    .client-detail-action {
      margin-left: 50px;
    }
  }
}
.invite-review{
    align-items   : center;
    display       : flex;
    flex-direction: column;
  }
.close-appointment-detail{
  background-color: #fff;
  display: flex;
  margin-top: 30px;
  padding: 20px;
  display: flex;
  flex-direction: column;
  font-size: 20px;
}
.close-appointment-detail-nav{
  display: flex;
  justify-content: space-between;
  flex: 1;
}
.hope-contact-time__line {
  border-bottom: 1px solid #CCCCCC;
}
.btn-center{
    display: flex;
    justify-content: center;
  }
  @include desktop {
    .client-detail-action {
    display: flex;
    justify-content: center;
    }
    .desktop-client-detail-action-btn{
      margin-right: 10px;
    }
  }
</style>
PAMapp/pages/appointment/_appointmentId/interview/_interviewId/index.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,14 @@
<template>
  <InterviewAdd></InterviewAdd>
</template>
<script lang="ts">
import { Vue, Component } from 'nuxt-property-decorator';
@Component
export default class EditAppointmentInterview extends Vue {
}
</script>
<style lang="scss" scoped>
</style>
PAMapp/pages/appointment/_appointmentId/interview/new/index.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,55 @@
<template>
  <InterviewAdd></InterviewAdd>
</template>
<script lang="ts">
import { Vue, Component } from 'nuxt-property-decorator';
@Component
export default class NewAppointmentInterview extends Vue {
}
</script>
<style lang="scss" >
.edit-appointment-record {
    padding-left : 10px;
    padding-right: 10px;
    .edit-appointment-record-date{
        color          : #68737A;
        display        : flex;
        justify-content: space-between;
        margin-bottom  : 26px;
    }
}
.date-input {
    align-items     : center;
    background-color: #fff;
    border          : 1px solid #707070;
    border-radius   : 5px;
    display         : flex;
    font-size       : 20px;
    height          : 46px;
    margin-bottom   : 30px;
    padding-left    : 20px;
    padding-right   : 20px;
}
.icon {
    color          : $PRIMARY_RED;
    display        : flex;
    flex           : 1;
    justify-content: flex-end;
}
.edit-appointment-record-btn{
    margin-top: 30px;
    display: flex;
    justify-content: center;
}
.required {
  position: relative;
  &::before {
      content: '*';
      position: absolute;
      color: #FF0000;
      transform: translate(-12px, 0);
  }
}
</style>
PAMapp/pages/appointment/_appointmentId/interviewList/index.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,38 @@
<template>
    <div>
        <div class="text--right mb-30">
            <div class="pam-link-button--lg"
            @click="addInterview">+新增</div>
        </div>
        <InterviewCard :interviewList="appointmentDetail.interviewRecordDTOs"></InterviewCard>
    </div>
</template>
<script lang="ts">
import { Component, namespace, Vue } from "nuxt-property-decorator";
import { Appointment } from "~/shared/models/appointment.model";
const appointmentStore = namespace('appointment.store');
@Component
export default class InterviewList extends Vue {
    @appointmentStore.State
    appointmentDetail!: Appointment;
    appointmentId!: number;
    ////////////////////////////////////////////////////////
    mounted() {
      this.appointmentId = +this.$route.params.appointmentId;
    }
    ////////////////////////////////////////////////////////
    addInterview(): void {
        this.$router.push(`/appointment/${this.appointmentId}/interview/new`);
    }
}
</script>
PAMapp/pages/appointment/_appointmentId/recordList/index.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,32 @@
<template>
    <InterviewRecordCard :noticeLogsList="displayLogs"></InterviewRecordCard>
</template>
<script lang="ts">
import { Component, namespace, Vue, Watch } from "nuxt-property-decorator";
import { Appointment, NoticeLogs } from "~/shared/models/appointment.model";
const appointmentStore = namespace('appointment.store');
@Component
export default class RecordList extends Vue {
    @appointmentStore.State
    appointmentDetail!: Appointment;
    displayLogs: NoticeLogs[] = [];
    ////////////////////////////////////////////////////////
    @Watch('appointmentDetail', {immediate: true})
    onAppointmentDetailChange() {
      if (this.appointmentDetail?.appointmentNoticeLogs.length) {
        this.displayLogs = this.appointmentDetail?.appointmentNoticeLogs
                            .map((i) => ({ ...i, sortDate: new Date(i.createdDate)}))
                            .sort((preItem, nextItem) => +nextItem.sortDate - +preItem.sortDate);
      }
    }
}
</script>
PAMapp/pages/appointmentAgenda/index.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,68 @@
<template>
  <div>
    <div class="mdTxt">即將約訪排程(3)</div>
    <div class="remind-container">
            <div class="remind-date mr-10">
              <div class="mb-3 smTxt bgc-primary-red date-year">
                <div class="mb-3 mt-2">2021</div>
                </div>
              <div class="p mt-5">
                <div>12/25</div>
              </div>
            </div>
            <div class="remind-content-txt">
                <div class="mb-3">09:00</div>
                <div>約訪林志零</div>
            </div>
        </div>
     <div class="remind-container">
            <div class="remind-date mr-10">
              <div class="mb-3 smTxt bgc-primary-red date-year">
                <div class="mb-3 mt-2">2021</div>
                </div>
              <div class="p mt-5">
                <div>12/25</div>
              </div>
            </div>
            <div class="remind-content-txt">
                <div class="mb-3">09:00</div>
                <div>約訪林志零</div>
            </div>
        </div>
     <div class="remind-container">
            <div class="remind-date mr-10">
              <div class="mb-3 smTxt bgc-primary-red date-year">
                <div class="mb-3 mt-2">2021</div>
                </div>
              <div class="p mt-5">
                <div>12/25</div>
              </div>
            </div>
            <div class="remind-content-txt">
                <div class="mb-3">09:00</div>
                <div>約訪林志零</div>
            </div>
        </div>
  </div>
</template>
<script lang="ts">
import { Vue, Component } from 'nuxt-property-decorator';
@Component
export default class Agenda extends Vue {
    //////////////////////////////////////////////////////////////////////
}
</script>
<style lang="scss" scoped>
</style>
PAMapp/pages/consultantLogin/index.vue
@@ -58,30 +58,40 @@
<script lang="ts">
  import { Vue, Component , namespace } from 'nuxt-property-decorator';
  import { AxiosError } from 'axios';
  import { getImgOfVerification, logInToConsultant, getVerificationStatus } from '~/assets/ts/api/consultant';
  import { Role } from '~/assets/ts/models/enum/Role';
  import ErrorMessageBox from '~/assets/ts/errorService';
  import { Role } from '~/shared/models/enum/Role';
  import messageBoxService from '~/shared/services/message-box.service';
  import loginService from '~/shared/services/login.service'
import { AgentInfo } from '~/shared/models/agent-info.model';
  const loginStore  = namespace('login.store');
  const roleStorage = namespace('localStorage');
  @Component({
    layout: 'home'
  })
  export default class ConsultantLogin extends Vue {
    @roleStorage.Mutation storageIdToken!: (token: string) => void;
    @roleStorage.Mutation storageRole!: (role: string) => void;
    @roleStorage.Mutation storageConsultantId!:(id:string) => void;
    @roleStorage.Mutation
    storageIdToken!: (token: string) => void;
    @roleStorage.Mutation
    storageRole!: (role: string) => void;
    @roleStorage.Mutation
    storageConsultantId!:(id:string) => void;
    @loginStore.Action
    getLoginConsultantDetail!: (agentNo: string) => Promise<AgentInfo>;
    consultantDto = {
      password: '',
      username: '',
    };
    imgSrc = '';
    isRememberUserName = false;
    isShowPassword = false;
    imgSrc = '';
    verificationCode='';
    consultantDto = {
      username: '',
      password: '',
    }
    get isAlreadyDone():boolean{
      return !!(this.verificationCode && this.consultantDto.username && this.consultantDto.password);
    }
    ////////////////////////////////////////////////////////////////////
    mounted() {
      this.getInitUserName();
@@ -96,8 +106,11 @@
      }
    }
    ////////////////////////////////////////////////////////////////////
    public regenerateImgOfVerification(): void {
      getImgOfVerification().then( imgOfBase64 =>
      loginService.getImgOfVerification().then( imgOfBase64 =>
        this.imgSrc = imgOfBase64
      );
    };
@@ -108,23 +121,33 @@
    }
    public sendInfo():void{
      this.isAlreadyDone ? this.verify() : ErrorMessageBox('請確認帳號、密碼以及驗證碼是否填寫完畢');
      this.isAlreadyDone
        ? this.verify()
        : messageBoxService.showErrorMessage('請確認帳號、密碼以及驗證碼是否填寫完畢');
    }
    get isAlreadyDone():boolean{
      return !!(this.verificationCode && this.consultantDto.username && this.consultantDto.password);
    }
    ////////////////////////////////////////////////////////////////////
    private verify():void{
      getVerificationStatus(this.verificationCode).then( verifySuccess => {
      loginService.getVerificationStatus(this.verificationCode).then( verifySuccess => {
        if(verifySuccess.data){
          this.loginWithConsultant()
          this.loginWithConsultant();
        }else{
          this.clearValue();
          this.regenerateImgOfVerification();
          ErrorMessageBox('驗證碼輸入錯誤');
          messageBoxService.showErrorMessage('驗證碼輸入錯誤');
        }
      });
    }
    private loginWithConsultant(): void {
      logInToConsultant(this.consultantDto).then(res => {
      loginService.logInToConsultant(this.consultantDto).then(res => {
        this.getLoginConsultantDetail(this.consultantDto.username);
        this.storageIdToken(res.data.id_token);
        this.storageRole(Role.ADMIN);
        this.storageConsultantId(this.consultantDto.username)
@@ -140,11 +163,11 @@
      switch (error.response.status) {
        case 401:
          const errorMsg = error.response.data.detail;
          ErrorMessageBox(errorMsg);
          messageBoxService.showErrorMessage(errorMsg);
          break;
        default:
          ErrorMessageBox('',error);
          messageBoxService.showErrorMessage('',error);
          break;
      }
    }
PAMapp/pages/faq/index.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,26 @@
<template>
    <el-tree
        :data="faqList"
        :props="defaultProps"
        icon-class="icon-add"
        class="fix-chrome-click--issue"
    ></el-tree>
</template>
<script lang="ts">
import { Vue, Component } from 'nuxt-property-decorator';
import { faqList } from '~/shared/const/faqList';
@Component
export default class Faq extends Vue {
    faqList = faqList;
    defaultProps = {
        children: 'details',
        label: 'label'
    }
}
</script>
<style lang="scss" scoped></style>
PAMapp/pages/index.vue
@@ -2,15 +2,15 @@
  <div>
    <Ui-Carousel></Ui-Carousel>
    <div class="page-container">
      <div class="mb-30">
      <div>
        <h5 class="mdTxt">預約保險顧問</h5>
        <div class="mt-10 pam-reserveBtn--block">
          <el-button class="reserveBtn recommendConsultant"
            @click="routerPush('/recommendConsultant')">
            @click="navigateToRoute('/recommendConsultant')">
            <p>嚴選配對</p>
          </el-button>
          <el-button class="reserveBtn quickFilter"
            @click="routerPush('/quickFilter')">
            @click="navigateToRoute('/quickFilter')">
            <p>快速篩選</p>
          </el-button>
        </div>
@@ -19,12 +19,12 @@
        <el-row class="rowStyle">
          <el-col :span="16">
            <span class="mdTxt">我的顧問清單</span>
            <span class="smTxt_bold amount">共 {{consultantList.length}} ç­†</span>
            <span class="smTxt_bold amount">共 {{ consultantList.length }} ç­†</span>
          </el-col>
          <el-col :span="8"
            class="mdTxt readMore fix-chrome-click--issue"
            v-if="consultantList.length > 3"
            @click.native="routerPush('/myConsultantList/consultantList')">查看更多</el-col>
            @click.native="navigateToRoute('/myConsultantList/consultantList')">查看更多</el-col>
        </el-row>
        <ConsultantList class="mt-10"
          :agents="consultantList.slice(0, 3)"></ConsultantList>
@@ -39,49 +39,394 @@
        <ConsultantSwiper :agents="recommendList"></ConsultantSwiper>
      </div>
    </div>
    <Ui-Dialog
        :isVisible.sync="isShowAppointmentDialog"
        :width="appointmentDialogWidth"
        class="pam-myDemand-dialog pam-dialog-reserved"
      >
          <div v-if="appointmentDetail">
              <h5 class="subTitle text--center mb-30">預約成功</h5>
              <p class="smTxt">{{appointmentDetail.appointmentDate | formatDate}}</p>
              <div class="reserved-info">
                  <p>姓名:{{appointmentDetail.name}}</p>
                  <p>電話:{{appointmentDetail.phone}}</p>
                  <p>Email:{{appointmentDetail.email}}</p>
                  <p>性別:{{gender}}</p>
                  <p>年齡:{{appointmentDetail.age | toAgeLabel }}</p>
                  <p>職業:{{appointmentDetail.job}}</p>
                  <p>需求:{{appointmentDetail.requirement.split(',').join('、')}}</p>
                  <p
                      v-for="(item, index) in hopeContactTime"
                      :key="index"
                  >連絡時段{{index + 1 | formatNumber}}:{{ item | formatHopeContactTime }}</p>
                  <div v-if="appointmentDetail.satisfactionScore">
                      <div class="mdTxt mt-10 mb-10">滿意度</div>
                      <el-rate
                      :value="appointmentDetail.satisfactionScore"
                      class="pam-myDemand-dialog__rate"
                      disabled>
                      </el-rate>
                  </div>
              </div>
              <div v-if="notScoreAppointmentYet" class="reserved-btn">
                  <el-button type="primary"
                      @click.native="reviewsBtn = true">給予滿意度評分</el-button>
              </div>
              <div v-if="appointmentDetail.communicateStatus === 'reserved'" class="text--center mt-10">
                  <el-button @click="isCancelPopup = true">取消預約</el-button>
                  <el-button @click="edit" type="primary">編輯</el-button>
              </div>
          </div>
      </Ui-Dialog>
      <PopUpFrame
        :isOpen.sync="isShowReAppointmentDialog"
        @closePopUp="removeUrlQueryParameter('notContactAppointmentId')"
      >
          <div class="pam-dialog-review">
              <div class="mt-30 text--middle" v-if="agentInfo">
                å¾ˆæŠ±æ­‰ï¼æ‚¨é ç´„çš„<span class="text--bold">{{ consultantName }}</span>顧問正忙碌中,請您取消預約並改選其他顧問
              </div>
                <el-row
                  type="flex"
                  class="mt-50"
                  justify="center">
                  <el-button
                      type="primary"
                      @click="reAppointment">取消預約再改選其他顧問</el-button>
                </el-row>
                <el-row
                  type="flex"
                  class="mt-20"
                  justify="center">
                  <el-button
                      class="outline_btn"
                      @click="cancelAppointment">取消預約</el-button>
                </el-row>
          </div>
      </PopUpFrame>
      <PopUpFrame
        :isOpen.sync="isShowReviewDialog"
        @closePopUp="removeUrlQueryParameter('appointmentId')"
      >
          <div class="mdTxt pam-dialog-review">
              ä¿éšªé¡§å•æ»¿æ„åº¦
              <span class="hint">選取星星</span>
              <div class="mt-30 review-content" v-if="agentInfo">
                  <UiAvatar :size="80" :agentNo="agentInfo.agentNo"></UiAvatar>
                  <div class="review-text">對於顧問
                      <span class="text--primary">{{agentInfo.name}}</span>
                      çš„æ•´é«”服務,您給予幾顆星評價?
                  </div>
              </div>
              <div class="review-score">
                  <el-rate v-model="inputScore" class="pam-rate mt-30"></el-rate>
              </div>
              <div class="review-btn">
                  <el-button
                      type="primary"
                      :disabled="!inputScore"
                      @click="userReviewsConsultants">送出</el-button>
              </div>
          </div>
      </PopUpFrame>
  </div>
</template>
<script lang="ts">
  import { Vue, Component, State, Action, Watch, namespace } from 'nuxt-property-decorator';
  import { Consultant } from '~/assets/ts/models/consultant.model';
  import appointmentService from '~/shared/services/appointment.service';
  import reviewsService from '~/shared/services/reviews.service';
  import UtilsService from '~/shared/services/utils.service';
  import myConsultantService from '~/shared/services/my-consultant.service';
  import { Appointment, AppointmentClosedInfo } from '~/shared/models/appointment.model';
  import { Consultant } from '~/shared/models/consultant.model';
  import { UserReviewParams } from '~/shared/models/reviews.model';
  import { StrictQueryParams } from '~/shared/models/strict-query.model';
  import { AgentInfo } from '~/shared/models/agent-info.model';
  import { ContactStatus } from '~/shared/models/enum/contact-status';
import { SatisfactionType } from '~/shared/models/enum/satisfaction-type';
  const localStorage = namespace('localStorage');
  const roleStorage = namespace('localStorage');
  @Component({
    layout: 'home'
  })
  export default class MainComponent extends Vue {
    @State('recommendList')
    recommendList!: Consultant[];
    @State('myConsultantList')
    myConsultantList!: Consultant[];
    @roleStorage.Getter
    isAdminLogin!: boolean;
    @roleStorage.Getter
    isUserLogin!: boolean;
    @Action
    storeRecommendList!: any;
    @Action
    storeConsultantList!: any;
    @localStorage.Mutation
    storageClearQuickFilter!: () => void;
    @localStorage.Mutation
    storageClearRecommendConsultant!: () => void;
    @localStorage.Getter
    currentSatisfactionIdFromMsg!: string;
    @localStorage.Getter
    currentNotContactAppointmentIdFromMsg!: string;
    @localStorage.Mutation
    storageClearSatisfactionIdFromMsg!: () => void;
    @localStorage.Mutation
    storageClearNotContactAppointmentIdFromMsg!: () => void;
    @localStorage.Mutation
    storageStrickQueryItem!: (strictQueryDto: StrictQueryParams) => void;
    consultantList: Consultant[] = [];
    @State('recommendList') recommendList!: Consultant[];
    @Action storeRecommendList!: any;
    appointmentDialogWidth    = '';
    inputScore                = 0;
    isShowAppointmentDialog   = false;
    isShowReAppointmentDialog = false;
    isShowReviewDialog        = false;
    consultantName = '';
    contactStatus = ContactStatus;
    @State('myConsultantList') myConsultantList!: Consultant[];
    @Action storeConsultantList!: any;
    appointmentDetail: Appointment = {
      age               : '',
      agentNo           : '',
      appointmentClosedInfo: {} as AppointmentClosedInfo,
      appointmentDate   : '',
      appointmentMemoList: [],
      appointmentNoticeLogs: [],
      communicateStatus : this.contactStatus.PICKED,
      consultantReadTime: '',
      consultantViewTime: '',
      contactTime       : '',
      contactType       : '',
      customerId        : 0,
      email             : '',
      gender            : '',
      hopeContactTime   : '',
      interviewRecordDTOs: [],
      id                : 0,
      job               : '',
      lastModifiedDate  : '',
      name              : '',
      otherRequirement  : '',
      phone             : '',
      requirement       : '',
      satisfactionScore : 0,
    };
    @localStorage.Mutation storageClearQuickFilter!: () => void;
    @localStorage.Mutation storageClearRecommendConsultant!: () => void;
    agentInfo: Consultant = {
      agentNo            : '',
      name               : '',
      img                : '',
      expertise          : [],
      avgScore           : 0,
      contactStatus      : '',
      createTime         : '',
      updateTime         : '',
      customerViewTime   : '',
      role               : '',
      seniority          : '',
      appointments       : []
    };
    //////////////////////////////////////////////////////////////////////
    mounted() {
      if (this.isAdminLogin) {
        this.$router.push('/myAppointmentList/appointmentList');
      } else {
        if (!this.recommendList?.length) {
          this.storeRecommendList();
        }
        this.storeConsultantList();
        this.storageClearQuickFilter();
        this.storageClearRecommendConsultant();
        if (this.isUserLogin) {
          appointmentService.getNotContactAppointment().then((appointment) => {
            if (appointment) {
              this.$router.push({ query: { notContactAppointmentId: appointment.id + ''}});
              this.autoOpenAppointmentBy('askReAppointment', appointment.id);
            }
          });
        }
      }
    }
    destroyed() {
      this.removeUrlQueryParameter();
    }
    //////////////////////////////////////////////////////////////////////
    @Watch('myConsultantList')
    onMyConsultantListChange() {
      this.consultantList = (this.myConsultantList || [])
        .filter(item => item.contactStatus !== 'contacted')
        .map((item) => ({ ...item, formatDate: new Date(item.updateTime)}))
        .sort((preItem, nextItem) => +nextItem.formatDate - +preItem.formatDate)
    }
        .map((item) => ({ ...item, formatDate: new Date(item.updateTime || item.createTime)}))
        .sort((preItem, nextItem) => +nextItem.formatDate - +preItem.formatDate);
    mounted() {
      if (!this.recommendList?.length) {
        this.storeRecommendList();
      if (this.currentNotContactAppointmentIdFromMsg) {
        this.autoOpenAppointmentBy('askReAppointment', +this.currentNotContactAppointmentIdFromMsg);
        return;
      }
      this.storeConsultantList();
      this.storageClearQuickFilter();
      this.storageClearRecommendConsultant();
      if (this.currentSatisfactionIdFromMsg) {
        this.autoOpenAppointmentBy('inviteReviewConsultant',+this.currentSatisfactionIdFromMsg);
        this.storageClearSatisfactionIdFromMsg();
        return;
      }
    }
    routerPush(path: string) {
    private autoOpenAppointmentBy(reason: string, targetAppointmentId: number): void {
        const setAgentInfo = new Promise((resolve, reject) => {
          this.agentInfo = this.myConsultantList.filter(item => {
            const appointmentIndex = item.appointments?.findIndex(i => i.id === targetAppointmentId);
            return appointmentIndex !== undefined && appointmentIndex > -1;
          })[0];
          if (this.agentInfo) {
            myConsultantService.getConsultantDetail(this.agentInfo.agentNo).then((res) => resolve(res));
          }
        });
        const setAppointment = new Promise((resolve, reject) => {
           appointmentService.getAppointmentDetail(targetAppointmentId).then((res) => resolve(res));
        });
        Promise.all([setAgentInfo, setAppointment]).then((values) => {
          const agentInfo = values[0] as AgentInfo;
          const appointmentInfo = values[1] as Appointment;
          this.consultantName = agentInfo.name;
          this.appointmentDetail = appointmentInfo;
          this.appointmentDialogWidth = UtilsService.isMobileDevice() ? '80%' : '';
          this.isShowAppointmentDialog = true;
          switch (reason) {
            case 'inviteReviewConsultant':
              if (this.notScoreAppointmentYet) {
                setTimeout(() => {
                  this.isShowReviewDialog = true;
                }, 500);
              }
              break;
            case 'askReAppointment':
              setTimeout(() => {
                this.isShowReAppointmentDialog = true;
              }, 500);
              break;
          }
        });
    }
    //////////////////////////////////////////////////////////////////////
    navigateToRoute(path: string): void {
      this.$router.push(path);
    }
    edit() {
        this.isShowAppointmentDialog = false;
        this.$router.push({path: `/questionnaire/${this.agentInfo.agentNo}`, query: {'edit': 'true'}});
    }
    reAppointment(): void {
      appointmentService.cancelAppointment(this.appointmentDetail.id).then(() => {
        const requirements = this.appointmentDetail.requirement.split(',');
        this.storeConsultantList();
        this.storageStrickQueryItem({ requirements: requirements });
        this.storageClearNotContactAppointmentIdFromMsg();
        this.removeUrlQueryParameter('notContactAppointmentId');
        this.$router.push('/recommendConsultant');
      });
    }
    cancelAppointment(): void {
      appointmentService.cancelAppointment(this.appointmentDetail.id).then(() => {
        this.storeConsultantList();
        this.storageClearNotContactAppointmentIdFromMsg();
        this.removeUrlQueryParameter('notContactAppointmentId');
        this.isShowReAppointmentDialog = false;
        this.isShowAppointmentDialog = false;
        this.$router.push('/');
      });
    }
    userReviewsConsultants() {
      const reviewParams: UserReviewParams = {
            appointmentId: this.appointmentDetail.id,
            score: this.inputScore,
            type: SatisfactionType.APPOINTMENT
        }
        this.appointmentDetail.satisfactionScore = this.inputScore;
        reviewsService.userReviewsConsultants(reviewParams).then((res) => {
            this.isShowReviewDialog = false;
        });
    }
    removeUrlQueryParameter(targetKey?: string): void {
        // NOTE: åˆªé™¤ç‰¹å®šçš„ query parameter [Tomas, 2022/1/24 11:36]
        // [REF] How to remove a parameter from this.$router.query Nuxt.js? https://reurl.cc/X45aMD
        let newRouteQuery = {};
        if (targetKey) {
          Object.keys(this.$route.query).forEach((key) => {
            if (key !== targetKey) {
              newRouteQuery[key] = this.$route.query[key]
            }
          })
        }
        this.$router.push(newRouteQuery);
        this.storageClearSatisfactionIdFromMsg();
        this.storageClearNotContactAppointmentIdFromMsg();
    }
    ///////////////////////////////////////////////////////////////////////////////
    get gender(): string {
        if (this.appointmentDetail.gender) {
            return this.appointmentDetail.gender === 'male' ? '男性' : '女性';
        }
        return ''
    }
    get hopeContactTime(): string[] {
        const contactList = this.appointmentDetail.hopeContactTime
            .split("'").map((item: any) => item.slice(0, item.length));
        return contactList.filter((item: any) => !!item && item !== ",")
    }
    get notScoreAppointmentYet(): boolean {
      if (this.appointmentDetail.communicateStatus === 'closed' || this.appointmentDetail.communicateStatus === 'done') {
        return !this.appointmentDetail.satisfactionScore;
      };
      return false;
    }
  }
@@ -94,19 +439,19 @@
  }
  .reserveBtn.el-button--default {
    width: 100%;
    height: 110px;
    border-radius: 10px;
    margin-bottom: 15px;
    font-size: 32px;
    font-weight: 700;
    width              : 100%;
    height             : 110px;
    border-radius      : 10px;
    margin-bottom      : 15px;
    font-size          : 32px;
    font-weight        : 700;
    background-position: right;
    background-size: cover;
    color: #68737A;
    text-align: left;
    background-repeat: no-repeat;
    box-shadow: 0px 0px 6px #a79b9b29;
    border-width: 0;
    background-size    : cover;
    color              : #68737A;
    text-align         : left;
    background-repeat  : no-repeat;
    box-shadow         : 0px 0px 6px #a79b9b29;
    border-width       : 0;
    p {
      text-shadow: 1px 1px 5px $PRIMARY_WHITE;
@@ -141,7 +486,7 @@
    align-items: center;
  }
  @media (min-width: 576px) and (max-width: 768px) {
  @media (min-width: 576px) and (max-width: 767px) {
    .quickFilter.el-button--default {
      background-image: url('~/assets/images/quickFilter/banner_web.svg');
    }
@@ -166,5 +511,4 @@
      max-width: 335px;
    }
  }
</style>
PAMapp/pages/login/index.vue
@@ -64,7 +64,7 @@
              <el-row type="flex" justify="space-between">
                  <div class="mdTxt">輸入驗證碼</div>
                  <div class="otp-count-timer">
                    {{phoneCounter}}
                    {{counterTime(otpCounterSec)}}
                  </div>
              </el-row>
@@ -115,7 +115,7 @@
              <el-row type="flex" justify="space-between">
                  <div class="mdTxt">輸入驗證碼</div>
                  <div class="otp-count-timer">
                    {{emailOtpCounter}}
                    {{counterTime(emailCounterSec)}}
                  </div>
              </el-row>
@@ -171,7 +171,7 @@
        :isOpen.sync="registerDialogVisible"
        :dialogWidth="'90%'"
        class="pam-register-dialog"
        @closePopUp="isReadContract = false"
        @closePopUp="isReadContract = false;agreeContract = false"
      >
          <div class="subTitle text--center mb-20">歡迎新使用者</div>
          <el-row>
@@ -197,8 +197,7 @@
              @scroll="detectContractReadStatus">
              <h3>蒐集個人資料告知事項</h3>
              <p class="mt-10">
              éµå®ˆå€‹äººè³‡æ–™ä¿è­·æ³•規定,在您提供個人資料予本處前,依法告
              çŸ¥ä¸‹åˆ—事項:
              éµå®ˆå€‹äººè³‡æ–™ä¿è­·æ³•規定,在您提供個人資料予本處前,依法告知下列事項:
              <p>
              <p class="mt-10">
@@ -217,13 +216,11 @@
              </p>
              <p class="mt-10">
              å››ã€é™¤è’é›†ä¹‹ç›®çš„æ¶‰åŠåœ‹é𛿥­å‹™æˆ–活動外,本處僅於中華民國領域內利用您的個人資
              æ–™ã€‚
              å››ã€é™¤è’é›†ä¹‹ç›®çš„æ¶‰åŠåœ‹é𛿥­å‹™æˆ–活動外,本處僅於中華民國領域內利用您的個人資料。
              </p>
              <p class="mt-10">
              äº”、本處將於原蒐集之特定目的、本次以外之產業之推廣、宣導及輔導、以及其他公
              å‹™æ©Ÿé—œè«‹æ±‚行政協助之目的範圍內,合理利用您的個人資料。
              äº”、本處將於原蒐集之特定目的、本次以外之產業之推廣、宣導及輔導、以及其他公務機關請求行政協助之目的範圍內,合理利用您的個人資料。
              </p>
              <p class="mt-10">
@@ -338,17 +335,29 @@
<script lang="ts">
import { namespace } from 'nuxt-property-decorator';
import { Vue, Component, Ref } from 'vue-property-decorator';
import { LoginRequest, LoginVerify, loginVerify, OtpInfo, register, RegisterInfo, sendOtp } from '~/assets/ts/api/consultant';
import ErrorMessageBox from '~/assets/ts/errorService';
import { OtpErrorCode } from '~/assets/ts/models/enum/otpErrorCode';
import { Role } from '~/assets/ts/models/enum/Role';
import { OtpErrorCode } from '~/shared/models/enum/otpErrorCode';
import { Role } from '~/shared/models/enum/Role';
import { LoginRequest } from '~/shared/models/loginRequest.model';
import { LoginVerify } from '~/shared/models/loginVerify.model';
import { OtpInfo } from '~/shared/models/otpInfo.model';
import { RegisterInfo } from '~/shared/models/registerInfo';
import loginService from '~/shared/services/login.service';
import messageBoxService from '~/shared/services/message-box.service';
import otpService, { OtpStorageName } from '~/shared/services/otp.service';
const roleStorage = namespace('localStorage');
@Component
export default class Login extends Vue {
  @roleStorage.Mutation storageIdToken!: (token:string) => void;
  @roleStorage.Mutation storageRole!: (role:string) => void;
  @roleStorage.Mutation
  storageIdToken!: (token:string) => void;
  @roleStorage.Mutation
  storageRole!: (role:string) => void;
  @roleStorage.Mutation
  storageUserInfo!: (userInfo: RegisterInfo) => void;
  @Ref('contract') readonly contract!: any;
  connectDevice: 'MOBILE' | 'EMAIL' = 'MOBILE';
@@ -356,18 +365,18 @@
  phoneNumber = '';
  otpCode = '';
  onPhoneVerifyStep: 'APPLY_OTP' | 'INPUT_OTP' | 'SUBMIT_OTP' = 'APPLY_OTP';
  otpCounterSec = 900;
  otpCounterSec = 300;
  otpResendCounter = 30;
  otpInterval: any;
  phoneOtpInfo!: OtpInfo;
  phoneOtpIndexKey!: string;
  email = '';
  onEmailVerifyResendStatus: 'APPLY_OTP' | 'CAN_RESEND' = 'APPLY_OTP';
  emailCounterSec = 900;
  emailCounterSec = 300;
  emailResendCounter = 30;
  emailOtpCode = '';
  emailResendInterval: any;
  emailOtpInfo!: OtpInfo;
  emailOtpIndexKey!: string;
  autoRedirectCounter = 3;
  autoRedirectInterval: any;
@@ -385,100 +394,79 @@
  applyAccount_onAction = false;
  previousPath = '';
  /////////////////////////////////////////////////////
  beforeRouteEnter (to, from, next) {
      next(vm => {
        vm.previousPath = from.path;
      })
  }
  mounted() {
    const phoneOtpTime = localStorage.getItem('phoneOtpTime');
    const emailOtpTime = localStorage.getItem('emailOtpTime');
    const parsePhoneOtpTime = phoneOtpTime ? JSON.parse(phoneOtpTime) : '';
    const parseEmailOtpTime = emailOtpTime ? JSON.parse(emailOtpTime) : '';
    if (parsePhoneOtpTime && parsePhoneOtpTime.contactType === 'SMS') {
      this.phoneDiffTime(parsePhoneOtpTime);
    }
    if (parseEmailOtpTime && parseEmailOtpTime.contactType === 'EMAIL') {
      this.emailDiffTime(parseEmailOtpTime);
    this.parsePhoneOtpTimeFromStorage();
    this.parseEmailOtpTimeFromStorage();
  }
  private parsePhoneOtpTimeFromStorage() {
    const parsePhoneOtpTime = otpService.parseOtpTime(OtpStorageName.PHONE);
    const diffSecs = otpService.diffOtpTime(OtpStorageName.PHONE, this.otpCounterSec);
    if (parsePhoneOtpTime && diffSecs) {
      this.otpResendCounter = diffSecs < 30 ? 30 - diffSecs : 0;
      this.otpCounterSec -= diffSecs;
      this.phoneNumber = parsePhoneOtpTime.phone ? parsePhoneOtpTime.phone : '';
      this.onPhoneVerifyStep = 'INPUT_OTP';
      this.phoneOtpIndexKey = parsePhoneOtpTime.indexKey;
      this.startOtpCount('MOBILE');
    }
  }
  detectContractReadStatus(event: any): void {
    const scrollTop = Math.round(event.target.scrollTop);
    const height = event.target.scrollHeight - event.target.clientHeight;
    if (Math.floor(scrollTop/10) === (Math.floor(height/10))) {
      this.isReadContract = true;
  private parseEmailOtpTimeFromStorage() {
    const parseEmailOtpTime = otpService.parseOtpTime(OtpStorageName.EMAIL);
    const diffSecs = otpService.diffOtpTime(OtpStorageName.EMAIL, this.emailCounterSec);
    if (parseEmailOtpTime && diffSecs) {
      this.emailResendCounter =  diffSecs < 30 ? 30 - diffSecs : 0;
      this.emailCounterSec -= diffSecs;
      this.email = parseEmailOtpTime.email ? parseEmailOtpTime.email : '';
      this.onEmailVerifyResendStatus = 'CAN_RESEND';
      this.emailOtpIndexKey = parseEmailOtpTime.indexKey;
      this.startOtpCount('EMAIL');
    }
  };
  get isSubmitBtnDisabled(): boolean {
    return this.connectDevice === 'MOBILE'
      ? (!this.otpCode || !this.phoneNumber || !this.phoneValid || !this.otpCounterSec)
      : (!this.emailOtpCode || !this.email || !this.emailValid || !this.emailCounterSec)
  }
  get phoneCounter() {
    let min = Math.floor(this.otpCounterSec / 60);
    let sec = Math.floor(this.otpCounterSec % 60);
    return `${min < 10 ? '0' + min : min}:${sec < 10 ? '0' + sec : sec}`;
  }
  get emailOtpCounter() {
    let min = Math.floor(this.emailCounterSec / 60);
    let sec = Math.floor(this.emailCounterSec % 60);
    return `${min < 10 ? '0' + min : min}:${sec < 10 ? '0' + sec : sec}`;
  }
  get showPhoneOtpCodeField(): boolean {
    return this.connectDevice === 'MOBILE' && this.onPhoneVerifyStep === 'INPUT_OTP';
  };
  get showEmailVerifyField(): boolean {
    return this.connectDevice === 'EMAIL' && this.onEmailVerifyResendStatus === 'CAN_RESEND';
  };
  get phoneValid() {
    const rule = /^09[0-9]{8}$/;
    return this.phoneNumber ? rule.test(this.phoneNumber) : true;
  }
  get emailValid() {
    const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    return this.email ? rule.test(this.email) : true;
  }
  applyOtpVerification(type: string): void {
    const isMobile = this.connectDevice === 'MOBILE';
    const loginInfo: LoginRequest = {
      loginType: isMobile ? 'SMS' : 'EMAIL',
      account: isMobile ? this.phoneNumber : this.email,
    }
    sendOtp(loginInfo).then(otpInfo => {
      if (otpInfo.success) {
        this.storageOtpTime(type, otpInfo);
        this.startOtpSetting(type);
        this.startOtpCount(type);
      } else {
        const errorMsg = OtpErrorCode[otpInfo.failCode] ? OtpErrorCode[otpInfo.failCode]:'OTP系統錯誤';
        ErrorMessageBox(errorMsg);
      }
    });
  };
  resentOtp(type: string) {
    this.resetOtpSetting(type);
    this.applyOtpVerification(type);
  }
  deleteOtpInfo(type: string) {
    this.resetOtpSetting(type);
    if (type === 'MOBILE') {
      this.onPhoneVerifyStep = 'APPLY_OTP';
      this.phoneNumber = '';
      this.otpCode = '';
    } else {
      this.onEmailVerifyResendStatus = 'APPLY_OTP';
      this.email = '';
      this.emailOtpCode = '';
    }
  destroyed() {
    this.removeOtpTime();
    clearInterval(this.otpInterval);
    clearInterval(this.emailResendInterval);
    clearInterval(this.autoRedirectInterval);
  }
  //////////////////////////////////////////////////////////
  //////////////////// ç™»å…¥
  login() {
    const login: LoginVerify = this.setLoginInfo();
    this.removeOtpTime();
    loginService.loginVerify(login).then(res => {
      this.storageIdToken(res.id_token);
      this.storageRole(Role.USER);
      this.phoneSuccessConfirmVisable = true;
      this.autoRedirect();
      this.storagePhoneOrEmail(this.setRegisterInfo());
    }).catch(error => {
      this.checkHttpErrorStatus(error);
    });
  }
  confirmApplySuccess(): void {
    this.phoneSuccessConfirmVisable = false;
    this.registerSuccessConfirmVisable = false;
    this.redirect();
  }
  //////////////////// è¨»å†Š
  applyAccount(): void {
    if (this.applyAccount_onAction) {
      return ;
@@ -487,8 +475,8 @@
    this.applyAccount_onAction = true;
    const registerInfo = this.setRegisterInfo();
    register(registerInfo).then(res => {
      this.storageIdToken(res.data.id_token);
    loginService.register(registerInfo).then(res => {
      this.storageIdToken(res.id_token);
      this.storageRole(Role.USER);
      this.storagePhoneOrEmail(registerInfo);
      this.autoRedirect();
@@ -497,12 +485,6 @@
      this.applyAccount_onAction = false;
    });
  };
  confirmApplySuccess(): void {
    this.phoneSuccessConfirmVisable = false;
    this.registerSuccessConfirmVisable = false;
    this.redirect();
  }
  private autoRedirect() {
    this.autoRedirectInterval = setInterval(() => {
@@ -518,120 +500,42 @@
  private redirect() {
    const backToPrevious = ['questionnaire', 'myConsultantList'];
    const find = backToPrevious.findIndex(item => this.previousPath.includes(item));
    console.log(this.previousPath, find, 'redirect');
    find > -1 ? this.$router.go(-1) : this.$router.push('/');
  }
  beforeRouteEnter (to, from, next) {
      next(vm => {
        console.log(from.path, 'beforeRouteEnter');
        vm.previousPath = from.path;
      })
  detectContractReadStatus(event: any): void {
    const scrollTop = Math.round(event.target.scrollTop);
    const height = event.target.scrollHeight - event.target.clientHeight;
    if (Math.floor(scrollTop/10) === (Math.floor(height/10))) {
      this.isReadContract = true;
    }
  };
  login() {
    const login: LoginVerify = this.setLoginInfo();
    this.removeOtpTime();
    loginVerify(login).then(res => {
      this.storageIdToken(res.data.id_token);
      this.storageRole(Role.USER);
      this.phoneSuccessConfirmVisable = true;
      this.autoRedirect();
      this.storagePhoneOrEmail(this.setRegisterInfo());
    }).catch(error => {
      this.checkHttpErrorStatus(error);
    });
  }
  private checkHttpErrorStatus(error:any):void{
    switch (error.response.status) {
        case 401:
          const errorMsg = OtpErrorCode[error.response?.data?.detail] ? OtpErrorCode[error.response?.data?.detail]:'OTP系統錯誤';
          ErrorMessageBox(errorMsg);
          break;
        case 403:
          this.registerDialogVisible = true;
          setTimeout(() => {
            const isScrollBarNeedless = this.contract.scrollHeight <= this.contract.clientHeight;
            if (isScrollBarNeedless) {
              this.isReadContract = true;
            }
          }, 1000);
          break;
        default:
          ErrorMessageBox('',error);
          break;
  //////////////////// ç™¼é€/重發/刪除驗證碼
  applyOtpVerification(type: string): void {
    const isMobile = this.connectDevice === 'MOBILE';
    const loginInfo: LoginRequest = {
      loginType: isMobile ? 'SMS' : 'EMAIL',
      account: isMobile ? this.phoneNumber : this.email,
    }
    loginService.sendOtp(loginInfo).then(otpInfo => {
      if (otpInfo.success) {
        this.storageOtpTime(type, otpInfo);
        this.startOtpSetting(type);
        this.startOtpCount(type);
      } else {
        const errorMsg = OtpErrorCode[otpInfo.failCode] ? OtpErrorCode[otpInfo.failCode]:'OTP系統錯誤';
        messageBoxService.showErrorMessage(errorMsg);
      }
  }
  destroyed() {
    this.removeOtpTime();
    clearInterval(this.otpInterval);
    clearInterval(this.emailResendInterval);
    clearInterval(this.autoRedirectInterval);
  }
  private phoneDiffTime(parseOtpTime: any) {
    const diffSecs = this.calcDiffSecs(parseOtpTime.time);
    if (diffSecs < this.otpCounterSec) {
      this.otpResendCounter = diffSecs < 30 ? 30 - diffSecs : 0;
        this.otpCounterSec -= diffSecs;
        this.phoneNumber = parseOtpTime.phone;
        this.onPhoneVerifyStep = 'INPUT_OTP';
        this.phoneOtpInfo = this.setOtpInfo(parseOtpTime);
        this.startOtpCount('MOBILE');
    } else {
      localStorage.removeItem('phoneOtpTime');
    }
  }
  private emailDiffTime(parseOtpTime: any) {
    const diffSecs = this.calcDiffSecs(parseOtpTime.time);
    if (diffSecs < this.emailCounterSec) {
      this.emailResendCounter =  diffSecs < 30 ? 30 - diffSecs : 0;
      this.emailCounterSec -= diffSecs;
      this.email = parseOtpTime.email;
      this.onEmailVerifyResendStatus = 'CAN_RESEND';
      this.emailOtpInfo = this.setOtpInfo(parseOtpTime);
      this.startOtpCount('EMAIL');
    } else {
      localStorage.removeItem('emailOtpTime');
    }
  }
  private calcDiffSecs(parseOtpTime) {
    const currentTime = new Date().getTime();
    const storageTime = new Date(parseOtpTime).getTime();
    return Math.floor((currentTime - storageTime) / 1000);
  }
  private resetOtpSetting(type: string) {
    if (type === 'MOBILE') {
      clearInterval(this.otpInterval);
      this.otpResendCounter = 30;
      this.otpCounterSec = 900;
    } else {
      clearInterval(this.emailResendInterval);
      this.emailResendCounter = 30;
      this.emailCounterSec = 900;
    }
  }
  private setOtpInfo(parseOtpTime) {
    return {
      indexKey: parseOtpTime.indexKey,
      success: true,
      failCode: '',
      failReason: '',
    }
  }
    });
  };
  private storageOtpTime(type: string, otpInfo: OtpInfo) {
    type === 'MOBILE' ? this.phoneOtpInfo = otpInfo : this.emailOtpInfo = otpInfo;
    type === 'MOBILE' ? this.phoneOtpIndexKey = otpInfo.indexKey : this.emailOtpIndexKey = otpInfo.indexKey;
    const info = {...this.setRegisterInfo(), time: new Date()}
    type === 'MOBILE' ? localStorage.setItem('phoneOtpTime',JSON.stringify(info))
                      : localStorage.setItem('emailOtpTime',JSON.stringify(info));
    const storageName = type === 'MOBILE' ? OtpStorageName.PHONE : OtpStorageName.EMAIL;
    otpService.setOtpTimeToStorage(storageName, info);
  }
  private startOtpSetting(type: string) {
@@ -671,41 +575,128 @@
    }, 1000)
  }
  resentOtp(type: string) {
    this.resetOtpSetting(type);
    this.applyOtpVerification(type);
  }
  deleteOtpInfo(type: string) {
    this.resetOtpSetting(type);
    if (type === 'MOBILE') {
      this.onPhoneVerifyStep = 'APPLY_OTP';
      this.phoneNumber = '';
      this.otpCode = '';
    } else {
      this.onEmailVerifyResendStatus = 'APPLY_OTP';
      this.email = '';
      this.emailOtpCode = '';
    }
    this.removeOtpTime();
  }
  private resetOtpSetting(type: string) {
    if (type === 'MOBILE') {
      clearInterval(this.otpInterval);
      this.otpResendCounter = 30;
      this.otpCounterSec = 300;
    } else {
      clearInterval(this.emailResendInterval);
      this.emailResendCounter = 30;
      this.emailCounterSec = 300;
    }
  }
  counterTime(counterSec) {
    let min = Math.floor(counterSec / 60);
    let sec = Math.floor(counterSec % 60);
    return `${min < 10 ? '0' + min : min}:${sec < 10 ? '0' + sec : sec}`;
  }
  //////////////////////////////////////////////////////////////////
  private checkHttpErrorStatus(error:any):void{
    switch (error.response.status) {
        case 401:
          const errorMsg = OtpErrorCode[error.response?.data?.detail] ? OtpErrorCode[error.response?.data?.detail]:'OTP系統錯誤';
          messageBoxService.showErrorMessage(errorMsg);
          break;
        case 403:
          this.registerDialogVisible = true;
          setTimeout(() => {
            const isScrollBarNeedless = this.contract.scrollHeight <= this.contract.clientHeight;
            if (isScrollBarNeedless) {
              this.isReadContract = true;
            }
          }, 1000);
          break;
        default:
          messageBoxService.showErrorMessage('',error);
          break;
      }
  }
  private storagePhoneOrEmail(registerInfo:RegisterInfo):void{
    const info = {...registerInfo, time: new Date()}
  // storageUserInfo!: (userInfo: RegisterInfo) => void;
    this.storageUserInfo(info);
    // localStorage.setItem('userInfo',JSON.stringify(info));
  }
  private removeOtpTime() {
    otpService.removeOtpTimeToStorage(OtpStorageName.PHONE);
    otpService.removeOtpTimeToStorage(OtpStorageName.EMAIL);
  }
  private setLoginInfo() {
    const isMobile = this.connectDevice === 'MOBILE'
    return {
      account: isMobile ? this.phoneNumber : this.email,
      indexKey: isMobile ? this.phoneOtpIndexKey : this.emailOtpIndexKey,
      otpCode: isMobile ? this.otpCode : this.emailOtpCode
    }
  }
  private setRegisterInfo(): RegisterInfo {
    return this.connectDevice === 'MOBILE'
      ? {
          phone: this.phoneNumber,
          indexKey: this.phoneOtpInfo.indexKey,
          indexKey: this.phoneOtpIndexKey,
          otpCode: this.otpCode,
          name: this.name,
          contactType: 'SMS'
        }
      : {
          email: this.email,
          indexKey: this.emailOtpInfo.indexKey,
          otpCode: this.otpCode,
          indexKey: this.emailOtpIndexKey,
          otpCode: this.emailOtpCode,
          name: this.name,
          contactType: 'EMAIL'
        }
  }
  private storagePhoneOrEmail(registerInfo:RegisterInfo):void{
    const info = {...registerInfo, time: new Date()}
    localStorage.setItem('userInfo',JSON.stringify(info));
  get isSubmitBtnDisabled(): boolean {
    return this.connectDevice === 'MOBILE'
      ? (!this.otpCode || !this.phoneNumber || !this.phoneValid || !this.otpCounterSec)
      : (!this.emailOtpCode || !this.email || !this.emailValid || !this.emailCounterSec)
  }
  private removeOtpTime() {
    localStorage.removeItem('emailOtpTime');
    localStorage.removeItem('phoneOtpTime');
  get showPhoneOtpCodeField(): boolean {
    return this.connectDevice === 'MOBILE' && this.onPhoneVerifyStep === 'INPUT_OTP';
  };
  get showEmailVerifyField(): boolean {
    return this.connectDevice === 'EMAIL' && this.onEmailVerifyResendStatus === 'CAN_RESEND';
  };
  get phoneValid() {
    const rule = /^09[0-9]{8}$/;
    return this.phoneNumber ? rule.test(this.phoneNumber) : true;
  }
  private setLoginInfo() {
    const isMobile = this.connectDevice === 'MOBILE'
    return {
      account: isMobile ? this.phoneNumber : this.email,
      indexKey: isMobile ? this.phoneOtpInfo.indexKey : this.emailOtpInfo.indexKey,
      otpCode: isMobile ? this.otpCode : this.emailOtpCode
    }
  get emailValid() {
    const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    return this.email ? rule.test(this.email) : true;
  }
}
</script>
@@ -743,10 +734,11 @@
  }
.pam-register-dialog__contract {
  $DEVICE_EXTRA_HEIGHT: 42px;
  $DEVICE_EXTRA_HEIGHT: 80px;
  $ALIGN_PADDING: 60px;
  $TOP_CONTENT_HEIGHT: 186px;
  $BOTTOM_CONTENT_HEIGHT: 131px;
  $TOP_CONTENT_HEIGHT: 211px;
  $BOTTOM_CONTENT_HEIGHT: 141px;
  // text-align:start;
  max-height: calc(100vh - $DEVICE_EXTRA_HEIGHT - $ALIGN_PADDING - $TOP_CONTENT_HEIGHT - $BOTTOM_CONTENT_HEIGHT);
  overflow-y: scroll;
  border-radius: 6px;
PAMapp/pages/myAppointmentList.vue
@@ -1,118 +1,203 @@
<template>
    <div>
        <div class="pam-myAppointment-banner"></div>
      <div class="pam-myAppointment-banner"></div>
        <div class="pam-container">
            <div class="pam-cus-tabs mb-30">
            <div class="pam-cus-tabs mb-10">
                <div
                    class="cus-tab-item"
                    :class="{'is-active': activeTabName === 'appointmentList'}"
                    @click="tabClick('appointmentList')"
                >客戶預約
                    <span class="p">({{appointmentList.length}})</span>
                    @click="clickTab('appointmentList')"
                >
                  <span class="smTxt">未聯絡({{ appointmentItemSum }})</span>
                </div>
                <div
                    class="cus-tab-item"
                    :class="{'is-active': activeTabName === 'contactedList'}"
                    @click="tabClick('contactedList')"
                >已聯絡
                    <span class="p">({{contactedList.length}})</span>
                    @click="clickTab('contactedList')"
                >
                  <span class="smTxt">約訪中({{ contactedItemSum }})</span>
                </div>
                <div
                    class="cus-tab-item"
                    :class="{'is-active': activeTabName === 'closedList'}"
                    @click="clickTab('closedList')"
                >
                  <span class="smTxt">結案({{ closedItemSum }})</span>
                </div>
            </div>
            <NuxtChild></NuxtChild>
            <NuxtChild keep-alive></NuxtChild>
        </div>
        <!-- DIALOG -->
        <PopUpFrame
             :isOpen.sync="showNewAppointmentNumber"
             :isOpen.sync="isShowNewAppointmentHint"
        >
            <div class="text--center mdTxt">
                <p class="mb-50">你有 <span class="text--primary">{{newAppointmentNumber}}</span> å‰‡æ–°çš„預約</p>
                <p class="mb-50">您有 <span class="text--primary">{{ newAppointmentSum }}</span> å‰‡æ–°çš„預約</p>
                <div class="text--center">
                    <el-button
                        type="primary"
                        @click="showNewAppointmentNumber = false"
                        @click="isShowNewAppointmentHint = false"
                    >我知道了</el-button>
                </div>
            </div>
        </PopUpFrame>
      <PopUpFrame
        :isOpen.sync="isShowRemindAppointmentDialog"
      >
          <div class="text--center mdTxt">
              <p class="mb-50">您有 <span class="text--primary">{{ pendingAppointmentSum }}</span> å‰‡é ç´„單未進行聯繫,請盡速處理</p>
              <div class="text--center">
                  <el-button
                      type="primary"
                      @click="isShowRemindAppointmentDialog = false"
                  >我知道了</el-button>
              </div>
          </div>
      </PopUpFrame>
    </div>
</template>
<script lang="ts">
import { Vue, Component, State, Action, Watch } from 'nuxt-property-decorator';
import { allAppointmentsView, ClientInfo } from '~/assets/ts/api/appointment';
import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
import * as _ from 'lodash';
import appointmentService from '~/shared/services/appointment.service';
import { Appointment } from '~/shared/models/appointment.model';
import { ContactStatus } from '~/shared/models/enum/contact-status';
const localStorage = namespace('localStorage');
const appointmentStore = namespace('appointment.store');
@Component({
    layout: 'home',
    middleware: 'myAppointmentMiddleware'
    middleware: 'myAppointment'
})
export default class ClientReservedList extends Vue {
    activeTabName = 'appointmentList';
    appointmentList: ClientInfo[] = [];
    contactedList: ClientInfo[] = [];
    clients: ClientInfo[] = [];
    newAppointmentNumber: number = 0;
    showNewAppointmentNumber = false;
    @State('myAppointmentList') myAppointmentList!: ClientInfo[];
    @Action storeMyAppointmentList!: () => Promise<number>;
    @appointmentStore.State('myAppointmentList')
    myAppointmentList!: Appointment[];
    @appointmentStore.Getter('newAppointmentSum')
    newAppointmentSum!: number;
    @appointmentStore.Getter('appointmentItemSum')
    appointmentItemSum!: number;
    @appointmentStore.Getter('contactedItemSum')
    contactedItemSum!: number;
    @appointmentStore.Getter('closedItemSum')
    closedItemSum!: number;
    @appointmentStore.Action
    getMyAppointmentList!: () => Promise<Appointment[]>;
    @localStorage.Mutation
    storageClearAppointmentIdFromMsg!: () => void;
    @localStorage.Getter
    currentAppointmentIdFromMsg!: string;
    contactStatus          = ContactStatus;
    activeTabName                 = 'appointmentList';
    isShowNewAppointmentHint      = false;
    isShowRemindAppointmentDialog = false;
    pendingAppointmentSum         = 0;
    //////////////////////////////////////////////////////////////////////
    mounted() {
     this.storeMyAppointmentList().then(newDataLength => {
         this.newAppointmentNumber = newDataLength;
         if (this.newAppointmentNumber > 0) {
             this.showNewAppointmentNumber = true;
             allAppointmentsView().then(res => res);
         }
    });
     if (this.$route.name) {
         this.activeTabName = this.$route.name.split('-')[1]
     }
      this.getMyAppointmentList();
        appointmentService.getPendingAppointmentSum().then((pendingAppointmentSum) => {
        this.pendingAppointmentSum = pendingAppointmentSum;
        if (this.pendingAppointmentSum) {
          this.isShowRemindAppointmentDialog = true;
        }
      });
    }
    destroyed() {
        this.storageClearAppointmentIdFromMsg();
    }
    //////////////////////////////////////////////////////////////////////
    @Watch('myAppointmentList')
    onMyAppointmentListChange() {
        this.contactedList = this.myAppointmentList
            .filter(item => item.communicateStatus === 'contacted');
        this.appointmentList = this.myAppointmentList
            .filter(item => item.communicateStatus !== 'contacted');
    onMyAppointmentListChange(): void {
        if (this.currentAppointmentIdFromMsg) {
            this.redirectAppointmentStatus();
        }
    }
    tabClick(path: string) {
        this.activeTabName = path;
        this.$router.push('/myAppointmentList/' + this.activeTabName)
    }
    get route(): string{
        const routeName = this.$route.name;
        return routeName ? routeName:'';
    private redirectAppointmentStatus() {
        const currentAppointmentIndex = this.myAppointmentList
            .findIndex(item => item.id === +this.currentAppointmentIdFromMsg);
        if (currentAppointmentIndex > -1) {
            const communicateStatus = this.myAppointmentList[currentAppointmentIndex].communicateStatus;
            let pathName = 'closedList'
            if (communicateStatus === this.contactStatus.RESERVED || communicateStatus === this.contactStatus.PICKED) {
              pathName = 'contactedList';
            }
            if (communicateStatus === this.contactStatus.CONTACTED) {
              pathName = 'contactedList';
            }
            this.$router.push(
                {
                    path: '/myAppointmentList/' + pathName,
                    query: {appointmentId: this.currentAppointmentIdFromMsg}
                }
            );
        }
    };
    @Watch('newAppointmentSum')
    newAppointmentSumChange(): void {
      this.isShowNewAppointmentHint = this.newAppointmentSum > 0;
    }
    @Watch('$route', {immediate: true})
    onRouteChange() {
        const routeFullName = this.$route.name;
        if (routeFullName) {
            this.activeTabName = routeFullName.split('-')[1];
        }
    }
    //////////////////////////////////////////////////////////////////////
    clickTab(path: string): void {
      this.activeTabName = path;
      this.$router.push(`/myAppointmentList/${this.activeTabName}`);
    }
    get bannerClassName() {
        return this.routeFormatBannerClass(this.route);
      const routeName = this.$route.name || '';
      return this.routeFormatBannerClass(routeName);
    };
    // format to {page}-banner or pam-no-banner tag
    private routeFormatBannerClass(route: string): string {
        const needBannerTags = ['myAppointmentList-appointmentList', 'myAppointmentList-contactedList'];
        const needBannerTags = ['myAppointmentList-appointmentList', 'myAppointmentList-closedList'];
        return _.includes(needBannerTags, route) ? route + '-banner' : 'pam-no-banner';
    };
}
</script>
<style lang="scss" scoped>
    .pam-myAppointment-banner {
        width: 100%;
        height: 120px;
        background-size: cover;
        background-repeat: no-repeat;
        width              : 100%;
        height             : 120px;
        background-size    : cover;
        background-repeat  : no-repeat;
        background-position: center;
        position: relative;
        background-image: url('~/assets/images/myAppointmentList/agent_banner_mob.svg');
        position           : relative;
        background-image   : url('~/assets/images/myAppointmentList/agent_banner_mob.svg');
    }
    @media (min-width: 768px) {
@@ -131,4 +216,4 @@
            margin: 30px auto;
        }
    }
</style>
</style>
PAMapp/pages/myAppointmentList/appointmentList.vue
@@ -5,9 +5,9 @@
            placeholder="請輸入關鍵字"
            class="mb-30 pam-clientReserved-input"
            v-model="keyWord"
            @keyup.enter.native="search"
            @input="search"
        >
            <i slot="suffix" class="icon-search search cursor--pointer" @click="search"></i>
            <i slot="suffix" class="icon-search search cursor--pointer"></i>
        </el-input>
        <ClientList
@@ -17,51 +17,86 @@
        <UiPagination
            :totalList="filterList"
            :currentPage="currentPage"
            @changePage="changePage"
        ></UiPagination>
    </div>
</template>
<script lang="ts">
import { Vue, Component, State, Watch } from 'nuxt-property-decorator';
import { ClientInfo } from '~/assets/ts/api/appointment';
import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
import { Appointment } from '~/shared/models/appointment.model';
import { ContactStatus } from '~/shared/models/enum/contact-status';
const localStorage     = namespace('localStorage');
const appointmentStore = namespace('appointment.store');
@Component
export default class ClientReservedList extends Vue {
    @State('myAppointmentList') myAppointmentList!: ClientInfo[];
    appointmentList: ClientInfo[] = [];
    pageList: ClientInfo[] = [];
    keyWord: string = '';
    filterList: ClientInfo[] = [];
    @appointmentStore.State('myAppointmentList')
    myAppointmentList!: Appointment[];
    @Watch('myAppointmentList')
    onMyAppointmentListChange() {
        const unreadList = this.myAppointmentList
            .filter(item => item.communicateStatus !== 'contacted' && !item.consultantReadTime)
            .sort((a, b) => a.appointmentDate > b.appointmentDate ? -1 : 1);
    @localStorage.Getter
    currentAppointmentIdFromMsg!: string;
        const readList = this.myAppointmentList
            .filter(item => item.communicateStatus !== 'contacted' && item.consultantReadTime)
            .sort((a, b) => a.consultantReadTime > b.consultantReadTime ? -1 : 1)
    @appointmentStore.Action
    getAppointmentDetail!: () => Promise<Appointment>;
        this.appointmentList = unreadList.concat(readList);
        this.filterList = this.appointmentList;
    }
    appointmentList: Appointment[]  = [];
    currentPage     : number        = 1;
    filterList      : Appointment[] = [];
    keyWord         : string        = '';
    pageList        : Appointment[] = [];
    contactStatus  = ContactStatus;
    //////////////////////////////////////////////////////////////////////
    mounted() {
        this.onMyAppointmentListChange();
    }
    changePage(pageList: ClientInfo[]) {
    //////////////////////////////////////////////////////////////////////
    @Watch('myAppointmentList')
    onMyAppointmentListChange(): void {
      this.appointmentList = this.myAppointmentList
          .filter(item => item.communicateStatus === this.contactStatus.RESERVED)
          .map((item) => ({ ...item, sortTime: new Date(item.lastModifiedDate)}))
          .sort((preItem, nextItem) => +nextItem.sortTime - +preItem.sortTime);
      this.filterList = this.appointmentList;
      this.getCurrentPage();
    }
    private getCurrentPage() {
        const currentIndex = this.filterList
            .findIndex(item => item.id === +this.currentAppointmentIdFromMsg);
        const pageSize = 5;
        if (currentIndex > -1) {
            this.currentPage = Math.ceil((currentIndex + 1) / pageSize);
        }
    }
    //////////////////////////////////////////////////////////////////////
    search(): void {
        if (this.keyWord) {
            this.filterList = this.appointmentList.filter(item => {
                return item.name.match(this.keyWord) || item.requirement.match(this.keyWord);
            })
        } else {
            this.filterList = this.appointmentList;
        }
    }
    changePage(pageList: Appointment[]): void {
        this.pageList = pageList;
    }
    search() {
        this.filterList = this.appointmentList.filter(item => {
            return item.name.match(this.keyWord) || item.requirement.match(this.keyWord)
        })
    }
}
</script>
</script>
PAMapp/pages/myAppointmentList/closedList.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,156 @@
<template>
    <div class="pam-closed-appointment-list">
        <el-input
            type="text"
            placeholder="請輸入關鍵字"
            class="mb-10 pam-clientReserved-input"
            v-model="keyWord"
            @input="search"
        >
            <i
                slot="suffix"
                class="icon-search search cursor--pointer"
            ></i>
        </el-input>
        <div class="closed-appointment__tag-filter mb-10">
          <el-radio v-model="selectedClosedCategory" :label="'all'" border>全部({{ itemSum }})</el-radio>
          <el-radio v-model="selectedClosedCategory" :label="'done'" border>成交({{ doneItemSum }})</el-radio>
          <el-radio v-model="selectedClosedCategory" :label="'closed'" border>未成交({{ closedItemSum }})</el-radio>
        </div>
        <ClientList
            :clients="pageList"
            :title="'closedList'"
        ></ClientList>
        <UiPagination
            :totalList="filterList"
            :currentPage="currentPage"
            @changePage="changePage"
        ></UiPagination>
    </div>
</template>
<script lang="ts">
import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
import { Appointment } from '~/shared/models/appointment.model';
import { ContactStatus } from '~/shared/models/enum/contact-status';
const appointmentStore = namespace('appointment.store');
const localStorage     = namespace('localStorage');
@Component
export default class ClientClosedList extends Vue {
    @appointmentStore.State('myAppointmentList')
    myAppointmentList!: Appointment[];
    @localStorage.Getter
    currentAppointmentIdFromMsg!: string;
    contactStatus= ContactStatus;
    closedItemSum = 0;
    currentPage   = 1;
    doneItemSum   = 0;
    itemSum       = 0;
    keyWord       = '';
    closedList: Appointment[] = [];
    filterList   : Appointment[] = [];
    pageList     : Appointment[] = [];
    selectedClosedCategory: 'all' | 'done' | 'closed' = 'all';
    //////////////////////////////////////////////////////////////////////
    mounted() {
        this.onMyAppointmentListChange();
    }
    //////////////////////////////////////////////////////////////////////
    @Watch('myAppointmentList')
    onMyAppointmentListChange() {
        this.closedList = (this.myAppointmentList || [])
            .filter(item => item.communicateStatus === this.contactStatus.DONE || item.communicateStatus === this.contactStatus.CLOSE || item.communicateStatus === this.contactStatus.CANCEL)
            .map((item) => ({...item, sortTime: new Date(item.lastModifiedDate)}))
            .sort((prevItem, nextItem) => +nextItem.sortTime - +prevItem.sortTime);
        this.filterList = this.closedList;
        this.itemSum = this.closedList.length;
        this.doneItemSum = this.closedList.filter((item) => item.communicateStatus === this.contactStatus.DONE).length;
        this.closedItemSum = this.closedList.filter((item) => item.communicateStatus === this.contactStatus.CLOSE).length;
        this.getCurrentPage();
    }
    private getCurrentPage() {
        const currentIndex = this.filterList.findIndex(item => item.id === +this.currentAppointmentIdFromMsg);
        const pageSize = 5;
        if (currentIndex > -1) {
            this.currentPage = Math.ceil((currentIndex + 1) / pageSize);
        }
    }
    @Watch('selectedClosedCategory')
    onSelectedClosedCategoryChanges() {
      this.search();
    }
    //////////////////////////////////////////////////////////////////////
    search(): void {
      if (this.selectedClosedCategory === this.contactStatus.DONE) {
        this.filterList = this.closedList.filter((item) => item.communicateStatus === this.contactStatus.DONE);
      } else if (this.selectedClosedCategory === this.contactStatus.CLOSE) {
        this.filterList = this.closedList.filter((item) => item.communicateStatus === this.contactStatus.CLOSE);
      } else {
        this.filterList = this.closedList;
      }
      if (this.keyWord) {
        this.filterList = this.filterList.filter(item => {
            return item?.name?.match(this.keyWord) || item?.requirement?.match(this.keyWord)
        })
      }
    }
    changePage(pageList: Appointment[]): void {
        this.pageList = pageList;
    }
}
</script>
<style lang="scss">
.pam-closed-appointment-list {
  .closed-appointment__tag-filter {
    display: flex;
    .el-radio {
      border-color: $LIGHT_GREY;
      border-radius: 30px;
      border-width: 1px;
      font-size   : 16px;
      margin-left : 0 !important;
      margin-right: 10px;
      padding     : 10px;
      @extend .fix-chrome-click--issue;
      &.is-checked {
        background-color: $CORAL;
        .el-radio__label {
          color  : $PRIMARY_WHITE !important;
        }
      }
      .el-radio__input {
        display: none;
      }
      .el-radio__label {
        color  : $PRIMARY_BLACK !important;
        padding: 0px !important;
      }
    }
  }
}
</style>
PAMapp/pages/myAppointmentList/contactedList.vue
@@ -5,60 +5,145 @@
            placeholder="請輸入關鍵字"
            class="mb-30 pam-clientReserved-input"
            v-model="keyWord"
            @keyup.enter.native="search"
            @input="search"
        >
            <i
                slot="suffix"
                class="icon-search search cursor--pointer"
                @click="search"
            ></i>
        </el-input>
        <div class="mb-10 sort-indicator-container">
          <a class="sort-indicator cursor--pointer" @click="changeSortType">
            {{ this.sortType === 'DESC' ? '新->舊' : '舊->新' }}
            <i v-if="isSortType" class="icon-sort-add"></i>
            <i v-else class="icon-sort-decrease"></i>
          </a>
        </div>
        <ClientList
            :clients="pageList"
            :title="'contactedList'"
            class="mt-10"
        ></ClientList>
        <UiPagination
            v-if="togglePagination"
            :totalList="filterList"
            :currentPage="currentPage"
            @changePage="changePage"
        ></UiPagination>
    </div>
</template>
<script lang="ts">
import { Vue, Component, Watch, State } from 'nuxt-property-decorator';
import { ClientInfo } from '~/assets/ts/api/appointment';
import { Vue, Component, Watch, namespace } from 'nuxt-property-decorator';
import { Appointment } from '~/shared/models/appointment.model';
const appointmentStore = namespace('appointment.store');
const localStorage     = namespace('localStorage');
@Component
export default class ClientContactedList extends Vue {
    @State('myAppointmentList') myAppointmentList!: ClientInfo[];
    contactedList: ClientInfo[] = [];
    pageList: ClientInfo[] = [];
    keyWord: string = '';
    filterList: ClientInfo[] = [];
    @appointmentStore.State('myAppointmentList')
    myAppointmentList!: Appointment[];
    @Watch('myAppointmentList')
    onMyAppointmentListChange() {
        this.contactedList = (this.myAppointmentList || [])
            .filter(item => item.communicateStatus === 'contacted')
            .sort((a, b) => a.contactTime > b.contactTime ? -1 : 1);
        this.filterList = this.contactedList;
    }
    @localStorage.Getter
    currentAppointmentIdFromMsg!: string;
    contactedList   : Appointment[]  = [];
    currentPage      : number        = 1;
    filterList       : Appointment[] = [];
    keyWord          : string        = '';
    pageList         : Appointment[] = [];
    sortType        : 'ASC' | 'DESC' = 'DESC';
    togglePagination: boolean        = true;
    //////////////////////////////////////////////////////////////////////
    mounted() {
        this.onMyAppointmentListChange();
    }
    changePage(pageList: ClientInfo[]) {
    //////////////////////////////////////////////////////////////////////
    @Watch('myAppointmentList')
    onMyAppointmentListChange() {
      this.setContactedList();
    }
    @Watch('sortType')
    onSortTypeChange() {
      this.togglePagination = false;
      setTimeout(() => {
      this.togglePagination = true;
        this.currentPage = 1;
        this.setContactedList();
      }, 0)
    }
    private setContactedList(): void {
        this.contactedList = (this.myAppointmentList || [])
            .filter(item => item.communicateStatus === 'contacted')
            .map((item) => ({...item, sortTime: new Date(item.lastModifiedDate)}))
            .sort((prevItem, nextItem) => {
              return this.sortType === 'DESC' ? +nextItem.sortTime - +prevItem.sortTime : +prevItem.sortTime - +nextItem.sortTime
            });
        this.filterList = this.contactedList;
        this.getCurrentPage();
    }
    private getCurrentPage(): void {
        const currentIndex = this.filterList.findIndex(item => item.id === +this.currentAppointmentIdFromMsg);
        const pageSize = 5;
        if (currentIndex > -1) {
            this.currentPage = Math.ceil((currentIndex + 1) / pageSize);
        }
    }
    //////////////////////////////////////////////////////////////////////
    search(): void {
        if (this.keyWord) {
          this.filterList = this.contactedList.filter(item => {
              return item?.name?.match(this.keyWord) || item?.requirement?.match(this.keyWord)
          })
        } else {
          this.filterList = this.contactedList;
        }
    }
    changePage(pageList: Appointment[]): void {
        this.pageList = pageList;
    }
    search() {
        this.filterList = this.contactedList.filter(item => {
            return item.name.match(this.keyWord) || item.requirement.match(this.keyWord)
        })
    changeSortType(): void {
      if (this.sortType === 'DESC') {
        this.sortType = 'ASC';
      } else {
        this.sortType = 'DESC';
      }
    }
    get isSortType () :boolean {
      return this.sortType === 'DESC';
    }
}
</script>
</script>
<style lang="scss" scoped>
.sort-indicator-container{
  margin-bottom: 20px;
}
.sort-indicator{
  border-radius:30px;
  border: 1px solid #D0D0CE;
  background-color:#fff;
  padding: 10px 20px;
  color: #68737A;
}
</style>
PAMapp/pages/myConsultantList.vue
@@ -4,14 +4,14 @@
            <div
                class="cus-tab-item"
                :class="{'is-active': activeTabName === 'consultantList'}"
                @click="tabClick('consultantList')"
                @click="clickTab('consultantList')"
            >顧問清單
                <span class="p">({{consultantList.length}})</span>
            </div>
            <div
                class="cus-tab-item"
                :class="{'is-active': activeTabName === 'contactedList'}"
                @click="tabClick('contactedList')"
                @click="clickTab('contactedList')"
            >已聯絡
                <span class="p">({{contactedList.length}})</span>
            </div>
@@ -21,30 +21,33 @@
            :contactedList="contactedList"
            :consultantList="consultantList"
        ></NuxtChild>
    </div>
</template>
<script lang='ts'>
import { Vue, Component, Watch, State, Action } from 'nuxt-property-decorator';
import { Consultant } from '~/assets/ts/models/consultant.model';
import authService from '~/shared/services/auth.service';
import { Consultant, ConsultantWithAppointmentId } from '~/shared/models/consultant.model';
@Component
export default class myConsultantList extends Vue {
    activeTabName = 'consultantList';
    agents: Consultant[] = [];
    contactedList: Consultant[] = [];
    consultantList: Consultant[] = [];
    @State('myConsultantList') myConsultantList!: Consultant[];
    @Action storeConsultantList!: any;
    @State('myConsultantList')
    myConsultantList!: Consultant[];
    @Watch('myConsultantList')
    onMyConsultantListChange() {
        this.filterContactedList();
    }
    @Action
    storeConsultantList!: any;
    activeTabName : string                        = 'consultantList';
    consultantList: Consultant[]                  = [];
    contactedList : ConsultantWithAppointmentId[] = [];
    //////////////////////////////////////////////////////////////////////
    beforeRouteEnter(to: any, from: any, next: any) {
      next(vm => {
      next((vm: any) => {
        if (to.name === 'myConsultantList') {
            vm.$router.push('myConsultantList/consultantList');
          return;
@@ -53,29 +56,62 @@
    }
    mounted() {
        this.storeConsultantList();
      this.storeConsultantList();
        if (this.$route.name) {
         this.activeTabName = this.$route.name.split('-')[1]
        }
      if (this.$route.name) {
        this.activeTabName = this.$route.name.split('-')[1]
      }
    }
    tabClick(path: string) {
    //////////////////////////////////////////////////////////////////////
    @Watch('myConsultantList')
    onMyConsultantListChange() {
        this.setList();
    }
    private setList() {
    // reset contacted list
      this.contactedList = [];
    // format consultant list
      this.consultantList = (this.myConsultantList || [])
        .filter(item => item.contactStatus !== 'contacted')
        .map((item) => ({ ...item, formatDate: new Date(item.updateTime || item.createTime)}))
        .sort((preItem, nextItem) => +nextItem.formatDate - +preItem.formatDate );
      if (authService.isUserLogin()) {
        this.myConsultantList.filter((consultant) => consultant.appointments!.length)
          .forEach((consultant) => {
            consultant.appointments!.forEach((appointment) => {
              const consultantWithAppointmentId: ConsultantWithAppointmentId = {
                ...consultant,
                appointmentId: appointment.id,
                appointmentDate: appointment.appointmentDate,
                appointmentScore: appointment.satisfactionScore,
                appointmentStatus: appointment.communicateStatus,
                appointmentLastModifiedDate: appointment.lastModifiedDate
              };
              this.contactedList.push(consultantWithAppointmentId);
            })
          });
        this.contactedList = this.contactedList
          .filter((appointment) => appointment['appointmentStatus'] !== 'reserved')
          .map((appointment) => ({ ...appointment, sortTime: new Date(appointment.appointmentLastModifiedDate)}))
          .sort((preAppointment, nextAppointment) => +nextAppointment.sortTime - +preAppointment.sortTime);
      }
    }
    //////////////////////////////////////////////////////////////////////
    clickTab(path: string) {
        this.activeTabName = path;
        this.$router.push('/myConsultantList/' + this.activeTabName)
    }
    filterContactedList() {
        this.consultantList = (this.myConsultantList || [])
                .filter(item => item.contactStatus !== 'contacted')
                .map((item) => ({ ...item, formatDate: new Date(item.updateTime)}))
                .sort((preItem, nextItem) => +nextItem.formatDate - +preItem.formatDate );
        this.contactedList = (this.myConsultantList || [])
                .filter(item => item.contactStatus === 'contacted')
                .map((item) => ({ ...item, formDate: new Date(item.updateTime)}))
                .sort((preItem, nextItem) => +nextItem.formDate - +preItem.formDate);
    }
}
</script>
</script>
PAMapp/pages/myConsultantList/consultantList.vue
@@ -2,6 +2,7 @@
    <div>
        <ConsultantList
            :agents="pageList"
            :title="'consultantList'"
        ></ConsultantList>
        <UiPagination
@@ -13,17 +14,21 @@
<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator';
import { Consultant } from '~/assets/ts/models/consultant.model';
import { Consultant } from '~/shared/models/consultant.model';
@Component
export default class ConsultantPage extends Vue {
    @Prop() consultantList!: Consultant[];
    @Prop()
    consultantList!: Consultant[];
    pageList: Consultant[] = [];
    //////////////////////////////////////////////////////////////////////
    changePage(pageList: Consultant[]) {
        this.pageList = pageList;
    }
}
</script>
</script>
PAMapp/pages/myConsultantList/contactedList.vue
@@ -2,6 +2,7 @@
    <div>
        <ConsultantList
            :agents="pageList"
            :title="'contactedList'"
        ></ConsultantList>
        <UiPagination
@@ -13,16 +14,20 @@
<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator' ;
import { Consultant } from '~/assets/ts/models/consultant.model';
import { Consultant } from '~/shared/models/consultant.model';
@Component
export default class ContactedList extends Vue {
    @Prop() contactedList!: Consultant[];
    @Prop()
    contactedList!: Consultant[];
    pageList: Consultant[] = [];
    //////////////////////////////////////////////////////////////////////
    changePage(pageList: Consultant[]) {
        this.pageList = pageList;
    }
}
</script>
</script>
PAMapp/pages/notification/index.vue
@@ -1,5 +1,124 @@
<template>
    <div>通知功能
        <el-button @click="$router.push('/notification/detail')">通知細節</el-button>
    <div>
        <div
            v-if="isUserLogin && unReviewLogList.length"
            class="satisfaction-banner my-10 cursor--pointer"
            @click="$router.push('/satisfactionList')"
        >
        </div>
        <el-row
            v-for="(item, index) in notificationList"
            :key="index"
            type="flex"
            justify="space-between"
            align="middle"
            class="notification-card"
        >
            <el-col class="unRead" :span="3" v-if="!item.readDate"></el-col>
            <el-col :span="18">
                <p class="text">{{item.content}}</p>
            </el-col>
            <el-col :span="3" class="notification-period text--right">
                <div>
                    <UiDateFormat
                        class="date"
                        :date="item.createdDate"
                        onlyShowSection="DAY" />
                </div>
                <div>
                    <UiDateFormat
                        class="time"
                        :date="item.createdDate"
                        onlyShowSection="TIME" />
                </div>
            </el-col>
        </el-row>
    </div>
</template>
</template>
<script lang="ts">
import { Component, State, Vue } from "nuxt-property-decorator";
import { AppointmentLog } from "~/shared/models/appointment.model";
import { NotificationList } from "~/shared/models/reviews.model";
import authService from "~/shared/services/auth.service";
import reviewsService from "~/shared/services/reviews.service";
@Component
export default class Notification extends Vue {
    @State
    unReviewLogList!: AppointmentLog[];
    @State
    notificationList!: NotificationList[];
    isUserLogin = false;
    ////////////////////////////////////////////////////////////
    mounted() {
        this.isUserLogin = authService.isUserLogin();
        reviewsService.readAllMyNotification().then(res => res);
    }
}
</script>
<style lang="scss" scoped>
    .satisfaction-banner {
        width: 100%;
        height: 60px;
        background-image: url('~/assets/images/satisfaction/satisfactionBtn_s_mob.svg');
        background-repeat: no-repeat;
        background-size: cover;
        background-position: center;
        border-radius: 10px;
        .satisfaction-text {
            @extend .mdTxt;
            @extend .text--PRIMARY_WHITE;
            line-height: 60px;
        }
        @include desktop {
            height: 110px;
            background-image: url('~/assets/images/satisfaction/satisfactionBtn_s_web.svg');
            .satisfaction-text {
                font-size: 24px;
                line-height: 110px;
            }
        }
    }
    .notification-card {
        padding: 10px;
        border-bottom: solid 1px #CCCCCC;
        .unRead {
            width: 10px;
            height: 10px;
            border-radius: 50px;
            background-color: $PRIMARY_RED;
        }
        .notification-period {
            color: #707070;
            .date {
                font-size: 10px;
                line-height: 12px;
            }
            .time {
                font-size: 12px;
                line-height: 14px;
            }
        }
    }
    .satisfaction-icon {
        font-size: 24px;
        @extend .cursor--pointer;
    }
</style>
PAMapp/pages/questionnaire/_agentNo.vue
@@ -1,12 +1,12 @@
<template>
  <div class="ques-page--reset" v-if="isLogin">
  <div class="ques-page--reset" v-if="isUserLogin">
    <div class="ques-header">
        <div class="ques-header__mob-banner"></div>
        <div
          class="ques-header__info"
          v-if="myRequest.contactType==='phone'">
          <div class="text--middle">
              <div class="mdTxt">你指定的聯繫方式</div>
              <div class="mdTxt">您指定的聯繫方式</div>
              <div class="mt-10">
                  <span>手機:</span>
                  <span>{{myRequest.phone}}</span>
@@ -16,32 +16,36 @@
              <div class="datepicker required">
                  <span class="mdTxt">手機連絡的方便時間</span>
                  <PhoneContactTimePicker
                  :scheduleList.sync="myRequest.hopeContactTime"/>
                  :scheduleList="myRequest.hopeContactTime"/>
              </div>
          </div>
          <div class="mt-30">
              <div class="mdTxt">其他備用聯繫方式</div>
              <div class="ques-header__input-block">
                  <span>Email:</span>
                  <input class="ques-header__input"
                  <input class="ques-header__input  break"
                    :class="{ 'is-invalid': !emailValid}"
                    placeholder="請輸入"
                    v-model="myRequest.email">
              </div>
              <div class="error mt-5 mb-5" style="margin-left:65px">
                  <span v-show="!emailValid">Email格式有誤</span>
              </div>
          </div>
        </div>
        <div class="ques-header__info" v-else>
          <div class="text--middle">
              <div class="mdTxt">你指定的聯繫方式</div>
              <div class="mdTxt">您指定的聯繫方式</div>
              <div class="mt-10 ques-header__input-block">
                  <span>Email:</span>
                  <span>{{myRequest.email}}</span>
                  <span class=" break">{{myRequest.email}}</span>
              </div>
          </div>
          <div class="mt-30">
              <div class="mdTxt">其他備用聯繫方式</div>
              <div class="ques-header__input-block">
                  <span>手機:</span>
                  <input class="ques-header__input"
                  <span>手機 : </span>
                  <input class="ques-header__input ml-4"
                    :class="{'is-invalid': !phoneValid}"
                    placeholder="請輸入"
                    maxlength="10"
@@ -55,7 +59,7 @@
              <div class="datepicker">
                  <span class="mdTxt">手機連絡的方便時間</span>
                  <PhoneContactTimePicker
                  :scheduleList.sync="myRequest.hopeContactTime"/>
                  :scheduleList="myRequest.hopeContactTime"/>
              </div>
          </div>
        </div>
@@ -80,7 +84,7 @@
          :options="genderOptions" />
      </div>
      <div class="pam-paragraph">
        <div class="mdTxt">年齡</div>
        <div class="mdTxt">您的年齡</div>
        <SingleSelectBtn class="mt-10"
          :singleSelected.sync="myRequest.age"
          :options="ageRangeOptions" />
@@ -115,18 +119,30 @@
    </PopUpFrame>
    <PopUpFrame :isOpen.sync="sendReserve" @update:isOpen="closeReservePopUp">
        <div class="text--middle  mt-30 sendReserve-txt">預約成功!您預約的保險顧問會</div>
        <div class="text--middle  sendReserve-txt">儘速與您聯絡!</div>
        <div class="mdTxt mt-30 sendReserve-txt">預約成功!</div>
        <div class="mdTxt sendReserve-txt mb-30">您預約的顧問會儘速與您聯絡!</div>
        <div class="pam-app-review mb-10">
          <div class="mdTxt mb-10">對於
                <span class="mdTxt text--primary text--bold ">服務媒合</span>
                å¹³å°çš„æ•´é«”服務,
            </div>
          <div class="mdTxt">您給予幾顆星評價?</div>
        </div>
        <el-rate v-model="score" class="pam-satisfaction-rate fix-chrome-click--issue"></el-rate>
        <div class="text--center mdTxt">
          <el-button @click="closeReservePopUp">略過</el-button>
          <el-button type="primary"
            @click="closeReservePopUp">
            æˆ‘知道了
            @click="reviewPlatform">
            é€å‡º
          </el-button>
        </div>
    </PopUpFrame>
    <PopUpFrame :isOpen.sync="isEditPopup">
      <div class="text--middle mt-30 sendReserve-txt">是否繼續編輯預約單?</div>
      <div class="text--middle text--center mb-10">已於
        <span class="bold">{{appointmentTime | formatDate}}</span>
      é€²è¡Œé ç´„,</div>
      <div class="text--middle text--center mb-30">是否繼續編輯?</div>
      <div class="text--center mdTxt">
        <el-button @click="$router.go(-1)">返回</el-button>
        <el-button @click="isEditPopup = false" type="primary">編輯</el-button>
@@ -137,20 +153,42 @@
<script lang="ts">
import { Vue, Component, State, Action, Watch, namespace } from 'nuxt-property-decorator';
import { addFavoriteConsultant, appointmentDemand, AppointmentParams, AppointmentRequests ,editAppointment,RegisterInfo } from '~/assets/ts/api/consultant';
import { getRequestQuestionFromStorage, getRequestsFromStorage, removeRequestQuestionFromStorage, setRequestsToStorage } from '~/assets/ts/storageRequests';
import { getRequestsFromStorage, removeRequestQuestionFromStorage, setRequestsToStorage } from '~/shared/storageRequests';
import _ from 'lodash';
import { Consultant } from '~/assets/ts/models/consultant.model';
import { ContactType } from '~/assets/ts/models/enum/ContactType';
import { Gender } from '~/assets/ts/models/enum/Gender';
import { Role } from '~/assets/ts/models/enum/Role';
import accountSettingService from '~/shared/services/account-setting.service';
import appointmentService from '~/shared/services/appointment.service';
import authService from '~/shared/services/auth.service';
import queryConsultantService from '~/shared/services/query-consultant.service';
import reviewsService from '~/shared/services/reviews.service';
import { Consultant } from '~/shared/models/consultant.model';
import { ContactType } from '~/shared/models/enum/ContactType';
import { Gender } from '~/shared/models/enum/Gender';
import { RegisterInfo } from '~/shared/models/registerInfo';
import { AppointmentParams, AppointmentRequests } from '~/shared/models/appointment.model';
import { UserSetting } from '~/shared/models/account.model';
import { SatisfactionType } from '~/shared/models/enum/satisfaction-type';
import { UserReviewParams } from '~/shared/models/reviews.model';
  const roleStorage = namespace('localStorage');
  @Component
  export default class Questionnaire extends Vue {
    @State('myConsultantList') myConsultantList!: Consultant[];
    @Action storeConsultantList!: () => Promise<number>;
    @roleStorage.Getter currentRole!:string;
    @State('myConsultantList')
    myConsultantList!: Consultant[];
    @Action
    storeConsultantList!: () => Promise<number>;
    @roleStorage.Getter
    isUserLogin!:boolean;
    @roleStorage.State
    recommendConsultantItem!:string;
    @roleStorage.Mutation
    storageUserInfo!: (params: RegisterInfo) => void;
    score = 0;
    genderOptions=[
      {
@@ -244,13 +282,14 @@
                  },
                  {
                      title:'分紅保單',
                      content:'分紅保單 åˆ†ç´…保單是兼具「分攤風險」與「紅利共享」特色的保單,具有一定穩定度,讓你可以同時享有壽險保障及紅利!'
                      content:'分紅保單是兼具「分攤風險」與「紅利共享」特色的保單,具有一定穩定度,讓您可以同時享有壽險保障及紅利!'
                  }
    ];
    myRequest: AppointmentRequests = {
      phone          : this.userInfo?.phone ? this.userInfo.phone                               : '',
      email          : this.userInfo?.email ? this.userInfo.email                               : '',
      name           : '',
      phone          : '',
      email          : '',
      contactType    : _.isEqual(this.userInfo?.contactType,ContactType.SMS) ? ContactType.PHONE: ContactType.EMAIL,
      gender         : '',
      age            : '',
@@ -269,33 +308,35 @@
    isEditBtn = false;
    appointmentId = 0;
    appointmentTime = '';
    ////////////////////////////////////////////////////////////////////////////
    beforeRouteEnter(to: any, from: any, next: any) {
      next(vm => {
        if (from.name === 'login' && !vm.isLogin) {
        const isUserLogin = authService.isUserLogin();
        if (from.name === 'login' && !isUserLogin) {
          vm.$router.go(-1);
          return;
        }
        if (!vm.isLogin) {
        if (!isUserLogin) {
          vm.$router.push('/login');
        }
      })
    }
    async fetch() {
      if (this.isLogin) {
        await this.storeConsultantList();
      };
    }
    mounted(): void {
      if (authService.isUserLogin()) {
        this.storeConsultantList();
      };
      this.setMyRequest();
    }
    private setMyRequest(): void {
      const storageMyRequest = getRequestsFromStorage();
      const storageMyQuestion = getRequestQuestionFromStorage();
      const storageMyRequirement = this.recommendConsultantItem ? JSON.parse(this.recommendConsultantItem).requirements:[];
      const contactTypePromise = accountSettingService.getUserAccountSetting();
      if (storageMyRequest) {
        this.myRequest = {
@@ -309,48 +350,115 @@
        };
      }
      if (storageMyQuestion) {
      if (storageMyRequirement) {
        this.myRequest = {
          ...this.myRequest,
          requirement: storageMyQuestion
          requirement: storageMyRequirement
        }
        removeRequestQuestionFromStorage();
      }
      contactTypePromise.then((contactTypeDetail) => {
            this.myRequest = {
              ...this.myRequest,
              ...contactTypeDetail
            }
      })
    }
    get phoneValid(): boolean {
      const rule = /^09[0-9]{8}$/;
      return this.myRequest.phone
            ? rule.test(this.myRequest.phone) && _.isEqual(this.myRequest.phone.length,10)
            : true;
    ////////////////////////////////////////////////////////////////////////////
    @Watch('myConsultantList')
    onMyConsultantListChange() {
      if (authService.isUserLogin() && this.myConsultantList.length > 0) {
          const editAppointment = this.getLatestReserved(this.$route.params.agentNo);
          if (editAppointment && editAppointment.agentNo) {
            this.myRequest = JSON.parse(JSON.stringify(editAppointment));
            if (!this.$route.query || this.$route.query.edit !== 'true') {
              this.isEditPopup = true;
            }
            this.isEditBtn = true;
          }
      }
    }
    get userInfo(): RegisterInfo {
      const initUserInfo = JSON.parse(localStorage.getItem('userInfo')!);
      return initUserInfo;
    private getLatestReserved(agentNo) {
      const agentInfo = this.myConsultantList.filter(item => item.agentNo === agentNo);
      const appointmentInfo = agentInfo.length > 0 && agentInfo[0].appointments
        ? agentInfo[0].appointments!
              .filter((appointment) => appointment.communicateStatus === 'reserved')
              .map((reversedAppointment) => (
                { ...reversedAppointment,
                  sortDate: new Date(reversedAppointment.appointmentDate)
                }))
              .sort((preAppointment, nextAppointment) => +nextAppointment.sortDate - +preAppointment.sortDate)[0]
        : null;
      return this.getReservedData(appointmentInfo);
    }
    get isDisabledSubmitBtn(): boolean {
           return _.includes(this.myRequest.contactType,ContactType.PHONE)
      ? !this.isHopeContactTimeDone()
      : !this.phoneValid;
    private getReservedData(appointmentInfo) {
      if (appointmentInfo) {
        const hopeContactTime = appointmentInfo!.hopeContactTime.split("'")
              .filter(item => item && item !== ',');
        this.getAppointmentId(appointmentInfo);
        return {
            ...appointmentInfo,
            hopeContactTime: hopeContactTime.map(item => {
                const info = item.split('、');
                return {
                    selectWeekOptions: info[0].split(','),
                    selectTimesOptions: info[1].split(',')
                }
            }),
            requirement: appointmentInfo.requirement.split(',')
          }
      } else {
        return null;
      }
    }
    get isLogin() {
      return this.currentRole === Role.USER;
    private getAppointmentId(appointmentInfo) {
      this.appointmentId = appointmentInfo.id;
      this.appointmentTime = appointmentInfo.lastModifiedDate
                  ? appointmentInfo.lastModifiedDate
                  : appointmentInfo.appointmentDate;
    }
    private isHopeContactTimeDone():boolean{
      return this.myRequest.hopeContactTime[0]?.selectWeekOptions.length >0 && this.myRequest.hopeContactTime[0]?.selectTimesOptions.length >0;
    }
    ////////////////////////////////////////////////////////////////////////////
    sentDemand() {
      if (this.isEditBtn) {
        this.sentEditAppointmentDemand();
        this.editAppointmentDemand();
      } else {
        addFavoriteConsultant([this.$route.params.agentNo]).then(res => this.sentAppointmentDemand());
        queryConsultantService.addFavoriteConsultant([this.$route.params.agentNo]).then(res => this.sentAppointmentDemand());
      }
       const editSettingInfo: UserSetting = {
          name: this.myRequest.name,
          phone: this.myRequest.phone,
          email: this.myRequest.email,
      }
      accountSettingService.updateAccountSetting(editSettingInfo).then((_) => {
          this.storageUserInfo(this.userInfo);
      });
    }
    private editAppointmentDemand() {
      const info = {
          ...this.myRequest,
          requirement: _.map(this.myRequest.requirement,o=>o).toString(),
          hopeContactTime: this.myRequest.phone && this.phoneValid ? this.getHopeContactTime() :'',
          id: this.appointmentId,
          otherRequirement: null
        }
      appointmentService.editAppointment(info).then(res => {
        this.sendReserve = true;
        this.myRequest.hopeContactTime = [];
        setRequestsToStorage(this.myRequest);
      });
    }
    private sentAppointmentDemand() {
@@ -361,33 +469,30 @@
          agentNo: this.$route.params.agentNo
        };
        appointmentDemand(data).then(res => {
        queryConsultantService.appointmentDemand(data).then(res => {
            this.sendReserve = true;
            this.myRequest.hopeContactTime = [];
            this.appointmentId = res['id'];
            setRequestsToStorage(this.myRequest);
        });
    }
    private sentEditAppointmentDemand() {
      const info = {
          ...this.myRequest,
          requirement: _.map(this.myRequest.requirement,o=>o).toString(),
          hopeContactTime: this.myRequest.phone && this.phoneValid ? this.getHopeContactTime() :'',
          id: this.appointmentId,
          otherRequirement: null
        }
        editAppointment(info).then(res => {
          this.sendReserve = true;
          this.myRequest.hopeContactTime = [];
          setRequestsToStorage(this.myRequest);
        });
    }
    getHopeContactTime() {
    private getHopeContactTime() {
        const selectedHopeContactTime = this.myRequest.hopeContactTime.filter((i) => i.selectWeekOptions?.length && i.selectTimesOptions?.length);
        return selectedHopeContactTime.map(i => {
            return `'${i.selectWeekOptions}、${i.selectTimesOptions}'`}
        ).toString();
    }
    reviewPlatform(): void {
      const reviewPlatformParams: UserReviewParams = {
        appointmentId: this.appointmentId,
        score: this.score,
        type: SatisfactionType.SYSTEM
      };
      reviewsService.reviewPlatform(reviewPlatformParams).then((_) => {
        this.closeReservePopUp();
      });
    }
    closeReservePopUp() {
@@ -395,74 +500,35 @@
        this.$router.push('/')
    }
    private getLatestReserved(agentNo) {
      const agentInfo = this.myConsultantList.filter(item => item.agentNo === agentNo);
    ////////////////////////////////////////////////////////////////////////////
      const appointmentInfo = agentInfo.length > 0 && agentInfo[0].appointments
        ? agentInfo[0].appointments!
              .filter((appointment) => appointment.communicateStatus !== 'contacted')
              .map((reversedAppointment) => {
                return {
                  ...reversedAppointment,
                  sortDate: new Date(reversedAppointment.appointmentDate)
                }
              })
              .sort((preAppointment, nextAppointment) => +nextAppointment.sortDate - +preAppointment.sortDate)[0]
        : null;
      return this.getReservedData(appointmentInfo);
    get phoneValid(): boolean {
      const rule = /^09[0-9]{8}$/;
      return this.myRequest.phone
            ? rule.test(this.myRequest.phone) && _.isEqual(this.myRequest.phone.length,10)
            : true;
    }
    private getReservedData(appointmentInfo) {
      if (appointmentInfo) {
        const hopeContactTime = appointmentInfo!.hopeContactTime.split("'")
              .filter(item => item && item !== ',');
        this.appointmentId = appointmentInfo.id;
        return {
            age: appointmentInfo.age,
            agentNo: appointmentInfo.agentNo,
            contactType: appointmentInfo.contactType,
            email: appointmentInfo.email || '',
            gender: appointmentInfo.gender,
            hopeContactTime: hopeContactTime.map(item => {
                const info = item.split('、');
                return {
                    selectWeekOptions: info[0].split(','),
                    selectTimesOptions: info[1].split(',')
                }
            }),
            job: appointmentInfo.job,
            phone: appointmentInfo.phone || '',
            requirement: appointmentInfo.requirement.split(',')
          }
      } else {
        return {
          age: '',
          agentNo: '',
          contactType: '',
          email: '',
          gender: '',
          hopeContactTime: [],
          job: '',
          phone: '',
          requirement: []
        }
      }
    get emailValid() {
      const rule = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
      return this.myRequest.email ? rule.test(this.myRequest.email) : true;
    }
    @Watch('myConsultantList') onMyConsultantListChange() {
      if (this.isLogin && this.myConsultantList.length > 0) {
          const editAppointment = this.getLatestReserved(this.$route.params.agentNo);
          if (editAppointment.agentNo) {
            this.myRequest = JSON.parse(JSON.stringify(editAppointment));
            if (!this.$route.query || this.$route.query.edit !== 'true') {
              this.isEditPopup = true;
            }
            this.isEditBtn = true;
            return;
          }
      }
    get userInfo(): RegisterInfo {
      const initUserInfo = JSON.parse(localStorage.getItem('userInfo')!);
      return initUserInfo;
    }
    get isDisabledSubmitBtn(): boolean {
           return _.includes(this.myRequest.contactType,ContactType.PHONE)
      ? !this.isHopeContactTimeDone() || !this.emailValid
      : !this.phoneValid;
    }
    private isHopeContactTimeDone():boolean{
      return this.myRequest.hopeContactTime[0]?.selectWeekOptions.length >0 && this.myRequest.hopeContactTime[0]?.selectTimesOptions.length >0;
    }
  }
</script>
@@ -471,7 +537,6 @@
  display: flex;
  justify-content: center;
  margin-top: 10px;
  margin-bottom: 26px;
}
//drawer最底下文字樣式
@@ -482,7 +547,9 @@
  color: #ED1B2E;
  cursor: pointer;
}
.error {
  color:$PRIMARY_RED
}
//送出按鈕樣式與排版
.ques-footer{
  justify-content: center;
@@ -544,7 +611,10 @@
      transform: translate(-12px, 0);
  }
}
.break{
  word-break: break-all;
  line-height: 1.2;
}
.ques-page--reset.pam-page-container {
  margin: 0px auto;
}
@@ -577,7 +647,7 @@
    @extend .text--middle,.mt-10 ;
    .ques-header__input{
      &.is-invalid{
        border: 2px solid $PRIMARY_RED !important;
        border: 1px solid $PRIMARY_RED !important;
      }
      flex: 1;
      height: 50px;
@@ -590,12 +660,24 @@
      -moz-box-sizing: border-box;
    }
  }
  .ml-4{
    margin-left: 4px;
  }
  .ques-container {
    position: relative;
    margin: 0px 20px;
  }
.pam-app-review{
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
.pam-satisfaction-rate{
  margin-bottom: 45px;
}
  @include desktop{
  .ques-header{
@@ -623,5 +705,6 @@
  }
}
</style>
PAMapp/pages/quickFilter/index.vue
@@ -1,275 +1,272 @@
<template>
    <div>
        <div class="quickBtnBlock">
            <el-button
                v-for="(question, index) in questionList"
                :key="index"
                class="subTitle quickBtn"
                :class="{'isActive': isActive(question.name)}"
                @click="openPopUp(question)"
            >{{question.title}}</el-button>
        </div>
        <h5 class="mdTxt mb-10 mt-30">篩選條件</h5>
        <div>
            <template v-if="confirmItem.length > 0">
                <UiTags
                    v-for="(item, index) in confirmItem" :key="index"
                    @removeTag="removeTag(item.value)"
                >
                    <span v-if="item.option === 'gender'">{{item.value === 'male' ? '男性' : '女性'}}</span>
                    <span v-else-if="item.option === 'avgScore'">{{item.value + '星以上滿意度'}}</span>
                    <span v-else>{{item.value}}</span>
                </UiTags>
            </template>
            <div
                v-else
                class="emptyBox text--mid_grey"
            >
                <p class="smTxt">尚無篩選</p>
            </div>
        </div>
        <div class="mb-10 mt-30">
            <span class="mdTxt">快速篩選推薦</span>
            <span class="smTxt_bold text--prudential_grey ml-10">共 {{consultantList.length}} ç­†</span>
        </div>
        <div class="recommend pam-paragraph">
            <img class="img" src="~/assets/images/quickFilter/recommend.svg" alt="">
            <template v-if="consultantList.length > 0">
                <QuickFilterConsultantList :consultantList="consultantList"></QuickFilterConsultantList>
            </template>
            <template v-else>
                <div class="emptyBox text--mid_grey recommendStyle">
                    <p class="smTxt">尚無推薦資料</p>
                </div>
            </template>
        </div>
        <PopUpFrame
            :isOpen.sync="isOpenQuestionPopUp"
            :dialogWidth="'400px'"
            class="pam-myDemand-dialog"
        >
            <QuickFilterSelector
                ref="quickFilterRef"
                :isOpenQuestionPopUp="isOpenQuestionPopUp"
                :questionOption="questionOption"
                @confirm="confirm"
                :confirmItem="confirmItem"
            ></QuickFilterSelector>
        </PopUpFrame>
  <div>
    <div class="pam-paragraph pam-quick-filter__options">
      <el-button v-for="(question, index) in questionList"
        :key="index"
        class="subTitle pam-quick-filter__btn"
        :class="{'is-active': isActive(question.name)}"
        @click="openPopUp(question)">{{question.title}}</el-button>
    </div>
    <div class="pam-paragraph">
      <div class="mdTxt">篩選條件</div>
      <div class="mt-10">
        <template v-if="confirmItem.length > 0">
          <UiTags v-for="(item, index) in confirmItem"
            :key="index"
            @removeTag="removeTag(item.value)">
            <span v-if="item.option === 'gender'">
              {{item.value === 'male' ? '男性' : '女性'}}
            </span>
            <span v-else-if="item.option === 'seniority'">
              {{item.value | formatSeniorityTitle}}
              <span class="smTxt">{{item.value | formatSenioritySubTitle}}</span>
            </span>
            <span v-else-if="item.option === 'avgScore' && !hideReviews">{{item.value + '星以上滿意度'}}</span>
            <span v-else>{{item.value}}</span>
          </UiTags>
        </template>
        <div v-else
          class="pam-quick-filter__empty text--mid_grey">
          <p class="smTxt">尚無篩選</p>
        </div>
      </div>
    </div>
    <div class="pam-paragraph">
      <span class="mdTxt">快速篩選推薦</span>
      <span class="smTxt_bold text--prudential_grey ml-10">共 {{consultantList.length}} ç­†</span>
    </div>
    <div class="pam-paragraph pam-quick-filter__recommend">
      <img class="img"
        alt=""
        src="~/assets/images/quickFilter/recommend.svg">
      <template v-if="consultantList.length > 0">
        <QuickFilterConsultantList :consultantList="consultantList"></QuickFilterConsultantList>
      </template>
      <template v-else>
        <div class="pam-quick-filter__empty text--mid_grey pam-quick-filter__empty--white">
          <p class="smTxt">尚無推薦資料</p>
        </div>
      </template>
    </div>
    <PopUpFrame class="pam-myDemand-dialog"
      dialogWidth="400px"
      :isOpen.sync="isOpenQuestionPopUp">
      <QuickFilterSelector ref="quickFilterRef"
        :isOpenQuestionPopUp="isOpenQuestionPopUp"
        :questionOption="questionOption"
        @confirm="confirm"
        :confirmItem="confirmItem"></QuickFilterSelector>
    </PopUpFrame>
  </div>
</template>
<script lang="ts">
import { Vue, Component, namespace } from 'nuxt-property-decorator';
import { FastQueryParams } from '~/assets/ts/api/consultant';
import { Consultant } from '~/assets/ts/models/consultant.model';
import { Selected } from '~/components/QuickFilter/QuickFilterSelector.vue';
import { fastQuery } from '~/assets/ts/api/consultant';
  import { Consultant } from '~/shared/models/consultant.model';
  import { FastQueryParams, QuestionOption, Selected } from '~/shared/models/quick-filter.model';
  import { questionList } from '~/shared/const/quickFilter-questionList';
  import { Seniority } from '~/shared/models/enum/seniority';
  import { Vue, Component, namespace } from 'nuxt-property-decorator';
  import queryConsultantService from '~/shared/services/query-consultant.service';
  import _ from 'lodash';
const localStorage = namespace('localStorage');
@Component
export default class QuickFilter extends Vue {
    @localStorage.Mutation storageQuickFilter!: (token: string) => void;
    @localStorage.Getter quickFilterSelectedData!: Selected[];
  const localStorage = namespace('localStorage');
  const seniorityMap={
    [Seniority.SENIOR]:{
      title:'資深',
      subTitle:'薑是老的辣'
    },
    [Seniority.YOUNG]:{
      title:'年輕',
      subTitle:'給年輕人一個機會'
    },
    [Seniority.UNLIMITED]:{
      title:'不限',
      subTitle:'年齡不是問題'
    },
  }
  @Component({
    filters: {
      formatSeniorityTitle(value): string{
        return seniorityMap[value].title
      },
      formatSenioritySubTitle(value): string {
        return seniorityMap[value].subTitle
      }
    }
  })
  export default class QuickFilter extends Vue {
    @localStorage.Mutation
    storageQuickFilter!: (token: string) => void;
    @localStorage.Getter
    quickFilterSelectedData!: Selected[];
    isOpenQuestionPopUp = false;
    consultantList: Consultant[] = [];
    questionOption = {};
    confirmItem: Selected[] = [];
    questionList: QuestionOption[] = [
        {
            name: 'gender',
            title: '顧問性別',
            detail: [
                { name: '男性', value: 'male', className: 'btn_man'},
                { name: '女性', value: 'female', className: 'btn_woman'}
            ],
            type: 'radio'
        },
        {
            name: 'avgScore',
            title: '顧問滿意度',
            detail: [],
            type: ''
        },
        {
            name: 'communicationStyles',
            title: '溝通風格',
            detail: [
                { value: '謹慎務實', className: 'btn_owl'},
                { value: '明快主動', className: 'btn_tiger'},
                { value: '耐心傾聽', className: 'btn_koala'},
                { value: '健談風趣', className: 'btn_peacock'}
            ],
            type: 'checkbox'
        },
        // {
        //     name: 'status',
        //     title: '上線狀態',
        //     detail: [],
        //     type: 'radio'
        // }
    ];
    questionList = questionList;
    ////////////////////////////////////////////////////////////////////// Vue lifeCycle
    mounted() {
        if (this.quickFilterSelectedData && this.quickFilterSelectedData.length > 0) {
            this.confirmItem = this.quickFilterSelectedData;
            this.getRecommendList();
        }
      if (this.quickFilterSelectedData && this.quickFilterSelectedData.length > 0) {
        this.confirmItem = this.quickFilterSelectedData;
        this.getRecommendList();
      }
    }
    gender(): string {
        const filter = this.confirmItem.filter(item => item.option === 'gender').map(i => i.value);
        return filter.length === 0 ? '' : filter[0];
    }
    avgScore(): number {
        const filter = this.confirmItem.filter(item => item.option === 'avgScore').map(i => i.value);
        return filter.length === 0 ? '' : filter[0];
    }
    communicationStyles(): string[] {
        return this.confirmItem.filter(item => item.option === 'communicationStyles').map(i => i.value);
    }
    isActive(name: string) {
        return name === 'gender' && !!this.gender()
            || name === 'avgScore' && !!this.avgScore()
            || name === 'communicationStyles' && !!this.communicationStyles().length
    }
    //////////////////////////////////////////////////////////////////////
    openPopUp(question: QuestionOption) {
        this.questionOption = question;
        this.isOpenQuestionPopUp =true;
      this.questionOption = question;
      this.isOpenQuestionPopUp = true;
    }
    removeTag(value: string) {
        this.confirmItem = this.confirmItem.filter(item => item.value !== value);
        this.confirmItem.length > 0 ? this.getRecommendList() : this.consultantList = [];
      this.confirmItem = this.confirmItem.filter(item => item.value !== value);
      this.confirmItem.length > 0 ? this.getRecommendList() : this.consultantList = [];
    }
    confirm(event: Selected) {
        this.setConfirmData(event);
        this.confirmItem.length > 0 ? this.getRecommendList() : this.consultantList = [];
        this.isOpenQuestionPopUp = false;
      this.setConfirmData(event);
      this.confirmItem.length > 0 ? this.getRecommendList() : this.consultantList = [];
      this.isOpenQuestionPopUp = false;
    }
    setConfirmData(event: Selected) {
        if (event.option === 'communicationStyles') {
            this.filterCommunicationStyles(event);
        } else {
            const findIndex = this.confirmItem.findIndex(item => item.option === event.option);
            findIndex === -1 ? this.confirmItem.push(event) : this.confirmItem[findIndex] = event;
    isActive(name: string) {
      return name === 'gender' && !!this.getGender()
          || name === 'avgScore' && !!this.getAvgScore()
          || name === 'communicationStyles' && !!this.getCommunicationStyles().length
          || name === 'seniority' && !!this.getSeniority()
    }
    //////////////////////////////////////////////////////////////////////
    private getGender(): string {
      return this.filterSingleSelected('gender'); // maybe can use enum ?
    }
    private getAvgScore(): number {
      return this.filterSingleSelected('avgScore');
    }
    private getSeniority(): string {
      return this.filterSingleSelected('seniority');
    }
    private getCommunicationStyles(): string[] {
      return this.confirmItem.filter(item => item.option === 'communicationStyles').map(i => i.value);
    }
    private filterSingleSelected(name: string) {
      const filter = this.confirmItem.filter(item => item.option === name);
      return filter.length > 0 ?
        filter[0].value :
        (name === 'avgScore' ? 0 : '');
    }
    private setConfirmData(event: Selected) {
      if (event.option === 'communicationStyles') {
        this.filterCommunicationStyles(event);
      } else {
        const findIndex = this.confirmItem.findIndex(item => item.option === event.option);
        findIndex === -1 ? this.confirmItem.push(event) : this.confirmItem[findIndex] = event;
      }
    }
    private filterCommunicationStyles(event: Selected) {
      const confirmValue = this.confirmItem
        .filter(item => item.option === 'communicationStyles')
        .map(i => i.value);
      const pickerValue = event.value;
      this.confirmItem = this.confirmItem
        .filter(item => pickerValue.includes(item.value) || item.option !== 'communicationStyles');
      const addValue = pickerValue.filter(item => !confirmValue.includes(item)).map(i => {
        return {
          option: 'communicationStyles',
          value: i
        }
      })
      if (addValue.length > 0) {
        this.confirmItem.push(...addValue);
      }
    }
    filterCommunicationStyles(event: Selected) {
        const confirmValue = this.confirmItem
            .filter(item => item.option === 'communicationStyles')
            .map(i => i.value);
        const pickerValue = event.value;
    private getRecommendList() {
      const data: FastQueryParams = {
        gender: this.getGender(),
        communicationStyles: this.getCommunicationStyles(),
        avgScore: this.getAvgScore(),
        status: '',
        seniority: this.getSeniority()
      }
        this.confirmItem = this.confirmItem
            .filter(item => pickerValue.includes(item.value) || item.option !== 'communicationStyles');
        const addValue = pickerValue.filter(item => !confirmValue.includes(item)).map(i => {
            return {
                option: 'communicationStyles',
                value: i
            }
        })
        if (addValue.length > 0) {
            this.confirmItem.push(...addValue);
        }
      queryConsultantService.fastQuery(data).then((consultantList) => {
        this.consultantList = consultantList;
        this.storageQuickFilter(JSON.stringify(this.confirmItem))
      })
    }
    getRecommendList() {
        const data: FastQueryParams = {
            gender: this.gender(),
            communicationStyles: this.communicationStyles(),
            avgScore: this.avgScore(),
            status: ''
        }
        fastQuery(data).then((res) => {
            this.consultantList = res.data;
            this.storageQuickFilter(JSON.stringify(this.confirmItem))
        })
    }
}
export interface QuestionOption {
    title: string;
    detail: Detail[];
    type: string;
    name: string;
}
interface Detail {
    value: string;
    name?: string;
    className: string;
}
  }
</script>
<style lang="scss" scoped>
    .emptyBox {
        width: 100%;
        height: 100px;
        border: solid 1px $LIGHT_GREY;
        text-align: center;
        border-radius: 10px;
  .pam-quick-filter__options {
    display: flex;
    width: 100%;
    height: 132px;
    flex-wrap: wrap;
    justify-content: space-between;
        .smTxt {
            line-height: 100px;
        }
    .pam-quick-filter__btn {
      width: 48%;
      height: 56px;
      text-align: center;
      box-shadow: 0 0 6px #22222229;
      border-radius: 10px;
      border-color: $CORAL;
      &.is-active {
        background-color: $CORAL;
        color: $PRIMARY_WHITE;
      }
    }
    .recommendStyle {
        box-shadow: 0 0 6px #00000029;
        background-color: $PRIMARY_WHITE;
    .pam-quick-filter__btn+.pam-quick-filter__btn {
      margin-left: 0;
    }
  }
    .quickBtnBlock {
        display: flex;
        width: 100%;
        height: 132px;
        flex-wrap: wrap;
        justify-content: space-between;
  .pam-quick-filter__empty {
    width: 100%;
    height: 100px;
    border: solid 1px $LIGHT_GREY;
    text-align: center;
    border-radius: 10px;
        .quickBtn {
            width: 48%;
            height: 56px;
            text-align: center;
            box-shadow: 0 0 6px #22222229;
            border-radius: 10px;
            border-color: $CORAL;
            &.isActive {
                background-color: $CORAL;
                color: $PRIMARY_WHITE;
            }
        }
        .quickBtn+.quickBtn {
            margin-left: 0;
        }
    .smTxt {
      line-height: 100px;
    }
    .recommend {
        position: relative;
        .img {
            position: absolute;
            top: -50px;
            right: 10px;
        }
    .pam-quick-filter__empty--white{
      box-shadow: 0 0 6px #00000029;
      background-color: $PRIMARY_WHITE;
    }
  }
</style>
  .pam-quick-filter__recommend {
    position: relative;
    .img {
      position: absolute;
      top: -50px;
      right: 10px;
    }
  }
</style>
PAMapp/pages/recommendConsultant/index.vue
@@ -1,9 +1,10 @@
<template>
  <div class="pam-rec-cosultant-page">
  <div class="pam-rec-consultant-page">
    <div class="pb-10 mdTxt">顧問性別</div>
    <SingleSelectBtn :singleSelected.sync="strictQueryDto.gender" :options="genderOptions"/>
    <SingleSelectBtn :singleSelected.sync="strictQueryDto.gender"
      :options="genderOptions" />
    <div class="pam-paragraph">
      <div class="pb-10 mdTxt required">顧問所在地區</div>
      <div class="pb-10 mdTxt required">顧問服務地區</div>
      <div class="job-pick"
        @click="showAddress = true">
        <input class="text--middle cursor--pointer input pl-10"
@@ -12,10 +13,8 @@
          readonly>
        <i class="icon-down down-icon"></i>
      </div>
      <PopUpFrame :isOpen.sync="showAddress"
      >
        <AddressPicker
          @confirm="confirmAddress" />
      <PopUpFrame :isOpen.sync="showAddress">
        <AddressPicker @confirm="confirmAddress" />
      </PopUpFrame>
    </div>
    <div class="pam-paragraph">
@@ -24,16 +23,20 @@
        <span class="hint text--bold">
          (可複選)
        </span>
        <i class="icon-information text--bold fix-chrome-click--issue" @click="showDialog = true"></i>
        <i class="icon-information text--bold fix-chrome-click--issue"
          @click="showDialog = true"></i>
      </div>
      <MultiSelectBtn :mutiSelect.sync="strictQueryDto.requirements" :options="requirementOptions" class="rec-multi-select" />
      <MultiSelectBtn :mutiSelect.sync="strictQueryDto.requirements"
        :options="requirementOptions"
        class="rec-multi-select" />
    </div>
    <div class="pam-paragraph">
      <div class="pb-10 mdTxt">顧問年資</div>
        <SingleSelectBtn :singleSelected.sync="strictQueryDto.seniority" :options="seniorityOptions"/>
      <SingleSelectBtn :singleSelected.sync="strictQueryDto.seniority"
        :options="seniorityOptions" />
    </div>
    <div class="pam-paragraph">
      <div class="pb-10 mdTxt">保險顧問滿意度</div>
    <div class="pam-paragraph" v-if="!hideReviews">
      <div class="pb-10 mdTxt">顧問滿意度</div>
      <el-rate class="pam-consultant-rate" v-model="strictQueryDto.avgScore">
      </el-rate>
    </div>
@@ -43,10 +46,12 @@
        <div class="hint text--bold ml-10">(可複選)</div>
      </div>
      <div class="rec-pop-container">
      <MultiSelectBtn :mutiSelect.sync="strictQueryDto.popularTags"
        :options="popularOptions"
        :nameOfOtherOption="'#其他'" :otherSelect.sync="strictQueryDto.otherPopularTags" class="rec-pop-options"/>
        </div>
        <MultiSelectBtn :mutiSelect.sync="strictQueryDto.popularTags"
          :options="popularOptions"
          :nameOfOtherOption="'#其他'"
          :otherSelect.sync="strictQueryDto.otherPopularTags"
          class="rec-pop-options" />
      </div>
    </div>
    <div class="rec-footer pam-paragraph">
      <el-button type="primary"
@@ -54,8 +59,7 @@
        @click="makePair">馬上配對</el-button>
    </div>
    <PopUpFrame :isOpen.sync="showDialog"
    >
    <PopUpFrame :isOpen.sync="showDialog">
      <div class="qaTextTitle mdTxt">
        <strong>想要詢問的問題</strong>
      </div>
@@ -69,119 +73,112 @@
        </div>
      </div>
      <div class="text--center mdTxt mt-30">
        <el-button type="primary" @click="showDialog = false">我知道了</el-button>
        <el-button type="primary"
          @click="showDialog = false">我知道了</el-button>
      </div>
    </PopUpFrame>
    <PopUpFrame :isOpen.sync="isVisiblePopUp">
      <div class="text--center mdTxt">
            <p class="mb-50">尚無推薦資料</p>
            <div class="text--center mdTxt">
              <el-button type="primary" @click="isVisiblePopUp = false">我知道了</el-button>
            </div>
        <p class="mb-50">尚無推薦資料</p>
        <div class="text--center mdTxt">
          <el-button type="primary"
            @click="isVisiblePopUp = false">我知道了</el-button>
        </div>
      </div>
    </PopUpFrame>
  </div>
</template>
<script lang="ts">
  import {
    Vue,
    Component,
    Mutation,
    namespace,
    Action,
    State
  } from 'nuxt-property-decorator';
  import * as _ from 'lodash';
  import { Seniority } from '~/assets/ts/models/enum/seniority';
  import { setRequestQuestionToStorage } from '~/assets/ts/storageRequests';
  import { Action, Component, Mutation, namespace ,State,Vue } from "nuxt-property-decorator";
  import { StrictQueryDto } from "~/shared/models/strictQueryDto.model";
  import { Gender } from "~/shared/models/enum/Gender";
  import { Seniority } from "~/shared/models/enum/seniority";
  import { hideReviews } from '~/shared/const/hide-reviews';
  const localStorage = namespace('localStorage');
  @Component
  export default class RecommendConsultant extends Vue {
    isVisiblePopUp = false;
    strictQueryDto: StrictQueryDto ={
      gender:'',
      area:'',
      status:'',
    hideReviews = hideReviews;
    strictQueryDto: StrictQueryDto = {
      gender: '',
      area: '',
      status: '',
      requirements: [],
      otherRequirement:'',
      seniority:'',
      avgScore:0,
      otherRequirement: '',
      seniority: '',
      avgScore: 0,
      popularTags: [],
      otherPopularTags:'',
      otherPopularTags: '',
    };
    genderOptions=[
      {
        title:'男性',
        label:Gender.MALE,
    genderOptions = [{
        title: '男性',
        label: Gender.MALE,
      },
      {
        title:'女性',
        label:Gender.FEMALE,
        title: '女性',
        label: Gender.FEMALE,
      }
    ];
    requirementOptions=[
      {
        title:'健康與保障',
        label:'健康與保障',
    requirementOptions = [{
        title: '健康與保障',
        label: '健康與保障',
      },
      {
        title:'子女教育',
        label:'子女教育',
        title: '子女教育',
        label: '子女教育',
      },
      {
        title:'資產規劃',
        label:'資產規劃',
        title: '資產規劃',
        label: '資產規劃',
      },
      {
        title:'樂活退休',
        label:'樂活退休',
        title: '樂活退休',
        label: '樂活退休',
      },
      {
        title:'保單健檢/規劃',
        label:'保單健檢/規劃',
        title: '保單健檢/規劃',
        label: '保單健檢/規劃',
      },
      {
        title:'分紅保單',
        label:'分紅保單',
        title: '分紅保單',
        label: '分紅保單',
      },
    ];
    seniorityOptions=[
      {
        title:'不限',
        subTitle:'年齡不是問題',
        label:Seniority.UNLIMITED,
    seniorityOptions = [{
        title: '不限',
        subTitle: '年齡不是問題',
        label: Seniority.UNLIMITED,
      },
      {
        title:'年輕',
        subTitle:'給年輕人一個機會',
        label:Seniority.YOUNG,
        title: '年輕',
        subTitle: '給年輕人一個機會',
        label: Seniority.YOUNG,
      },
      {
        title:'資深',
        subTitle:'薑是老的辣',
        label:Seniority.SENIOR,
        title: '資深',
        subTitle: '薑是老的辣',
        label: Seniority.SENIOR,
      }
    ];
    popularOptions=[
      {
    popularOptions = [{
        title: '#防疫',
        label:'防疫'
        label: '防疫'
      },
      {
        title: '#失能',
        label:'失能'
        label: '失能'
      },
      {
        title: '#防癌',
        label:'防癌'
        label: '防癌'
      },
      {
        title: '#醫療',
        label:'醫療'
        label: '醫療'
      },
      {
        title: '#壽險',
@@ -189,19 +186,18 @@
      },
      {
        title: '#儲蓄',
        label:'儲蓄'
        label: '儲蓄'
      },
      {
        title: '#投資',
        label:'投資'
        label: '投資'
      },
      {
        title: '#意外',
        label:'意外'
        label: '意外'
      }
    ];
    queaAboutList = [
      {
    queaAboutList = [{
        title: '健康與保障',
        content: '唯有把身體照顧好,才是保障幸福之本,不做盲目燃燒的蠟燭,只做綻開的陽光,陪孩子多走一哩路,人生的美正要開展。'
      },
@@ -223,26 +219,34 @@
      },
      {
        title: '分紅保單',
        content: '分紅保單 åˆ†ç´…保單是兼具「分攤風險」與「紅利共享」特色的保單,具有一定穩定度,讓你可以同時享有壽險保障及紅利!'
        content: '分紅保單是兼具「分攤風險」與「紅利共享」特色的保單,具有一定穩定度,讓您可以同時享有壽險保障及紅利!'
      }
    ];
    showDialog = false;
    showAddress = false;
    @Mutation updateStrictQueryList!: (data: any) => void;
    @Action storeStrictQueryList!: (data: any) => Promise<number>;
    @State strictQueryList!: any;
    @localStorage.State recommendConsultantItem!: string;
    @Mutation
    updateStrictQueryList!: (data: any) => void;
    @Action
    storeStrictQueryList!: (data: any) => Promise < number > ;
    @State
    strictQueryList!: any;
    @localStorage.State
    recommendConsultantItem!: string;
    //////////////////////////////////////////////////////////////////////
    mounted() {
      if (!!this.recommendConsultantItem) {
        this.strictQueryDto = JSON.parse(this.recommendConsultantItem);
      }
    }
    //////////////////////////////////////////////////////////////////////
    async makePair() {
      await this.storeStrictQueryList(this.strictQueryDto).then(dataLength => {
        const questions = this.strictQueryDto.requirements.length ? this.strictQueryDto.requirements : [];
        setRequestQuestionToStorage(questions);
        if (dataLength === 0) {
          this.isVisiblePopUp = true;
          return;
@@ -250,329 +254,321 @@
        this.$router.push('/recommendConsultant/result');
      });
    }
    get notFinishByRequireRules():boolean{
      const area = this.strictQueryDto.area;
      const requirementLength = this.strictQueryDto.requirements
        ? this.strictQueryDto.requirements.length
        : 0;
      return !(area && requirementLength >0)
    }
    confirmAddress(area: string) {
      this.strictQueryDto.area = area;
      this.showAddress = false;
    }
  }
  enum Gender{
    MALE="male",
    FEMALE="female",
    //////////////////////////////////////////////////////////////////////
    get notFinishByRequireRules(): boolean {
      const area = this.strictQueryDto.area;
      const requirementLength = this.strictQueryDto.requirements
              ? this.strictQueryDto.requirements.length
              : 0;
      return !(area && requirementLength > 0)
    }
  }
  export interface StrictQueryDto {
    gender: string,
    area: string,
    status: string,
    requirements: string[],
    otherRequirement: string,
    seniority: string,
    avgScore: number,
    popularTags: string[],
    otherPopularTags: string
  }
</script>
<style lang="scss">
  .pam-rec-consultant-page {
    .rec-pop-container {
      width: 310px;
.pam-rec-cosultant-page {
  .rec-pop-container{
    width:310px;
    .rec-pop-options{
      .el-checkbox-group{
        display: flex;
        flex-wrap: wrap;
        flex-direction: row;
        .el-checkbox{
          width:90px;
          height: 50px;
          padding:0;
          .el-checkbox__label{
            justify-content: center;
            align-items: center;
            display: flex;
            padding:15px 20px;
            text-align: center;
      .rec-pop-options {
        .el-checkbox-group {
          display: flex;
          flex-wrap: wrap;
          flex-direction: row;
          .el-checkbox {
            width: 90px;
            height: 50px;
            padding: 0;
            .el-checkbox__label {
              justify-content: center;
              align-items: center;
              display: flex;
              padding: 15px 20px;
              text-align: center;
            }
          }
        }
        .pam-selectAll-btn{
          margin-top: 60px;
          margin-left:-203px;
          height: 50px;
          width: 90px;
          padding: 10px;
        }
          .pam-selectAll-btn {
            margin-top: 60px;
            margin-left: -203px;
            height: 50px;
            width: 90px;
            padding: 10px;
          }
        }
      }
    }
    .rec-multi-select {
      .el-checkbox-group {
        display: flex;
        flex-direction: column;
        align-items: flex-start;
      }
    }
  }
  .rec-multi-select{
    .el-checkbox-group {
    input:focus,
    textarea:focus {
      outline: none;
    }
    .input {
      border: none;
      width: 90%;
      border-radius: 10px;
    }
    .job-pick {
      height: 50px;
      border-radius: 10px;
      border: 1px solid #D0D0CE;
      display: flex;
      flex-direction: column;
      align-items: flex-start;
      justify-content: space-between;
      background-color: #FFFFFF;
    }
  }
  input:focus,
  textarea:focus {
    outline: none;
  }
  .input {
    border: none;
    width: 90%;
    border-radius: 10px;
  }
  .job-pick {
    height: 50px;
    border-radius: 10px;
    border: 1px solid #D0D0CE;
    display: flex;
    justify-content: space-between;
    background-color: #FFFFFF;
  }
  .down-icon {
    color: #ED1B2E;
    font-size: 25px;
    align-self: center;
    margin-right: 15px;
  }
  .popOtherBtn {
    margin-left: -190px;
    margin-top: 45px;
  }
  .genderBtn {
    width: 80px;
    height: 47px;
    display: contents;
  }
  .qa-dialog {
    overflow-y: auto;
    height: 60vh;
    margin-top: 20px;
    text-align: justify;
  }
  .qaTextTitle {
    margin-top: 30px
  }
  .qa-dialog-footer {
    display: flex;
    justify-content: center;
    margin-bottom: 81px;
    color: #ED1B2E;
    cursor: pointer;
  }
  .el-drawer__container ::-webkit-scrollbar {
    display: none;
  }
  .el-button+.el-button {
    margin-left: 0;
  }
  .seniority-choice {
    display: flex;
    flex-wrap: wrap;
  }
  .area-choice {
    height: 50px;
    border-radius: 10px;
    border: 1px solid #D0D0CE;
    display: flex;
    justify-content: space-between;
    background-color: #FFFFFF;
  }
  .area-icon {
    color: #ED1B2E;
    font-size: 25px;
    display: flex;
    justify-content: flex-end;
    padding-right: 16px;
    padding-top: 11px;
  }
  input::-webkit-input-placeholder {
    font-size: 20px;
    padding-left: 10px;
  }
  .el-button.is-disabled {
    font-size: 20px;
    border-radius: 20px;
    color: #FFFFFF;
    background-color: #A7A8AA;
    border: 1px solid #A7A8AA;
  }
  .rec-footer {
    height: 70px;
    display: flex;
    justify-content: center;
    align-items: center;
  }
  .other-PopBtn {
    width: 90px;
    height: 47px;
    margin-top: 10px;
  }
  .rec-ques-location {
    display: flex;
    align-items: center;
  }
  .pop-tag {
    display: flex;
    flex-wrap: wrap;
    margin: -10px;
  }
  .rec-popular {
    display: flex;
    align-items: baseline;
    padding-top: 10px;
    margin-bottom: 10px;
  }
  .rec-btn-type {
    padding-bottom: 10px;
  }
  .rec-question {
    display: flex;
    flex-direction: column;
  }
  .rec-banner {
    height: 120px;
    background-color: #D0D0CE;
  }
  .rec-btn {
    font-size: 20px;
    border-radius: 20px;
    color: black;
    border: 1px solid #D0D0CE;
  }
  .rec-pop-btn {
    font-size: 20px;
    border-radius: 20px;
    color: black;
    margin: 0px 0px 10px 10px;
    border: 1px solid #D0D0CE;
    width: 90px;
    height: 47px;
  }
  .el-progress__text {
    display: none;
  }
  .el-progress-bar {
    padding-right: 0;
  }
  .el-progress-bar__inner {
    background-color: #ED1B2E;
  }
  .required {
    position: relative;
    &::before {
      content: '*';
      position: absolute;
      color: #FF0000;
      transform: translate(-12px, 0);
      z-index: 5;
    }
  }
  .area-txt {
    display: flex;
    align-items: center;
    margin-left: 18px;
  }
  @include desktop {
    .desktopBtn {
      margin-right: 10px;
      height: 47px
    .down-icon {
      margin-right: 15px;
    }
    .popOtherBtn {
      margin-left: 10px;
      margin-top: -10px;
      margin-left: -190px;
      margin-top: 45px;
    }
    .rec-pop-container{
      width:auto;
    .rec-pop-options{
      .el-checkbox-group{
        display: flex;
        flex-wrap:wrap;
        flex-direction: none;
        .el-checkbox{
          width:90px;
          height: 50px;
          padding:0;
          .el-checkbox__label{
            justify-content: center;
            align-items: center;
            display: flex;
            padding:15px 20px;
            text-align: center;
          }
        }
        .pam-selectAll-btn{
          margin-top:0px;
          margin-left:0px;
          height: 50px;
          width: 90px;
          padding: 10px;
        }
    .genderBtn {
      width: 80px;
      height: 47px;
      display: contents;
    }
    .qa-dialog {
      overflow-y: auto;
      height: 60vh;
      margin-top: 20px;
      text-align: justify;
    }
    .qaTextTitle {
      margin-top: 30px
    }
    .qa-dialog-footer {
      display: flex;
      justify-content: center;
      margin-bottom: 81px;
      color: #ED1B2E;
      cursor: pointer;
    }
    .el-drawer__container ::-webkit-scrollbar {
      display: none;
    }
    .el-button+.el-button {
      margin-left: 0;
    }
    .seniority-choice {
      display: flex;
      flex-wrap: wrap;
    }
    .area-choice {
      height: 50px;
      border-radius: 10px;
      border: 1px solid #D0D0CE;
      display: flex;
      justify-content: space-between;
      background-color: #FFFFFF;
    }
    .area-icon {
      color: #ED1B2E;
      font-size: 25px;
      display: flex;
      justify-content: flex-end;
      padding-right: 16px;
      padding-top: 11px;
    }
    input::-webkit-input-placeholder {
      font-size: 20px;
      padding-left: 10px;
    }
    .el-button.is-disabled {
      font-size: 20px;
      border-radius: 20px;
      color: #FFFFFF;
      background-color: #A7A8AA;
      border: 1px solid #A7A8AA;
    }
    .rec-footer {
      height: 70px;
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .other-PopBtn {
      width: 90px;
      height: 47px;
      margin-top: 10px;
    }
    .rec-ques-location {
      display: flex;
      align-items: center;
    }
    .pop-tag {
      display: flex;
      flex-wrap: wrap;
      margin: -10px;
    }
    .rec-popular {
      display: flex;
      align-items: baseline;
      padding-top: 10px;
      margin-bottom: 10px;
    }
    .rec-btn-type {
      padding-bottom: 10px;
    }
    .rec-question {
      display: flex;
      flex-direction: column;
    }
    .rec-banner {
      height: 120px;
      background-color: #D0D0CE;
    }
    .rec-btn {
      font-size: 20px;
      border-radius: 20px;
      color: black;
      border: 1px solid #D0D0CE;
    }
    .rec-pop-btn {
      font-size: 20px;
      border-radius: 20px;
      color: black;
      margin: 0px 0px 10px 10px;
      border: 1px solid #D0D0CE;
      width: 90px;
      height: 47px;
    }
    .el-progress__text {
      display: none;
    }
    .el-progress-bar {
      padding-right: 0;
    }
    .el-progress-bar__inner {
      background-color: #ED1B2E;
    }
    .required {
      position: relative;
      &::before {
        content: '*';
        position: absolute;
        color: #FF0000;
        transform: translate(-12px, 0);
        z-index: 5;
      }
    }
  }
    .rec-multi-select{
    .el-checkbox-group {
    .area-txt {
      display: flex;
      flex-direction: row;
      align-items: flex-start;
      flex-wrap: wrap;
      align-items: center;
      margin-left: 18px;
    }
    @include desktop {
      .desktopBtn {
        margin-right: 10px;
        height: 47px
      }
      .popOtherBtn {
        margin-left: 10px;
        margin-top: -10px;
      }
      .rec-pop-container {
        width: auto;
        .rec-pop-options {
          .el-checkbox-group {
            display: flex;
            flex-wrap: wrap;
            flex-direction: none;
            .el-checkbox {
              width: 90px;
              height: 50px;
              padding: 0;
              .el-checkbox__label {
                justify-content: center;
                align-items: center;
                display: flex;
                padding: 15px 20px;
                text-align: center;
              }
            }
            .pam-selectAll-btn {
              margin-top: 0px;
              margin-left: 0px;
              height: 50px;
              width: 90px;
              padding: 10px;
            }
          }
        }
      }
      .rec-multi-select {
        .el-checkbox-group {
          display: flex;
          flex-direction: row;
          align-items: flex-start;
          flex-wrap: wrap;
        }
      }
    }
  }
  }
}
</style>
PAMapp/pages/recommendConsultant/result.vue
@@ -4,9 +4,25 @@
    <ul class="pam-rec-agent__list">
        <li class="pam-rec-agent-card" v-for="(info,index) in pageList" :key="index">
            <div class="pam-rec-agent-card__content">
              <div
                class="pam-rec-agent-card-suitability"
                :class="{
                  'match--level1': info.suitability === 100,
                  'match--level2': 50 < info.suitability && info.suitability < 100,
                  'match--level3': info.suitability < 51
                }">
                </div>
                <div class="pam-rec-agent-card-suitability-text">
                  <div class="label">匹配度</div>
                  <div class="value">{{info.suitability}}%</div>
                </div>
                <div class="pam-rec-agent-card__content-header">
                    <div class="pam-rec-agent-card__avatar">
                        <UiAvatar :fileName="info.img" ></UiAvatar>
                        <UiAvatar
                          :agentNo="info.agentNo" >
                        </UiAvatar>
                    </div>
                    <div class="pam-rec-agent-card__main-info">
                        <div class="text--middle  pt-10 rec-desktop-name">{{ info.name }}</div>
@@ -35,7 +51,7 @@
                            {{ info.seniority }}
                            </div>
                        </el-col>
                        <el-col :span="12">
                        <el-col :span="12" v-if="!hideReviews">
                            <div class="field__label">
                            å®¢æˆ¶æ»¿æ„åº¦
                            </div>
@@ -60,7 +76,7 @@
    <UiPagination
        class="mb-30"
        :totalList="strictQueryList"
        :totalList="strictResultList"
        @changePage="changePage"
        :pageSize = 6
    ></UiPagination>
@@ -81,35 +97,50 @@
</div>
</template>
<script lang="ts">
import {Vue,Component, State, namespace, Action} from 'nuxt-property-decorator';
import { AgentOfStrictQuery } from '~/assets/ts/api/consultant';
import { AgentOfStrictQuery } from '~/shared/models/strict-query.model';
import { hideReviews } from '~/shared/const/hide-reviews';
import { Vue,Component, State, namespace, Action, Getter} from 'nuxt-property-decorator';
const localStorage = namespace('localStorage');
@Component
export default class Reslut extends Vue{
    @State('strictQueryList') strictQueryList!: AgentOfStrictQuery[];
    @Action storeStrictQueryList!: (data: any) => Promise<number>;
    @localStorage.State recommendConsultantItem!: string;
export default class Result extends Vue{
    @State('strictQueryList')
    strictQueryList!: AgentOfStrictQuery[];
    @Action
    storeStrictQueryList!: (data: any) => Promise<number>;
    @Getter('strictResultList')
    strictResultList!: AgentOfStrictQuery[];
    @localStorage.State
    recommendConsultantItem!: string;
    pageList: any[] = [];
    isVisiblePopUp = false;
    popUpTxt = '';
    mounted() {
    popUpTxt = '已加入顧問清單';
    hideReviews = hideReviews;
    //////////////////////////////////////////////////////////////////////
    mounted(): void {
        if (this.recommendConsultantItem && this.strictQueryList.length === 0) {
            const strictQueryDto = JSON.parse(this.recommendConsultantItem);
            this.storeStrictQueryList(strictQueryDto);
        }
    }
    //////////////////////////////////////////////////////////////////////
    changePage(pageList: any[]) {
        this.pageList = pageList;
    }
    showAgentDetail(agentNo: string): void {
        this.$router.push(`/agentInfo/${agentNo}`);
    }
    openPopUp(txt: string) {
        this.popUpTxt = txt;
        this.isVisiblePopUp = true;
    }
}
@@ -121,8 +152,48 @@
    border-radius: 10px;
    border: 1px solid $LIGHT_GREY;
    padding: 20px 33px;
    overflow: hidden;
    .pam-rec-agent-card__content {
      position: relative;
        .pam-rec-agent-card-suitability{
          left: -125px;
          top: -108px;
          width: 150px;
          height: 150px;
          transform: rotate(45deg);
          position:absolute;
          &.match--level3 {
            background-color: #C3A787;
          }
          &.match--level2 {
            background-color: #D0D0CE;
          }
          &.match--level1 {
            background-color: #F2C75C;
          }
        }
        .pam-rec-agent-card-suitability-text{
          position: absolute;
          left: -25px;
          top: -10px;
          z-index: 5;
          line-height: 1.3;
          .label {
            font-size: 10px;
            color: #68737A;
            @include desktop {
              display: none;
            }
          }
          .value {
            font-size: 12px;
            color: #222222;
            @include desktop {
              padding-left: 8px;
            }
          }
        }
        .pam-rec-agent-card__content-header {
            display: flex;
            .pam-rec-agent-card__avatar {
PAMapp/pages/record.vue
Àɮפw§R°£
PAMapp/pages/record/contactRecord.vue
Àɮפw§R°£
PAMapp/pages/record/index.vue
@@ -1,70 +1,21 @@
<template>
<div class="user-reviews-page">
    <section class="mdTxt">
        æŸ¥çœ‹ç´€éŒ„
    </section>
    <section class="user-reviews-header">
        <div class="header-title mdTxt">
            æ»¿æ„åº¦ç´€éŒ„
        </div>
    </section>
    <section class="user-reviews-content">
        <div
            class="user-reviews-card"
            v-for="(appointmentLog, index) in myAppointmentReviewLogList"
            :key="index">
            <div class="user-reviews-card-content" v-if="currentRole === 'user'">
                æ‚¨å°<span class="mdTxt">{{ ` ${appointmentLog.agentName} ` }}</span>做了 <UiReviewScore :score="appointmentLog.score" /> è©•價!
            </div>
            <div class="user-reviews-card-content" v-else>
                {{ `${appointmentLog.customerName} `}} å°æ‚¨åšäº† <UiReviewScore :score="appointmentLog.score" /> è©•價!
            </div>
            <div class="user-reviews-card-date">
                <div class="date">
                    <UiDateFormat
                        :date="appointmentLog.lastModifiedDate"
                        onlyShowSection="DAY" />
                </div>
                <div class="time">
                    <UiDateFormat
                        :date="appointmentLog.lastModifiedDate"
                        onlyShowSection="TIME" />
                </div>
            </div>
        </div>
    </section>
<div>
    <ReviewRecords
      :reviewLogList="reviewLogList"
    ></ReviewRecords>
</div>
</template>
<script lang="ts">
import { Vue, Component, Action, State, namespace } from 'nuxt-property-decorator';
import { AppointmentLog } from '~/assets/ts/models/appointment.model';
import { Vue, Component, Action, State } from 'nuxt-property-decorator';
const roleStorage = namespace('localStorage');
import { AppointmentLog } from '~/shared/models/appointment.model';
@Component
export default  class Reviews extends Vue{
    today = new Date();
    @State('reviewLogList')
    reviewLogList!: AppointmentLog[];
    @roleStorage.Getter currentRole!:string;
    @State('myAppointmentReviewLogList') myAppointmentReviewLogList!: AppointmentLog[];
    @Action storeMyAppointmentReviewLog!: any;
    appointmentLogList: AppointmentLog[] = [];
    mounted() {
        this.storeMyAppointmentReviewLog();
    }
}
</script>
<style lang="scss" scoped>
@@ -101,7 +52,7 @@
                width:52px;
                .date{
                    margin-bottom: 2px;
                }
            }
        }
@@ -112,4 +63,4 @@
        flex: 1;
    }
}
</style>
</style>
PAMapp/pages/record/reviews.vue
Àɮפw§R°£
PAMapp/pages/satisfactionList.vue
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,185 @@
<template>
  <div>
    <div class="pam-satisfaction-banner"></div>
    <div class="pam-container">
      <div class="satisfaction-title">
        <span class="mdTxt">滿意度調查</span>
        <span class="ml-10 text--prudential_grey smTxt_bold">共 {{mapUnReviewLogList.length}} ç­†</span>
      </div>
      <template v-if="mapUnReviewLogList.length">
        <div class="satisfaction-card" v-for="(item, index) in mapUnReviewLogList" :key="index">
          <div class="satisfaction-card-content"  v-if="item.agentName">
            <UiAvatar :size="80" :agentNo="item.agentNo"></UiAvatar>
            <div class="satisfaction-card-text">對於顧問
                <span class="text--primary text--bold">{{item.agentName}}</span>
                çš„æ•´é«”服務,您給予幾顆星評價?
            </div>
          </div>
           <div class="satisfaction-card-content"  v-else>
            <div class="pam-satisfaction-avatar">
              <span class="pam-satisfaction-avatar-txt">平台</span>
              </div>
            <div class="satisfaction-card-text" >對於
                <span class="text--primary text--bold">服務媒合</span>
                å¹³å°çš„æ•´é«”服務,您給予幾顆星評價?
            </div>
          </div>
          <el-rate
            v-model="item.satisfaction"
            class="pam-satisfaction-rate mt-10 fix-chrome-click--issue"
            @change="isBtnDisabled = false"
          ></el-rate>
        </div>
        <div class="text--center mt-30" v-if="mapUnReviewLogList.length">
          <el-button type="primary" :disabled="isBtnDisabled" @click="sent">送出</el-button>
        </div>
      </template>
      <template v-else>
         <div class="satisfaction-card">
          <div class="satisfaction-card-content">
            ç›®å‰æš«ç„¡éœ€è¦æ‚¨å¡«å¯«çš„æ»¿æ„åº¦èª¿æŸ¥
          </div>
         </div>
      </template>
    </div>
    <PopUpFrame :isOpen.sync="showConfirmPopup"
        @closePopUp="closePopup">
        <div class="text--center mdTxt">發送成功</div>
        <div class="text--center mt-30">
            <el-button @click="closePopup" type="primary">確定</el-button>
        </div>
      </PopUpFrame>
  </div>
</template>
<script lang="ts">
import { Vue, Component, Action, State, Watch } from 'nuxt-property-decorator';
import reviewsService from '~/shared/services/reviews.service';
import { AppointmentLog } from '~/shared/models/appointment.model';
import { UserReviewParams } from '~/shared/models/reviews.model';
@Component({
  layout: 'home'
})
export default class MySatisfactionList extends Vue {
  @State
  unReviewLogList!: AppointmentLog[];
  @Action
  storeMyAppointmentReviewLog!: () => void;
  mapUnReviewLogList: AppointmentReviewLog[] = [];
  showConfirmPopup = false;
  isBtnDisabled = true;
  ///////////////////////////////////////////////////////
  @Watch('unReviewLogList')
  onUnReviewLogListChange() {
      this.mapUnReviewLogList = this.unReviewLogList.map(item => {
        return {
          ...item,
          satisfaction: 0
        }
      })
  }
  ///////////////////////////////////////////////////////
  sent() {
    const reviewParams: UserReviewParams[] = this.mapUnReviewLogList
                .filter(item => item.satisfaction > 0)
                .map(item => {
                  return {
                    appointmentId: item.appointmentId,
                    score: item.satisfaction,
                    type: item.type
                  }
                })
        reviewsService.allUserReviewsConsultants(reviewParams).then((res) => {
            this.showConfirmPopup = true;
        });
  }
  closePopup() {
    this.showConfirmPopup = false;
    this.storeMyAppointmentReviewLog();
  }
}
interface AppointmentReviewLog extends AppointmentLog {
  satisfaction: number;
}
</script>
<style lang="scss" scoped>
.pam-satisfaction-banner {
    width              : 100%;
    height             : 120px;
    background-size    : cover;
    background-repeat  : no-repeat;
    background-position: center;
    position           : relative;
    background-image   : url('~/assets/images/satisfaction/banner_mob.svg');
}
@media (min-width: 768px) {
    .pam-satisfaction-banner {
        height          : 150px;
        background-image: url('~/assets/images/satisfaction/banner_web.svg');
    }
}
.pam-container {
    margin: 30px 20px;
}
@include desktop {
    .pam-container {
        width : 700px;
        margin: 30px auto;
    }
}
.satisfaction-card {
  margin-top       : 20px;
  .satisfaction-card-content {
    display        : flex;
    flex-direction : row;
    justify-content: space-between;
    .satisfaction-card-text {
      width        : 75%;
      line-height  : 28px;
      align-self: center;
      font-size: 20px;
      padding-left: 10px;
    }
    .pam-satisfaction-avatar{
      height: 80px;
      width: 80px;
      border-radius: 50%;
      background-color:#F09491;
      justify-content: center;
      align-items: center;
      display: flex;
      .pam-satisfaction-avatar-txt{
        font-size: 18px;
        color: #fff;
      }
    }
    @include desktop {
        justify-content: flex-start;
        .satisfaction-card-text {
          width        : auto;
          padding-left: 30px;
        }
      }
  }
}
</style>
PAMapp/pages/userReviews/index.vue
@@ -1,109 +1,104 @@
<template>
<div class="reviews-page">
    <!-- é¡§å®¢ç™¼é€æ»¿æ„åº¦çµ¦é¡§å• -->
    <div class="reviews-banner"></div>
<template>
    <div class="reviews-page">
        <!-- é¡§å®¢ç™¼é€æ»¿æ„åº¦çµ¦é¡§å• -->
        <div class="reviews-banner"></div>
    <section class="reviews-container">
        <section class="reviews-header">
            <div class="reviews-header-container">
                <div class="reviews-header-title">滿意度調查</div>
                <!-- <div class="reviews-header-subTitle">共{{ reviewsList.length }}筆</div> -->
            </div>
        </section>
        <section class="reviews-container">
            <section class="reviews-header">
                <div class="reviews-header-container">
                    <div class="reviews-header-title">滿意度調查</div>
                    <!-- <div class="reviews-header-subTitle">共{{ reviewsList.length }}筆</div> -->
                </div>
            </section>
        <section class="reviews-content">
            <div class="reviews-content-card" v-for="(item,index) in reviewsList" :key="(index)">
                <div class="card-body">
                    <div class="card-avatar">
                        <img :src="item.avatar" class="img">
                    </div>
                    <div class="card-txt">
                        å°æ–¼é¡§å•
                        <span class="p">{{item.name}}</span>的整體服務,您給予幾顆星的評價?
                        <div
                            class="card-score"
                            v-if="!isMobileDevice">
                            <el-rate class="user-reviews-rate" v-model="item.avgScore"></el-rate>
            <section class="reviews-content">
                <div class="reviews-content-card" v-for="(item,index) in reviewsList" :key="(index)">
                    <div class="card-body">
                        <div class="card-avatar">
                            <img :src="item.avatar" class="img">
                        </div>
                        <div class="card-txt">
                            å°æ–¼é¡§å•
                            <span class="p">{{item.name}}</span>的整體服務,您給予幾顆星的評價?
                            <div
                                class="card-score"
                                v-if="!isMobileDevice">
                                <el-rate class="user-reviews-rate" v-model="item.avgScore"></el-rate>
                            </div>
                        </div>
                    </div>
                    <div
                        class="card-score"
                        v-if="isMobileDevice">
                        <el-rate
                            class="user-reviews-rate"
                            v-model="item.avgScore"></el-rate>
                    </div>
                </div>
                <div
                    class="card-score"
                    v-if="isMobileDevice">
                    <el-rate
                        class="user-reviews-rate"
                        v-model="item.avgScore"></el-rate>
                </div>
            </div>
            </section>
        </section>
    </section>
    <section class="reviews-footer">
        <el-button type="primary" class="reviews-footer-btn" @click.native="sendReviews">送出</el-button>
    </section>
    <PopUpFrame :isOpen.sync="showReviews">
        <div class="reviews-dialog">
            <span class="reviews-dialog-title">評價完成!</span>
        </div>
        <div class="reviews-btn-block">
            <el-button type="primary" class="reviews-dialog-btn" @click.native="reviewsDialogCheck">我知道了</el-button>
        </div>
    </PopUpFrame>
</div>
        <section class="reviews-footer">
            <el-button type="primary" class="reviews-footer-btn" @click.native="sendReviews">送出</el-button>
        </section>
        <PopUpFrame :isOpen.sync="showReviews">
            <div class="reviews-dialog">
                <span class="reviews-dialog-title">評價完成!</span>
            </div>
            <div class="reviews-btn-block">
                <el-button type="primary" class="reviews-dialog-btn" @click.native="reviewsDialogCheck">我知道了</el-button>
            </div>
        </PopUpFrame>
    </div>
</template>
<script lang="ts">
import { Vue,Component } from 'vue-property-decorator'
import { isMobileDevice } from '~/assets/ts/device';
<script lang="ts">
import { ReviewsList } from '~/shared/models/reviewsList.model';
import { Vue,Component } from 'vue-property-decorator'
import UtilsService from '~/shared/services/utils.service';
@Component({
    layout: 'home'
})
export default class UserReviews extends Vue{
  isMobileDevice = true;
  showReviews = false;
  reviewsList:ReviewsList[] = [
      {
          avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
          name:'蔡美眉',
          avgScore: 0
      },
      {
          avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
          name:'賈斯町',
          avgScore: 0
      },
      {
          avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
          name:'服務媒合',
          avgScore: 0
      }
  ];
    isMobileDevice = true;
  //////////////////////////////////////////////////////////////////////
  mounted() {
      this.isMobileDevice = UtilsService.isMobileDevice();
  };
    showReviews = false;
  //////////////////////////////////////////////////////////////////////
  reviewsDialogCheck(): void {
      this.reviewsList = this.reviewsList.filter((reviewItem) => !reviewItem.avgScore);
      this.showReviews = false;
  };
    reviewsList:ReviewsList[] = [
        {
            avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
            name:'蔡美眉',
            avgScore: 0
        },
        {
            avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
            name:'賈斯町',
            avgScore: 0
        },
        {
            avatar:'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
            name:'服務媒合',
            avgScore: 0
        }
    ];
    reviewsDialogCheck(): void {
        this.reviewsList = this.reviewsList.filter((reviewItem) => !reviewItem.avgScore);
        this.showReviews = false;
    };
    mounted() {
        this.isMobileDevice = isMobileDevice();
    };
    sendReviews() {
        this.showReviews = true;
    };
  sendReviews() {
      this.showReviews = true;
  };
}
export interface ReviewsList{
    avatar:any;
    name:string;
    avgScore:number;
}
</script>
<style lang="scss" scoped>
.reviews-page{
    background-color: #F8F9FA;
@@ -209,4 +204,4 @@
}
</style>
</style>
PAMapp/pages/userReviewsRecord/index.vue
@@ -1,68 +1,20 @@
<template>
<div class="user-reviews-page">
    <section class="mdTxt">
        æŸ¥çœ‹ç´€éŒ„
    </section>
    <section class="user-reviews-header">
        <div class="header-title mdTxt">
            æ»¿æ„åº¦ç´€éŒ„
        </div>
    </section>
    <section class="user-reviews-content">
        <div
            class="user-reviews-card"
            v-for="(appointmentLog, index) in myAppointmentReviewLogList"
            :key="index">
            <div class="user-reviews-card-content" v-if="currentRole === 'user'">
                æ‚¨å°<span class="mdTxt">{{ ` ${appointmentLog.agentName} ` }}</span>做了 <UiReviewScore :score="appointmentLog.score" /> è©•價!
            </div>
            <div class="user-reviews-card-content" v-else>
                {{ `${appointmentLog.clientName} `}} å°æ‚¨åšäº† <UiReviewScore :score="appointmentLog.score" /> è©•價!
            </div>
            <div class="user-reviews-card-date">
                <div class="date">
                    <UiDateFormat
                        :date="appointmentLog.lastModifiedDate"
                        onlyShowSection="DAY" />
                </div>
                <div class="time">
                    <UiDateFormat
                        :date="appointmentLog.lastModifiedDate"
                        onlyShowSection="TIME" />
                </div>
            </div>
        </div>
    </section>
</div>
  <div>
    <ReviewRecords
      :reviewLogList="reviewLogList"
    ></ReviewRecords>
  </div>
</template>
<script lang="ts">
import { Vue, Component, Action, State, namespace } from 'nuxt-property-decorator';
import { AppointmentLog } from '~/assets/ts/models/appointment.model';
const roleStorage = namespace('localStorage');
import { AppointmentLog } from '~/shared/models/appointment.model';
import { Vue, Component, Action, State } from 'nuxt-property-decorator';
@Component
export default  class UserReviewsRecord extends Vue{
    today = new Date();
    @State('reviewLogList')
    reviewLogList!: AppointmentLog[];
    @roleStorage.Getter currentRole!:string;
    @State('myAppointmentReviewLogList') myAppointmentReviewLogList!: AppointmentLog[];
    @Action storeMyAppointmentReviewLog!: any;
    appointmentLogList: AppointmentLog[] = [];
    mounted() {
        this.storeMyAppointmentReviewLog();
    }
}
</script>
<style lang="scss" scoped>
@@ -99,7 +51,7 @@
                width:52px;
                .date{
                    margin-bottom: 2px;
                }
            }
        }
@@ -110,4 +62,4 @@
        flex: 1;
    }
}
</style>
</style>
PAMapp/plugins/filters/appointment-fail-reason.filter.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,16 @@
import Vue from 'vue'
import { appointmentFailReasonList } from '~/shared/const/appointment-fail-reason-list';
Vue.filter('toFailReasonLabel', (value: string): string => {
  if (!value ||  typeof value !== 'string') {
    return '--';
  };
  let failReasonLabel = {};
  appointmentFailReasonList.forEach((failReason) => {
    failReasonLabel[failReason.value] = failReason.key;
  });
  return  failReasonLabel[value];
})
PAMapp/plugins/filters/date.filter.ts
@@ -29,9 +29,9 @@
  if (isThisYear(date)) {
    return isToday(date)
          ? `今天 ${date.getHours()}:${minutes}`
          : `${date.getMonth() + 1}月${date.getDate()}日 ${date.getHours()}:${minutes}`;
          : `${date.getMonth() + 1}/${date.getDate()} ${date.getHours()}:${minutes}`;
  } else {
    return `${date.getFullYear()}å¹´${date.getMonth() + 1}月${date.getDate()}日 ${date.getHours()}:${minutes}`;
    return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()} ${date.getHours()}:${minutes}`;
  };
})
PAMapp/plugins/filters/serve-area.filter.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,16 @@
import { taiwanCities } from '~/shared/const/taiwan-cities';
import Vue from 'vue'
Vue.filter('toServeArea', (value: string): string => {
  if (!value || typeof value !== 'string') {
    return '--';
  }
  const serveAreaLength = value.split('、').length;
  return serveAreaLength === taiwanCities.length
        ? '全台'
        : value;
})
PAMapp/shared/const/agent-communication-style-list.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
export const agentCommunicationStyleList = ['謹慎務實', '明快主動', '耐心傾聽', '健談風趣'];
PAMapp/shared/const/agent-expert-list.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
export const agentExpertList = ['健康與保障', '子女教育', '資產規劃', '樂活退休', '保單健檢/規劃', '分紅保單'];
PAMapp/shared/const/appointment-fail-reason-list.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,26 @@
export const appointmentFailReasonList = [
  {
    key: '無法聯繫客戶',
    value: 'cannot_to_contact_customer'
  },
  {
    key: '單純諮詢',
    value: 'only_consultation'
  },
  {
    key: '無合適商品',
    value: 'no_suitable_commodity'
  },
  {
    key: '核保問題- é«”況、財務、職業',
    value: 'prohibited_factors'
  },
  {
    key: '經濟因素',
    value: 'economy'
  },
  {
    key: '其他',
    value: 'other'
  },
];
PAMapp/shared/const/consult-questions.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
export const consultantQuestions = ['健康與保障', '子女教育', '資產規劃', '樂活退休', '保單健檢/規劃', '分紅保單'];
PAMapp/shared/const/day-time-frames.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,18 @@
export const dayTimeFrames = [
  {
    title:'9:00~12:00',
    label:'9:00~12:00',
  },
  {
    title:'12:00~14:00',
     label:'12:00~14:00',
  },
  {
    title:'14:00~18:00',
     label:'14:00~18:00',
  },
  {
    title:'18:00~21:00',
    label:'18:00~21:00',
  }
];
PAMapp/shared/const/faqList.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,43 @@
export const faqList = [
    {
        label: '我如何登入註冊?',
        details: [
            { label: '您可點擊右上角頭像圖示後,點擊「登入|註冊」進行登入或註冊。' }
        ]
    },
    {
        label: '我登入註冊時,為何無法收到驗證碼?',
        details: [
            { label: '【手機登入註冊】' },
            { label: ' (1) è«‹æ‚¨å‘電信業者確認是否有開啟停收企業簡訊&廣告簡訊,確認電信業者端設定可接收後,請於一小時後重開機。' },
            { label: ' (2) è«‹æ‚¨ç¢ºèªæ‰‹æ©Ÿå¯å­˜å…¥ç°¡è¨Šå®¹é‡ç©ºé–“是否已滿,若已滿,請刪除部分簡訊後,手機重新開機。' },
            { label: ' (3) è«‹æ‚¨ç¢ºèªæ˜¯å¦è™•於收訊不穩或收訊不良的場所,若是,請您至收訊良好的場所,手機重開機。'},
            { label: ' (4) æ™ºæ…§åž‹æ‰‹æ©Ÿæœ‰å¤šç¨®éŽæ¿¾ä¾†é›»è»Ÿé«”,比如:whoscall、防毒軟體等,可設定黑名單來電、簡訊,也許曾經被設定到。'},
            { label: '【email登入註冊】'},
            { label: ' (1) å¯èƒ½æ˜¯æ‚¨å¡«å¯«çš„Email帳號無效或輸入時錯誤,請您檢核正確的Email再次登入或註冊。'},
            { label: ' (2) å¯èƒ½æ˜¯æ‚¨çš„Email服務商判斷驗證信為垃圾信,建議您至垃圾郵件匣中讀取,並將它設定為非垃圾郵件。'},
            { label: ' (3) å¯èƒ½æ˜¯æ‚¨çš„Email服務商之安全機制阻擋驗證信,建議您可聯絡您的Email服務商或是使用其他的Email帳號重新註冊。'}
        ]
    },
    {
        label: '我如何進行顧問媒合?',
        details: [
            { label: '(1) æ‚¨å¯æ–¼é¦–頁點擊「快速篩選」、「嚴選配對」按鈕進行顧問媒合。'},
            { label: '(2) å¿«é€Ÿç¯©é¸ï¼šå¯ä»¥é¸æ“‡ä»»ä¸€å€‹æ¢ä»¶ï¼Œå¿«é€Ÿæ‰¾åˆ°ç¬¦åˆæ‚¨éœ€æ±‚的顧問;嚴選配對:輸入問題回答,依照您的需求推薦嚴選顧問。'}
        ]
    },
    {
        label: '我如何預約顧問?',
        details: [
            { label: '依「快速篩選」、「嚴選配對」的媒合結果或查看「推薦顧問清單」後,進入顧問卡片資訊點擊「進行預約」。填寫聯絡時間、想詢問的問題以及個人資料,方可送出預約單。'}
        ]
    },
    {
        label: '我如何取消預約單或編輯預約單?',
        details: [{ label: '您可於顧問清單中點擊「已預約」的顧問,進入預約成功頁面,進行預約單的取消或編輯。'}]
    },
    {
        label: '我進行預約後,顧問會用什麼方式聯繫我?',
        details: [{ label: '顧問會依據保戶登入或註冊時提供的連絡資訊(手機或EMAIL)為主要聯繫您的方式。'}]
    }
]
PAMapp/shared/const/hide-reviews.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
export const hideReviews = false;
PAMapp/shared/const/quickFilter-questionList.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,48 @@
import { Seniority } from "../models/enum/seniority";
import { QuestionOption } from "../models/quick-filter.model";
export const questionList: QuestionOption[] = [
    {
        name: 'gender',
        title: '顧問性別',
        detail: [
            { name: '男性', value: 'male', className: 'btn_man'},
            { name: '女性', value: 'female', className: 'btn_woman'}
        ],
        type: 'radio'
    },
    {
        name: 'avgScore',
        title: '顧問滿意度',
        detail: [],
        type: ''
    },
    {
        name: 'communicationStyles',
        title: '溝通風格',
        detail: [
            { value: '謹慎務實', className: 'btn_owl'},
            { value: '明快主動', className: 'btn_tiger'},
            { value: '耐心傾聽', className: 'btn_koala'},
            { value: '健談風趣', className: 'btn_peacock'}
        ],
        type: 'checkbox'
    },
    {
        name: 'seniority',
        title: '顧問年資',
        detail: [
            { name: '不限', value: Seniority.UNLIMITED, subTitle: '年齡不是問題', className: 'btn_unlimited' },
            { name: '年輕', value: Seniority.YOUNG, subTitle: '給年輕人一個機會', className: 'btn_young' },
            { name: '資深', value: Seniority.SENIOR, subTitle: '薑是老的辣', className: 'btn_senior' }
        ],
        type: 'radio'
    }
    // {
    //     name: 'status',
    //     title: '上線狀態',
    //     detail: [],
    //     type: 'radio'
    // }
];
PAMapp/shared/const/taiwan-cities.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
export const taiwanCities = ['基隆市', '台北市', '新北市', '桃園市', '新竹市', '新竹縣', '苗栗縣', '台中市', '彰化縣', '南投縣', '雲林縣', '嘉義市', '嘉義縣', '台南市', '高雄市', '屏東縣', '台東縣', '花蓮縣', '宜蘭縣', '澎湖縣', '金門縣', '連江縣'];
PAMapp/shared/const/week-days.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,29 @@
export const weekDays = [
  {
    title:'星期一',
    label:'星期一'
  },
   {
    title:'星期二',
    label:'星期二'
  },
   {
    title:'星期三',
    label:'星期三'
  },
   {
    title:'星期四',
    label:'星期四'
  },
   {
    title:'星期五',
    label:'星期五'
  }, {
    title:'星期六',
    label:'星期六'
  },
   {
    title:'星期日',
    label:'星期日'
  },
];
PAMapp/shared/models/ConsultantLoginInfo.ts
PAMapp/shared/models/account.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,24 @@
export interface UserSetting {
    name  : string;
    phone?: string;
    email?: string;
}
export interface AgentInfoSetting{
    agentNo           : string;
    name              : string;
    expertise         : string[];
    title             : string;
    role              : string;
    serveArea         : string[];
    gender            : string;
    phoneNumber       : string;
    companyAddress    : string;
    seniorityYear     : number;
    seniorityMonth    : number;
    concept           : string;
    experiences        : string;
    awards           : string;
    communicationStyle: string;
    photoBase64       : string;
}
PAMapp/shared/models/agent-info.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,22 @@
export interface AgentInfo {
  agentNo           : string;
  avgScore          : number;
  awards            : string;
  communicationStyle: string;
  companyAddress    : string;
  concept           : string;
  email?            : string;
  evaluation        : number;
  experiences       : string;
  expertise         : string[];
  gender            : string,
  img               : string;
  latestLoginTime   : Date  ;
  name              : string;
  phoneNumber       : string;
  role              : string;
  seniority         : string;
  serveArea         : string;
  suitability       : number;
  title             : string;
}
PAMapp/shared/models/appointment.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,187 @@
import { ContactStatus } from "./enum/contact-status";
import { SatisfactionType } from "./enum/satisfaction-type";
export interface AppointmentLog {
  id              : number;
  createdDate     : string;
  lastModifiedDate: string;
  customerId      : number;
  agentNo         : string;
  status          : 'UNFILLED' | 'FILLED';
  score           : number;
  appointmentId   : number;
  customerName    : string;
  agentName       : string;
  type            : SatisfactionType;
}
export interface Appointment {
  age                  : string;
  agentNo              : string;
  appointmentClosedInfo: AppointmentClosedInfo;
  appointmentDate      : string;
  appointmentMemoList  : AppointmentMemoInfo[]
  appointmentNoticeLogs: NoticeLogs[];
  communicateStatus    : ContactStatus;
  consultantReadTime   : string;
  consultantViewTime   : string;
  contactTime          : string;
  contactType          : string;
  customerId           : number;
  email                : string;
  gender               : string;
  hopeContactTime      : string;
  id                   : number;
  interviewRecordDTOs  : InterviewRecord[];
  job                  : string;
  lastModifiedDate     : string;
  name                 : string;
  otherRequirement     : string;
  phone                : string;
  requirement          : string;
  satisfactionScore    : number;
};
export interface AppointmentClosedInfo {
  appointmentId         : number;
  closedOtherReason     : string;
  closedReason          : string;
  id                    : number;
  planCode              : string;
  policyEntryDate       : string;
  policyholderIdentityId: string;
  remark                : string;
}
export interface AppointmentMemoInfo {
  appointmentId: number;
  content      : string;
  id           : number;
}
export interface InterviewRecord {
  appointmentId   : number;
  content         : string;
  createdBy       : string;
  createdDate     : string;
  id              : number;
  interviewDate   : string;
  lastModifiedBy  : string;
  lastModifiedDate: string;
}
export interface NoticeLogs {
  appointmentId: number,
  content      : string,
  createdDate  : string
  email        : string,
  id           : number,
  phone        : string,
}
export interface AppointmentWithConsultantInfo extends Appointment {
  consultantAvatar    : string;
  consultantExpertList: string[];
  consultantName      : string;
  contactStatus       : string;
  updateTime          : string;
}
export interface AppointmentParams {
  age            : string;
  agentNo        : string;
  contactType    : string;
  email          : string;
  gender         : string;
  hopeContactTime: string;
  job            : string;
  phone          : string;
  requirement    : string;
}
export interface EditAppointmentParams {
  age             : string;
  contactType     : string;
  email           : string;
  gender          : string;
  hopeContactTime : string;
  id              : number;
  job             : string;
  otherRequirement: null;
  phone           : string;
  requirement     : string;
}
export interface AppointmentRequests {
  age            : string;
  agentNo        : string;
  contactType    : string;
  email          : string;
  name           : string;
  gender         : string;
  hopeContactTime: ContactTime[];
  job            : string;
  phone          : string;
  requirement    : string[];
}
export interface ContactTime {
  selectTimesOptions: string[];
  selectWeekOptions : string[];
}
export interface createdMemoInfo {
  appointmentId: number;
  content      : string;
}
export interface updatedMemoInfo {
  content: string;
  id     : number;
}
export interface ToDoneAppointment {
    appointmentId         : number;
    contactStatus         : ContactStatus;
    planCode              : string;
    policyEntryDate       : string;
    policyholderIdentityId: string;
    remark?               : string;
}
export interface ToCloseAppointment {
  appointmentId    : number;
  closedOtherReason: string;
  closedReason     : string;
  contactStatus    : ContactStatus;
  remark?          : string;
}
export interface NoticeLogs {
  appointmentId: number;
  content      : string;
  createdDate  : string;
  email        : string;
  id           : number;
  interviewDate: string;
  phone        : string;
}
export interface ToInformAppointment {
  appointmentId: number;
  email        : string;
  interviewDate: string;
  message      : string;
  phone        : string;
}
export interface InterviewRecordInfo {
  content: string;
  interviewDate: string;
  appointmentId: number;
}
export interface UpdateInterviewRecordInfo {
  /** interviewRecord id */
  id: number;
}
PAMapp/shared/models/consultant.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,25 @@
import { Appointment } from "./appointment.model";
export interface Consultant {
    agentNo          : string;
    appointments?    : Appointment[];
    avgScore         : number;
    contactStatus?   : string;
    createTime       : string;
    customerViewTime?: string;
    expertise        : string[];
    img              : string;
    name             : string;
    role             : string;
    seniority        : string;
    updateTime       : string;
}
export interface ConsultantWithAppointmentId extends Consultant {
  appointmentDate            : string;
  appointmentId              : number;
  appointmentLastModifiedDate: string;
  appointmentScore?          : number;
  appointmentStatus          : string;
}
PAMapp/shared/models/editAppointmentParams.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,12 @@
export interface editAppointmentParams {
  id: number,
  phone: string,
  email: string,
  contactType: string,
  gender: string,
  age: string,
  job: string,
  requirement: string,
  hopeContactTime: string,
  otherRequirement: null
}
PAMapp/shared/models/enum/ContactType.ts
PAMapp/shared/models/enum/Gender.ts
PAMapp/shared/models/enum/Role.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,5 @@
export enum Role{
    ADMIN     = 'admin',
    USER      = 'user',
    NOT_LOGIN = ''
}
PAMapp/shared/models/enum/contact-status.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,8 @@
export enum ContactStatus {
  PICKED    = 'picked',
  RESERVED  = 'reserved',
  CONTACTED = 'contacted',
  DONE      = 'done',
  CLOSE     = 'closed',
  CANCEL    = 'cancel',
}
PAMapp/shared/models/enum/otpErrorCode.ts
PAMapp/shared/models/enum/satisfaction-type.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,5 @@
export enum SatisfactionType {
  SYSTEM = 'SYSTEM',
  APPOINTMENT = 'APPOINTMENT',
}
PAMapp/shared/models/enum/seniority.ts
PAMapp/shared/models/loginRequest.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,7 @@
export interface LoginRequest {
  /** "SMS"=手機,"EMAIL"=email */
  loginType: string;
  /** è‹¥loginTypeå¡«SMS則該欄帶入手機、EMAIL則帶入郵件信箱 */
  account: string;
}
PAMapp/shared/models/loginSuccessToken.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,4 @@
export interface LoginSuccessToken {
  id_token: string;
}
PAMapp/shared/models/loginVerify.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,9 @@
export interface LoginVerify {
  /** å¯å¸¶å…¥æ‰‹æ©Ÿæˆ–email */
  account: string;
  /** ç”±otp的api回的index key */
  indexKey: string;
  /** ç”±æ‰‹æ©Ÿæˆ–信箱收到的認證碼 */
  otpCode: string;
}
PAMapp/shared/models/optionBtnDto.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,9 @@
export interface OptionBtnDto {
  title    : string,
  subTitle?: string,
  label    : string | number,
}
export interface OptionDto{
  selectAll: string,
  options  : OptionBtnDto[],
}
PAMapp/shared/models/otpInfo.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,9 @@
export interface OtpInfo {
  /** ç”¨æ–¼å¸¶å…¥otp認證時 */
  indexKey: string;
  /** Otp是否有成功發送 */
  success: boolean;
  failCode: string;
  failReason: string;
}
PAMapp/shared/models/quick-filter.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,27 @@
export interface QuestionOption {
    title : string;
    detail: Detail[];
    type  : string;
    name  : string;
}
interface Detail {
    value    : string;
    name?    : string;
    className: string;
    subTitle?: string
}
export interface FastQueryParams {
    gender             : string,
    communicationStyles: string[],
    avgScore           : number,
    status             : string,
    /** "資深"帶"SENIOR"、"年輕"帶"YOUNG"、"不限"帶"UNLIMITED" */
    seniority          : string
}
export interface Selected {
    option: string;
    value : any;
}
PAMapp/shared/models/registerInfo.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,10 @@
export interface RegisterInfo {
  phone?: string;
  email?: string;
  indexKey: string;
  otpCode: string;
  name: string;
  /** "SMS":Otp發送手機,"EMAIL":Otp發email */
  contactType: string;
}
PAMapp/shared/models/reviews.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,32 @@
import { SatisfactionType } from './enum/satisfaction-type';
export interface UserReviewParams{
  appointmentId: number,
  score        : number,
  type         : SatisfactionType,
}
export interface NotificationList {
  id: number;
  /** æ¨™é¡Œ */
  title: string;
  /** é€šçŸ¥å…§å®¹ */
  content: string;
  /** ACTIVITY(個人活動通知)、SYSTEM(系統通知) */
  notificationType: string;
  /** CUSTOMER(客戶)、CONSULTANT(顧問) */
  ownerRole: string;
  /** ç™»å…¥è€…id */
  ownerId: number
  createdDate: string;
  /** å·²è®€æ™‚é–“ */
  readDate: string;
}
export interface UserReviewPlatformRes {
  agentNo?     : string;
  appointmentId: number;
  customerId   : string;
  id           : number,
  score        : string;
  type         : SatisfactionType;
}
PAMapp/shared/models/reviewsList.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,5 @@
export interface ReviewsList{
  avatar:any;
  name:string;
  avgScore:number;
}
PAMapp/shared/models/strict-query.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,27 @@
export interface StrictQueryParams {
  gender?          : string;
  avgScore?        : number;
  status?          : string;    //phase 1 disable
  area?            : string;
  requirements?    : string[];
  otherRequirement?: string;
  seniority?       : string;
  popularTags?     : string[];
  otherPopularTags?: string;
}
export interface AgentOfStrictQuery {
  agentNo      : string;
  name         : string;
  img          : string;
  expertise    : string[];
  suitability  : number;
  avgScore     : number;
  contactStatus: null;
  updateTime   : null;
  seniority    : string;
  role         : string;
  new          : boolean;
  latestAppointmentId :null
}
PAMapp/shared/models/strictQueryDto.model.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,11 @@
export interface StrictQueryDto {
  gender: string,
  area: string,
  status: string,
  requirements: string[],
  otherRequirement: string,
  seniority: string,
  avgScore: number,
  popularTags: string[],
  otherPopularTags: string
}
PAMapp/shared/services/account-setting.service.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,22 @@
import { http } from "./httpClient";
import { AgentInfoSetting, UserSetting } from "~/shared/models/account.model";
class AccountSettingService{
  //取得使用者帳號資訊
  async getUserAccountSetting() : Promise<UserSetting> {
    return http.get<UserSetting>('/customer/info').then(res => res.data);
  }
  //更新使用者帳號資訊
  async updateAccountSetting(params: any) : Promise<any> {
    return http.put('/customer/info', params ).then(res => res.data);
  }
  //編輯顧問帳號資訊
  async editAgentInfoSetting(params:any):  Promise<AgentInfoSetting>{
    return http.post('/consultant/edit',params).then(res => res.data);
  }
}
export default new AccountSettingService();
PAMapp/shared/services/appointment.service.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,95 @@
import { http } from "./httpClient";
import { Appointment, AppointmentMemoInfo, createdMemoInfo, EditAppointmentParams,  InterviewRecordInfo, ToCloseAppointment, ToDoneAppointment, ToInformAppointment, updatedMemoInfo, UpdateInterviewRecordInfo } from "~/shared/models/appointment.model";
class AppointmentService {
  // é¡§å•å–得所有自己的預約單API
  async getMyAppointmentList(): Promise<Appointment[]> {
    return http.get('/consultant/getMyAppointment').then((res) => {
      const hasNewAppointment = res.data.find((appointment: Appointment) => !appointment.consultantViewTime);
      if (hasNewAppointment) {
        this.viewAllAppointment();
      }
      return res.data;
    });
  }
  // é¡§å•ç€è¦½è‡ªå·±æ‰€æœ‰çš„預約單紀錄觸發API
  private viewAllAppointment(): void {
    http.post('/consultant/record/allAppointmentsView').then();
  }
  // è®€å–預約單時觸發,紀錄讀取預約單時間
  recordRead(appointmentId: number): Promise<void> {
    return http.post(`/appointment/recordRead/${appointmentId}`);
  }
  // å–得預約單細節
  async getAppointmentDetail(appointmentId: number):Promise<Appointment> {
    return http.get(`/appointment/getDetail/${appointmentId}`).then((res) => res.data);
  }
  // å–消預約
  cancelAppointment(appointmentId: number): Promise<void> {
    return http.delete(`/appointment/${appointmentId}`);
  }
  // ç·¨è¼¯é ç´„
  editAppointment(editAppointmentParams: EditAppointmentParams) {
    return http.put('/appointment', editAppointmentParams);
  }
  // æ–°å¢žè¨»è¨˜
  async createMemo(memoInfo: createdMemoInfo): Promise<AppointmentMemoInfo> {
    return http.post('/appointment/memo/create', memoInfo).then(res => res.data);
  }
  // ç·¨è¼¯è¨»è¨˜
  async updateMemo(memoInfo: updatedMemoInfo): Promise<AppointmentMemoInfo> {
    return http.post('/appointment/memo/update', memoInfo).then(res => res.data);
  }
  // åˆªé™¤è¨»è¨˜
  deleteMemo(appointmentMemoId: number) {
    return http.delete(`/appointment/memo/${appointmentMemoId}`)
  }
  // é ç´„單結案, æ›´æ–°çµæ¡ˆæ˜Žç´°
  async closeAppointment(appointmentInfo: ToDoneAppointment | ToCloseAppointment) {
    return http.post(`/appointment/close`, appointmentInfo).then((res) => res.data);
  }
  // ç´„訪通知 API
  async informAppointment(appointmentInformation: ToInformAppointment) {
    return http.post(`/notice/send`, appointmentInformation).then((res) => res.data);
  }
  // æ–°å¢žç´„訪記錄
  async createInterviewRecord(interviewRecordInfo: InterviewRecordInfo) {
    return http.post('/interview_record/create', interviewRecordInfo).then(res => res.data);
  }
  // ä¿®æ”¹ç´„訪記錄
  async updateInterviewRecord(updateInterviewRecordInfo: UpdateInterviewRecordInfo) {
    return http.post('/interview_record/update', updateInterviewRecordInfo)
  }
  // åˆªé™¤ç´„訪記錄
  async deleteInterviewRecord(interviewRecordId) {
    return http.delete(`/interview_record/${interviewRecordId}`);
  }
  // å®¢æˆ¶å–得最新預約的未處理預約單
  async getNotContactAppointment(): Promise<Appointment> {
    return http.get(`/appointment/customer/expiring/newest`).then((res) => res.data);
  }
  // é¡§å•å–得未處理預約單數量通知
  async getPendingAppointmentSum(): Promise<number> {
    return http.get(`/appointment/consultant/pending/sum`).then((res) => res.data)
  }
}
export default new AppointmentService();
PAMapp/shared/services/auth.service.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,14 @@
import { Role } from "../models/enum/Role";
class AuthService {
  isAdminLogin(): boolean {
    return localStorage.getItem('current_role') === Role.ADMIN;
  }
  isUserLogin(): boolean {
    return localStorage.getItem('current_role') === Role.USER;
  }
}
export default new AuthService();
PAMapp/shared/services/httpClient.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,83 @@
import { AxiosRequestConfig, AxiosError, AxiosResponse} from 'axios';
import axios from 'axios';
import _ from 'lodash';
import messageBoxService from './message-box.service';
const notRequireInterceptorErrorUrl = [
  '/otp/verify',
  '/eService/authenticate',
  '/login/validate/get_img_code',
  '/login/validate/verify_img_code',
];
export const http = axios.create({
  baseURL: process.env.BASE_URL,
  withCredentials: true
});
let apiNumber = 0;
http.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    apiNumber += 1;
    loadingStart();
    addHttpHeader(config);
    return config;
  }
);
http.interceptors.response.use(
  (response: AxiosResponse) => {
    apiNumber -= 1;
    if (apiNumber === 0) {
      loadingFinish();
    }
    return response;
  },
  (error: AxiosError) => {
    apiNumber -= 1;
    if (apiNumber === 0) {
      loadingFinish();
    }
    showErrorMessageBox(error)
    return Promise.reject(error);
  }
);
function addHttpHeader(config: AxiosRequestConfig): void {
  config.headers = {
    Authorization: 'Bearer ' + localStorage.getItem('id_token')
  }
}
function loadingStart(): void {
  setTimeout(() => {
    window.$nuxt.$loading.start();
  }, 0);
};
function loadingFinish(): void {
  setTimeout(() => {
    window.$nuxt.$loading.finish();
  }, 0);
};
function showErrorMessageBox(error: any): void {
  // console.log('error', error, error.response);
  setTimeout(() => {
    if (!_.includes(notRequireInterceptorErrorUrl, error.config.url)) {
      switch (error.response.status) {
        case 401:
          Promise.all([messageBoxService.showErrorMessage('登入逾時'), window.$nuxt.$store.dispatch('localStorage/actionStorageClear')]).then(() => {
            _.isEqual(window.$nuxt.$route.name, 'index') ? location.reload() : window.$nuxt.$router.push('/');
          });
          break;
        default:
          messageBoxService.showErrorMessage('', error);
          break;
      }
    }
  }, 0)
};
PAMapp/shared/services/login.service.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,52 @@
import { http } from "./httpClient";
import { AxiosResponse } from 'axios';
import _ from "lodash";
import { ConsultantLoginInfo } from "../models/ConsultantLoginInfo";
import { LoginRequest } from "../models/loginRequest.model";
import { LoginSuccessToken } from "../models/loginSuccessToken.model";
import { LoginVerify } from "../models/loginVerify.model";
import { OtpInfo } from "../models/otpInfo.model";
import { RegisterInfo } from "../models/registerInfo";
class LoginService {
    /** é¡§å®¢ç™»å…¥-發送OTP **/
  async sendOtp(loginInfo: LoginRequest):Promise<OtpInfo> {
    return http.post('/otp/sendOtp', loginInfo).then( res => res.data );
  }
  /** é¡§å®¢ç™»å…¥-驗證OTP **/
  async loginVerify(loginVerify: LoginVerify):Promise<LoginSuccessToken>{
    return http.post('/otp/verify', loginVerify).then(res => res.data);
  }
  /** é¡§å®¢è¨»å†Š **/
  async register(registerInfo: RegisterInfo):Promise<LoginSuccessToken>{
    return http.post('/otp/register', registerInfo).then(res => res.data);
  }
  /** å–得驗證碼圖片 **/
  async getImgOfVerification():Promise<string>{
    return http.get('/login/validate/get_img_code',{ responseType : 'arraybuffer' })
      .then( response => {
        const toBase64 = window.btoa(
                          _.reduce( new Uint8Array(response.data),(data,byte) =>
                            data + String.fromCharCode(byte),'')
                        );
        const imgSrc = `data:image/jpeg;base64,${toBase64}`;
        return imgSrc;
    });
  }
  /** é©—證碼-驗證 **/
  getVerificationStatus(imgCode:string):Promise<AxiosResponse<boolean>>{
    return http.get('/login/validate/verify_img_code/'+imgCode);
  }
  /** é¡§å•ç™»å…¥ **/
  logInToConsultant(consultantDto:ConsultantLoginInfo):Promise<AxiosResponse<LoginSuccessToken>>{
    return http.post('/eService/authenticate',consultantDto);
  }
}
export default new LoginService();
PAMapp/shared/services/message-box.service.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,30 @@
import { MessageBox } from 'element-ui';
import { MessageBoxData } from "element-ui/types/message-box";
import _ from "lodash";
class MessageBoxService {
  showErrorMessage(errorMsg?:string, errorObj?: any): Promise<MessageBoxData> {
    const messageBoxConfig = {
      message: errorMsg
      ? `${this.breakTextByComma(errorMsg)}`
      : `<div class="message-header"> ç³»çµ±ç™¼ç”ŸéŒ¯èª¤: ${errorObj?.response?.status} </div>
          <div class="message-content">${errorObj?.response?.data?.detail}</div>`,
      dangerouslyUseHTMLString: true,
      showClose:false,
      showConfirmButton:true,
      confirmButtonText:'確認',
      customClass:'pam-message-box',
      closeOnClickModal:false,
    };
    return MessageBox(messageBoxConfig);
  }
  // æš«æ™‚用逗號去斷行
  private breakTextByComma(errorMsg:string):string{
    return _.split(errorMsg,",").join('<br>');
  }
}
export default new MessageBoxService();
PAMapp/shared/services/my-consultant.service.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,52 @@
import _ from "lodash";
import { http } from "./httpClient";
import { AgentInfo } from '~/shared/models/agent-info.model';
import { Consultant } from "../models/consultant.model";
import { Appointment } from "../models/appointment.model";
class MyConsultantService {
  async getFavoriteConsultantList(): Promise<Consultant[]> {
    return http.get<Consultant[]>('/consultant/favorite').then((res) => {
      const hasNewConsultant = res.data.find((consultant) => !consultant.customerViewTime);
      if (hasNewConsultant) {
        this.viewMyConsultantList();
      };
      return res.data;
    });
  }
  private viewMyConsultantList(): void {
    http.post('/consultant/favorite/view');
  }
  //顧問詳細資訊
  async getConsultantDetail(agentNo:string): Promise<AgentInfo> {
    return http.get('/consultant/detail', {params:{agentNo:agentNo}}).then((res) => res.data);
  }
  // ç§»é™¤é¡§å•
  async deleteConsultant(agentId: string) {
    return http.delete(`/consultant/favorite/${agentId}`);
  }
  // æ¨™è¨˜ç‚ºå·²è¯çµ¡
  markAsContact(appointmentId: number): Promise<Appointment> {
    return http.post(`/appointment/markAsContacted/${appointmentId}`).then(res => res.data);
  }
  // å–得顧問頭像
  getConsultantAvatar(agentNo:string):Promise<string>{
    return http.get(`/consultant/avatar/${agentNo}`,{ responseType : 'arraybuffer' })
      .then( response => {
        const toBase64 = window.btoa(
                          _.reduce( new Uint8Array(response.data),(data,byte) =>
                            data + String.fromCharCode(byte),'')
                        );
        const imgSrc = `data:image/png;base64,${toBase64}`;
        return imgSrc;
    });
  }
}
export default new MyConsultantService();
PAMapp/shared/services/otp.service.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,57 @@
import { RegisterInfo } from "../models/registerInfo";
class OtpService {
    setOtpTimeToStorage(name: string, info) {
        localStorage.setItem(name,JSON.stringify(info));
    }
    getOtpTime(name: string) {
        return localStorage.getItem(name);
    }
    removeOtpTimeToStorage(name: string) {
        localStorage.removeItem(name);
    }
    parseOtpTime(name): OtpTime | null {
        const otpTime = this.getOtpTime(name);
        return otpTime ? JSON.parse(otpTime) : null;
    }
    diffOtpTime(storageName: string, otpCounterSec: number) {
        const parseOtpTime = this.parseOtpTime(storageName);
        if (parseOtpTime) {
            const diffSecs = this.calcDiffSecs(parseOtpTime.time);
            if (diffSecs < otpCounterSec) {
                return diffSecs;
            } else {
                this.removeOtpTimeToStorage(storageName);
                return false;
            }
        }
        return false;
    }
    private calcDiffSecs(parseOtpTime) {
        const currentTime = new Date().getTime();
        const storageTime = new Date(parseOtpTime).getTime();
        return Math.floor((currentTime - storageTime) / 1000);
    }
}
export default new OtpService();
export interface OtpTime extends RegisterInfo {
    time: string;
}
export enum OtpStorageName {
    EMAIL = 'emailOtpTime',
    PHONE = 'phoneOtpTime'
}
PAMapp/shared/services/query-consultant.service.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,37 @@
import { http } from "./httpClient";
import { Consultant } from "~/shared/models/consultant.model";
import { FastQueryParams } from "~/shared/models/quick-filter.model";
import { AgentOfStrictQuery, StrictQueryParams } from "~/shared/models/strict-query.model";
import { AppointmentParams } from "~/shared/models/appointment.model";
class QueryConsultantService {
  // æŽ¨è–¦ä¿éšªé¡§å•
  async getRecommendConsultantList(): Promise<Consultant[]> {
    return http.get<Consultant[]>('/consultant/recommend').then((res) => res.data);
  }
  // å¿«é€Ÿç¯©é¸
  async fastQuery(data: FastQueryParams): Promise<Consultant[]> {
    return http.post<Consultant[]>('/consultant/fastQuery', data).then(res => res.data);
  }
  // åš´é¸é…å°
  async strictQuery(data:StrictQueryParams): Promise<AgentOfStrictQuery[]>{
    return http.post('/consultant/strictQuery', data).then((res) => res.data);
  }
  // åŠ å…¥é¡§å•
  async addFavoriteConsultant(agentNoList: string[]) {
    return http.post('/consultant/favorite', { agentNoList });
  }
  // é ç´„前詢問
  async appointmentDemand(data: AppointmentParams) {
    return http.post('/appointment/customer/create', data).then((res) => res.data);
  }
}
export default new QueryConsultantService();
PAMapp/shared/services/reviews.service.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,45 @@
import { http } from "./httpClient";
import { NotificationList, UserReviewPlatformRes, UserReviewParams } from "../models/reviews.model";
import { AppointmentLog } from "../models/appointment.model";
class ReviewsService {
  //客戶進行滿意度評分(單筆)
  userReviewsConsultants(data: UserReviewParams) {
    return http.post('/satisfaction/score', data);
  }
  // å®¢æˆ¶é€²è¡Œæ»¿æ„åº¦(多筆)
  allUserReviewsConsultants(data: UserReviewParams[]) {
    return http.post('/satisfaction/score/all', data);
  }
  //取得所有評分紀錄
  async getMyReviewLog(): Promise<AppointmentLog[]> {
    return http.get('/satisfaction/getMySatisfaction').then(res => res.data);
  }
  // é¡§å•ä¸»å‹•發送滿意度通知
  sendSatisfactionToClient(appointmentId: number) {
    return http.post(`/consultant/sendSatisfactionToClient/${appointmentId}`).then((res) => res);
  }
  // é€šçŸ¥å°éˆ´éº
  getMyPersonalNotification(): Promise<NotificationList[]> {
    return http.get('/personal_notification/getMyPersonalNotification').then(res => res.data);
  }
  // ç›®å‰ç™»å…¥è€…的所有小鈴鐺通知設定為已讀
  readAllMyNotification() {
    return http.post('/personal_notification/readAllMyNotification')
  }
  // å®¢æˆ¶å¡«å¯«å¹³å°æ»¿æ„åº¦
  reviewPlatform(params: UserReviewParams): Promise<UserReviewPlatformRes> {
    return http.post('/satisfaction/score', params);
  }
}
export default new ReviewsService();
PAMapp/shared/services/utils.service.ts
File was renamed from PAMapp/assets/ts/device.ts
@@ -1,4 +1,10 @@
export function isMobileDevice(): boolean {
class UtilsService {
  isMobileDevice(): boolean {
    const mobileDevices = ['Android', 'webOS', 'iPhone', 'iPad', 'iPod', 'BlackBerry', 'Windows Phone'];
    return mobileDevices.some(e => navigator.userAgent.match(e));
  }
}
export default new UtilsService();
PAMapp/shared/storageConsultant.ts
PAMapp/shared/storageRequests.ts
File was renamed from PAMapp/assets/ts/storageRequests.ts
@@ -1,4 +1,4 @@
import { AppointmentRequests } from "./api/consultant";
import { AppointmentRequests } from "./models/appointment.model";
export function getRequestsFromStorage(): AppointmentRequests {
  const requests = localStorage.getItem('myRequests');
PAMapp/store/appointment.store.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,84 @@
import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'
import appointmentService from '~/shared/services/appointment.service';
import { ContactStatus } from '~/shared/models/enum/contact-status';
import { Appointment } from '~/shared/models/appointment.model';
@Module
export default class AppointmentStore extends VuexModule {
  contactStatus = ContactStatus;
  appointmentDetail: Appointment | null = JSON.parse(localStorage.getItem('appointment')!);
  myAppointmentList: Appointment[]      = [];
  //////////////////////////////////////////////////////////////////////
  get appointmentProgress(): ContactStatus {
    return this.appointmentDetail!.communicateStatus;
  }
  get newAppointmentSum(): number {
    return this.myAppointmentList.filter(item => !item.consultantViewTime || item.consultantViewTime === null).length;
  }
  get appointmentItemSum(): number {
    return this.myAppointmentList.filter(item => item.communicateStatus === this.contactStatus.RESERVED).length;
  }
  get contactedItemSum(): number {
    return this.myAppointmentList.filter((item) => item.communicateStatus === this.contactStatus.CONTACTED).length;
  }
  get closedItemSum(): number {
    return this.myAppointmentList
    .filter(item => item.communicateStatus === this.contactStatus.DONE || item.communicateStatus === this.contactStatus.CLOSE ).length;
  }
  get isCloseAppointment(): boolean {
    const closedStatusList = [this.contactStatus.DONE, this.contactStatus.CLOSE, this.contactStatus.CANCEL];
    return closedStatusList.includes(this.appointmentDetail!.communicateStatus);
  }
  //////////////////////////////////////////////////////////////////////
  @Mutation
  SET_MY_APPOINTMENT_LIST(appointmentList: Appointment[]): void {
    this.myAppointmentList = appointmentList;
  }
  @Mutation
  SET_APPOINTMENT(appointmentDetail: Appointment): void {
    this.appointmentDetail = appointmentDetail;
    localStorage.setItem('appointment', JSON.stringify(appointmentDetail));
  }
  //////////////////////////////////////////////////////////////////////
  @Action({ commit: 'SET_MY_APPOINTMENT_LIST' })
  async getMyAppointmentList(): Promise<Appointment[]> {
    return await appointmentService.getMyAppointmentList().then((res) => res);
  }
  @Action({ commit: 'SET_MY_APPOINTMENT_LIST' })
  updateMyAppointmentList(appointment: Appointment): Appointment[] {
    const tempList = this.myAppointmentList.filter((item) => item.id !== appointment.id);
    tempList.unshift(appointment);
    return tempList;
  }
  @Action({ commit: 'SET_APPOINTMENT'})
  async getAppointmentDetail(appointmentId: number): Promise<Appointment> {
    if (this.appointmentDetail && this.appointmentDetail.id === appointmentId) {
      return this.appointmentDetail;
    } else {
      return await appointmentService.getAppointmentDetail(appointmentId).then((res) => res);
    }
  }
  @Action({ commit: 'SET_APPOINTMENT'})
  async updateAppointmentDetail(appointmentId: number): Promise<Appointment> {
    return await appointmentService.getAppointmentDetail(appointmentId).then((res) => res);
  }
}
PAMapp/store/index.ts
@@ -1,10 +1,13 @@
import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'
import { ClientInfo, getMyAppointmentList, getMyReviewLog } from '~/assets/ts/api/appointment';
import { recommend, AgentOfStrictQuery, getFavoriteConsultant, addFavoriteConsultant, deleteConsultant, strictQuery } from '~/assets/ts/api/consultant';
import { Consultant } from '~/assets/ts/models/consultant.model';
import { AppointmentLog } from '~/assets/ts/models/appointment.model';
import { getFavoriteFromStorage, setFavoriteToStorage } from '~/assets/ts/storageConsultant';
import { Role } from '~/assets/ts/models/enum/Role';
import myConsultantService from '~/shared/services/my-consultant.service';
import queryConsultantService from '~/shared/services/query-consultant.service';
import reviewsService from '~/shared/services/reviews.service';
import { Consultant } from '~/shared/models/consultant.model';
import { getFavoriteFromStorage, setFavoriteToStorage } from '~/shared/storageConsultant';
import { AppointmentLog } from '~/shared/models/appointment.model';
import { AgentOfStrictQuery, StrictQueryParams } from '~/shared/models/strict-query.model';
import { NotificationList } from '~/shared/models/reviews.model';
@Module
export default class Store extends VuexModule {
@@ -12,32 +15,54 @@
    strictQueryList: AgentOfStrictQuery[] = [];
    myConsultantList: Consultant[] = [];
    myAppointmentList: ClientInfo[] = [];
    reviewLogList: AppointmentLog[] = [];
    unReviewLogList: AppointmentLog[] = [];
    notificationList: NotificationList[] = [];
    myAppointmentReviewLogList: AppointmentLog[] = [];
    @Mutation updateRecommend(data: Consultant[]) {
        this.recommendList = data;
    get isUserLogin() {
        return this.context.getters['localStorage/isUserLogin'];
    }
    @Mutation updateConsultantList(data: Consultant[]) {
    get strictResultList(): AgentOfStrictQuery[] {
      const perfectMatchList = this.strictQueryList.filter((i) => i.suitability === 100);
      return perfectMatchList.length > 5
            ? perfectMatchList
            : this.strictQueryList;
    }
    @Mutation
    updateRecommend(data: Consultant[]) {
      this.recommendList = data;
    }
    @Mutation
    updateConsultantList(data: Consultant[]) {
        this.myConsultantList = data;
    }
    @Mutation updateStrictQueryList(data: AgentOfStrictQuery[]) {
        this.strictQueryList = data;
    @Mutation
    updateStrictQueryList(data: AgentOfStrictQuery[]) {
        this.strictQueryList = data.sort((a, b) => b.suitability - a.suitability);
    }
    @Mutation updateMyAppointmentList(data: ClientInfo[]) {
        this.myAppointmentList = data;
    @Mutation
    updateReviewLog(data: AppointmentLog[]) {
        this.reviewLogList = data;
    }
    @Mutation updateMyAppointmentReviewLog(data: AppointmentLog[]) {
        this.myAppointmentReviewLogList = data;
    @Mutation
    updateUnReviewLog(data: AppointmentLog[]) {
        this.unReviewLogList = data;
    }
    @Action storeRecommendList() {
        recommend().then(data => {
    @Mutation
    updateNotification(data: NotificationList[]) {
        this.notificationList = data;
    }
    @Action
    storeRecommendList() {
        queryConsultantService.getRecommendConsultantList().then(data => {
            this.context.commit('updateRecommend', data)
        })
    }
@@ -45,7 +70,8 @@
    @Action
    async storeConsultantList() {
        const localData = getFavoriteFromStorage();
        if (this.context.getters['localStorage/currentRole'] !== Role.USER) {
        if (!this.isUserLogin) {
            this.context.commit('updateConsultantList', localData)
            return;
        };
@@ -53,13 +79,13 @@
        if (localData?.length) {
            const agentNoList = localData.map(i => i.agentNo)
            await addFavoriteConsultant(agentNoList).then(res => {
            await queryConsultantService.addFavoriteConsultant(agentNoList).then(res => {
                localStorage.removeItem('favoriteConsultant')
            })
        }
        getFavoriteConsultant().then(data => {
            this.context.commit('updateConsultantList', data)
        myConsultantService.getFavoriteConsultantList().then(data => {
            this.context.commit('updateConsultantList', data);
        })
    }
@@ -70,10 +96,10 @@
        // no agent was removed
        if (left.length === this.myConsultantList.length) return false;
        if (this.context.getters['localStorage/currentRole'] !== Role.USER) {
        if (!this.isUserLogin) {
            setFavoriteToStorage(left);
        } else {
            await deleteConsultant(agentNo)
            await myConsultantService.deleteConsultant(agentNo)
        }
        this.context.commit('updateConsultantList', left)
@@ -87,9 +113,8 @@
            const found = this.myConsultantList.find(item => item.agentNo === consultantToAdd.agentNo);
            if (!found) {
                const newData = [consultantToAdd].concat(this.myConsultantList);
                if (this.context.getters['localStorage/currentRole'] === Role.USER) {
                    await addFavoriteConsultant([consultantToAdd.agentNo])
                if (this.isUserLogin) {
                    await queryConsultantService.addFavoriteConsultant([consultantToAdd.agentNo])
                } else {
                    setFavoriteToStorage(newData);
                }
@@ -104,16 +129,8 @@
    }
    @Action
    async storeMyAppointmentList() {
        return await getMyAppointmentList().then((data) => {
            this.context.commit('updateMyAppointmentList', data);
            return data.filter(item => !item.consultantViewTime || item.consultantViewTime === null).length
        });
    }
    @Action
    storeMyAppointmentReviewLog() {
        getMyReviewLog().then((data) => {
        reviewsService.getMyReviewLog().then((data) => {
            const dataWithLatestDate = data.map((item) => {
                return {
                    ...item,
@@ -121,23 +138,29 @@
                }
            });
            const sortedData = dataWithLatestDate.sort((a, b) => +b.compareDate - +a.compareDate);
            this.context.commit('updateMyAppointmentReviewLog', sortedData);
            const reviewLog = sortedData.filter(item => item.score);
            const unReviewLog = sortedData.filter(item => !item.score);
            this.context.commit('updateReviewLog', reviewLog);
            this.context.commit('updateUnReviewLog', unReviewLog);
        });
    }
    @Action updateMyAppointment(myAppointment: ClientInfo) {
        const data = this.myAppointmentList.filter(item => item.id !== myAppointment.id);
        data.unshift(myAppointment);
        this.context.commit('updateMyAppointmentList', data)
    }
    @Action
    async storeStrictQueryList(strictQueryDto) {
        return await strictQuery(strictQueryDto).then(res=>{
    async storeStrictQueryList(strictQueryDto: StrictQueryParams) {
        return await queryConsultantService.strictQuery(strictQueryDto).then(res=>{
            this.context.commit('localStorage/storageRecommendConsultant', JSON.stringify(strictQueryDto));
            this.context.commit('updateStrictQueryList', res.data)
            return res.data.length;
            this.context.commit('updateStrictQueryList', res)
            return res.length;
        });
    }
}
    @Action
    storeMyPersonalNotification() {
        reviewsService.getMyPersonalNotification().then(data => {
            const sortData = data
                .sort((preItem, nextItem) => +new Date(nextItem.createdDate) - +new Date(preItem.createdDate))
            this.context.commit('updateNotification', sortData);
        })
    }
}
PAMapp/store/localStorage.service.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,109 @@
import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators';
import _ from 'lodash';
export enum LocalStorageItem {
  ID_TOKEN                  = "id_token",
  CURRENT_ROLE              = "current_role",
  CONSULTANT_ID             = "consultant_id",
  USER_INFO                 = "user_info",
  QUICK_FILTER              = "quick_filter",
  RECOMMEND_CONSULTANT_ITEM = "recommend_consultant_item",
  MY_REQUESTS               = "my_requests",
  FAVORITE_CONSULTANT       = "favorite_consultant",
}
export type storageDataDto = Record<LocalStorageItem, any>
export const initialValueOfStorageItemDto = {
  [LocalStorageItem.ID_TOKEN]                 : String,
  [LocalStorageItem.CURRENT_ROLE]             : String,
  [LocalStorageItem.CONSULTANT_ID]            : String,
  [LocalStorageItem.RECOMMEND_CONSULTANT_ITEM]: String,
  [LocalStorageItem.USER_INFO]                : Object,
  [LocalStorageItem.MY_REQUESTS]              : Object,
  [LocalStorageItem.FAVORITE_CONSULTANT]      : Object,
  [LocalStorageItem.QUICK_FILTER]             : Array,
}
@Module
export default class commonLocalStorage extends VuexModule {
  localStorageDto = this.getInitLocalStorageDto();
   //** åˆå§‹ç‰©ä»¶ç‹€æ…‹ **//
  private getInitLocalStorageDto(): storageDataDto {
    const initLocalStorageDto = {} as storageDataDto;
    _.forEach( LocalStorageItem , keyName =>
      initLocalStorageDto[keyName] = this.processOfStorageGetItem(keyName)
    )
    return initLocalStorageDto;
  }
  //** å–å¾— localStorage資料 **/
  private processOfStorageGetItem( keyName:string ): any {
    const storageData = localStorage.getItem(keyName);
    const itemType = initialValueOfStorageItemDto[keyName];
    const prepareData = storageData
                          ? _.isEqual(itemType,String)
                            ? storageData
                            : JSON.parse(storageData)
                          : null;
    return prepareData
  }
  ///////////////////////////////////////////////// Mutation
  /** å„²å­˜é€² localStorageDto **/
  @Mutation setLocalStorageDto( setItem:SetItemDto ): void {
    this.localStorageDto[setItem.keyName] = setItem.value ;
  }
  //** ç§»é™¤å–®ä¸€ **//
  @Mutation clearStoreByKeyName( keyName:string ): void {
    localStorage.removeItem(keyName)
    this.localStorageDto[keyName]=null;
  }
  //** ç§»é™¤å…¨éƒ¨ç‰©ä»¶ **//
  @Mutation clearStoreData(): void {
      _.keys(this.localStorageDto)
      .forEach(keyName => {
        localStorage.removeItem(keyName);
        this.localStorageDto[keyName]=null;
      });
  }
  ///////////////////////////////////////////////// Action
  //** ç‰©ä»¶å„²å­˜ **//
  @Action storeData( data: storageDataDto ): void {
    _.keys(data).forEach(keyName=>{
      const newObj = {
        keyName:keyName,
        value:data[keyName]
      }
      this.context.dispatch('localStorageSet',newObj);
    });
  }
  //** å°‡éœ€è¦ å­˜é€² localStorage æ ¼å¼ **//
  @Action localStorageSet( setItem:SetItemDto ): void {
    const itemType = initialValueOfStorageItemDto[setItem.keyName];
    const prepareData = _.isEqual(itemType,String)
                          ? setItem.value
                          : JSON.stringify(setItem.value);
    localStorage.setItem(setItem.keyName,prepareData);
    this.context.commit('setLocalStorageDto',setItem)
  }
  //** å…¨éƒ¨ç§»é™¤ **//
  @Action clearStorage(keyName?:string): Promise<boolean> {
    return new Promise((resolve, reject) => {
      keyName ? this.context.commit('clearStoreByKeyName',keyName) : this.context.commit('clearStoreData');
      resolve(true)
    });
  }
}
export interface SetItemDto{
  keyName:string,
  value:any,
}
PAMapp/store/localStorage.ts
@@ -1,12 +1,20 @@
import { Selected } from '~/components/QuickFilter/QuickFilterSelector.vue';
import { Module, Mutation, VuexModule ,Action } from 'vuex-module-decorators';
import { ContactType } from '~/shared/models/enum/ContactType';
import { Role } from '~/shared/models/enum/Role';
import { Selected } from '~/shared/models/quick-filter.model';
import { RegisterInfo } from '~/shared/models/registerInfo';
import { StrictQueryParams } from '~/shared/models/strict-query.model';
@Module
export default class LocalStorage extends VuexModule {
  id_token = localStorage.getItem('id_token');
  current_role= localStorage.getItem('current_role');
  consultant_id = localStorage.getItem('consultant_id');
  userInfo = JSON.parse(localStorage.getItem('userInfo')!);
  quickFilterSelectedItem = localStorage.getItem('quickFilter');
  recommendConsultantItem = localStorage.getItem('recommendConsultantItem');
  appointmentIdFromMsg = localStorage.getItem('appointmentIdFromMsg');
  satisfactionIdFromMsg = localStorage.getItem('satisfactionIdFromMsg');
  notContactAppointmentIdFromMsg = localStorage.getItem('notContactAppointmentIdFromMsg');
  get idToken(): string|null {
    return this.id_token;
@@ -20,11 +28,39 @@
    return this.consultant_id;
  }
  get isPrimaryContactTypeEmail(): boolean {
    return this.userInfo.contactType === ContactType.EMAIL;
  }
  get quickFilterSelectedData(): Selected[] {
    return JSON.parse(this.quickFilterSelectedItem || '[]') as Selected[];
  }
  get isAdminLogin(): boolean {
    return this.currentRole === Role.ADMIN;
  }
  get isUserLogin(): boolean {
    return this.currentRole === Role.USER;
  }
  get currentAppointmentIdFromMsg(): string|null {
    return this.appointmentIdFromMsg;
  }
  get currentSatisfactionIdFromMsg(): string|null {
    return this.satisfactionIdFromMsg;
  }
  get currentNotContactAppointmentIdFromMsg(): string|null {
    return this.notContactAppointmentIdFromMsg;
  }
  @Mutation storageUserInfo(userInfo: RegisterInfo): void {
    localStorage.setItem('userInfo', JSON.stringify(userInfo));
    this.userInfo = JSON.parse(localStorage.getItem('userInfo')!);
  }
  @Mutation storageIdToken(token: string): void {
    localStorage.setItem('id_token', token);
@@ -51,12 +87,29 @@
    this.recommendConsultantItem = localStorage.getItem('recommendConsultantItem');
  }
  @Mutation storageAppointmentIdFromMsg(id: string) {
    localStorage.setItem('appointmentIdFromMsg', id);
    this.appointmentIdFromMsg = localStorage.getItem('appointmentIdFromMsg');
  }
  @Mutation storageSatisfactionIdFromMsg(id: string) {
    localStorage.setItem('satisfactionIdFromMsg', id);
    this.satisfactionIdFromMsg = localStorage.getItem('satisfactionIdFromMsg');
  }
  @Mutation storageNotContactAppointmentIdFromMsg(id: string) {
    localStorage.setItem('notContactAppointmentIdFromMsg', id);
    this.notContactAppointmentIdFromMsg = id;
  }
  @Mutation storageClear(): void {
    localStorage.removeItem('myRequests');
    localStorage.removeItem('userInfo');
    localStorage.removeItem('id_token');
    localStorage.removeItem('current_role');
    localStorage.removeItem('consultant_id');
    localStorage.removeItem('appointment');
    localStorage.removeItem('login_consultant');
    this.id_token = localStorage.getItem('id_token');
    this.current_role = localStorage.getItem('current_role');
    this.consultant_id = localStorage.getItem('consultant_id');
@@ -73,6 +126,26 @@
    this.recommendConsultantItem = localStorage.getItem('recommendConsultantItem');
  }
  @Mutation storageClearAppointmentIdFromMsg() {
    localStorage.removeItem('appointmentIdFromMsg');
    this.appointmentIdFromMsg = localStorage.getItem('appointmentIdFromMsg');
  }
  @Mutation storageClearSatisfactionIdFromMsg() {
    localStorage.removeItem('satisfactionIdFromMsg');
    this.appointmentIdFromMsg = localStorage.getItem('satisfactionIdFromMsg');
  }
  @Mutation storageClearNotContactAppointmentIdFromMsg() {
    localStorage.removeItem('notContactAppointmentIdFromMsg');
    this.appointmentIdFromMsg = localStorage.getItem('notContactAppointmentIdFromMsg');
  }
  @Mutation storageStrickQueryItem(queryItem: StrictQueryParams): void {
    localStorage.setItem('recommendConsultantItem', JSON.stringify(queryItem));
    this.recommendConsultantItem = localStorage.getItem('recommendConsultantItem');
  }
  @Action actionStorageClear(): void {
    this.context.commit("storageClear");
  }
PAMapp/store/login.store.ts
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,33 @@
import { Module, VuexModule, Mutation, Action } from 'vuex-module-decorators'
import myConsultantService from '~/shared/services/my-consultant.service';
import { AgentInfo } from '~/shared/models/agent-info.model';
@Module
export default class AppointmentStore extends VuexModule {
  loginConsultant?: AgentInfo = JSON.parse(localStorage.getItem('login_consultant')!);
  //////////////////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////////////////
  @Mutation
  SET_LOGIN_CONSULTANT(agentInfo: AgentInfo): void {
    this.loginConsultant = agentInfo;
    localStorage.setItem('login_consultant', JSON.stringify(agentInfo));
  }
  //////////////////////////////////////////////////////////////////////
  @Action({ commit: 'SET_LOGIN_CONSULTANT' })
  async getLoginConsultantDetail(agentNo: string): Promise<AgentInfo> {
    return await myConsultantService.getConsultantDetail(agentNo).then((res) => res);
  }
  @Action({ commit: 'SET_LOGIN_CONSULTANT' })
  async updateConsultantDetail(agentNo: string): Promise<AgentInfo> {
    return await myConsultantService.getConsultantDetail(agentNo).then((res) => res);
  }
}
pamapi/src/doc/sql/20211213_w.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
ALTER TABLE omo.customer_favorite_consultant ADD view_time timestamp NULL;
pamapi/src/doc/sql/20211222_w.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
ALTER TABLE omo.consultant ADD email varchar NULL;
pamapi/src/doc/sql/20211229_j.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,10 @@
CREATE TABLE omo.appointment_memo (
     id bigserial NOT NULL,
     "content" varchar NOT NULL,
     appointment_id int8 NOT NULL,
     created_date timestamp NOT NULL,
     created_by varchar NOT NULL,
     last_modified_date timestamp NOT NULL,
     last_modified_by varchar NOT NULL,
     CONSTRAINT appointment_memo_pkey PRIMARY KEY (id)
);
pamapi/src/doc/sql/20211229_w.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,2 @@
UPDATE omo.consultant SET phone_number='', email='charles.cw.lin@pcalife.com.tw';
UPDATE omo.consultant SET phone_number='0930018913' WHERE agent_no = 'AG0101234567';
pamapi/src/doc/sql/20220103_w.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,10 @@
UPDATE omo.consultant SET photo_path='C://pam_file/consultant_AGAM11249699.jpg' WHERE agent_no='AGAM11249699';
UPDATE omo.consultant SET photo_path='C://pam_file/consultant_B282677963.jpg' WHERE agent_no='B282677963';
UPDATE omo.consultant SET photo_path='C://pam_file/consultant_AG0101234567.jpg' WHERE agent_no='AG0101234567';
UPDATE omo.consultant SET photo_path='C://pam_file/consultant_R221444250.jpg' WHERE agent_no='R221444250';
UPDATE omo.consultant SET photo_path='C://pam_file/consultant_AG0109051204.jpg' WHERE agent_no='AG0109051204';
UPDATE omo.consultant SET photo_path='C://pam_file/consultant_A183619275.jpg' WHERE agent_no='A183619275';
UPDATE omo.consultant SET photo_path='C://pam_file/consultant_X147309614.jpg' WHERE agent_no='X147309614';
UPDATE omo.consultant SET photo_path='C://pam_file/consultant_D265260662.jpg' WHERE agent_no='D265260662';
UPDATE omo.consultant SET photo_path='C://pam_file/consultant_J149388015.jpg' WHERE agent_no='J149388015';
UPDATE omo.consultant SET photo_path='C://pam_file/consultant_Z152717443.jpg' WHERE agent_no='Z152717443';
pamapi/src/doc/sql/20220112_j.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,66 @@
-- æ–°å¢žé ç´„單通知歷程table
CREATE TABLE public.appointment_notice_log (
    id bigserial NOT NULL,
    appointment_id bigserial NOT NULL,
    email varchar NULL,
    phone varchar NULL,
    "content" varchar NULL,
    created_date timestamp NULL,
    CONSTRAINT appointment_notice_log_pkey PRIMARY KEY (id)
);
-- æ–°å¢žé ç´„單備註table
CREATE TABLE public.appointment_memo (
    id bigserial NOT NULL,
    "content" varchar NOT NULL,
    appointment_id int8 NOT NULL,
    created_date timestamp NOT NULL,
    created_by varchar NOT NULL,
    last_modified_date timestamp NOT NULL,
    last_modified_by varchar NOT NULL,
    CONSTRAINT appointment_memo_pkey PRIMARY KEY (id)
);
-- æ–°å¢žç´„訪紀錄table
CREATE TABLE public.interview_record (
    id bigserial NOT NULL,
    created_date timestamp NOT NULL,
    created_by varchar NOT NULL,
    last_modified_date timestamp NOT NULL,
    last_modified_by varchar NOT NULL,
    "content" varchar NULL,
    interview_date timestamp NULL,
    appointment_id bigserial NOT NULL,
    status varchar NULL,
    CONSTRAINT interview_record_pkey PRIMARY KEY (id)
);
-- æ–°å¢žé ç´„單結案資料table
-- Drop table
-- DROP TABLE public.appointment_closed_info;
-- Drop table
-- DROP TABLE public.appointment_closed_info;
CREATE TABLE public.appointment_closed_info (
    id bigserial NOT NULL,
    policyholder_identity_id varchar NULL,
    plan_code varchar NULL,
    policy_entry_date date NULL,
    remark varchar NULL,
    closed_reason varchar NULL,
    closed_other_reason varchar NULL,
    appointment_id bigserial NOT NULL,
    CONSTRAINT appointment_closed_info_pkey PRIMARY KEY (id)
);
pamapi/src/doc/sql/20220114_j.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,2 @@
-- appointment_notice_log æ–°å¢žç´„訪時間欄位
ALTER TABLE appointment_notice_log ADD interview_date timestamp null;
pamapi/src/doc/sql/20220120_j.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,13 @@
-- å»ºç«‹å°éˆ´éºé€šçŸ¥çš„table
CREATE TABLE public.personal_notification (
    id bigserial NOT NULL,
    title varchar NULL,
    "content" varchar NOT NULL,
    notification_type varchar NOT NULL,
    owner_role varchar NOT NULL,
    owner_id bigserial NOT NULL,
    created_date timestamp NOT NULL,
    read_date timestamp NULL,
    CONSTRAINT personal_notification_pkey PRIMARY KEY (id)
);
pamapi/src/doc/sql/20220121_j.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,3 @@
-- èª¿æ•´policy_entry_date åž‹æ…‹
ALTER TABLE appointment_closed_info
ALTER COLUMN policy_entry_date TYPE timestamp;
pamapi/src/doc/sql/20220122_w.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,7 @@
-- å»ºç«‹ å·²ç¶“通知客戶未處理預約單的紀錄 table
CREATE TABLE public.appointment_expiring_notify_record (
   id bigserial NOT NULL,
   appointment_id bigserial NOT NULL,
   send_time timestamp NULL,
   CONSTRAINT appointment_expiring_notify_record_pk PRIMARY KEY (id)
);
pamapi/src/doc/sql/20220126_w.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
ALTER TABLE public.satisfaction ALTER COLUMN customer_id DROP NOT NULL;
ALTER TABLE public.satisfaction ADD "type" varchar NULL;
-- Auto-generated SQL script #202201261717
UPDATE public.satisfaction SET "type"='APPOINTMENT';
pamapi/src/doc/sql/20220210_w.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,10 @@
update public.consultant set "role" = '台名保險經紀人' where agent_no = 'A183619275';
update public.consultant set "role" = '和泰保險經紀人' where agent_no = 'AGAM11249699';
update public.consultant set "role" = '大誠保險經紀人' where agent_no = 'Z152717443';
update public.consultant set "role" = '錠嵂保險經紀人' where agent_no = 'D265260662';
update public.consultant set "role" = '欣台保險經紀人' where agent_no = 'AG0109051204';
update public.consultant set "role" = '大誠保險經紀人' where agent_no = 'B282677963';
update public.consultant set "role" = '威盛保險經紀人' where agent_no = 'AG0101234567';
update public.consultant set "role" = '欣台保險經紀人' where agent_no = 'X147309614';
update public.consultant set "role" = '台名保險經紀人' where agent_no = 'J149388015';
update public.consultant set "role" = '錠嵂保險經紀人' where agent_no = 'R221444250';
pamapi/src/doc/sql/20220215_w.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,2 @@
update public.consultant set serve_area = '台北市' where agent_no = 'AG0109051204';
update public.consultant set serve_area = '金門縣' where agent_no = 'R221444250';
pamapi/src/doc/sql/20220216_w.sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,22 @@
update public.consultant set avg_score = 1 where agent_no = 'A183619275';
update public.consultant set avg_score = 2 where agent_no = 'AGAM11249699';
update public.consultant set avg_score = 3 where agent_no = 'Z152717443';
update public.consultant set avg_score = 4 where agent_no = 'D265260662';
update public.consultant set avg_score = 5 where agent_no = 'AG0109051204';
update public.consultant set avg_score = 1 where agent_no = 'B282677963';
update public.consultant set avg_score = 2 where agent_no = 'AG0101234567';
update public.consultant set avg_score = 3 where agent_no = 'X147309614';
update public.consultant set avg_score = 4 where agent_no = 'J149388015';
update public.consultant set avg_score = 5 where agent_no = 'R221444250';
do
$$
declare
avg_row record;
begin
for avg_row in select round(cast(avg(score) as numeric), 1) as avg_score, agent_no from public.satisfaction where "type" = 'APPOINTMENT' and score is not null group by agent_no
    loop
update public.consultant set avg_score = avg_row.avg_score where agent_no = avg_row.agent_no;
end loop;
end
$$
pamapi/src/doc/sql/²bªÅ¾ã­Ó¨t²Î¸ê®Æ(°£ÅU°Ý).sql
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,12 @@
truncate public.appointment;
truncate public.appointment_closed_info;
truncate public.appointment_expiring_notify_record;
truncate public.appointment_memo;
truncate public.appointment_notice_log;
truncate public.customer;
truncate public.interview_record;
truncate public.login_record;
truncate public.otp_tmp;
truncate public.personal_notification;
truncate public.satisfaction;
truncate public.customer_favorite_consultant;
pamapi/src/doc/¤p¹aÅL³qª¾API/¨ú±oµn¤JªÌ©Ò¦³¤p¹aÅL³qª¾API
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,38 @@
http get:
http://localhost:8080/api/personal_notification/getMyPersonalNotification
title: æ¨™é¡Œ
content: é€šçŸ¥å…§å®¹
notificationType: ACTIVITY(個人活動通知)、SYSTEM(系統通知)
ownerRole: CUSTOMER(客戶)、CONSULTANT(顧問)
ownerId: ç™»å…¥è€…id
readDate: å·²è®€æ™‚é–“
request body :
[
    {
        "id": 1,
        "title": "title test",
        "content": "content test",
        "notificationType": "ACTIVITY",
        "ownerRole": "CONSULTANT",
        "ownerId": 11,
        "createdDate": "2022-01-20T10:53:53.022Z",
        "readDate": null
    },
    {
        "id": 2,
        "title": "title test",
        "content": "content test",
        "notificationType": "ACTIVITY",
        "ownerRole": "CONSULTANT",
        "ownerId": 11,
        "createdDate": "2022-01-20T10:59:17.242Z",
        "readDate": null
    }
]
pamapi/src/doc/¤p¹aÅL³qª¾API/©Ò¦³¤p¹aÅL³qª¾³]¬°¤wŪ.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
http post :
將目前登入者的所有小鈴鐺通知設定為已讀
http://localhost:8080/api/personal_notification/readAllMyNotification
pamapi/src/doc/º¡·N«×/«È¤á¶ñ¼gº¡·N«×.txt
Àɮפw§R°£
pamapi/src/doc/º¡·N«×/«È¤á¶ñ¼gº¡·N«×°Ý¨÷.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,56 @@
http post :
http://localhost:8080/api/satisfaction/score
填寫一筆:
request body:
{
    "appointmentId": 482,
    "score":4,
    "type": "APPOINTMENT"   // "APPOINTMENT" è¡¨é‡å°æ­¤æ¬¡é ç´„的顧問滿意度、 "SYSTEM" å‰‡æ˜¯é‡å°å¹³å°çš„æ»¿æ„åº¦
}
response body:
{
    "id": 84,
    "customerId": 165,
    "agentNo": "AGAM11249699",
    "status": "FILLED",
    "score": 4.0,
    "appointmentId": 482,
    "type": "APPOINTMENT"
}
=====================================================
填寫多筆滿意度:
http post :
http://localhost:8080/api/satisfaction/score/all
request body:
[{
    "appointmentId": 482,
    "score":4,
    "type": "APPOINTMENT"   // "APPOINTMENT" è¡¨é‡å°æ­¤æ¬¡é ç´„的顧問滿意度、 "SYSTEM" å‰‡æ˜¯é‡å°å¹³å°çš„æ»¿æ„åº¦
}]
response body:
[{
     "id": 84,
     "customerId": 165,
     "agentNo": "AGAM11249699",
     "status": "FILLED",
     "score": 4.0,
     "appointmentId": 482,
     "type": "APPOINTMENT"
}]
pamapi/src/doc/º¡·N«×/¬d¸ßµn¤JªÌ©Ò¦³ªºº¡·N«×°Ý¨÷.txt
@@ -7,39 +7,41 @@
[
    {
        "id": 11,
        "createdDate": "2021-12-03T03:59:07.854Z",
        "lastModifiedDate": "2021-12-03T03:59:07.854Z",
        "customerId": 90,
        "agentNo": "B282677963",
        "status": "FILLED",
        "score": 4.0,
        "appointmentId": 134,
        "customerName": "Jack",
        "agentName": "喬妹"
        "id" : 85,
        "createdDate" : "2022-01-24T11:48:58.039Z",
        "lastModifiedDate" : "2022-01-24T11:48:58.039Z",
        "customerId" : 165,
        "agentNo" : "AGAM11249699",
        "status" : "UNFILLED",
        "score" : null,
        "appointmentId" : 483,
        "customerName" : "Mila la",
        "agentName" : "莫拉邀 lala",
        "type" : "APPOINTMENT"      // "APPOINTMENT"是對顧問預約的滿意度,"SYSTEM"是對平台的滿意度
    },
    {
        "id": 12,
        "createdDate": "2021-12-03T04:00:43.181Z",
        "lastModifiedDate": "2021-12-03T04:00:43.181Z",
        "customerId": 90,
        "agentNo": "B282677963",
        "status": "FILLED",
        "score": 4.0,
        "appointmentId": 135,
        "customerName": "Jack",
        "agentName": "喬妹"
    },
    {
        "id": 13,
        "createdDate": "2021-12-03T04:01:20.095Z",
        "lastModifiedDate": "2021-12-03T04:01:20.095Z",
        "customerId": 90,
        "agentNo": "B282677963",
        "status": "FILLED",
        "score": 2.0,
        "appointmentId": 136,
        "customerName": "Jack",
        "agentName": "喬妹"
      "id" : 84,
      "createdDate" : "2022-01-24T10:31:03.799Z",
      "lastModifiedDate" : "2022-01-24T10:31:03.799Z",
      "customerId" : 165,
      "agentNo" : "AGAM11249699",
      "status" : "FILLED",
      "score" : 1.0,
      "appointmentId" : 482,
      "customerName" : "Mila la",
      "agentName" : "莫拉邀 lala",
      "type" : "APPOINTMENT"
    }, {
      "id" : 95,
      "createdDate" : "2022-02-10T07:28:39.095Z",
      "lastModifiedDate" : "2022-02-10T07:28:39.095Z",
      "customerId" : 165,
      "agentNo" : null,
      "status" : "UNFILLED",
      "score" : null,
      "appointmentId" : 527,
      "customerName" : "Mila la",
      "agentName" : null,
      "type" : "SYSTEM"
    }
]
]
pamapi/src/doc/º¡·N«×/ÅU°Ý¥D°Êµo°eº¡·N«×³qª¾API.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1 @@
http://localhost:8080/api/consultant/sendSatisfactionToClient/{appointmentId}
pamapi/src/doc/¬ù³X¬ö¿ýAPI/­×§ï¬ù³X¬ö¿ý.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,31 @@
http post :
http://localhost:8080/api/interview_record/update
id : interviewRecord id
content : ç´„訪紀錄內容
interviewDate: é è¨ˆç´„訪時間
appointmentId: é ç´„å–®id
request body :
{
    "id":5,
    "content":"test record content2",
    "interviewDate":"2021-01-01T08:00:00.000",
    "appointmentId": 385
}
response body :
{
    "id": 5,
    "content": "test record content2",
    "interviewDate": "2021-01-01T08:00:00.000+00:00",
    "appointmentId": 385
}
pamapi/src/doc/¬ù³X¬ö¿ýAPI/§R°£¬ù³X¬ö¿ý.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
http delete :
http://localhost:8080/api/interview_record/{interviewRecordId}
http://localhost:8080/api/interview_record/5
pamapi/src/doc/¬ù³X¬ö¿ýAPI/·s¼W¬ù³X¬ö¿ý.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,27 @@
http post :
http://localhost:8080/api/interview_record/create
interviewDate: é è¨ˆç´„訪日期
content : ç´€éŒ„內容
appointmentId: é ç´„å–®id
request body :
{
    "content":"test record content",
    "interviewDate":"2021-01-01T08:00:00.000",
    "appointmentId": 385
}
response body :
{
    "id": 5,
    "content": "test record content",
    "interviewDate": "2021-01-01T08:00:00.000+00:00",
    "appointmentId": 385
}
pamapi/src/doc/¬ù³X³qª¾API/µo°e¬ù³X³qª¾API.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,17 @@
http post :
http://localhost:8080/api/notice/send
message: ç™¼é€çš„æ–‡å­—內容
appointmentId : ç´„訪通知的預約單id
interviewDate: é è¨ˆç´„訪時段
request body:
{
    "message":"notice customer invterview time",
    "email":"pollex@gmail.com",
    "phone":"0912345678",
    "appointmentId": 406,
    "interviewDate":"2022-11-01T08:00:00.000"
}
pamapi/src/doc/¹w¬ù³æ/§R°£¹w¬ù³æ³Æµù.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
http delete:
http://localhost:8080/api/appointment/memo/{appointmentMemoId}
http://localhost:8080/api/appointment/memo/1
pamapi/src/doc/¹w¬ù³æ/¨ú±o¹w¬ù³æ²Ó¸`API.txt
@@ -3,24 +3,62 @@
http://localhost:8080/api/appointment/getDetail/{appointmentId}
response body:
appointmentNoticeLogs: é ç´„單發送通知的歷程
appointmentClosedInfo: é ç´„單結案資料
response body:
{
    "id": 26,
    "phone": "09123456789",
    "email": "123",
    "contactType": "email",
    "gender": "male",
    "age": "20",
    "job": "外勤",
    "requirement": "防疫保單相關",
    "communicateStatus": "contacted",
    "hopeContactTime": "','",
    "otherRequirement": "",
    "appointmentDate": "2021-11-12T10:17:14.107Z",
    "agentNo": "6",
    "customerId": 2,
    "name": "Jack",
    "consultantViewTime": "2021-12-01T08:04:59.369Z",
    "consultantReadTime": "2021-12-01T08:05:59.857Z"
}
    "id": 385,
    "phone": "0911223344",
    "email": "SDD",
    "contactType": "phone",
    "gender": "female",
    "age": "21-30",
    "job": "內勤",
    "requirement": "健康與保障",
    "communicateStatus": "done",
    "hopeContactTime": "'星期一,星期二,星期三,星期四,星期五,星期六,星期日、9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'",
    "otherRequirement": null,
    "appointmentDate": "2021-12-16T07:11:05.400Z",
    "lastModifiedDate": "2022-01-19T10:57:51.380Z",
    "agentNo": "A568420",
    "customerId": 139,
    "name": "Angula-test",
    "consultantViewTime": "2021-12-27T02:02:18.711Z",
    "consultantReadTime": "2021-12-28T07:16:01.295Z",
    "contactTime": "2021-12-28T07:16:37.004Z",
    "satisfactionScore": null,
    "appointmentMemoList": [],
    "interviewRecordDTOs": [],
    "appointmentNoticeLogs": [
        {
            "id": 4,
            "phone": "0912345678",
            "email": "pollex@gmail.com",
            "appointmentId": 385,
            "content": "notice customer invterview time",
            "createdDate": "2022-01-11T09:33:57.754Z",
            "interviewDate": null
        },
        {
            "id": 6,
            "phone": "0912345678",
            "email": "pollex@gmail.com",
            "appointmentId": 385,
            "content": "notice customer invterview time",
            "createdDate": "2022-01-19T10:38:42.187Z",
            "interviewDate": "2022-11-01T08:00:00.000+00:00"
        }
    ],
    "appointmentClosedInfo": {
        "id": 9,
        "policyholderIdentityId": "A123456789",
        "planCode": "ATMdd",
        "policyEntryDate": "2022-01-12T00:00:00.000+00:00",
        "remark": "test remark",
        "closedReason": "other2",
        "closedOtherReason": "心情不好不想買2",
        "appointmentId": 385
    }
}
pamapi/src/doc/¹w¬ù³æ/«È¤á¨ú±o³Ì·s¹w¬ùªº¥¼³B²z¹w¬ù³æ.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,61 @@
http get :
http://localhost:8080/api/appointment/customer/expiring/newest
簡訊及email會以該網址進入首頁 -> http://localhost:3000?notContactAppointmentId={最新一筆未處理預約單}
response body: è‹¥æœ‰æœƒå‚³200並給以下資料,若無(未有任何逾期未處理預約單,則會回null)
{
    "id": 385,
    "phone": "0911223344",
    "email": "SDD",
    "contactType": "phone",
    "gender": "female",
    "age": "21-30",
    "job": "內勤",
    "requirement": "健康與保障",
    "communicateStatus": "done",
    "hopeContactTime": "'星期一,星期二,星期三,星期四,星期五,星期六,星期日、9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'",
    "otherRequirement": null,
    "appointmentDate": "2021-12-16T07:11:05.400Z",
    "lastModifiedDate": "2022-01-19T10:57:51.380Z",
    "agentNo": "A568420",
    "customerId": 139,
    "name": "Angula-test",
    "consultantViewTime": "2021-12-27T02:02:18.711Z",
    "consultantReadTime": "2021-12-28T07:16:01.295Z",
    "contactTime": "2021-12-28T07:16:37.004Z",
    "satisfactionScore": null,
    "appointmentMemoList": [],
    "interviewRecordDTOs": [],
    "appointmentNoticeLogs": [
        {
            "id": 4,
            "phone": "0912345678",
            "email": "pollex@gmail.com",
            "appointmentId": 385,
            "content": "notice customer invterview time",
            "createdDate": "2022-01-11T09:33:57.754Z",
            "interviewDate": null
        },
        {
            "id": 6,
            "phone": "0912345678",
            "email": "pollex@gmail.com",
            "appointmentId": 385,
            "content": "notice customer invterview time",
            "createdDate": "2022-01-19T10:38:42.187Z",
            "interviewDate": "2022-11-01T08:00:00.000+00:00"
        }
    ],
    "appointmentClosedInfo": {
        "id": 9,
        "policyholderIdentityId": "A123456789",
        "planCode": "ATMdd",
        "policyEntryDate": "2022-01-12T00:00:00.000+00:00",
        "remark": "test remark",
        "closedReason": "other2",
        "closedOtherReason": "心情不好不想買2",
        "appointmentId": 385
    }
}
pamapi/src/doc/¹w¬ù³æ/·s¼W¹w¬ù³æ³Æµù.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,14 @@
http post :
http://localhost:8080/api/appointment/memo/create
content : é ç´„單備註內容
appointmentId : é ç´„å–®id
request body:
{
    "content":"test",
    "appointmentId":368
}
pamapi/src/doc/¹w¬ù³æ/§ó·s¹w¬ù³æ³Æµù.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,12 @@
http post :
http://localhost:8080/api/appointment/memo/update
id : memo id
request body:
{
    "id": 1 ,
    "content":"test4"
}
pamapi/src/doc/¹w¬ù³æ/¼Ð°O¬°¤wÁpµ¸API.txt
@@ -1,2 +1,58 @@
http post :
http post :
http://localhost:8080/api/appointment/markAsContacted/{appointmentId}
response body:
{
    "id": 385,
    "phone": "0911223344",
    "email": "SDD",
    "contactType": "phone",
    "gender": "female",
    "age": "21-30",
    "job": "內勤",
    "requirement": "健康與保障",
    "communicateStatus": "done",
    "hopeContactTime": "'星期一,星期二,星期三,星期四,星期五,星期六,星期日、9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'",
    "otherRequirement": null,
    "appointmentDate": "2021-12-16T07:11:05.400Z",
    "lastModifiedDate": "2022-01-19T10:57:51.380Z",
    "agentNo": "A568420",
    "customerId": 139,
    "name": "Angula-test",
    "consultantViewTime": "2021-12-27T02:02:18.711Z",
    "consultantReadTime": "2021-12-28T07:16:01.295Z",
    "contactTime": "2021-12-28T07:16:37.004Z",
    "satisfactionScore": null,
    "appointmentMemoList": [],
    "interviewRecordDTOs": [],
    "appointmentNoticeLogs": [
        {
            "id": 4,
            "phone": "0912345678",
            "email": "pollex@gmail.com",
            "appointmentId": 385,
            "content": "notice customer invterview time",
            "createdDate": "2022-01-11T09:33:57.754Z",
            "interviewDate": null
        },
        {
            "id": 6,
            "phone": "0912345678",
            "email": "pollex@gmail.com",
            "appointmentId": 385,
            "content": "notice customer invterview time",
            "createdDate": "2022-01-19T10:38:42.187Z",
            "interviewDate": "2022-11-01T08:00:00.000+00:00"
        }
    ],
    "appointmentClosedInfo": {
        "id": 9,
        "policyholderIdentityId": "A123456789",
        "planCode": "ATMdd",
        "policyEntryDate": "2022-01-12T00:00:00.000+00:00",
        "remark": "test remark",
        "closedReason": "other2",
        "closedOtherReason": "心情不好不想買2",
        "appointmentId": 385
    }
}
pamapi/src/doc/¹w¬ù³æ/µ²®×API.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,32 @@
http post :
新增結案明細, æ›´æ–°çµæ¡ˆæ˜Žç´°:
http://localhost:8080/api/appointment/close
request body :
成交
contactStatus: done
{
    "policyholderIdentityId":"A123456789",
    "planCode":"ATM",
    "policyEntryDate":"2022-01-12",
    "contactStatus":"done",
    "appointmentId": 385,
    "remark":"test remark"
}
未成交
contactStatus: closed
{
    "contactStatus":"closed",
    "closedReason":"other",
    "closedOtherReason":"心情不好不想買",
    "appointmentId": 385,
    "remark":"test remark"
}
pamapi/src/doc/¹w¬ù³æ/¹w¬ù«e¸ß°Ý.txt
@@ -4,7 +4,7 @@
contactType: email,phone
gender: male, female
gender: male, female
request body:
@@ -19,4 +19,27 @@
    "hopeContactTime":"'星期一~星期五, 12:00~14:00, 18:00~21:00'",
    "otherRequirement":"外幣投資",
    "agentNo":"admin"
}
}
回傳預約單資訊
response body:
{
  "id" : 493,
  "phone" : "",
  "email" : "wayne8692wayne8692@gmail.com",
  "contactType" : "EMAIL",
  "gender" : "female",
  "age" : "31-40",
  "job" : "內勤",
  "requirement" : "分紅保單,資產規劃",
  "communicateStatus" : "reserved",
  "hopeContactTime" : "",
  "otherRequirement" : null,
  "appointmentDate" : "2022-02-08T06:57:05.661Z",
  "lastModifiedDate" : "2022-02-08T06:57:05.661Z",
  "agentNo" : "AG0101234567",
  "customerId" : 167,
  "consultantViewTime" : null,
  "consultantReadTime" : null,
  "contactTime" : null
}
pamapi/src/doc/¹w¬ù³æ/ÅU°Ý¨ú±o©Ò¦³¦Û¤vªº¹w¬ù³æAPI.txt
@@ -2,139 +2,62 @@
http://localhost:8080/api/consultant/getMyAppointment
appointmentMemoList : å‚™è¨»è³‡æ–™
interviewRecordDTOs : ç´„訪紀錄
[
    {
        "id": 110,
        "phone": "09123456789",
        "email": "",
        "contactType": "mobile",
        "gender": "male",
        "age": "30",
        "job": "內勤",
        "requirement": "子女教育,資產規劃,防疫保單相關",
        "communicateStatus": "contacted",
        "hopeContactTime": "'禮拜三,禮拜五、12:00~14:00,14:00~18:00'",
        "otherRequirement": null,
        "appointmentDate": "2021-12-02T09:58:58.932Z",
        "lastModifiedDate": "2021-12-02T09:58:58.932Z",
        "agentNo": "AG0109051204",
        "customerId": 70,
        "name": null,
        "consultantViewTime": "2021-12-02T09:58:12.066Z",
        "consultantReadTime": "2021-12-02T09:58:58.930Z",
        "contactTime": "2021-12-02T09:58:58.930Z",
        "satisfactionScore":3 // null ä»£è¡¨è©²ç­†é ç´„單尚未填寫滿意度
    },
    {
        "id": 109,
        "phone": "09123456789",
        "email": "",
        "contactType": "mobile",
        "gender": "male",
        "age": "20",
        "job": "內勤",
        "requirement": "健康與保障,子女教育,保單健檢/規劃,防疫保單相關",
        "communicateStatus": "contacted",
        "hopeContactTime": "'禮拜一,禮拜二,禮拜三,禮拜四,禮拜五,禮拜六,禮拜日、12:00~14:00,14:00~18:00'",
        "otherRequirement": null,
        "appointmentDate": "2021-12-02T10:12:24.613Z",
        "lastModifiedDate": "2021-12-02T10:12:24.613Z",
        "agentNo": "AG0109051204",
        "customerId": 67,
        "name": null,
        "consultantViewTime": "2021-12-02T09:58:12.066Z",
        "consultantReadTime": "2021-12-02T10:12:24.612Z",
        "contactTime": null,
        "satisfactionScore":3 // null ä»£è¡¨è©²ç­†é ç´„單尚未填寫滿意度
    },
    {
        "id": 114,
        "phone": "09123456789",
        "email": "",
        "contactType": "mobile",
        "gender": "male",
        "age": "70",
        "job": "內勤",
        "requirement": "健康與保障,子女教育,資產規劃,樂活退休,防疫保單相關",
        "communicateStatus": "contacted",
        "hopeContactTime": "'禮拜一,禮拜二,禮拜三,禮拜四,禮拜五,禮拜六,禮拜日、12:00~14:00,14:00~18:00'",
        "otherRequirement": null,
        "appointmentDate": "2021-12-02T09:58:12.248Z",
        "lastModifiedDate": "2021-12-02T09:58:12.248Z",
        "agentNo": "AG0109051204",
        "customerId": 71,
        "name": null,
        "consultantViewTime": "2021-12-02T09:58:12.066Z",
        "consultantReadTime": null,
        "contactTime": null,
        "satisfactionScore":3 // null ä»£è¡¨è©²ç­†é ç´„單尚未填寫滿意度
    },
    {
        "id": 121,
        "phone": "09123456789",
        "email": "",
        "contactType": "mobile",
        "gender": "male",
        "age": "20",
        "job": "內勤",
        "requirement": "子女教育",
        "communicateStatus": "contacted",
        "hopeContactTime": "'禮拜一,禮拜二,禮拜三,禮拜四,禮拜五,禮拜六,禮拜日、9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'",
        "otherRequirement": null,
        "appointmentDate": "2021-12-02T09:58:12.248Z",
        "lastModifiedDate": "2021-12-02T09:58:12.248Z",
        "agentNo": "AG0109051204",
        "customerId": 76,
        "name": "李哲維",
        "consultantViewTime": "2021-12-02T09:58:12.066Z",
        "consultantReadTime": "2021-12-02T09:54:20.872Z",
        "contactTime": null,
        "satisfactionScore":3 // null ä»£è¡¨è©²ç­†é ç´„單尚未填寫滿意度
    },
    {
        "id": 118,
        "phone": "09123456789",
        "email": "",
        "contactType": "mobile",
        "gender": "male",
        "age": "20",
        "job": "內勤",
        "requirement": "健康與保障",
        "communicateStatus": "contacted",
        "hopeContactTime": "'禮拜一,禮拜二,禮拜三,禮拜四,禮拜五,禮拜六,禮拜日、12:00~14:00,14:00~18:00'",
        "otherRequirement": null,
        "appointmentDate": "2021-12-02T10:02:52.797Z",
        "lastModifiedDate": "2021-12-02T10:02:52.797Z",
        "agentNo": "AG0109051204",
        "customerId": 72,
        "name": null,
        "consultantViewTime": "2021-12-02T09:58:12.066Z",
        "consultantReadTime": "2021-12-02T10:02:52.796Z",
        "contactTime": null,
        "satisfactionScore":3 // null ä»£è¡¨è©²ç­†é ç´„單尚未填寫滿意度
    },
    {
        "id": 180,
        "phone": "0911111111",
        "email": "",
        "id": 385,
        "phone": "0911223344",
        "email": "SDD",
        "contactType": "phone",
        "gender": "female",
        "age": "31-40",
        "age": "21-30",
        "job": "內勤",
        "requirement": "子女教育,健康與保障",
        "communicateStatus": "contacted",
        "hopeContactTime": "'禮拜二,禮拜三,禮拜四,禮拜五,禮拜六、9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00','禮拜一,禮拜二,禮拜三,禮拜四,禮拜五,禮拜日、12:00~14:00,14:00~18:00,18:00~21:00','禮拜一,禮拜四,禮拜六,禮拜日、14:00~18:00,18:00~21:00'",
        "requirement": "健康與保障",
        "communicateStatus": "done",
        "hopeContactTime": "'星期一,星期二,星期三,星期四,星期五,星期六,星期日、9:00~12:00,12:00~14:00,14:00~18:00,18:00~21:00'",
        "otherRequirement": null,
        "appointmentDate": "2021-12-02T10:10:53.341Z",
        "lastModifiedDate": "2021-12-03T03:40:16.344Z",
        "agentNo": "AG0109051204",
        "customerId": 77,
        "name": "111",
        "consultantViewTime": "2021-12-02T10:10:46.358Z",
        "consultantReadTime": "2021-12-02T10:10:53.340Z",
        "contactTime": "2021-12-03T03:40:16.215Z",
        "satisfactionScore":3 // null ä»£è¡¨è©²ç­†é ç´„單尚未填寫滿意度
        "appointmentDate": "2021-12-16T07:11:05.400Z",
        "lastModifiedDate": "2022-01-19T10:57:51.380Z",
        "agentNo": "A568420",
        "customerId": 139,
        "name": "Angula-test",
        "consultantViewTime": "2021-12-27T02:02:18.711Z",
        "consultantReadTime": "2021-12-28T07:16:01.295Z",
        "contactTime": "2021-12-28T07:16:37.004Z",
        "satisfactionScore": null,
        "appointmentMemoList": [],
        "interviewRecordDTOs": [],
        "appointmentNoticeLogs": [
            {
                "id": 4,
                "phone": "0912345678",
                "email": "pollex@gmail.com",
                "appointmentId": 385,
                "content": "notice customer invterview time",
                "createdDate": "2022-01-11T09:33:57.754Z",
                "interviewDate": null
            },
            {
                "id": 6,
                "phone": "0912345678",
                "email": "pollex@gmail.com",
                "appointmentId": 385,
                "content": "notice customer invterview time",
                "createdDate": "2022-01-19T10:38:42.187Z",
                "interviewDate": "2022-11-01T08:00:00.000+00:00"
            }
        ],
        "appointmentClosedInfo": {
            "id": 9,
            "policyholderIdentityId": "A123456789",
            "planCode": "ATMdd",
            "policyEntryDate": "2022-01-12T00:00:00.000+00:00",
            "remark": "test remark",
            "closedReason": "other2",
            "closedOtherReason": "心情不好不想買2",
            "appointmentId": 385
        }
    }
]
pamapi/src/doc/¹w¬ù³æ/ÅU°Ý¨ú±o¥¼³B²z¹w¬ù³æ¼Æ¶q³qª¾.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,5 @@
http get :
http://localhost:8080/api/appointment/consultant/pending/sum
response body:
2
pamapi/src/doc/ÅU°ÝAPI/¨ú±oÅU°ÝÀY¹³.txt
@@ -1,8 +1,8 @@
http get: http://localhost:8080/api/consultant/avatar/{fileName}
根據從顧問資料裡的img欄位的檔案名稱,取得顧問頭像的jpg檔案
http get: http://localhost:8080/api/consultant/avatar/{agentNo}
根據顧問的agentNo å–得顧問的照片
example request:
http://localhost:8080/api/consultant/avatar/avatar1.jpg
http://localhost:8080/api/consultant/avatar/A568420
response body: äºŒé€²åˆ¶æª”案
pamapi/src/doc/ÅU°ÝAPI/ÄY¿ï°t¹ï.txt
@@ -8,7 +8,7 @@
    "area":"桃園",
    "requirements": ["健康與保障","保單健檢/規劃"],
    "otherRequirement": "長照險",
    "seniority":        // "資深"帶"SENIOR"、"年輕"帶"YOUNG"、"不限"帶"UNLIMITED"
    "seniority": "SENIOR"       // "資深"帶"SENIOR"、"年輕"帶"YOUNG"、"不限"帶"UNLIMITED"
    "popularTags":["防疫","失能","防癌"],
    "otherPopularTags":"旅行險",
}
@@ -23,6 +23,7 @@
            "財務規劃",
            "資產轉移"
        ],
        "suitability": 50       // åŒ¹é…åº¦
        "avgScore": 4.7,
        "contactStatus": null,
        "updateTime": null,
@@ -40,6 +41,7 @@
            "節稅",
            "樂活退休"
        ],
        "suitability": 100         // åŒ¹é…åº¦
        "avgScore": 3.8,
        "contactStatus": null,
        "updateTime": null,
pamapi/src/doc/ÅU°ÝAPI/«È¤áªºÅU°Ý²M³æ.txt
@@ -18,6 +18,7 @@
        "contactStatus": "reserved",        // å¯é€²è¡Œç‹€æ…‹ï¼špicked (進行預約)、reserved (已預約)、contacted (已連繫)
        "createTime": "2021-12-02T10:55:53.939Z",   // åŠ å…¥é¡§å•æ¸…å–®æ™‚é–“
        "updateTime": "2021-12-02T10:56:32.741Z",   // æœ€è¿‘更新時間
        "customerViewTime": "2021-12-13T02:20:52.932Z", // å®¢æˆ¶æŸ¥çœ‹æ™‚é–“
        "role": "威盛保險經紀人",
        "seniority": "22 å¹´ 8 æœˆ",
        "appointments": [       // å®¢æˆ¶å·²é ç´„的顧問清單
@@ -42,8 +43,7 @@
                "consultantReadTime": null,
                "satisfactionScore":3 // null ä»£è¡¨è©²ç­†é ç´„單尚未填寫滿意度
            }
        ],
        "new": true
        ]
    },
    {
        "agentNo": "B282677963",
@@ -61,6 +61,7 @@
        "contactStatus": "reserved",
        "createTime": "2021-12-02T10:55:57.423Z",
        "updateTime": "2021-12-02T10:56:56.946Z",
        "customerViewTime": "2021-12-13T02:20:52.932Z", // å®¢æˆ¶æŸ¥çœ‹æ™‚é–“
        "role": "錠嵂保險經紀人",
        "seniority": "30 å¹´ 8 æœˆ",
        "appointments": [
@@ -85,8 +86,7 @@
                "consultantReadTime": null,
                "satisfactionScore":3 // null ä»£è¡¨è©²ç­†é ç´„單尚未填寫滿意度
            }
        ],
        "new": true
        ]
    },
    {
        "agentNo": "R221444250",
@@ -104,10 +104,10 @@
        "contactStatus": "picked",
        "createTime": "2021-12-02T10:56:01.004Z",
        "updateTime": null,
        "customerViewTime": "2021-12-13T02:20:52.932Z", // å®¢æˆ¶æŸ¥çœ‹æ™‚é–“
        "role": "台名保險經紀人",
        "seniority": "38 å¹´ ",
        "appointments": [],
        "new": true
        "appointments": []
    },
    {
        "agentNo": "Z152717443",
@@ -125,8 +125,8 @@
        "contactStatus": "picked",
        "createTime": "2021-12-02T10:56:04.620Z",
        "updateTime": null,
        "customerViewTime": "2021-12-13T02:20:52.932Z", // å®¢æˆ¶æŸ¥çœ‹æ™‚é–“
        "role": "和泰保險經紀人",
        "appointments": [],
        "new": true
        "appointments": []
    }
]
pamapi/src/doc/ÅU°ÝAPI/§Ö³t¿z¿ï.txt
@@ -5,7 +5,8 @@
    "gender": "female",
    "communicationStyles": [],
    "avgScore": 4,
    "status": "online"
    "status": "online",
    "seniority": "SENIOR"   // "資深"帶"SENIOR"、"年輕"帶"YOUNG"、"不限"帶"UNLIMITED"
}
response body:
pamapi/src/doc/ÅU°ÝAPI/«ü©wÅU°Ý¸Ô²Ó¸ê°T.txt
@@ -2,27 +2,21 @@
response body:
{
    "name": "測試推薦業務員",
    "agentNo": "12345",
    "role": "保險經紀人",
    "img": "",
    "avgScore": 4.7,
    "title": "專案經理",
    "phoneNumber": "0912345678",
    "serveArea": "台北市地區",
    "companyAddress": "台北市信義區忠孝東路一段1號",
    "latestLoginTime": "2021-11-29T07:39:22.135Z",      // è‹¥ç„¡æœ€å¾Œç™»å…¥ç´€éŒ„則會帶null
    "seniority": "4å¹´2個月",
    "suitability": 0,
    "evaluation": 0,
    "expertise": [
        "財務規劃",
        "資產轉移"
    ],
    "concept": "壽險路上沒有捷徑,唯有給客戶信任感、安全感,才是最好的方法。從業以來,我一直秉持著「助人為快樂之本」的信念堅持著,她相信,一個好的業務人員,必須抱持著一顆熱心助人的心,才是永續經營壽險事業的不二法門。",
    "experiences": [
        "台大財金系",
        "美莓有精算師執政"
    ],
    "awards": "入選:2020年伯樂十大最佳業務員 æ“æœ‰è­‰ç…§ï¼šäººèº«ä¿éšªæ¥­å‹™å“¡è­‰ç…§ã€å¤–幣收付保險證照、人身保險代理人證照、財產保險代理人證照"
  "name" : "崔寨",
  "agentNo" : "R221444250",
  "role" : "台名保險經紀人",
  "avgScore" : 3.1,
  "title" : "處經理(DM)",
  "phoneNumber" : "0987168787",
  "serveArea" : "南投縣、高雄市、屏東縣",
  "companyAddress" : "花蓮縣玉里鎮中正路30號9樓",
  "latestLoginTime" : "2021-12-24T08:48:21.497Z",
  "seniority" : "38 å¹´ ",
  "evaluation" : 50,
  "expertise" : [ "健康與保障", "子女教育", "資產規劃", "樂活退休", "保單健檢/規劃", "分紅保單" ],
  "concept" : "每份保單規劃從「心」出發\r\n用心、熱心、貼心對待每位客戶\r\n\r\n我的三大信念\r\n◆ é«˜cp值 ã€Œä½Žä¿è²»ã€é«˜ä¿éšœã€\r\n◆ ç°¡å–®åŒ– ã€Œè¼•鬆、易懂保險」\r\n◆ å®¢è£½åŒ– ã€Œé¸ä¸€ä»½é©åˆçš„規劃」\r\n\r\n提供完善的規劃保護您及所愛的人",
  "experiences" : "麻省理工學院投資與金融學系,政大EMBA,中原大學財金系,人身保險證照,財產保險證照,投資型保單證照,外幣收付保險證照,退休金類精算師證照,產物保險理賠人員考試證書,美國壽險管理師證書,美國壽險理賠師證書,美國財產和意外險承保師證書",
  "awards" : "20次國際繼續率獎(IQA)\r\n30次百萬圓桌協會(MDRT)會員\r\n理財規劃顧問認證(CFP)",
  "gender" : "female",
  "communicationStyle" : "謹慎務實、明快主動、耐心傾聽、健談風趣"
}
pamapi/src/doc/ÅU°ÝAPI/¬ö¿ý«È¤á¬d¬ÝÅU°Ý²M³æªºview_time API.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
http post:
http://localhost:8080/api/consultant/favorite/view
no request body
response body: 204 NO_CONTENT
pamapi/src/doc/ÅU°ÝAPI/½s¿è­×§ïÅU°Ý¸ê®Æ.txt
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,26 @@
需要顧問本人登入才可以修改自己的資料
http post :
http://localhost:8080/api/consultant/edit
request body :
{
    "agentNo":"A568420",
    "name":"謝霆風",
    "expertise":["健康與保障","子女教育"],
    "title":"業務專員 (SC)",
    "role":"台名保險經紀人",
    "serveArea":"台北市、屏東縣",
    "gender":"male",
    "phoneNumber":"09123456789",
    "companyAddress":"宜蘭縣五結鄉三興路3號3樓",
    "seniorityYear":40,
    "seniorityMonth":10,
    "concept":"我秉持:❤不強迫推銷並且持續的服務!❤立場優勢替客戶捍衛應有的權益!❤天底下沒有最好的保險 åªæœ‰æœ€é©åˆè‡ªå·±çš„保險!",
    "experiences":"健康與保障,子女教育,資產規劃",
    "awards":"26次國際繼續率獎(IQA)",
    "communicationStyle":"聰明",
    "photoBase64":"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"
}
pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcess.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,57 @@
package com.pollex.pam.appointment.process;
import java.time.Instant;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.pollex.pam.domain.Appointment;
import com.pollex.pam.domain.AppointmentClosedInfo;
import com.pollex.pam.enums.ContactStatusEnum;
import com.pollex.pam.repository.AppointmentClosedInfoRepository;
import com.pollex.pam.repository.AppointmentRepository;
import com.pollex.pam.service.AppointmentClosedInfoService;
import com.pollex.pam.service.AppointmentService;
import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
import com.pollex.pam.service.dto.DoneProcessDTO;
@Service
public class AppointmentProcess{
    @Autowired
    List<AppointmentProcessInterface> processList;
    @Autowired
    AppointmentService appointmentService;
    @Autowired
    AppointmentRepository appointmentRepository;
    @Autowired
    AppointmentClosedInfoRepository appointmentClosedInfoRepository;
    public void process(AbstractAppointmentProcessDTO dto) {
        processList.stream().forEach(process ->{
            if(process.getProcessType() == dto.getContactStatus()) {
                Optional<AppointmentClosedInfo> closedInfoOP = appointmentClosedInfoRepository.findByAppointmentId(dto.getAppointmentId());
                if(closedInfoOP.isPresent()) {
                    process.editClosedInfo(dto, closedInfoOP.get());
                }else {
                    process.create(dto);
                }
            }
        });
        changeAppointmentCommunicateStatus(dto.getAppointmentId(), dto.getContactStatus());
    }
    private void changeAppointmentCommunicateStatus(Long appointmentId, ContactStatusEnum contactStatus) {
        Appointment appointment = appointmentService.findById(appointmentId);
        appointment.setCommunicateStatus(contactStatus);
        appointmentRepository.save(appointment);
    }
}
pamapi/src/main/java/com/pollex/pam/appointment/process/AppointmentProcessInterface.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,14 @@
package com.pollex.pam.appointment.process;
import com.pollex.pam.domain.AppointmentClosedInfo;
import com.pollex.pam.enums.ContactStatusEnum;
import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
public interface AppointmentProcessInterface {
    AppointmentClosedInfo create(AbstractAppointmentProcessDTO dto);
    AppointmentClosedInfo editClosedInfo(AbstractAppointmentProcessDTO dto
            , AppointmentClosedInfo closedInfo);
    ContactStatusEnum getProcessType();
}
pamapi/src/main/java/com/pollex/pam/appointment/process/ClosedProcess.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,65 @@
package com.pollex.pam.appointment.process;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.pollex.pam.domain.Appointment;
import com.pollex.pam.domain.AppointmentClosedInfo;
import com.pollex.pam.enums.ContactStatusEnum;
import com.pollex.pam.repository.AppointmentClosedInfoRepository;
import com.pollex.pam.service.AppointmentClosedInfoService;
import com.pollex.pam.service.AppointmentService;
import com.pollex.pam.service.SatisfactionService;
import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
import com.pollex.pam.service.dto.ClosedProcessDTO;
@Service
@Transactional
public class ClosedProcess implements AppointmentProcessInterface{
    @Autowired
    AppointmentClosedInfoRepository appointmentClosedInfoRepository;
    @Autowired
    AppointmentService appointmentService;
    @Autowired
    AppointmentClosedInfoService appointmentClosedInfoService;
    @Autowired
    SatisfactionService satisfactionService;
    @Override
    public AppointmentClosedInfo create(AbstractAppointmentProcessDTO processDTO) {
        ClosedProcessDTO closeProcess = toClosedProcessDTO(processDTO);
        AppointmentClosedInfo closedInfo = new AppointmentClosedInfo();
        BeanUtils.copyProperties(closeProcess, closedInfo);
        Appointment appointment = appointmentService.findById(processDTO.getAppointmentId());
        satisfactionService.createAppointmentSatisfaction(appointment);
        return appointmentClosedInfoRepository.save(closedInfo);
    }
    private ClosedProcessDTO toClosedProcessDTO(AbstractAppointmentProcessDTO processDTO) {
        ClosedProcessDTO closeProcess = (ClosedProcessDTO)processDTO;
        BeanUtils.copyProperties(processDTO, closeProcess);
        return closeProcess;
    }
    @Override
    public ContactStatusEnum getProcessType() {
        return ContactStatusEnum.CLOSED;
    }
    @Override
    public AppointmentClosedInfo editClosedInfo(
            AbstractAppointmentProcessDTO abstractDTO
            , AppointmentClosedInfo closedInfo) {
        ClosedProcessDTO closeProcess =  toClosedProcessDTO(abstractDTO);
        BeanUtils.copyProperties(closeProcess, closedInfo);
        return appointmentClosedInfoRepository.save(closedInfo);
    }
}
pamapi/src/main/java/com/pollex/pam/appointment/process/DoneProcess.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,64 @@
package com.pollex.pam.appointment.process;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.pollex.pam.domain.Appointment;
import com.pollex.pam.domain.AppointmentClosedInfo;
import com.pollex.pam.enums.ContactStatusEnum;
import com.pollex.pam.repository.AppointmentClosedInfoRepository;
import com.pollex.pam.service.AppointmentClosedInfoService;
import com.pollex.pam.service.AppointmentService;
import com.pollex.pam.service.SatisfactionService;
import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO;
import com.pollex.pam.service.dto.DoneProcessDTO;
@Service
@Transactional
public class DoneProcess implements AppointmentProcessInterface{
    @Autowired
    AppointmentClosedInfoRepository appointmentClosedInfoRepository;
    @Autowired
    AppointmentClosedInfoService appointmentClosedInfoService;
    @Autowired
    SatisfactionService satisfactionService;
    @Autowired
    AppointmentService appointmentService;
    @Override
    public AppointmentClosedInfo create(AbstractAppointmentProcessDTO processDTO) {
        DoneProcessDTO doneProcess = toDoneProcessDTO(processDTO);
        AppointmentClosedInfo closedInfo = new AppointmentClosedInfo();
        BeanUtils.copyProperties(doneProcess, closedInfo);
        Appointment appointment = appointmentService.findById(processDTO.getAppointmentId());
        satisfactionService.createAppointmentSatisfaction(appointment);
        return appointmentClosedInfoRepository.save(closedInfo);
    }
    @Override
    public ContactStatusEnum getProcessType() {
        return ContactStatusEnum.DONE;
    }
    @Override
    public AppointmentClosedInfo editClosedInfo(
            AbstractAppointmentProcessDTO abstractDTO
            , AppointmentClosedInfo closedInfo) {
        DoneProcessDTO doneProcess =  toDoneProcessDTO(abstractDTO);
        BeanUtils.copyProperties(doneProcess, closedInfo);
        return appointmentClosedInfoRepository.save(closedInfo);
    }
    private DoneProcessDTO toDoneProcessDTO(AbstractAppointmentProcessDTO abstractDTO) {
        DoneProcessDTO doneProcess = (DoneProcessDTO)abstractDTO;
        BeanUtils.copyProperties(abstractDTO, doneProcess);
        return doneProcess;
    }
}
pamapi/src/main/java/com/pollex/pam/config/ApplicationProperties.java
@@ -1,5 +1,6 @@
package com.pollex.pam.config;
import com.pollex.pam.enums.SendEmailMsgMethod;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
@@ -18,6 +19,10 @@
    private String eServiceLoginUrl;
    private String eServiceLoginFunc;
    private String eServiceLoginSys;
    private String frontEndDomain;
    private SMS sms;
    private Email email;
    private String fileFolderPath;
    public boolean isMockLogin() {
        return mockLogin;
@@ -74,4 +79,141 @@
    public void seteServiceLoginSys(String eServiceLoginSys) {
        this.eServiceLoginSys = eServiceLoginSys;
    }
    public String getFrontEndDomain() {
        return frontEndDomain;
    }
    public void setFrontEndDomain(String frontEndDomain) {
        this.frontEndDomain = frontEndDomain;
    }
    public SMS getSms() {
        return sms;
    }
    public void setSms(SMS sms) {
        this.sms = sms;
    }
    public Email getEmail() {
        return email;
    }
    public void setEmail(Email email) {
        this.email = email;
    }
    public static class SMS {
        private String url;
        private String sourceCode;
        private String sender;
        private String smsType;
        private String subject;
        private boolean sendNotifyMsg;
        public String getUrl() {
            return url;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        public String getSourceCode() {
            return sourceCode;
        }
        public void setSourceCode(String sourceCode) {
            this.sourceCode = sourceCode;
        }
        public String getSender() {
            return sender;
        }
        public void setSender(String sender) {
            this.sender = sender;
        }
        public String getSmsType() {
            return smsType;
        }
        public void setSmsType(String smsType) {
            this.smsType = smsType;
        }
        public String getSubject() {
            return subject;
        }
        public void setSubject(String subject) {
            this.subject = subject;
        }
        public boolean isSendNotifyMsg() {
            return sendNotifyMsg;
        }
        public void setSendNotifyMsg(boolean sendNotifyMsg) {
            this.sendNotifyMsg = sendNotifyMsg;
        }
    }
    public static class Email {
        private String url;
        private String functionId;
        private String senderEmail;
        private boolean sendNotifyMsg;
        private SendEmailMsgMethod method;
        public String getUrl() {
            return url;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        public String getFunctionId() {
            return functionId;
        }
        public void setFunctionId(String functionId) {
            this.functionId = functionId;
        }
        public String getSenderEmail() {
            return senderEmail;
        }
        public void setSenderEmail(String senderEmail) {
            this.senderEmail = senderEmail;
        }
        public boolean isSendNotifyMsg() {
            return sendNotifyMsg;
        }
        public void setSendNotifyMsg(boolean sendNotifyMsg) {
            this.sendNotifyMsg = sendNotifyMsg;
        }
        public SendEmailMsgMethod getMethod() {
            return method;
        }
        public void setMethod(SendEmailMsgMethod method) {
            this.method = method;
        }
    }
    public String getFileFolderPath() {
        return fileFolderPath;
    }
    public void setFileFolderPath(String fileFolderPath) {
        this.fileFolderPath = fileFolderPath;
    }
}
pamapi/src/main/java/com/pollex/pam/config/Constants.java
@@ -11,5 +11,26 @@
    public static final String SYSTEM = "system";
    public static final String DEFAULT_LANGUAGE = "zh-tw";
    /**
     * é›»è©±åŠemail在建立預約單(T)後的N天視為未處理預約單
     * ç›®å‰N皆暫定為2
     */
    public static final int APPOINTMENT_PENDING_PHONE_INTERVAL = 2;
    public static final int APPOINTMENT_PENDING_EMAIL_INTERVAL = 2;
    /**
     * é›»è©±åŠemail在建立預約單(T)後的N天會被視為未處理預約單,當天批次會發送提醒給顧問
     * è€Œåœ¨å¾Œä¸€å¤©(T+N+1),就會發送批次給客戶告知 è©²é¡§å•å¯èƒ½å¿™ç¢Œç„¡æ³•處理,是否需要取消
     */
    public static final int APPOINTMENT_EXPIRING_PHONE_INTERVAL = APPOINTMENT_PENDING_PHONE_INTERVAL + 1;
    public static final int APPOINTMENT_EXPIRING_EMAIL_INTERVAL = APPOINTMENT_PENDING_EMAIL_INTERVAL + 1;
    /**
     * é€šçŸ¥å®¢æˆ¶çš„æ¬¡æ•¸é™åˆ¶
     */
    public static final int SEND_EXPIRING_NOTIFY_LIMIT = 1;
    public static final String SPRING_PROFILE_POLLEX_DEVELOPMENT = "pollex";
    private Constants() {}
}
pamapi/src/main/java/com/pollex/pam/config/SecurityConfiguration.java
@@ -75,13 +75,14 @@
            .deny()
        .and()
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
        .and()
            .authorizeRequests()
            .antMatchers("/api/authenticate").permitAll()
            .antMatchers("/api/register").permitAll()
            .antMatchers("/api/activate").permitAll()
            .antMatchers("/api/testLogin/**").permitAll()
            .antMatchers("/api/test/sendMsg/**").permitAll()
            .antMatchers("/api/otp/**").permitAll()
            .antMatchers("/api/login/validate/**").permitAll()
            .antMatchers("/api/eService/authenticate").permitAll()
pamapi/src/main/java/com/pollex/pam/domain/Appointment.java
@@ -2,14 +2,29 @@
import java.io.Serializable;
import java.time.Instant;
import java.util.List;
import javax.persistence.*;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import com.pollex.pam.enums.AppointmentStatusEnum;
import com.pollex.pam.enums.ContactStatusEnum;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import com.pollex.pam.enums.AppointmentStatusEnum;
import com.pollex.pam.enums.ContactStatusEnum;
@EntityListeners(AuditingEntityListener.class)
@Entity
@@ -58,11 +73,11 @@
    @CreatedDate
    @Column(name = "appointment_date", updatable = false)
    private Instant appointmentDate;
    private Instant appointmentDate = Instant.now();
    @LastModifiedDate
    @Column(name = "last_modified_date")
    private Instant lastModifiedDate;
    @LastModifiedDate
    private Instant lastModifiedDate = Instant.now();
    @Column(name = "agent_no")
    private String agentNo;
@@ -82,6 +97,19 @@
    @Enumerated(value = EnumType.STRING)
    @Column(name = "status")
    private AppointmentStatusEnum status;
    @JoinColumn(name = "appointment_id")
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
    private List<AppointmentMemo> appointmentMemoList;
//    @OneToOne(cascade = CascadeType.REMOVE,fetch=FetchType.EAGER)
////    @JoinColumn(name = "form_authority_id", referencedColumnName = "id")
//    @JoinColumn(name = "appointment_id", referencedColumnName = "id")
//    private AppointmentClosedInfo closedInfo;
//    @OneToOne(cascade = CascadeType.REMOVE
//            , mappedBy = "appointment", fetch=FetchType.LAZY)
//    private AppointmentClosedInfo closedInfo;
    public Long getId() {
        return id;
@@ -234,4 +262,24 @@
    public void setLastModifiedDate(Instant lastModifiedDate) {
        this.lastModifiedDate = lastModifiedDate;
    }
    public List<AppointmentMemo> getAppointmentMemoList() {
        return appointmentMemoList;
    }
    public void setAppointmentMemoList(List<AppointmentMemo> appointmentMemoList) {
        this.appointmentMemoList = appointmentMemoList;
    }
//    public AppointmentClosedInfo getClosedInfo() {
//        return closedInfo;
//    }
//
//    public void setClosedInfo(AppointmentClosedInfo closedInfo) {
//        this.closedInfo = closedInfo;
//    }
}
pamapi/src/main/java/com/pollex/pam/domain/AppointmentClosedInfo.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,112 @@
package com.pollex.pam.domain;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "appointment_closed_info")
public class AppointmentClosedInfo implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "policyholder_identity_id")
    private String policyholderIdentityId;
    @Column(name = "plan_code")
    private String planCode;
    @Column(name = "policy_entry_date")
    private Date policyEntryDate;
    @Column(name = "remark")
    private String remark;
    @Column(name = "closed_reason")
    private String closedReason;
    @Column(name = "closed_other_reason")
    private String closedOtherReason;
    @Column(name = "appointment_id")
    private Long appointmentId;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getPolicyholderIdentityId() {
        return policyholderIdentityId;
    }
    public void setPolicyholderIdentityId(String policyholderIdentityId) {
        this.policyholderIdentityId = policyholderIdentityId;
    }
    public String getPlanCode() {
        return planCode;
    }
    public void setPlanCode(String planCode) {
        this.planCode = planCode;
    }
    public Date getPolicyEntryDate() {
        return policyEntryDate;
    }
    public void setPolicyEntryDate(Date policyEntryDate) {
        this.policyEntryDate = policyEntryDate;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getClosedReason() {
        return closedReason;
    }
    public void setClosedReason(String closedReason) {
        this.closedReason = closedReason;
    }
    public String getClosedOtherReason() {
        return closedOtherReason;
    }
    public void setClosedOtherReason(String closedOtherReason) {
        this.closedOtherReason = closedOtherReason;
    }
    public Long getAppointmentId() {
        return appointmentId;
    }
    public void setAppointmentId(Long appointmentId) {
        this.appointmentId = appointmentId;
    }
}
pamapi/src/main/java/com/pollex/pam/domain/AppointmentCustomerView.java
@@ -2,12 +2,17 @@
import java.io.Serializable;
import java.time.Instant;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.pollex.pam.enums.AppointmentStatusEnum;
@@ -84,6 +89,10 @@
    @Enumerated(value = EnumType.STRING)
    @Column(name = "status")
    private AppointmentStatusEnum status;
    @JoinColumn(name = "appointment_id")
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
    private List<AppointmentMemo> appointmentMemoList;
    public Long getId() {
        return id;
@@ -243,4 +252,14 @@
    public void setStatus(AppointmentStatusEnum status) {
        this.status = status;
    }
    public List<AppointmentMemo> getAppointmentMemoList() {
        return appointmentMemoList;
    }
    public void setAppointmentMemoList(List<AppointmentMemo> appointmentMemoList) {
        this.appointmentMemoList = appointmentMemoList;
    }
}
pamapi/src/main/java/com/pollex/pam/domain/AppointmentExpiringNotifyRecord.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,46 @@
package com.pollex.pam.domain;
import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
@Entity
@Table(name = "appointment_expiring_notify_record")
public class AppointmentExpiringNotifyRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "appointment_id")
    private Long appointmentId;
    @Column(name = "send_time")
    private Instant sendTime;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Long getAppointmentId() {
        return appointmentId;
    }
    public void setAppointmentId(Long appointmentId) {
        this.appointmentId = appointmentId;
    }
    public Instant getSendTime() {
        return sendTime;
    }
    public void setSendTime(Instant sendTime) {
        this.sendTime = sendTime;
    }
}
pamapi/src/main/java/com/pollex/pam/domain/AppointmentMemo.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,57 @@
package com.pollex.pam.domain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "appointment_memo")
public class AppointmentMemo extends AbstractAuditingEntity implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "content")
    private String content;
    @Column(name = "appointment_id")
    private Long appointmentId;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Long getAppointmentId() {
        return appointmentId;
    }
    public void setAppointmentId(Long appointmentId) {
        this.appointmentId = appointmentId;
    }
}
pamapi/src/main/java/com/pollex/pam/domain/AppointmentNoticeLog.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,135 @@
package com.pollex.pam.domain;
import java.io.Serializable;
import java.time.Instant;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity
@Table(name = "appointment_notice_log")
public class AppointmentNoticeLog implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "phone")
    private String phone;
    @Column(name = "email")
    private String email;
    @Column(name = "appointment_id")
    private Long appointmentId;
//    @Column(name = "type")
//    private String type;
    @Column(name = "content")
    private String content;
//    @CreatedBy
//    @Column(name = "created_by", nullable = false, length = 50, updatable = false)
//    @JsonIgnore
//    private String createdBy;
    @CreatedDate
    @Column(name = "created_date", updatable = false)
    private Instant createdDate = Instant.now();
    @Column(name = "interview_date")
    private Date interviewDate;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public Long getAppointmentId() {
        return appointmentId;
    }
    public void setAppointmentId(Long appointmentId) {
        this.appointmentId = appointmentId;
    }
//    public String getType() {
//        return type;
//    }
//
//    public void setType(String type) {
//        this.type = type;
//    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
//    public String getCreatedBy() {
//        return createdBy;
//    }
//
//    public void setCreatedBy(String createdBy) {
//        this.createdBy = createdBy;
//    }
    public Instant getCreatedDate() {
        return createdDate;
    }
    public void setCreatedDate(Instant createdDate) {
        this.createdDate = createdDate;
    }
    public Date getInterviewDate() {
        return interviewDate;
    }
    public void setInterviewDate(Date interviewDate) {
        this.interviewDate = interviewDate;
    }
}
pamapi/src/main/java/com/pollex/pam/domain/Consultant.java
@@ -71,6 +71,9 @@
    @Column(name = "communication_style")
    private String communicationStyle;
    @Column(name = "email")
    private String email;
    public Long getId() {
        return id;
    }
@@ -164,7 +167,7 @@
    }
    public void setCompanyAddress(String companyAddress) {
        companyAddress = companyAddress;
        this.companyAddress = companyAddress;
    }
    public Long getSeniorityYear() {
@@ -230,6 +233,14 @@
        this.communicationStyle = communicationStyle;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "Consultant{" +
@@ -245,13 +256,14 @@
            ", gender=" + gender +
            ", phoneNumber='" + phoneNumber + '\'' +
            ", companyAddress='" + companyAddress + '\'' +
            ", seniorityYear='" + seniorityYear + '\'' +
            ", seniorityMonth='" + seniorityMonth + '\'' +
            ", seniorityYear=" + seniorityYear +
            ", seniorityMonth=" + seniorityMonth +
            ", concept='" + concept + '\'' +
            ", experience='" + experience + '\'' +
            ", award='" + award + '\'' +
            ", recommend=" + recommend +
            ", communicationStyle='" + communicationStyle + '\'' +
            ", email='" + email + '\'' +
            '}';
    }
}
pamapi/src/main/java/com/pollex/pam/domain/CustomerFavoriteConsultant.java
@@ -1,11 +1,20 @@
package com.pollex.pam.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.Serializable;
import java.time.Instant;
@EntityListeners(AuditingEntityListener.class)
@Entity
@Table(name = "customer_favorite_consultant")
public class CustomerFavoriteConsultant extends AbstractAuditingEntity implements Serializable {
public class CustomerFavoriteConsultant implements Serializable {
    private static final long serialVersionUID = 1L;
@@ -20,6 +29,28 @@
    @Column(name = "customer_id")
    private Long customerId;
    @CreatedBy
    @Column(name = "created_by", updatable = false)
    @JsonIgnore
    private String createdBy;
    @CreatedDate
    @Column(name = "created_date", updatable = false)
    @JsonIgnore
    private Instant createdDate = Instant.now();
    @LastModifiedBy
    @Column(name = "last_modified_by")
    @JsonIgnore
    private String lastModifiedBy;
    @Column(name = "last_modified_date")
    @JsonIgnore
    private Instant lastModifiedDate = Instant.now();
    @Column(name = "view_time")
    private Instant viewTime;
    public Long getId() {
        return id;
@@ -45,12 +76,57 @@
        this.customerId = customId;
    }
    public Instant getViewTime() {
        return viewTime;
    }
    public void setViewTime(Instant viewTime) {
        this.viewTime = viewTime;
    }
    public String getCreatedBy() {
        return createdBy;
    }
    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }
    public Instant getCreatedDate() {
        return createdDate;
    }
    public void setCreatedDate(Instant createdDate) {
        this.createdDate = createdDate;
    }
    public String getLastModifiedBy() {
        return lastModifiedBy;
    }
    public void setLastModifiedBy(String lastModifiedBy) {
        this.lastModifiedBy = lastModifiedBy;
    }
    public Instant getLastModifiedDate() {
        return lastModifiedDate;
    }
    public void setLastModifiedDate(Instant lastModifiedDate) {
        this.lastModifiedDate = lastModifiedDate;
    }
    @Override
    public String toString() {
        return "CustomerFavoriteConsultant{" +
            "id=" + id +
            ", consultant=" + consultant +
            ", customerId=" + customerId +
            ", createdBy='" + createdBy + '\'' +
            ", createdDate=" + createdDate +
            ", lastModifiedBy='" + lastModifiedBy + '\'' +
            ", lastModifiedDate=" + lastModifiedDate +
            ", viewTime=" + viewTime +
            '}';
    }
}
pamapi/src/main/java/com/pollex/pam/domain/InterviewRecord.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,87 @@
package com.pollex.pam.domain;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import com.pollex.pam.enums.InterviewRecordStatusEnum;
@Entity
@Table(name = "interview_record")
public class InterviewRecord extends AbstractAuditingEntity implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "content")
    private String content;
    @Column(name = "interview_date")
    private Date interviewDate;
    @Column(name = "appointment_id")
    private Long appointmentId;
    @Enumerated(EnumType.STRING)
    @Column(name = "status")
    private InterviewRecordStatusEnum status;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Date getInterviewDate() {
        return interviewDate;
    }
    public void setInterviewDate(Date interviewDate) {
        this.interviewDate = interviewDate;
    }
    public Long getAppointmentId() {
        return appointmentId;
    }
    public void setAppointmentId(Long appointmentId) {
        this.appointmentId = appointmentId;
    }
    public InterviewRecordStatusEnum getStatus() {
        return status;
    }
    public void setStatus(InterviewRecordStatusEnum status) {
        this.status = status;
    }
}
pamapi/src/main/java/com/pollex/pam/domain/PersonalNotification.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,123 @@
package com.pollex.pam.domain;
import java.io.Serializable;
import java.time.Instant;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.data.annotation.CreatedDate;
import com.pollex.pam.enums.NotificationTypeEnum;
import com.pollex.pam.enums.PersonalNotificationRoleEnum;
@Entity
@Table(name = "personal_notification")
public class PersonalNotification implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "title")
    private String title;
    @Column(name = "content")
    private String content;
    @Enumerated(EnumType.STRING)
    @Column(name = "notification_type")
    private NotificationTypeEnum notificationType;
    @Enumerated(EnumType.STRING)
    @Column(name = "owner_role")
    private PersonalNotificationRoleEnum ownerRole;
    @Column(name = "owner_id")
    private Long ownerId;
    @CreatedDate
    @Column(name = "created_date", updatable = false)
    private Instant createdDate = Instant.now();
    @Column(name = "read_date")
    private Instant readDate;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public NotificationTypeEnum getNotificationType() {
        return notificationType;
    }
    public void setNotificationType(NotificationTypeEnum notificationType) {
        this.notificationType = notificationType;
    }
    public PersonalNotificationRoleEnum getOwnerRole() {
        return ownerRole;
    }
    public void setOwnerRole(PersonalNotificationRoleEnum ownerRole) {
        this.ownerRole = ownerRole;
    }
    public Long getOwnerId() {
        return ownerId;
    }
    public void setOwnerId(Long ownerId) {
        this.ownerId = ownerId;
    }
    public Instant getCreatedDate() {
        return createdDate;
    }
    public void setCreatedDate(Instant createdDate) {
        this.createdDate = createdDate;
    }
    public Instant getReadDate() {
        return readDate;
    }
    public void setReadDate(Instant readDate) {
        this.readDate = readDate;
    }
}
pamapi/src/main/java/com/pollex/pam/domain/Satisfaction.java
@@ -12,6 +12,8 @@
import javax.persistence.Id;
import javax.persistence.Table;
import com.pollex.pam.enums.PersonalNotificationRoleEnum;
import com.pollex.pam.enums.SatisfactionTypeEnum;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
@@ -56,6 +58,10 @@
    @Column(name = "appointment_id")
    private Long appointmentId;
    @Enumerated(EnumType.STRING)
    @Column(name = "type")
    private SatisfactionTypeEnum type;
    public Long getId() {
        return id;
@@ -120,4 +126,12 @@
    public void setAppointmentId(Long appointmentId) {
        this.appointmentId = appointmentId;
    }
    public SatisfactionTypeEnum getType() {
        return type;
    }
    public void setType(SatisfactionTypeEnum type) {
        this.type = type;
    }
}
pamapi/src/main/java/com/pollex/pam/enums/ContactStatusEnum.java
@@ -10,5 +10,14 @@
    RESERVED,
    @JsonProperty("contacted")
    CONTACTED
    CONTACTED,
    @JsonProperty("done")
    DONE,
    @JsonProperty("closed")
    CLOSED,
    @JsonProperty("cancel")
    CANCEL
}
pamapi/src/main/java/com/pollex/pam/enums/InterviewRecordStatusEnum.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
package com.pollex.pam.enums;
public enum InterviewRecordStatusEnum {
    AVAILABLE,
    DELETED
}
pamapi/src/main/java/com/pollex/pam/enums/NotificationTypeEnum.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
package com.pollex.pam.enums;
public enum NotificationTypeEnum {
    SYSTEM,
    ACTIVITY
}
pamapi/src/main/java/com/pollex/pam/enums/PersonalNotificationRoleEnum.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
package com.pollex.pam.enums;
public enum PersonalNotificationRoleEnum {
    CUSTOMER,
    CONSULTANT
}
pamapi/src/main/java/com/pollex/pam/enums/SatisfactionTypeEnum.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
package com.pollex.pam.enums;
public enum SatisfactionTypeEnum {
    APPOINTMENT,        // å°é¡§å•é ç´„的滿意度
    SYSTEM              // å°å¹³å°çš„æ»¿æ„åº¦
}
pamapi/src/main/java/com/pollex/pam/enums/SendEmailMsgMethod.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,6 @@
package com.pollex.pam.enums;
public enum SendEmailMsgMethod {
    PAM_EMAIL_SERVICE,
    POLLEX_GMAIL
}
pamapi/src/main/java/com/pollex/pam/repository/AppointmentClosedInfoRepository.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,15 @@
package com.pollex.pam.repository;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.pollex.pam.domain.AppointmentClosedInfo;
@Repository
public interface AppointmentClosedInfoRepository extends JpaRepository<AppointmentClosedInfo, Long>{
    Optional<AppointmentClosedInfo> findByAppointmentId(Long apId);
}
pamapi/src/main/java/com/pollex/pam/repository/AppointmentCustomerViewRepository.java
@@ -2,6 +2,9 @@
import java.util.List;
import com.pollex.pam.domain.Appointment;
import com.pollex.pam.enums.AppointmentStatusEnum;
import com.pollex.pam.enums.ContactStatusEnum;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@@ -11,4 +14,5 @@
public interface AppointmentCustomerViewRepository extends JpaRepository<AppointmentCustomerView, Long>{
    List<AppointmentCustomerView> findByAgentNo(String agentNo);
    List<AppointmentCustomerView> findByAgentNoAndCustomerId(String agentNo, Long customerId);
    List<AppointmentCustomerView> findAllByCommunicateStatusAndStatus(ContactStatusEnum contactStatus, AppointmentStatusEnum status);
}
pamapi/src/main/java/com/pollex/pam/repository/AppointmentExpiringNotifyRecordRepository.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,12 @@
package com.pollex.pam.repository;
import com.pollex.pam.domain.AppointmentExpiringNotifyRecord;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface AppointmentExpiringNotifyRecordRepository extends JpaRepository<AppointmentExpiringNotifyRecord, Long> {
    List<AppointmentExpiringNotifyRecord> findAllByAppointmentId(Long appointmentId);
}
pamapi/src/main/java/com/pollex/pam/repository/AppointmentMemoRepository.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,11 @@
package com.pollex.pam.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.pollex.pam.domain.AppointmentMemo;
@Repository
public interface AppointmentMemoRepository extends JpaRepository<AppointmentMemo, Long>{
}
pamapi/src/main/java/com/pollex/pam/repository/AppointmentNoticeLogRepository.java
¤ñ¹ï·sÀÉ®×
@@ -0,0 +1,15 @@
package com.pollex.pam.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.pollex.pam.domain.AppointmentNoticeLog;
@Repository
public interface AppointmentNoticeLogRepository extends JpaRepository<AppointmentNoticeLog, Long>{
    List<AppointmentNoticeLog> findByAppointmentId(Long appointmentId);
}
Diff truncated after the above file
pamapi/src/main/java/com/pollex/pam/repository/AppointmentRepository.java pamapi/src/main/java/com/pollex/pam/repository/InterviewRecordRepository.java pamapi/src/main/java/com/pollex/pam/repository/PersonalNotificationRepository.java pamapi/src/main/java/com/pollex/pam/repository/SatisfactionRepository.java pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java pamapi/src/main/java/com/pollex/pam/service/AppointmentClosedInfoService.java pamapi/src/main/java/com/pollex/pam/service/AppointmentMemoService.java pamapi/src/main/java/com/pollex/pam/service/AppointmentNoticeLogService.java pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java pamapi/src/main/java/com/pollex/pam/service/ConsultantQuerySpec.java pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java pamapi/src/main/java/com/pollex/pam/service/InterviewRecordService.java pamapi/src/main/java/com/pollex/pam/service/NoticeService.java pamapi/src/main/java/com/pollex/pam/service/PersonalNotificationService.java pamapi/src/main/java/com/pollex/pam/service/SatisfactionService.java pamapi/src/main/java/com/pollex/pam/service/ScheduleTaskService.java pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java pamapi/src/main/java/com/pollex/pam/service/dto/AbstractAppointmentProcessDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCloseDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentCustomerViewDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoCreateDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentMemoUpdateDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/AppointmentNoticeSendDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/ClosedProcessDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantDetailDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/ConsultantEditDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/CustomerFavoriteConsultantDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/DoneProcessDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/FastQueryConsultantParam.java pamapi/src/main/java/com/pollex/pam/service/dto/InterviewRecordDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/SMSDetail.java pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerCreateDTO.java (刪除) pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionCustomerScoreDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/SatisfactionDTO.java pamapi/src/main/java/com/pollex/pam/service/dto/SendMailRequest.java pamapi/src/main/java/com/pollex/pam/service/dto/SendMailResponse.java pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSRequest.java pamapi/src/main/java/com/pollex/pam/service/dto/SendSMSResponse.java pamapi/src/main/java/com/pollex/pam/service/dto/StrictQueryConsultantParam.java pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentCustomerViewMapper.java pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMapper.java pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentMemoMapper.java pamapi/src/main/java/com/pollex/pam/service/mapper/AppointmentNoticeSendMapper.java pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantDTOMapper.java pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java pamapi/src/main/java/com/pollex/pam/service/mapper/InterviewRecordMapper.java pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionDTOMapper.java pamapi/src/main/java/com/pollex/pam/service/mapper/SatisfactionMapper.java pamapi/src/main/java/com/pollex/pam/service/util/FileUtil.java pamapi/src/main/java/com/pollex/pam/service/util/HttpRequestUtil.java pamapi/src/main/java/com/pollex/pam/service/util/StringUtils.java pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentMemoResource.java pamapi/src/main/java/com/pollex/pam/web/rest/AppointmentResource.java pamapi/src/main/java/com/pollex/pam/web/rest/ConsultantResource.java pamapi/src/main/java/com/pollex/pam/web/rest/InterviewRecordResource.java pamapi/src/main/java/com/pollex/pam/web/rest/NoticeResource.java pamapi/src/main/java/com/pollex/pam/web/rest/PersonalNotificationResource.java pamapi/src/main/java/com/pollex/pam/web/rest/SatisfactionResource.java pamapi/src/main/java/com/pollex/pam/web/rest/TestSendMsgResource.java pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentClosedInfoNotFoundException.java pamapi/src/main/java/com/pollex/pam/web/rest/errors/AppointmentMemoNotFoundException.java pamapi/src/main/java/com/pollex/pam/web/rest/errors/InterviewRecordNotFoundException.java pamapi/src/main/java/com/pollex/pam/web/rest/errors/NotFoundExpiringAppointmentException.java pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionAlreadyExistException.java pamapi/src/main/java/com/pollex/pam/web/rest/errors/SatisfactionNotFoundException.java pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendEmailFailException.java pamapi/src/main/java/com/pollex/pam/web/rest/errors/SendSMSFailException.java pamapi/src/main/resources/config/application-dev.yml pamapi/src/main/resources/config/application-pollex.yml pamapi/src/main/resources/config/application-prod.yml pamapi/src/main/resources/config/application-sit.yml pamapi/src/main/resources/config/application-uat.yml pamapi/src/main/resources/i18n/messages.properties pamapi/src/main/resources/i18n/messages_zh_TW.properties pamapi/src/main/resources/static/consultant/consultant_A183619275.jpg pamapi/src/main/resources/static/consultant/consultant_AG0101234567.jpg pamapi/src/main/resources/static/consultant/consultant_AG0109051204.jpg pamapi/src/main/resources/static/consultant/consultant_AGAM11249699.jpg pamapi/src/main/resources/static/consultant/consultant_B282677963.jpg pamapi/src/main/resources/static/consultant/consultant_D265260662.jpg pamapi/src/main/resources/static/consultant/consultant_J149388015.jpg pamapi/src/main/resources/static/consultant/consultant_R221444250.jpg pamapi/src/main/resources/static/consultant/consultant_X147309614.jpg pamapi/src/main/resources/static/consultant/consultant_Z152717443.jpg pamapi/src/main/resources/templates/mail/appointmentExpiringNotifyEmail.html pamapi/src/main/resources/templates/mail/appointmentNotifyEmail.html pamapi/src/main/resources/templates/mail/appointmentPendingNotifyEmail.html pamapi/src/main/resources/templates/mail/writeSatisfactionNotice.html