Merge branch 'sit' into uat
刪除16個檔案
修改123個檔案
新增186個檔案
修改20個檔案名稱
| | |
| | | <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: 33)</small></h1> |
| | | <h1 class="mhmm mvm"><span class="fgc1">Font Name:</span> icomoon <small class="fgc1">(Glyphs: 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="" class="unitRight size1of2 talign-right" /> |
| | | <input type="text" readonly value="e922" class="unit size1of2" /> |
| | | <input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" /> |
| | | </fieldset> |
| | | <div class="fs0 bshadow0 clearfix hidden-true"> |
| | | <span class="unit pvs fgc1">liga: </span> |
| | |
| | | </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="" class="unitRight size1of2 talign-right" /> |
| | | <input type="text" readonly value="e923" class="unit size1of2" /> |
| | | <input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" /> |
| | | </fieldset> |
| | | <div class="fs0 bshadow0 clearfix hidden-true"> |
| | | <span class="unit pvs fgc1">liga: </span> |
| | |
| | | </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="" class="unitRight size1of2 talign-right" /> |
| | | <input type="text" readonly value="e924" class="unit size1of2" /> |
| | | <input type="text" maxlength="1" readonly value="" class="unitRight size1of2 talign-right" /> |
| | | </fieldset> |
| | | <div class="fs0 bshadow0 clearfix hidden-true"> |
| | | <span class="unit pvs fgc1">liga: </span> |
| | |
| | | </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="" 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="" 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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | </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" /> |
| | |
| | | <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="" 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="" 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="" 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="" 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]><!--> |
| | |
| | | <font-face units-per-em="1024" ascent="960" descent="-64" /> |
| | | <missing-glyph horiz-adv-x="1024" /> |
| | | <glyph unicode=" " horiz-adv-x="512" d="" /> |
| | | <glyph unicode="" 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="" 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="" 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="" 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="" 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" /> |
| | |
| | | <glyph unicode="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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="" 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> |
| | |
| | | {"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}} |
| | |
| | | @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; |
| | |
| | | -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 { |
| | |
| | | .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 { |
| | |
| | | .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"; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | $SKY_BLUE: #009CBD; |
| | | $LIGHT_BLUE: #8DB9CA; |
| | | $DARK_BLUE: #1B365D; |
| | | $LIGHT_RED: #DA3738; |
| | | $BEIGE: #A89968; |
| | | $PRUDENTIAL_GREY: #68737A; |
| | | $LIGHT_GREY: #D0D0CE; |
| | |
| | | // DEVICE BREAKPOINT |
| | | $DESKTOP_BREAKPOINT: 768px; |
| | | |
| | | $DESKTOP_NAV_BAR: 110px; |
| | | $DESKTOP_NAV_BAR: 90px; |
| | | $MOB_NAV_BAR: 53px; |
| | |
| | | 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 { |
| | |
| | | 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 { |
| | |
| | | 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; |
| | | } |
| | |
| | | color: $YELLOW; |
| | | } |
| | | } |
| | | |
| | | .down-icon { |
| | | color: #ED1B2E; |
| | | font-size: 25px; |
| | | align-self: center; |
| | | } |
| | |
| | | margin-bottom: 50px; |
| | | } |
| | | |
| | | .mt-50 { |
| | | margin-top: 50px; |
| | | } |
| | | |
| | | .mt-30 { |
| | | margin-top: 30px; |
| | | } |
| | |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | |
| | | .mt-10 { |
| | | margin-top: 10px; |
| | | } |
| | |
| | | |
| | | .mb-10 { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .ml-5 { |
| | | margin-left: 5px; |
| | | } |
| | | |
| | | .ml-10{ |
| | |
| | | |
| | | .mr-30{ |
| | | margin-right: 30px; |
| | | } |
| | | |
| | | .my-10 { |
| | | margin:10px 0; |
| | | } |
| | | |
| | | .pt-30 { |
| | |
| | | font-size: #{$fontSize} + 'px'; |
| | | } |
| | | } |
| | | |
| | | .text--break-all { |
| | | word-break: break-all |
| | | } |
| | |
| | | @import './elementUI/dialog'; |
| | | @import './elementUI/messageBox'; |
| | | @import './elementUI/input'; |
| | | @import './elementUI/tree'; |
| | | @import './elementUI/upload'; |
| | | @import './elementUI/textarea'; |
| | | @import './elementUI/dateTimePicker'; |
| | | @import './elementUI/select'; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | .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; |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .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; |
| | | } |
| | | } |
| | |
| | | .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; |
| | | } |
| | | } |
| | | } |
| | |
| | | .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){ |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | .pam-quickFilter-rate { |
| | | .pam-rate { |
| | | height: auto; |
| | | margin-top: 30px; |
| | | display: flex; |
| | | justify-content: center; |
| | | @extend .fix-chrome-click--issue; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .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; |
| | | } |
| | | } |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | .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; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | .el-textarea__inner { |
| | | border: 1px solid #707070; |
| | | padding: 10px 20px; |
| | | font-size: 18px; |
| | | &::placeholder { |
| | | font-size: 18px; |
| | | } |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | .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; |
| | | |
| | | // } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | .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; |
| | | } |
| | | } |
| | | } |
| | |
| | | <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> |
| | |
| | | |
| | | <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() { |
| | |
| | | ? true : false |
| | | } |
| | | } |
| | | </script> |
| | | </script> |
| | |
| | | <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 |
| | |
| | | <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)); |
| | |
| | | this.district = value; |
| | | } |
| | | |
| | | @Emit('confirm') |
| | | confirm() { |
| | | return this.district; |
| | | } |
| | | |
| | | |
| | | } |
| | | </script> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | <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]; |
| | |
| | | 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 = 'åé¦é '; |
| | |
| | | case 'notification': |
| | | featureLabel = 'éç¥'; |
| | | break; |
| | | case 'userReviewsRecord': |
| | | case 'record': |
| | | featureLabel = 'æ¥çç´é'; |
| | | break; |
| | |
| | | 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 { |
| | |
| | | } |
| | | } |
| | | |
| | | 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> |
| | |
| | | <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" |
| | |
| | | >(å®¢æ¶æªæä¾éæ±é
ç®)</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> |
| | | |
| | |
| | | <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: { |
| | |
| | | } |
| | | }) |
| | | 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(','); |
| | |
| | | if (this.client.gender) { |
| | | return this.client.gender === 'male' ? 'ç·æ§' : '女æ§'; |
| | | } |
| | | return '' |
| | | return ''; |
| | | } |
| | | |
| | | get hopeContactTime() { |
| | |
| | | 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 { |
| | |
| | | } |
| | | } |
| | | |
| | | 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] |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | |
| | | <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; |
| | |
| | | margin-left: 17px; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <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; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | .qa-dialog-footer{ |
| | | display: flex; |
| | | display : flex; |
| | | justify-content: center; |
| | | font-size: 20px; |
| | | color: red; |
| | | font-size : 20px; |
| | | color : red; |
| | | } |
| | | |
| | | .el-dialog__wrapper{ |
| | |
| | | } |
| | | |
| | | .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> |
| | |
| | | <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> |
| | |
| | | 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" |
| | |
| | | <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> |
| | |
| | | |
| | | <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) { |
| | |
| | | } |
| | | }) |
| | | 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; |
| | |
| | | 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 : '', |
| | |
| | | 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; |
| | |
| | | } |
| | | 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); |
| | | |
| | | }); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | 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); |
| | | }); |
| | | } |
| | | |
| | |
| | | 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 { |
| | |
| | | } |
| | | |
| | | .delete { |
| | | display: inline-block; |
| | | color: $PRIMARY_RED; |
| | | font-size: 14px; |
| | | font-weight: bold; |
| | |
| | | } |
| | | } |
| | | |
| | | .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; |
| | |
| | | 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> |
| | |
| | | <template> |
| | | <div> |
| | | |
| | | <template v-if="agentList.length > 0"> |
| | | <ConsultantCard |
| | | v-for="(agent, index) in agentList" |
| | |
| | | :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> |
| | |
| | | </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(); |
| | | } |
| | | |
| | | } |
| | |
| | | :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> |
| | |
| | | <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, |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | | |
| | | clkItem(loopIndex: number, realIndex: number) { |
| | | const agentNo = this.agents[loopIndex].agentNo; |
| | |
| | | height: 100%; |
| | | |
| | | &:after { |
| | | display: none; |
| | | } |
| | | |
| | | .icon-right,.icon-left { |
| | | font-size: 20px; |
| | | font-weight: bold; |
| | | color: #707A81; |
| | | color: $CORAL; |
| | | } |
| | | |
| | | &.swiper-button-disabled { |
¤ñ¹ï·sÀÉ®× |
| | |
| | | |
| | | |
| | | <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> |
| | |
| | | <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> |
| | | |
| | |
| | | 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; |
| | |
| | | @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 { |
| | |
| | | } |
| | | } |
| | | .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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | <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"> |
| | |
| | | |
| | | <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], |
| | |
| | | title: 'æç顧忏
å®', |
| | | }, |
| | | { |
| | | authorityOfRoleList: [Role.NOT_LOGIN, Role.USER], |
| | | routeUrl: '/faq', |
| | | title: 'F&Q 常è¦åé¡', |
| | | }, |
| | | { |
| | | authorityOfRoleList: [Role.USER, Role.ADMIN], |
| | | routeUrl: '', |
| | | title: 'ç»åº', |
| | |
| | | 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(); |
| | |
| | | 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> |
| | |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | |
| | | 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; |
| | | } |
| | |
| | | > |
| | | <UiAvatar |
| | | :size="200" |
| | | :fileName="item.img" |
| | | :agentNo="item.agentNo" |
| | | class="mx-auto" |
| | | @click.native="showAgentDetail(item.agentNo)" |
| | | ></UiAvatar> |
| | |
| | | <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> |
| | |
| | | </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; |
| | |
| | | } |
| | | } |
| | | |
| | | nextCard() { |
| | | (this.$refs.carouselRef as ElCarousel).next(); |
| | | } |
| | | |
| | | prevCard() { |
| | | (this.$refs.carouselRef as ElCarousel).prev(); |
| | | } |
| | | ////////////////////////////////////////////////////////////////// |
| | | |
| | | openPopUp(txt: string) { |
| | | this.popUpTxt = txt; |
| | |
| | | showAgentDetail(agentNo: string): void { |
| | | this.$router.push(`/agentInfo/${agentNo}`); |
| | | } |
| | | |
| | | nextCard() { |
| | | (this.$refs.carouselRef as ElCarousel).next(); |
| | | } |
| | | |
| | | prevCard() { |
| | | (this.$refs.carouselRef as ElCarousel).prev(); |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | </style> |
| | | </style> |
| | |
| | | <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" |
| | |
| | | >é¸åææ</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" |
| | |
| | | ></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" |
| | |
| | | >{{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> |
| | |
| | | |
| | | <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() { |
| | |
| | | } |
| | | } |
| | | |
| | | @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> |
| | | |
| | |
| | | .quickBtnBlock { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-content: space-between; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | </style> |
| | | .pam-radio-group { |
| | | height: 240px; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | </style> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | |
| | | @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> |
| | |
| | | <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> |
| | |
| | | </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 { |
| | |
| | | } |
| | | |
| | | @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 { |
| | |
| | | |
| | | @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) => { |
| | |
| | | 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()}`; |
| | | |
| | |
| | | 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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | |
| | | @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> |
| | |
| | | |
| | | @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; |
| | | } |
| | | } |
| | |
| | | border-radius: 10px; |
| | | margin: 10px auto 13px auto; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | 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> |
| | |
| | | |
| | | <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 { |
| | |
| | | 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> |
| | |
| | | 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) { |
| | |
| | | topFunction() { |
| | | document.body.scrollTop = 0; |
| | | document.documentElement.scrollTop = 0; |
| | | } |
| | | |
| | | destroyed() { |
| | | document.body.removeEventListener('scroll', this.scrollFunction); |
| | | } |
| | | } |
| | | </script> |
| | |
| | | background-color: $MID_GREY; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <template> |
| | | <el-pagination |
| | | :current-page.sync="currentPage" |
| | | :current-page.sync="syncCurrentPage" |
| | | layout="prev, pager, next" |
| | | :total="totalList.length" |
| | | :page-size="pageSize" |
| | |
| | | </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) { |
| | | |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | @Component |
| | | export default class UiReviewScore extends Vue { |
| | | @Prop() score!: number; |
| | | @Prop() |
| | | score!: number; |
| | | } |
| | | </script> |
| | | </script> |
| | |
| | | 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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | @Component |
| | | export default class UiTags extends Vue { |
| | | |
| | | @Emit('removeTag') removeTag() { |
| | | @Emit('removeTag') |
| | | removeTag() { |
| | | return; |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | </script> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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" |
| | |
| | | {{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> |
| | |
| | | </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:'å¤å¤' |
| | |
| | | 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; |
| | |
| | | } |
| | | } |
| | | |
| | | 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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | } |
| | | }) |
| | | 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> |
| | |
| | | background-color: rgba(#222222, 0.5); |
| | | width: 100%; |
| | | height: 100%; |
| | | z-index: 99; |
| | | z-index: 2500; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | |
| | | 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"> |
| | |
| | | </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å"> |
| | |
| | | </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 = ''; |
| | |
| | | |
| | | <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> |
| | |
| | | |
| | | <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> |
| | | è«é¸æ |
| | |
| | | <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> |
| | |
| | | </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; |
| | | } |
| | | } |
| | |
| | | <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> |
| | |
| | | |
| | | <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> |
| | |
| | | :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> |
| | |
| | | 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" |
| | |
| | | } |
| | | |
| | | @include desktop { |
| | | .pam-banner { |
| | | height: 150px; |
| | | } |
| | | .mt-navBar { |
| | | margin-top: calc($DESKTOP_NAV_BAR + $MOB_NAV_BAR); |
| | | } |
| | |
| | | margin: 30px auto 0px auto; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | .pam-banner__text { |
| | | font-size: 18px; |
| | |
| | | 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'); |
| | | } |
| | | } |
| | |
| | | background-size: contain; |
| | | } |
| | | |
| | | @media (min-width: 768px) { |
| | | @include desktop { |
| | | &-banner { |
| | | background-image: url('~/assets/images/recommendConsultant/banner_web.svg'); |
| | | background-size: cover; |
| | |
| | | background-size: cover; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | .myConsultantList-consultantList,.myConsultantList-contactedList { |
| | |
| | | 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'); |
| | | } |
| | |
| | | background-size: contain; |
| | | } |
| | | |
| | | @media (min-width: 768px) { |
| | | @include desktop { |
| | | &-container { |
| | | background-image: url('~/assets/images/recommendConsultant/bg_flower_web.svg'); |
| | | background-size: cover; |
| | |
| | | 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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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 |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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 |
| | |
| | | '~/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 |
| | |
| | | }, |
| | | router: { |
| | | base: process.env.ENV === 'uat' ? '/pam/' : '', |
| | | middleware: 'errorRouteMiddleware' |
| | | middleware: ['getUrlQuery', 'errorRoute'] |
| | | } |
| | | } |
| | |
| | | <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); |
| | | }); |
| | |
| | | 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> |
| | |
| | | <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> |
| | |
| | | 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 |
| | |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="company" label="æåå°å"> |
| | | {{ agentInfo.serveArea }} |
| | | {{ agentInfo.serveArea | toServeArea }} |
| | | </UiField> |
| | | </el-row> |
| | | |
| | |
| | | </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> |
| | |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="comment" label="å人ç念"> |
| | | <UiField icon="comment" label="å人ç念" class="agent-info-textarea"> |
| | | {{ agentInfo.concept }} |
| | | </UiField> |
| | | </el-row> |
| | |
| | | <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> |
| | |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="trophy" label="å¾çç¶æ·"> |
| | | <UiField icon="trophy" label="å¾çç¶æ·" class="agent-info-textarea"> |
| | | {{ agentInfo.awards }} |
| | | </UiField> |
| | | </el-row> |
| | |
| | | </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> |
| | | |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | 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"> |
| | |
| | | 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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | |
| | | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | <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(); |
| | |
| | | } |
| | | } |
| | | |
| | | //////////////////////////////////////////////////////////////////// |
| | | |
| | | |
| | | public regenerateImgOfVerification(): void { |
| | | getImgOfVerification().then( imgOfBase64 => |
| | | loginService.getImgOfVerification().then( imgOfBase64 => |
| | | this.imgSrc = imgOfBase64 |
| | | ); |
| | | }; |
| | |
| | | } |
| | | |
| | | 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) |
| | |
| | | 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; |
| | | } |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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; |
| | | } |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | .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; |
| | |
| | | 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'); |
| | | } |
| | |
| | | max-width: 335px; |
| | | } |
| | | } |
| | | |
| | | </style> |
| | |
| | | <el-row type="flex" justify="space-between"> |
| | | <div class="mdTxt">輸å
¥é©è碼</div> |
| | | <div class="otp-count-timer"> |
| | | {{phoneCounter}} |
| | | {{counterTime(otpCounterSec)}} |
| | | </div> |
| | | </el-row> |
| | | |
| | |
| | | <el-row type="flex" justify="space-between"> |
| | | <div class="mdTxt">輸å
¥é©è碼</div> |
| | | <div class="otp-count-timer"> |
| | | {{emailOtpCounter}} |
| | | {{counterTime(emailCounterSec)}} |
| | | </div> |
| | | </el-row> |
| | | |
| | |
| | | :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> |
| | |
| | | @scroll="detectContractReadStatus"> |
| | | <h3>èéåäººè³æåç¥äºé
</h3> |
| | | <p class="mt-10"> |
| | | éµå®åäººè³æä¿è·æ³è¦å®ï¼å¨æ¨æä¾åäººè³æäºæ¬èåï¼ä¾æ³å |
| | | ç¥ä¸åäºé
ï¼ |
| | | éµå®åäººè³æä¿è·æ³è¦å®ï¼å¨æ¨æä¾åäººè³æäºæ¬èåï¼ä¾æ³åç¥ä¸åäºé
ï¼ |
| | | <p> |
| | | |
| | | <p class="mt-10"> |
| | |
| | | </p> |
| | | |
| | | <p class="mt-10"> |
| | | åãé¤èéä¹ç®çæ¶åå鿥忿´»åå¤ï¼æ¬èå
æ¼ä¸è¯æ°åé åå
§å©ç¨æ¨çåäººè³ |
| | | æã |
| | | åãé¤èéä¹ç®çæ¶åå鿥忿´»åå¤ï¼æ¬èå
æ¼ä¸è¯æ°åé åå
§å©ç¨æ¨çåäººè³æã |
| | | </p> |
| | | |
| | | <p class="mt-10"> |
| | | äºãæ¬èå°æ¼åèéä¹ç¹å®ç®çãæ¬æ¬¡ä»¥å¤ä¹ç¢æ¥ä¹æ¨å»£ã宣å°åè¼å°ã以åå
¶ä»å
¬ |
| | | åæ©éè«æ±è¡æ¿åå©ä¹ç®çç¯åå
§ï¼åçå©ç¨æ¨çåäººè³æã |
| | | äºãæ¬èå°æ¼åèéä¹ç¹å®ç®çãæ¬æ¬¡ä»¥å¤ä¹ç¢æ¥ä¹æ¨å»£ã宣å°åè¼å°ã以åå
¶ä»å
¬åæ©éè«æ±è¡æ¿åå©ä¹ç®çç¯åå
§ï¼åçå©ç¨æ¨çåäººè³æã |
| | | </p> |
| | | |
| | | <p class="mt-10"> |
| | |
| | | <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'; |
| | |
| | | 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; |
| | |
| | | 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 ; |
| | |
| | | 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(); |
| | |
| | | this.applyAccount_onAction = false; |
| | | }); |
| | | }; |
| | | |
| | | confirmApplySuccess(): void { |
| | | this.phoneSuccessConfirmVisable = false; |
| | | this.registerSuccessConfirmVisable = false; |
| | | this.redirect(); |
| | | } |
| | | |
| | | private autoRedirect() { |
| | | this.autoRedirectInterval = setInterval(() => { |
| | |
| | | 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) { |
| | |
| | | }, 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> |
| | |
| | | } |
| | | |
| | | .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; |
| | |
| | | <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) { |
| | |
| | | margin: 30px auto; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | 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 |
| | |
| | | |
| | | <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> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | 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> |
| | |
| | | <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> |
| | |
| | | :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; |
| | |
| | | } |
| | | |
| | | 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> |
| | | |
| | |
| | | <div> |
| | | <ConsultantList |
| | | :agents="pageList" |
| | | :title="'consultantList'" |
| | | ></ConsultantList> |
| | | |
| | | <UiPagination |
| | |
| | | |
| | | <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> |
| | |
| | | <div> |
| | | <ConsultantList |
| | | :agents="pageList" |
| | | :title="'contactedList'" |
| | | ></ConsultantList> |
| | | |
| | | <UiPagination |
| | |
| | | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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" |
| | |
| | | <div class="datepicker"> |
| | | <span class="mdTxt">ææ©é£çµ¡çæ¹ä¾¿æé</span> |
| | | <PhoneContactTimePicker |
| | | :scheduleList.sync="myRequest.hopeContactTime"/> |
| | | :scheduleList="myRequest.hopeContactTime"/> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | :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" /> |
| | |
| | | </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> |
| | |
| | | |
| | | <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=[ |
| | | { |
| | |
| | | }, |
| | | { |
| | | 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 : '', |
| | |
| | | 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 = { |
| | |
| | | }; |
| | | } |
| | | |
| | | 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() { |
| | |
| | | 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() { |
| | |
| | | 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> |
| | | |
| | |
| | | display: flex; |
| | | justify-content: center; |
| | | margin-top: 10px; |
| | | margin-bottom: 26px; |
| | | } |
| | | |
| | | //draweræåºä¸æåæ¨£å¼ |
| | |
| | | color: #ED1B2E; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .error { |
| | | color:$PRIMARY_RED |
| | | } |
| | | //éåºæéæ¨£å¼èæç |
| | | .ques-footer{ |
| | | justify-content: center; |
| | |
| | | transform: translate(-12px, 0); |
| | | } |
| | | } |
| | | |
| | | .break{ |
| | | word-break: break-all; |
| | | line-height: 1.2; |
| | | } |
| | | .ques-page--reset.pam-page-container { |
| | | margin: 0px auto; |
| | | } |
| | |
| | | @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; |
| | |
| | | -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{ |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | </style> |
| | | |
| | |
| | | <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> |
| | |
| | | <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" |
| | |
| | | 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"> |
| | |
| | | <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> |
| | |
| | | <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" |
| | |
| | | @click="makePair">馬ä¸é
å°</el-button> |
| | | </div> |
| | | |
| | | <PopUpFrame :isOpen.sync="showDialog" |
| | | > |
| | | <PopUpFrame :isOpen.sync="showDialog"> |
| | | <div class="qaTextTitle mdTxt"> |
| | | <strong>æ³è¦è©¢åçåé¡</strong> |
| | | </div> |
| | |
| | | </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: '#壽éª', |
| | |
| | | }, |
| | | { |
| | | title: '#å²è', |
| | | label:'å²è' |
| | | label: 'å²è' |
| | | }, |
| | | { |
| | | title: '#æè³', |
| | | label:'æè³' |
| | | label: 'æè³' |
| | | }, |
| | | { |
| | | title: '#æå¤', |
| | | label:'æå¤' |
| | | label: 'æå¤' |
| | | } |
| | | ]; |
| | | queaAboutList = [ |
| | | { |
| | | queaAboutList = [{ |
| | | title: 'å¥åº·èä¿é', |
| | | content: '坿æèº«é«ç
§é¡§å¥½ï¼ææ¯ä¿é幸ç¦ä¹æ¬ï¼ä¸åç²ç®çççè çï¼åªåç¶»éçé½å
ï¼éªå©åå¤èµ°ä¸å©è·¯ï¼äººççç¾æ£è¦éå±ã' |
| | | }, |
| | |
| | | }, |
| | | { |
| | | 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; |
| | |
| | | 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> |
| | |
| | | <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> |
| | |
| | | {{ info.seniority }} |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-col :span="12" v-if="!hideReviews"> |
| | | <div class="field__label"> |
| | | å®¢æ¶æ»¿æåº¦ |
| | | </div> |
| | |
| | | |
| | | <UiPagination |
| | | class="mb-30" |
| | | :totalList="strictQueryList" |
| | | :totalList="strictResultList" |
| | | @changePage="changePage" |
| | | :pageSize = 6 |
| | | ></UiPagination> |
| | |
| | | </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; |
| | | } |
| | | } |
| | |
| | | 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 { |
| | |
| | | <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> |
| | |
| | | width:52px; |
| | | .date{ |
| | | margin-bottom: 2px; |
| | | |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | flex: 1; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | <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> |
| | |
| | | <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; |
| | |
| | | |
| | | } |
| | | |
| | | </style> |
| | | </style> |
| | |
| | | <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> |
| | |
| | | width:52px; |
| | | .date{ |
| | | margin-bottom: 2px; |
| | | |
| | | |
| | | } |
| | | } |
| | | } |
| | |
| | | flex: 1; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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]; |
| | | }) |
| | |
| | | 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}`; |
| | | }; |
| | | |
| | | }) |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | }) |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export const agentCommunicationStyleList = ['謹æ
å實', 'æå¿«ä¸»å', 'èå¿å¾è½', 'å¥è«é¢¨è¶£']; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export const agentExpertList = ['å¥åº·èä¿é', 'å女æè²', 'è³ç¢è¦å', 'æ¨æ´»éä¼', 'ä¿å®å¥æª¢/è¦å', 'åç´
ä¿å®']; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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' |
| | | }, |
| | | ]; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export const consultantQuestions = ['å¥åº·èä¿é', 'å女æè²', 'è³ç¢è¦å', 'æ¨æ´»éä¼', 'ä¿å®å¥æª¢/è¦å', 'åç´
ä¿å®']; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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', |
| | | } |
| | | ]; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export const faqList = [ |
| | | { |
| | | label: 'æå¦ä½ç»å
¥è¨»åï¼', |
| | | details: [ |
| | | { label: 'æ¨å¯é»æå³ä¸è§é åå示å¾ï¼é»æãç»å
¥ï½è¨»åãé²è¡ç»å
¥æè¨»åã' } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'æç»å
¥è¨»åæï¼çºä½ç¡æ³æ¶å°é©è碼ï¼', |
| | | details: [ |
| | | { label: 'ãææ©ç»å
¥è¨»åã' }, |
| | | { label: ' (ï¼) è«æ¨åé»ä¿¡æ¥è
ç¢ºèªæ¯å¦æéå忶伿¥ç°¡è¨ï¼å»£åç°¡è¨ï¼ç¢ºèªé»ä¿¡æ¥è
端è¨å®å¯æ¥æ¶å¾ï¼è«æ¼ä¸å°æå¾ééæ©ã' }, |
| | | { label: ' (ï¼) è«æ¨ç¢ºèªææ©å¯åå
¥ç°¡è¨å®¹éç©ºéæ¯å¦å·²æ»¿ï¼è¥å·²æ»¿ï¼è«åªé¤é¨åç°¡è¨å¾ï¼ææ©éæ°éæ©ã' }, |
| | | { label: ' (ï¼) è«æ¨ç¢ºèªæ¯å¦èæ¼æ¶è¨ä¸ç©©ææ¶è¨ä¸è¯çå ´æï¼è¥æ¯ï¼è«æ¨è³æ¶è¨è¯å¥½çå ´æï¼ææ©ééæ©ã'}, |
| | | { label: ' (ï¼) æºæ
§åææ©æå¤ç¨®é濾ä¾é»è»é«ï¼æ¯å¦ï¼whoscallã鲿¯è»é«çï¼å¯è¨å®é»åå®ä¾é»ãç°¡è¨ï¼ä¹è¨±æ¾ç¶è¢«è¨å®å°ã'}, |
| | | { label: 'ãemailç»å
¥è¨»åã'}, |
| | | { label: ' (ï¼) å¯è½æ¯æ¨å¡«å¯«çEmail帳èç¡ææè¼¸å
¥æé¯èª¤ï¼è«æ¨æª¢æ ¸æ£ç¢ºçEmail忬¡ç»å
¥æè¨»åã'}, |
| | | { label: ' (ï¼) å¯è½æ¯æ¨çEmailæåå夿·é©èä¿¡çºåå¾ä¿¡ï¼å»ºè°æ¨è³åå¾éµä»¶å£ä¸è®åï¼ä¸¦å°å®è¨å®çºéåå¾éµä»¶ã'}, |
| | | { label: ' (ï¼) å¯è½æ¯æ¨çEmailæååä¹å®å
¨æ©å¶é»æé©èä¿¡ï¼å»ºè°æ¨å¯è¯çµ¡æ¨çEmailæååææ¯ä½¿ç¨å
¶ä»çEmail帳èéæ°è¨»åã'} |
| | | ] |
| | | }, |
| | | { |
| | | label: 'æå¦ä½é²è¡é¡§ååªåï¼', |
| | | details: [ |
| | | { label: '(ï¼) æ¨å¯æ¼é¦é 黿ãå¿«é篩é¸ãããå´é¸é
å°ãæéé²è¡é¡§ååªåã'}, |
| | | { label: '(ï¼) å¿«é篩é¸ï¼å¯ä»¥é¸æä»»ä¸åæ¢ä»¶ï¼å¿«éæ¾å°ç¬¦åæ¨éæ±çé¡§åï¼å´é¸é
å°ï¼è¼¸å
¥åé¡åçï¼ä¾ç
§æ¨çéæ±æ¨è¦å´é¸é¡§åã'} |
| | | ] |
| | | }, |
| | | { |
| | | label: 'æå¦ä½é ç´é¡§åï¼', |
| | | details: [ |
| | | { label: 'ä¾ãå¿«é篩é¸ãããå´é¸é
å°ãçåªåçµæææ¥çãæ¨è¦é¡§åæ¸
å®ãå¾ï¼é²å
¥é¡§åå¡çè³è¨é»æãé²è¡é ç´ãã填寫è¯çµ¡æéãæ³è©¢åçåé¡ä»¥ååäººè³æï¼æ¹å¯éåºé ç´å®ã'} |
| | | ] |
| | | }, |
| | | { |
| | | label: 'æå¦ä½åæ¶é ç´å®æç·¨è¼¯é ç´å®ï¼', |
| | | details: [{ label: 'æ¨å¯æ¼é¡§åæ¸
å®ä¸é»æãå·²é ç´ãçé¡§åï¼é²å
¥é ç´æåé é¢ï¼é²è¡é ç´å®çåæ¶æç·¨è¼¯ã'}] |
| | | }, |
| | | { |
| | | label: 'æé²è¡é ç´å¾ï¼é¡§åæç¨ä»éº¼æ¹å¼è¯ç¹«æï¼', |
| | | details: [{ label: 'é¡§åæä¾æä¿æ¶ç»å
¥æè¨»åææä¾çé£çµ¡è³è¨ï¼ææ©æEMAILï¼çºä¸»è¦è¯ç¹«æ¨çæ¹å¼ã'}] |
| | | } |
| | | ] |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export const hideReviews = false; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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' |
| | | // } |
| | | ]; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export const taiwanCities = ['åºéå¸', 'å°åå¸', 'æ°åå¸', 'æ¡åå¸', 'æ°ç«¹å¸', 'æ°ç«¹ç¸£', 'èæ ç¸£', 'å°ä¸å¸', 'å½°å縣', 'åæç¸£', 'é²æç¸£', 'å義å¸', 'å義縣', 'å°åå¸', 'é«éå¸', '屿±ç¸£', 'å°æ±ç¸£', 'è±è®ç¸£', 'å®è縣', 'æ¾æ¹ç¸£', 'éé縣', '飿±ç¸£']; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export const weekDays = [ |
| | | { |
| | | title:'ææä¸', |
| | | label:'ææä¸' |
| | | }, |
| | | { |
| | | title:'ææäº', |
| | | label:'ææäº' |
| | | }, |
| | | { |
| | | title:'ææä¸', |
| | | label:'ææä¸' |
| | | }, |
| | | { |
| | | title:'ææå', |
| | | label:'ææå' |
| | | }, |
| | | { |
| | | title:'ææäº', |
| | | label:'ææäº' |
| | | }, { |
| | | title:'ææå
', |
| | | label:'ææå
' |
| | | }, |
| | | { |
| | | title:'æææ¥', |
| | | label:'æææ¥' |
| | | }, |
| | | ]; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
| | | |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export interface editAppointmentParams { |
| | | id: number, |
| | | phone: string, |
| | | email: string, |
| | | contactType: string, |
| | | gender: string, |
| | | age: string, |
| | | job: string, |
| | | requirement: string, |
| | | hopeContactTime: string, |
| | | otherRequirement: null |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export enum Role{ |
| | | ADMIN = 'admin', |
| | | USER = 'user', |
| | | NOT_LOGIN = '' |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export enum ContactStatus { |
| | | PICKED = 'picked', |
| | | RESERVED = 'reserved', |
| | | CONTACTED = 'contacted', |
| | | DONE = 'done', |
| | | CLOSE = 'closed', |
| | | CANCEL = 'cancel', |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export enum SatisfactionType { |
| | | SYSTEM = 'SYSTEM', |
| | | APPOINTMENT = 'APPOINTMENT', |
| | | } |
| | | |
¤ñ¹ï·sÀÉ®× |
| | |
| | | |
| | | export interface LoginRequest { |
| | | /** "SMS"=ææ©ï¼"EMAIL"=email */ |
| | | loginType: string; |
| | | /** è¥loginTypeå¡«SMSå該æ¬å¸¶å
¥ææ©ãEMAILå帶å
¥éµä»¶ä¿¡ç®± */ |
| | | account: string; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | |
| | | export interface LoginSuccessToken { |
| | | id_token: string; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | |
| | | export interface LoginVerify { |
| | | /** å¯å¸¶å
¥ææ©æemail */ |
| | | account: string; |
| | | /** ç±otpçapiåçindex key */ |
| | | indexKey: string; |
| | | /** ç±ææ©æä¿¡ç®±æ¶å°çèªè碼 */ |
| | | otpCode: string; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export interface OptionBtnDto { |
| | | title : string, |
| | | subTitle?: string, |
| | | label : string | number, |
| | | } |
| | | export interface OptionDto{ |
| | | selectAll: string, |
| | | options : OptionBtnDto[], |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | |
| | | export interface OtpInfo { |
| | | /** ç¨æ¼å¸¶å
¥otpèªèæ */ |
| | | indexKey: string; |
| | | /** Otpæ¯å¦ææåç¼é */ |
| | | success: boolean; |
| | | failCode: string; |
| | | failReason: string; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | |
| | | export interface RegisterInfo { |
| | | phone?: string; |
| | | email?: string; |
| | | indexKey: string; |
| | | otpCode: string; |
| | | name: string; |
| | | /** "SMS"ï¼Otpç¼éææ©ï¼"EMAIL":Otpç¼email */ |
| | | contactType: string; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export interface ReviewsList{ |
| | | avatar:any; |
| | | name:string; |
| | | avgScore:number; |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | |
| | | 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 |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export interface StrictQueryDto { |
| | | gender: string, |
| | | area: string, |
| | | status: string, |
| | | requirements: string[], |
| | | otherRequirement: string, |
| | | seniority: string, |
| | | avgScore: number, |
| | | popularTags: string[], |
| | | otherPopularTags: string |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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(); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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(); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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(); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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) |
| | | }; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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(); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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(); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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(); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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' |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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(); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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(); |
File was renamed from PAMapp/assets/ts/device.ts |
| | |
| | | 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(); |
File was renamed from PAMapp/assets/ts/storageRequests.ts |
| | |
| | | import { AppointmentRequests } from "./api/consultant"; |
| | | import { AppointmentRequests } from "./models/appointment.model"; |
| | | |
| | | export function getRequestsFromStorage(): AppointmentRequests { |
| | | const requests = localStorage.getItem('myRequests'); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |
| | |
| | | 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 { |
| | |
| | | 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) |
| | | }) |
| | | } |
| | |
| | | @Action |
| | | async storeConsultantList() { |
| | | const localData = getFavoriteFromStorage(); |
| | | if (this.context.getters['localStorage/currentRole'] !== Role.USER) { |
| | | |
| | | if (!this.isUserLogin) { |
| | | this.context.commit('updateConsultantList', localData) |
| | | return; |
| | | }; |
| | |
| | | |
| | | 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); |
| | | }) |
| | | } |
| | | |
| | |
| | | // 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) |
| | |
| | | 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); |
| | | } |
| | |
| | | } |
| | | |
| | | @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, |
| | |
| | | } |
| | | }); |
| | | 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); |
| | | }) |
| | | } |
| | | |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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, |
| | | } |
| | |
| | | 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; |
| | |
| | | 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); |
| | |
| | | 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'); |
| | |
| | | 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"); |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | ALTER TABLE omo.customer_favorite_consultant ADD view_time timestamp NULL; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | ALTER TABLE omo.consultant ADD email varchar NULL; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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) |
| | | ); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | UPDATE omo.consultant SET phone_number='', email='charles.cw.lin@pcalife.com.tw'; |
| | | UPDATE omo.consultant SET phone_number='0930018913' WHERE agent_no = 'AG0101234567'; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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'; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | -- æ°å¢é ç´å®éç¥æ·ç¨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) |
| | | ); |
| | | |
| | | |
| | | |
¤ñ¹ï·sÀÉ®× |
| | |
| | | -- appointment_notice_log æ°å¢ç´è¨ªæéæ¬ä½ |
| | | ALTER TABLE appointment_notice_log ADD interview_date timestamp null; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | -- 建ç«å°é´éºéç¥ç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) |
| | | ); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | -- 調æ´policy_entry_date åæ
|
| | | ALTER TABLE appointment_closed_info |
| | | ALTER COLUMN policy_entry_date TYPE timestamp; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | -- å»ºç« å·²ç¶éç¥å®¢æ¶æªèçé ç´å®çç´é 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) |
| | | ); |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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'; |
| | | |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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'; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | update public.consultant set serve_area = 'å°åå¸' where agent_no = 'AG0109051204'; |
| | | update public.consultant set serve_area = 'éé縣' where agent_no = 'R221444250'; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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 |
| | | $$ |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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 |
| | | } |
| | | ] |
| | | |
| | | |
| | | |
¤ñ¹ï·sÀÉ®× |
| | |
| | | http post : |
| | | |
| | | å°ç®åç»å
¥è
çææå°é´éºéç¥è¨å®çºå·²è® |
| | | |
| | | http://localhost:8080/api/personal_notification/readAllMyNotification |
| | | |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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" |
| | | }] |
| | | |
| | |
| | | |
| | | [ |
| | | { |
| | | "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" |
| | | } |
| | | ] |
| | | ] |
¤ñ¹ï·sÀÉ®× |
| | |
| | | http://localhost:8080/api/consultant/sendSatisfactionToClient/{appointmentId} |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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 |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | http delete : |
| | | |
| | | http://localhost:8080/api/interview_record/{interviewRecordId} |
| | | |
| | | http://localhost:8080/api/interview_record/5 |
| | | |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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 |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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" |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | http delete: |
| | | |
| | | http://localhost:8080/api/appointment/memo/{appointmentMemoId} |
| | | |
| | | http://localhost:8080/api/appointment/memo/1 |
| | | |
| | |
| | | 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 |
| | | } |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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 |
| | | } |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | http post : |
| | | |
| | | http://localhost:8080/api/appointment/memo/create |
| | | |
| | | |
| | | content : é ç´å®å註å
§å®¹ |
| | | appointmentId : é ç´å®id |
| | | |
| | | request body: |
| | | |
| | | { |
| | | "content":"test", |
| | | "appointmentId":368 |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | http post : |
| | | |
| | | http://localhost:8080/api/appointment/memo/update |
| | | |
| | | id : memo id |
| | | |
| | | |
| | | request body: |
| | | { |
| | | "id": 1 , |
| | | "content":"test4" |
| | | } |
| | |
| | | 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 |
| | | } |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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" |
| | | } |
| | |
| | | |
| | | |
| | | contactType: email,phone |
| | | gender: male, female |
| | | gender: male, female |
| | | |
| | | request body: |
| | | |
| | |
| | | "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 |
| | | } |
| | |
| | | |
| | | 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 |
| | | } |
| | | } |
| | | ] |
¤ñ¹ï·sÀÉ®× |
| | |
| | | http get : |
| | | http://localhost:8080/api/appointment/consultant/pending/sum |
| | | |
| | | response body: |
| | | 2 |
| | |
| | | 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ï¼ äºé²å¶æªæ¡ |
| | | |
| | |
| | | "area":"æ¡å", |
| | | "requirements": ["å¥åº·èä¿é","ä¿å®å¥æª¢/è¦å"], |
| | | "otherRequirement": "é·ç
§éª", |
| | | "seniority": // "è³æ·±"帶"SENIOR"ã"å¹´è¼"帶"YOUNG"ã"ä¸é"帶"UNLIMITED" |
| | | "seniority": "SENIOR" // "è³æ·±"帶"SENIOR"ã"å¹´è¼"帶"YOUNG"ã"ä¸é"帶"UNLIMITED" |
| | | "popularTags":["é²ç«","失è½","é²ç"], |
| | | "otherPopularTags":"æ
è¡éª", |
| | | } |
| | |
| | | "財åè¦å", |
| | | "è³ç¢è½ç§»" |
| | | ], |
| | | "suitability": 50 // å¹é
度 |
| | | "avgScore": 4.7, |
| | | "contactStatus": null, |
| | | "updateTime": null, |
| | |
| | | "ç¯ç¨
", |
| | | "æ¨æ´»éä¼" |
| | | ], |
| | | "suitability": 100 // å¹é
度 |
| | | "avgScore": 3.8, |
| | | "contactStatus": null, |
| | | "updateTime": null, |
| | |
| | | "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": [ // 客æ¶å·²é ç´ç顧忏
å® |
| | |
| | | "consultantReadTime": null, |
| | | "satisfactionScore":3 // null 代表該çé ç´å®å°æªå¡«å¯«æ»¿æåº¦ |
| | | } |
| | | ], |
| | | "new": true |
| | | ] |
| | | }, |
| | | { |
| | | "agentNo": "B282677963", |
| | |
| | | "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": [ |
| | |
| | | "consultantReadTime": null, |
| | | "satisfactionScore":3 // null 代表該çé ç´å®å°æªå¡«å¯«æ»¿æåº¦ |
| | | } |
| | | ], |
| | | "new": true |
| | | ] |
| | | }, |
| | | { |
| | | "agentNo": "R221444250", |
| | |
| | | "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", |
| | |
| | | "contactStatus": "picked", |
| | | "createTime": "2021-12-02T10:56:04.620Z", |
| | | "updateTime": null, |
| | | "customerViewTime": "2021-12-13T02:20:52.932Z", // å®¢æ¶æ¥çæé |
| | | "role": "åæ³°ä¿éªç¶ç´äºº", |
| | | "appointments": [], |
| | | "new": true |
| | | "appointments": [] |
| | | } |
| | | ] |
| | |
| | | "gender": "female", |
| | | "communicationStyles": [], |
| | | "avgScore": 4, |
| | | "status": "online" |
| | | "status": "online", |
| | | "seniority": "SENIOR" // "è³æ·±"帶"SENIOR"ã"å¹´è¼"帶"YOUNG"ã"ä¸é"帶"UNLIMITED" |
| | | } |
| | | |
| | | response body: |
| | |
| | | |
| | | 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" : "謹æ
å實ãæå¿«ä¸»åãèå¿å¾è½ãå¥è«é¢¨è¶£" |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | http post: |
| | | http://localhost:8080/api/consultant/favorite/view |
| | | |
| | | no request body |
| | | |
| | | response body: 204 NO_CONTENT |
¤ñ¹ï·sÀÉ®× |
| | |
| | | éè¦é¡§åæ¬äººç»å
¥æå¯ä»¥ä¿®æ¹èªå·±çè³æ |
| | | |
| | | 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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" |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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(); |
| | | |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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); |
| | | } |
| | | |
| | | |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |
| | |
| | | package com.pollex.pam.config; |
| | | |
| | | import com.pollex.pam.enums.SendEmailMsgMethod; |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | |
| | | /** |
| | |
| | | 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; |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |
| | |
| | | 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() {} |
| | | } |
| | |
| | | .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() |
| | |
| | | |
| | | 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 |
| | |
| | | |
| | | @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; |
| | |
| | | @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; |
| | |
| | | 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; |
| | | // } |
| | | |
| | | |
| | | |
| | | |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | 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; |
| | |
| | | @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; |
| | |
| | | public void setStatus(AppointmentStatusEnum status) { |
| | | this.status = status; |
| | | } |
| | | |
| | | public List<AppointmentMemo> getAppointmentMemoList() { |
| | | return appointmentMemoList; |
| | | } |
| | | |
| | | public void setAppointmentMemoList(List<AppointmentMemo> appointmentMemoList) { |
| | | this.appointmentMemoList = appointmentMemoList; |
| | | } |
| | | |
| | | |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | @Column(name = "communication_style") |
| | | private String communicationStyle; |
| | | |
| | | @Column(name = "email") |
| | | private String email; |
| | | |
| | | public Long getId() { |
| | | return id; |
| | | } |
| | |
| | | } |
| | | |
| | | public void setCompanyAddress(String companyAddress) { |
| | | companyAddress = companyAddress; |
| | | this.companyAddress = companyAddress; |
| | | } |
| | | |
| | | public Long getSeniorityYear() { |
| | |
| | | this.communicationStyle = communicationStyle; |
| | | } |
| | | |
| | | public String getEmail() { |
| | | return email; |
| | | } |
| | | |
| | | public void setEmail(String email) { |
| | | this.email = email; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "Consultant{" + |
| | |
| | | ", 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 + '\'' + |
| | | '}'; |
| | | } |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | |
| | | @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; |
| | |
| | | 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 + |
| | | '}'; |
| | | } |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | |
| | | @Column(name = "appointment_id") |
| | | private Long appointmentId; |
| | | |
| | | @Enumerated(EnumType.STRING) |
| | | @Column(name = "type") |
| | | private SatisfactionTypeEnum type; |
| | | |
| | | public Long getId() { |
| | | return id; |
| | |
| | | public void setAppointmentId(Long appointmentId) { |
| | | this.appointmentId = appointmentId; |
| | | } |
| | | |
| | | public SatisfactionTypeEnum getType() { |
| | | return type; |
| | | } |
| | | |
| | | public void setType(SatisfactionTypeEnum type) { |
| | | this.type = type; |
| | | } |
| | | } |
| | |
| | | RESERVED, |
| | | |
| | | @JsonProperty("contacted") |
| | | CONTACTED |
| | | CONTACTED, |
| | | |
| | | @JsonProperty("done") |
| | | DONE, |
| | | |
| | | @JsonProperty("closed") |
| | | CLOSED, |
| | | |
| | | @JsonProperty("cancel") |
| | | CANCEL |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | package com.pollex.pam.enums; |
| | | |
| | | public enum InterviewRecordStatusEnum { |
| | | AVAILABLE, |
| | | DELETED |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | package com.pollex.pam.enums; |
| | | |
| | | public enum NotificationTypeEnum { |
| | | SYSTEM, |
| | | ACTIVITY |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | package com.pollex.pam.enums; |
| | | |
| | | public enum PersonalNotificationRoleEnum { |
| | | CUSTOMER, |
| | | CONSULTANT |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | package com.pollex.pam.enums; |
| | | |
| | | public enum SatisfactionTypeEnum { |
| | | APPOINTMENT, // å°é¡§åé ç´ç滿æåº¦ |
| | | SYSTEM // å°å¹³å°ç滿æåº¦ |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | package com.pollex.pam.enums; |
| | | |
| | | public enum SendEmailMsgMethod { |
| | | PAM_EMAIL_SERVICE, |
| | | POLLEX_GMAIL |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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); |
| | | |
| | | } |
| | |
| | | |
| | | 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; |
| | | |
| | |
| | | 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); |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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); |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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>{ |
| | | |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | 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); |
| | | |
| | | } |
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 |