Merge branch 'pollex-dev' into sit
¤ñ¹ï·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> |
| | |
| | | align-items: center; |
| | | font-weight: bold; |
| | | width: 70px; |
| | | background-color: #fff; |
| | | border-radius: 6px; |
| | | border-bottom: 1px solid #CCCCCC; |
| | | border-right: 1px solid #CCCCCC; |
| | |
| | | flex:1; |
| | | border-radius: 5px; |
| | | padding: 10px; |
| | | background-color: #fff; |
| | | } |
| | | .mb-3{ |
| | | margin-bottom: 3px; |
| | |
| | | border-radius: 10px; |
| | | } |
| | | |
| | | .el-input__inner { |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .pam-appointment-textarea { |
| | | &.is-disabled { |
| | | .el-textarea__inner { |
| | |
| | | border: solid 1px $SKY_BLUE; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | .el-textarea__inner { |
| | | border: 1px solid #707070; |
| | | padding: 10px 20px; |
| | | font-size: 20px; |
| | | font-size: 18px; |
| | | &::placeholder { |
| | | font-size: 20px; |
| | | font-size: 18px; |
| | | } |
| | | } |
| | |
| | | <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"> |
| | | <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"> |
| | | <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"> |
| | | <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"> |
| | | <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="pam-link-button" |
| | | @click="addInterview">+æ°å¢</div> |
| | | </div> |
| | | <InterviewCard :interviewList="displayList.slice(0, 3)"></InterviewCard> |
| | | |
| | | <InterviewCard :interviewList="displayAppointmentList"></InterviewCard> |
| | | |
| | | <section class="text--right mt-30 interview-check-more" v-if="interviewList.length > 3"> |
| | | <div class="pam-link-button" @click="readMoreBtn"> |
| | | å±éçæ´å¤ |
| | | <i class="icon-expand"></i> |
| | | <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 } from 'nuxt-property-decorator'; |
| | | 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); |
| | | } |
| | | |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | | |
| | |
| | | |
| | | addInterview(): void { |
| | | this.$router.push(`/appointment/${this.appointmentId}/interview/new`); |
| | | } |
| | | |
| | | readMoreBtn() { |
| | | this.$router.push(`/appointment/${this.appointmentId}/interviewList`); |
| | | } |
| | | |
| | | } |
| | |
| | | ></el-avatar> |
| | | <div class="satisfaction" v-if="!hideReviews"> |
| | | <template v-if="client.satisfactionScore"> |
| | | TODO:é±è滿æåº¦ |
| | | <i class="icon-star pam-icon icon--yellow satisfaction"></i> |
| | | <span>{{client.satisfactionScore}}</span> |
| | | </template> |
| | |
| | | :agentNo="agentInfo.agentNo" |
| | | @click.native="showAgentDetail(agentInfo.agentNo)" |
| | | ></UiAvatar> |
| | | <!-- TODO:é±è滿æåº¦ --> |
| | | <div v-if="!hideReviews"> |
| | | <i class="icon-star pam-icon icon--yellow satisfaction" v-if="notScoreAppointmentYet"></i> |
| | | <span v-if="notScoreAppointmentYet"> |
| | | {{ agentInfo.satisfactionScore }} |
| | | </span> |
| | | <div class="unfilled text--center " |
| | | style="display:flex" |
| | | v-if="notScoreAppointmentYet">æªå¡«<br />滿æåº¦</div> |
| | | <span v-if="agentInfo.contactStatus !== 'contacted'">{{ agentInfo.avgScore }}</span> |
| | | <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> |
| | | |
| | | </div> |
| | | </el-col> |
| | | <el-col :xs="10" :sm="15"> |
| | |
| | | @click="isRemoveAgentPopup = true" |
| | | >ç§»é¤</div> |
| | | <div |
| | | v-if="notScoreAppointmentYet" |
| | | 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> |
| | |
| | | :class="actionBtnStyle" |
| | | >{{ actionBtnLabel }}</el-button> |
| | | <div class="updateTime mt-10"> |
| | | {{ agentInfo.updateTime | formatDate }} |
| | | {{ (isAppointment ? agentInfo.appointmentLastModifiedDate : agentInfo.updateTime) | formatDate }} |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | > |
| | | <div v-if="appointmentDetail"> |
| | | <h5 class="subTitle text--center mb-30">é ç´æå</h5> |
| | | <p class="smTxt">{{appointmentDetail.appointmentDate | formatDate}}</p> |
| | | <p class="smTxt">{{appointmentDetail.appointmentDate | formatDate}} 建ç«</p> |
| | | <div class="reserved-info"> |
| | | <p>å§åï¼{{appointmentDetail.name}}</p> |
| | | <p>é»è©±ï¼{{appointmentDetail.phone}}</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" |
| | | :value="appointmentDetail.appointmentScore" |
| | | class="pam-myDemand-dialog__rate" |
| | | disabled> |
| | | </el-rate> |
| | | </div> |
| | | </div> |
| | | |
| | | <div v-if="notScoreAppointmentYet" class="reserved-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> |
| | |
| | | import { hideReviews } from '~/shared/const/hide-reviews'; |
| | | import { Consultant, ConsultantWithAppointmentId } from '~/shared/models/consultant.model'; |
| | | import { Appointment } from '~/shared/models/appointment.model'; |
| | | import { UserReviewsConsultantsParams } from '~/shared/models/reviews.model'; |
| | | import { SatisfactionType } from '~/shared/models/enum/satisfaction-type'; |
| | | import { UserReviewParams } from '~/shared/models/reviews.model'; |
| | | |
| | | const localStorage = namespace('localStorage'); |
| | | @Component({ |
| | |
| | | otherRequirement : null, |
| | | phone : "", |
| | | requirement : '', |
| | | satisfactionScore : 0, |
| | | appointmentScore : 0, |
| | | }; |
| | | |
| | | get notScoreAppointmentYet(): boolean { |
| | | const isAppointment = !!this.agentInfo['appointmentStatus']; |
| | | if (!isAppointment) return false; |
| | | return this.agentInfo['appointmentStatus'] !== 'contacted' ? !this.agentInfo['appointmentScore'] : false; |
| | | return isAppointment |
| | | ? !this.agentInfo['appointmentScore'] |
| | | : !this.agentInfo.avgScore |
| | | } |
| | | |
| | | get isAppointment(): boolean { |
| | |
| | | appointmentService.getAppointmentDetail(appointmentId!).then(res => { |
| | | this.appointmentDetail = { |
| | | ...res, |
| | | satisfactionScore: this.agentInfo['appointmentScore'], |
| | | appointmentScore: this.agentInfo['appointmentScore'], |
| | | }; |
| | | this.width = UtilsService.isMobileDevice() ? '80%' : ''; |
| | | this.isVisibleDialog = true; |
| | |
| | | ? this.agentInfo['appointmentId'] |
| | | : this.latestNotClosedAppointment.id; |
| | | |
| | | const reviewParams: UserReviewsConsultantsParams = { |
| | | const reviewParams: UserReviewParams = { |
| | | appointmentId: appointmentId, |
| | | score: this.inputScore, |
| | | type : SatisfactionType.APPOINTMENT, |
| | | } |
| | | this.appointmentDetail.satisfactionScore = this.inputScore; |
| | | this.appointmentDetail.appointmentScore = this.inputScore; |
| | | |
| | | reviewsService.userReviewsConsultants(reviewParams).then((res) => { |
| | | this.reviewsBtn = false; |
| | |
| | | > |
| | | </UiAvatar> |
| | | <div class="name">{{agentInfo.name}}</div> |
| | | <div v-if="!hideReviews"> |
| | | <!-- TODO:é±è滿æåº¦ --> |
| | | <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> |
| | |
| | | @closePopUp="closePopup"> |
| | | <div class="text--center mdTxt">{{confirmTxt}}ï¼</div> |
| | | <div class="text--center mdTxt">ç«å³ç¼éç´è¨ªéç¥ï¼</div> |
| | | <div class="text--center mt-30" style="display:flex"> |
| | | <div class="text--center mt-30 confirm-btn"> |
| | | <el-button @click="closePopup">å
ä¸ç¼é</el-button> |
| | | <el-button @click="showInterviewMsgPopup = true" type="primary">å³éç´è¨ªéç¥</el-button> |
| | | </div> |
| | |
| | | z-index: 5; |
| | | } |
| | | } |
| | | |
| | | .confirm-btn{ |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | </style> |
| | |
| | | </div> |
| | | <div class="p mt-5"> |
| | | <UiDateFormat |
| | | class="date bold" |
| | | class="mt-5 line-space time" |
| | | :date="item.interviewDate" |
| | | onlyShowSection="DATE" /> |
| | | </div> |
| | |
| | | <div class="remind-content-txt"> |
| | | <div style="display:flex"> |
| | | <UiDateFormat |
| | | class="date bold " |
| | | class="mt-5 line-space mb-3 time" |
| | | :date="item.interviewDate" |
| | | onlyShowSection="TIME" /> |
| | | </div> |
| | |
| | | <div class="mb-3 smTxt bgc-primary-red date-year"> |
| | | <div class="mb-3 mt-2"> |
| | | <UiDateFormat |
| | | class="bold date" |
| | | class=" date" |
| | | :date="item.interviewDate" |
| | | onlyShowSection="YEAR" /> |
| | | </div> |
| | |
| | | <div class="mb-10">{{item.seniority}}</div> |
| | | </el-col> |
| | | <el-col :span="12" v-if="!hideReviews"> |
| | | <!-- TODO:é±è滿æåº¦ --> |
| | | <div class="smTxt_bold mb-10 text--prudential_grey">å®¢æ¶æ»¿æåº¦</div> |
| | | <div> |
| | | <i class="icon-star pam-icon icon--yellow "></i> |
| | |
| | | v-for="(appointmentLog, index) in reviewLogList" |
| | | :key="index"> |
| | | <div class="user-reviews-card-content" v-if="isUserLogin"> |
| | | æ¨å°<span class="mdTxt">{{ ` ${appointmentLog.agentName} ` }}</span>åäº <UiReviewScore :score="appointmentLog.score" /> è©å¹ï¼ |
| | | æ¨å°<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" /> è©å¹ï¼ |
| | |
| | | } |
| | | .pam-field__content { |
| | | display : flex; |
| | | padding-top: 10px; |
| | | // padding-top: 10px; |
| | | white-space: pre-line; |
| | | line-height: 1.5; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | :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="pam-avatar-uploader__action-label mt-10 cursor--pointer" >è¨å®ç¸ç</div> |
| | | <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" |
| | | @click="resetAvatar"> |
| | | åæ¶ä¸å³ç¸ç |
| | | style="line-height: 1.5" |
| | | > |
| | | <i class="icon-information"></i> |
| | | è«æé 颿䏿¹çéåºæé便´æ°ç
§çï¼ |
| | | <span class="text--primary cursor--pointer text--underline" @click="resetAvatar">æé»æ¤åæ¶</span> |
| | | |
| | | </div> |
| | | |
| | | </div> |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | .pam-selectAll-btn{ |
| | | padding : 6px 20px; |
| | | padding : 10px 20px; |
| | | border : 1px $LIGHT_GREY solid; |
| | | background-color: $PRIMARY_WHITE; |
| | | border-radius : 30px; |
| | |
| | | '~/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 |
| | |
| | | <template> |
| | | <div> |
| | | <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> |
| | |
| | | <i class="icon-edit" @click="editField('userName')" :class="{'icon-color-change': !userNameDisabled}"></i> |
| | | </div> |
| | | </div> |
| | | <div class="pam-paragraph account-info" v-if="phoneValue"> |
| | | |
| | | <!-- 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> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="pam-paragraph account-info" v-if="emailValue"> |
| | | |
| | | <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> |
| | | <input :disabled="userEmailDisabled" |
| | | v-model="emailValue" |
| | | :class="{'is-invalid': !emailValid }" |
| | | ref="userEmail" |
| | | class="account-info__input-text" |
| | | :placeholder="emailValue || 'å°æªæä¾ Email'"> |
| | | <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="updateDone = false" |
| | | @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" |
| | | <el-button :disabled="isSubmitBtnDisabled " |
| | | @click.native="updateAccountSetting"> |
| | | éåº |
| | | </el-button> |
| | |
| | | |
| | | <script lang="ts"> |
| | | import { Vue,Component } from 'vue-property-decorator' |
| | | import { UserSetting } from '~/shared/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; |
| | | @localStorageStore.Getter |
| | | isPrimaryContactTypeEmail!: boolean; |
| | | |
| | | |
| | | defaultUserSetting: UserSetting = { |
| | | name : '', |
| | | phone: '', |
| | | email: '', |
| | | }; |
| | | |
| | | userNameDisabled = true; |
| | | userPhoneDisabled = true; |
| | | userEmailDisabled = true ; |
| | | onEditMode = false; |
| | | otherContactType = false; |
| | | isShowDeleteDialog = false; |
| | | |
| | | updateDone = false; |
| | | userNameValue = ''; |
| | | phoneValue = '' ; |
| | |
| | | //////////////////////////////////////////////////////////// |
| | | mounted(){ |
| | | accountSettingService.getUserAccountSetting().then((userInfo: UserSetting)=>{ |
| | | this._userSetting = { |
| | | this.defaultUserSetting = _.cloneDeep({ |
| | | name : userInfo.name || '', |
| | | phone: userInfo.phone || '', |
| | | email: userInfo.email || '', |
| | | }; |
| | | this.phoneValue = this._userSetting.phone!; |
| | | this.userNameValue = this._userSetting.name!; |
| | | this.emailValue = this._userSetting.email!; |
| | | }); |
| | | this.phoneValue = this.defaultUserSetting.phone!; |
| | | this.userNameValue = this.defaultUserSetting.name!; |
| | | this.emailValue = this.defaultUserSetting.email!; |
| | | }) |
| | | } |
| | | //////////////////////////////////////////////////////////// |
| | | |
| | | editField(fieldName: string): void { |
| | | this.onEditMode = true; |
| | | const enablePromise = new Promise((resolve, reject) => { // æ¤çºpromiseèªæ³ |
| | | resolve((this as any)[`${fieldName}Disabled`] = false); |
| | | }); |
| | |
| | | }); |
| | | } |
| | | updateAccountSetting(): void { |
| | | if (!this.onEditMode) return; |
| | | const editSettingInfo: UserSetting = { |
| | | name: this.userNameValue, |
| | | phone: this.phoneValue, |
| | | email: this.emailValue |
| | | } |
| | | accountSettingService.updateAccountSetting(editSettingInfo).then((res: any) => { |
| | | console.log('updateRes:', res); |
| | | this.resetSettingForm(); |
| | | this.updateDone = true; |
| | | |
| | | }); |
| | | } |
| | | 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; |
| | | }); |
| | | } |
| | | |
| | | private resetSettingForm(): void { |
| | | this.onEditMode = false; |
| | | this.userNameDisabled = true; |
| | | this.userPhoneDisabled = true; |
| | | this.userEmailDisabled = true ; |
| | | } |
| | | |
| | | editOtherContactType(){ |
| | | this.otherContactType = true; |
| | | setTimeout(() => { |
| | | if (this.isPrimaryContactTypeEmail) { |
| | | this.editField('userPhone'); |
| | | } else { |
| | | this.editField('userEmail'); |
| | | } |
| | | }, 0); |
| | | } |
| | | |
| | | 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 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;; |
| | | 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; |
| | | return !isFormValid || !this.onEditMode |
| | | || (!this.phoneValue && !this.emailValue); |
| | | 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-info{ |
| | | display: flex; |
| | | align-items: baseline; |
| | | border-bottom: 1px gray solid; |
| | | padding: 15px 15px 15px 30px; |
| | | .account-info__title{ |
| | | width: 58px; |
| | | } |
| | | .account-info__input{ |
| | | flex: 1; |
| | | |
| | | &.edit { |
| | | <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-info__input{ |
| | | flex: 1; |
| | | &.edit { |
| | | .account-info__input-text{ |
| | | border: 1px solid lightgray; |
| | | background-color: #fff; |
| | | } |
| | | } |
| | | .account-info__input-text{ |
| | | border: 1px solid lightgray; |
| | | background-color: #fff; |
| | | border: 0; |
| | | background-color: rgba(0,0,0,0) ; |
| | | outline-color: gainsboro; |
| | | box-sizing: border-box; |
| | | -webkit-box-sizing: border-box; |
| | | -moz-box-sizing: border-box; |
| | | padding: 3px 10px; |
| | | width: 100%; |
| | | font-size: 20px; |
| | | &:disabled{ |
| | | padding: 0px; |
| | | } |
| | | } |
| | | .account-info__input-error{ |
| | | @extend .smTxt_bold,.text--primary; |
| | | margin-top: 10px; |
| | | } |
| | | } |
| | | .account-info__input-text{ |
| | | border: 0; |
| | | background-color: rgba(0,0,0,0) ; |
| | | outline-color: gainsboro; |
| | | box-sizing: border-box; |
| | | -webkit-box-sizing: border-box; |
| | | -moz-box-sizing: border-box; |
| | | padding: 3px 10px; |
| | | width: 100%; |
| | | font-size: 20px; |
| | | &:disabled{ |
| | | padding: 0px; |
| | | .account-info__icon{ |
| | | margin-left: 20px; |
| | | .icon-color-change{ |
| | | color:$PRIMARY_RED; |
| | | } |
| | | } |
| | | .account-info__input-error{ |
| | | @extend .smTxt_bold,.text--primary; |
| | | margin-top: 10px; |
| | | } |
| | | } |
| | | .account-info__icon{ |
| | | margin-left: 20px; |
| | | .icon-color-change{ |
| | | color:$PRIMARY_RED; |
| | | } |
| | | .account-confirm{ |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | .account-info-dele-other-contact-type{ |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .el-textarea__inner{ |
| | | background-color: rgba(0,0,0,0) ; |
| | | border: none !important; |
| | | padding:1px !important; |
| | | } |
| | | } |
| | | .account-confirm{ |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | </style> |
| | |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="company" label="æåå°å"> |
| | | {{ agentInfo.serveArea }} |
| | | {{ agentInfo.serveArea | toServeArea }} |
| | | </UiField> |
| | | </el-row> |
| | | |
| | |
| | | <template> |
| | | <div class="edit-agent-info-page"> |
| | | |
| | | <el-row |
| | | type="flex" |
| | | justify="center"> |
| | |
| | | :agentNo="agentInfo.agentNo" |
| | | :photoBase64.sync="editInfoValue.photoBase64"/> |
| | | </el-row> |
| | | <el-row |
| | | |
| | | <!-- NOTE: æèªçºç·¨è¼¯é é¢ä¸éè¦é¡¯ç¤º avgScoreï¼å
é±è [Tomas, 2022/2/10 13:55] --> |
| | | <!-- <el-row |
| | | type="flex" |
| | | class="pt-10" |
| | | justify="center" |
| | | align="middle" v-if="!hideReviews"> |
| | | <!-- TODO:é±è滿æåº¦ --> |
| | | <i class="pam-icon icon--primary icon-star"></i> |
| | | <h3 class="mdTxt">{{ agentInfo.avgScore }}</h3> |
| | | </el-row> |
| | | </el-row> --> |
| | | |
| | | <el-row |
| | | <!-- <el-row |
| | | type="flex" |
| | | class="pam-paragraph" |
| | | justify="center"> |
| | | <el-input class="mdTxt" v-model="editInfoValue.name"></el-input> |
| | | </el-row> --> |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <el-col :span="24" class="pam-field"> |
| | | <div class="pam-field__label pam-progress__label"> |
| | | <div> |
| | | <div class="pam-field__title mb-10"> |
| | | <i class="pam-icon icon-avatar" |
| | | ></i>顯示å稱 |
| | | <span class="hint text--bold" v-show="!editInfoValue.name">顯示å稱çºå¿
å¡«</span> |
| | | </div> |
| | | </div> |
| | | <el-input |
| | | v-model="editInfoValue.name" |
| | | :class="{'is-invalid': !nameValid}" |
| | | maxlength="10" |
| | | minlength="10"></el-input> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row |
| | |
| | | <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField :span="12" icon="agent" label="é é"> |
| | | <el-input v-model="editInfoValue.title"></el-input> |
| | | <UiField :span="24" icon="agent" label="é é"> |
| | | <el-input v-model="editInfoValue.title" class="mt-10"></el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="company" label="æåå°å"> |
| | | <el-input v-model="editInfoValue.serveArea"></el-input> |
| | | <MultiSelectBtn class="mt-30" |
| | | :mutiSelect.sync="editInfoValue.serveArea" |
| | | :nameOfSelectAll="'å
¨å°'" |
| | | :options="serveAreaOptions" |
| | | > |
| | | </MultiSelectBtn> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="address" label="å
¬å¸å°å"> |
| | | <el-input v-model="editInfoValue.companyAddress"></el-input> |
| | | <el-input v-model="editInfoValue.companyAddress" class="mt-10"></el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | |
| | | <UiField :span="12" icon="time" label="æå¾ä¸ç·æé"> |
| | | {{ agentInfo.latestLoginTime | formatDate }} |
| | | </UiField> |
| | | <UiField :span="12" icon="calender" label="æåè³æ·" style="display:flex"> |
| | | <el-input v-model="editInfoValue.seniorityYear" class="seniority-input"></el-input>å¹´ |
| | | <el-select style="width:60px" v-model="editInfoValue.seniorityMonth" class="seniority-input"> |
| | | <el-option |
| | | v-for="(month) in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]" |
| | | :value="month" |
| | | :key="month"> |
| | | {{ month }} |
| | | </el-option> |
| | | </el-select>æ |
| | | <UiField :span="12" icon="calender" label="æåè³æ·"> |
| | | <div class="mt-10" style="display: flex; align-items: center"> |
| | | <el-input v-model="editInfoValue.seniorityYear" class="seniority-input" ></el-input>å¹´ |
| | | <el-select style="width:60px" v-model="editInfoValue.seniorityMonth" class="seniority-input"> |
| | | <el-option |
| | | v-for="(month) in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]" |
| | | :value="month" |
| | | :key="month"> |
| | | {{ month }} |
| | | </el-option> |
| | | </el-select>æ |
| | | </div> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | | <el-row |
| | | <!-- <el-row |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <el-col :span="24" class="pam-field"> |
| | |
| | | <el-progress :show-text="false" :stroke-width="15" :percentage="agentInfo.evaluation * 2"></el-progress> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-row> --> |
| | | |
| | | <el-row |
| | | type="flex" |
| | |
| | | </div> |
| | | </div> |
| | | <MultiSelectBtn class="mt-30" |
| | | :mutiSelect.sync="editInfoValue.communicationStyle" |
| | | :options="agentCommunicationStyleList" |
| | | :maxLength="2" |
| | | :mutiSelect.sync="editInfoValue.communicationStyle" |
| | | :options="agentCommunicationStyleList" |
| | | :maxLength="2" |
| | | > |
| | | </MultiSelectBtn> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | <MultiSelectBtn class="mt-30" |
| | | :mutiSelect.sync="editInfoValue.expertise" |
| | | :options="agentExpertList" |
| | | :mutiSelect.sync="editInfoValue.expertise" |
| | | :options="agentExpertList" |
| | | > |
| | | </MultiSelectBtn> |
| | | </div> |
| | |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="comment" label="å人ç念"> |
| | | <el-input type="textarea" autosize v-model="editInfoValue.concept"></el-input> |
| | | <el-input type="textarea" autosize v-model="editInfoValue.concept" class="mt-10"></el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="school" label="åäººèæ¯"> |
| | | <el-input type="textarea" autosize v-model="editInfoValue.experiences"></el-input> |
| | | <el-input |
| | | autosize |
| | | type="textarea" |
| | | class="mt-10" |
| | | v-model="editInfoValue.experiences"> |
| | | </el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | |
| | | type="flex" |
| | | class="pam-paragraph"> |
| | | <UiField icon="trophy" label="å¾çç¶æ·"> |
| | | <el-input type="textarea" autosize style="height:70%" v-model="editInfoValue.awards"></el-input> |
| | | <el-input type="textarea" autosize style="height:70%" v-model="editInfoValue.awards" class="mt-10"></el-input> |
| | | </UiField> |
| | | </el-row> |
| | | |
| | |
| | | import { AgentInfoSetting } from '~/shared/models/account.model'; |
| | | import { Role } from '~/shared/models/enum/Role'; |
| | | import { agentCommunicationStyleList } from '~/shared/const/agent-communication-style-list'; |
| | | import { taiwanCities } from '~/shared/const/taiwan-cities'; |
| | | |
| | | const localStorageTest = namespace('localStorage'); |
| | | const loginStore = namespace('login.store'); |
| | | |
| | | @Component |
| | | export default class AgentInfoComponent extends Vue { |
| | | export default class AgentInfoEditComponent extends Vue { |
| | | |
| | | @localStorageTest.State('current_role') |
| | | currentRole!:string | null; |
| | | @localStorageTest.State |
| | | current_role: any; |
| | | |
| | | _agentInfoSetting!: AgentInfoSetting; |
| | | @loginStore.Action |
| | | updateConsultantDetail!: (agentNo: string) => Promise<AgentInfo>; |
| | | |
| | | defaultAgentInfoSetting!: AgentInfoSetting; |
| | | agentInfo! : AgentInfo |
| | | fieldInfoDesc : string = ''; |
| | | fieldInfoTitle : string = ''; |
| | | hideReviews : boolean = hideReviews ; |
| | | isAlertFieldInfo: boolean = false; |
| | | isInfoUpdate : boolean = false; |
| | | serveAreaOptions: any[] = taiwanCities.map((city) => ({ title: city, label: city })); |
| | | |
| | | editInfoValue = { |
| | | agentNo : '', |
| | | name : '', |
| | | expertise : [] as string[], |
| | | title : '', |
| | | serveArea : '', |
| | | serveArea : [] as string[], |
| | | companyAddress : '', |
| | | seniorityYear : 1, |
| | | seniorityMonth : 0, |
| | |
| | | |
| | | private setAgentInfo(agentInfo: AgentInfo): void { |
| | | const [agentYear, _yearUnit , agentMonth, _monthUnit] = agentInfo.seniority.split(" "); |
| | | this._agentInfoSetting = { |
| | | this.defaultAgentInfoSetting = { |
| | | agentNo : agentInfo.agentNo||'', |
| | | name : agentInfo.name || '', |
| | | expertise : agentInfo.expertise || [], |
| | | title : agentInfo.title || '', |
| | | role : agentInfo.role||'', |
| | | serveArea : agentInfo.serveArea || '', |
| | | serveArea : agentInfo?.serveArea.split('ã'), |
| | | gender : agentInfo.gender||'', |
| | | phoneNumber : agentInfo.phoneNumber||'', |
| | | companyAddress : agentInfo.companyAddress || '', |
| | |
| | | }; |
| | | |
| | | this.editInfoValue = { |
| | | ...this._agentInfoSetting, |
| | | expertise : _.cloneDeep(this._agentInfoSetting.expertise), |
| | | ...this.defaultAgentInfoSetting, |
| | | expertise : _.cloneDeep(this.defaultAgentInfoSetting.expertise), |
| | | // TODO: 確èªå¾ç«¯æ¤æ¬ä½å¾ç«¯ææ¹çºä»¥" , "éé [Tomas, 2021/12/28] |
| | | communicationStyle : this._agentInfoSetting.communicationStyle.split('ã'), |
| | | communicationStyle : this.defaultAgentInfoSetting.communicationStyle.split('ã'), |
| | | } |
| | | } |
| | | |
| | |
| | | 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); |
| | | }); |
| | | } |
| | | |
| | |
| | | this.fieldInfoTitle = 'å¹é
度'; |
| | | this.fieldInfoDesc = 'å¹é
度æ¯ééå´é¸é
å°æå¿«é篩é¸å¾ï¼å°æ¯ä¸ä½ä¿éªé¡§åè³æé²è¡æ¯å°å¾æåºæ¨è¦çµ¦æ¨çåªåæ¸å¼ï¼æ¨å¯ä»¥ä½çºé¸æé©åé¡§åçåèå¼ã'; |
| | | break; |
| | | case 'evaluation': |
| | | 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 |
| | |
| | | |
| | | </script> |
| | | |
| | | <style lang="scss" > |
| | | .edit-agent-info-page{ |
| | | .el-textarea__inner{ |
| | | font-size: 15px; |
| | | } |
| | | } |
| | | <style lang="scss"> |
| | | |
| | | .pam-icon { |
| | | font-size : 15px; |
| | | padding-right: 8px; |
| | |
| | | } |
| | | |
| | | .seniority-input{ |
| | | width : 50px; |
| | | width : 60px; |
| | | margin-right: 5px; |
| | | } |
| | | .el-input--suffix .el-input__inner { |
| | | padding-right: 20px; |
| | | } |
| | | |
| | | .el-textarea__inner{ |
| | | font-size: 18px; |
| | | } |
| | | </style> |
| | |
| | | this.$router.push(`/myAppointmentList/contactedList`); |
| | | } |
| | | |
| | | checkIdentityId (id) { |
| | | const tab = "ABCDEFGHJKLMNPQRSTUVXYWZIO"; |
| | | const A1 = [ 1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3 ]; |
| | | const A2 = [ 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5 ]; |
| | | const Mx = [ 9,8,7,6,5,4,3,2,1,1 ]; |
| | | |
| | | if ( id.length != 10 ) return false; |
| | | let i = tab.indexOf( id.charAt(0) ); |
| | | if ( i === -1 ) return false; |
| | | let sum = A1[i] + A2[i]*9; |
| | | for ( i=1; i<10; i+=1 ) { |
| | | let v = parseInt( id.charAt(i) ); |
| | | if (i === 1 && isNaN(v)) { |
| | | switch(id.charAt(i)) { |
| | | 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; |
| | |
| | | v = 3; |
| | | break; |
| | | default: |
| | | return false |
| | | return false; |
| | | } |
| | | } else if ( i === 1 && ([1,2,8,9].indexOf(v) === -1) ) { |
| | | return false |
| | | } else if (i === 1 && ([1, 2, 8, 9].indexOf(v) === -1)) { |
| | | return false; |
| | | } |
| | | if ( i > 1 && isNaN(v) ) return false; |
| | | sum = sum + v * Mx[i]; |
| | | if (i > 1 && Number.isNaN(v)) return false; |
| | | sum += v * weight[i]; |
| | | } |
| | | |
| | | if ( sum % 10 != 0 ) return false; |
| | | if (sum % 10 !== 0) return false; |
| | | return true; |
| | | } |
| | | |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="client-detail-action" v-if="showWhenAppointmentHasClosed"> |
| | | <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" >çµæ¡</el-button> |
| | | <el-button @click="closeAppointment" class="desktop-client-detail-action-btn" >çµæ¡</el-button> |
| | | <el-button @click="sendMsg" style="margin-left: 0px">éç¥ç´è¨ª</el-button> |
| | | </div> |
| | | |
| | | </section> |
| | | |
| | | <div class="client-detail-action btn-center" v-if="showWhenAppointmentHasCreate"> |
| | | <div class=" btn-center" v-if="showWhenAppointmentHasCreate"> |
| | | <el-button @click="sendMsg">å³éç´è¨ªéç¥</el-button> |
| | | </div> |
| | | </section> |
| | | |
| | | |
| | | <template v-if="showWhenAppointmentHasClosed"> |
| | | <AppointmentClosedInfo :appointmentDetail="appointmentDetail" /> |
| | |
| | | justify-content: center; |
| | | } |
| | | |
| | | @include desktop { |
| | | .client-detail-action { |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | .desktop-client-detail-action-btn{ |
| | | margin-right: 10px; |
| | | } |
| | | } |
| | | |
| | | </style> |
| | |
| | | :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="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="isShowReviewDialog = true">çµ¦äºæ»¿æåº¦è©å</el-button> |
| | | </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('notContactAppointmentIdFromMsg')" |
| | | @closePopUp="removeUrlQueryParameter('notContactAppointmentId')" |
| | | > |
| | | <div class="pam-dialog-review"> |
| | | <div class="mt-30 text--middle" v-if="agentInfo"> |
| | |
| | | |
| | | <script lang="ts"> |
| | | import { Vue, Component, State, Action, Watch, namespace } from 'nuxt-property-decorator'; |
| | | import { Appointment, AppointmentClosedInfo } from '~/shared/models/appointment.model'; |
| | | import { Consultant } from '~/shared/models/consultant.model'; |
| | | import { ContactStatus } from '~/shared/models/enum/contact-status'; |
| | | import { UserReviewsConsultantsParams } from '~/shared/models/reviews.model'; |
| | | import { StrictQueryParams } from '~/shared/models/strict-query.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 { AgentInfo } from '~/shared/models/agent-info.model'; |
| | | 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'); |
| | |
| | | |
| | | @roleStorage.Getter |
| | | isAdminLogin!: boolean; |
| | | |
| | | @roleStorage.Getter |
| | | isUserLogin!: boolean; |
| | | |
| | | @Action |
| | | storeRecommendList!: any; |
| | |
| | | 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); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | 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('notContactAppointmentIdFromMsg'); |
| | | this.removeUrlQueryParameter('notContactAppointmentId'); |
| | | this.$router.push('/recommendConsultant'); |
| | | }); |
| | | } |
| | |
| | | appointmentService.cancelAppointment(this.appointmentDetail.id).then(() => { |
| | | this.storeConsultantList(); |
| | | this.storageClearNotContactAppointmentIdFromMsg(); |
| | | this.removeUrlQueryParameter('notContactAppointmentIdFromMsg'); |
| | | this.$router.push(''); |
| | | this.removeUrlQueryParameter('notContactAppointmentId'); |
| | | this.isShowReAppointmentDialog = false; |
| | | this.isShowAppointmentDialog = false; |
| | | this.$router.push('/'); |
| | | }); |
| | | } |
| | | |
| | | userReviewsConsultants() { |
| | | const reviewParams: UserReviewsConsultantsParams = { |
| | | const reviewParams: UserReviewParams = { |
| | | appointmentId: this.appointmentDetail.id, |
| | | score: this.inputScore, |
| | | type: SatisfactionType.APPOINTMENT |
| | | } |
| | | this.appointmentDetail.satisfactionScore = this.inputScore; |
| | | |
| | |
| | | }) |
| | | } |
| | | this.$router.push(newRouteQuery); |
| | | this.storageClearSatisfactionIdFromMsg(); |
| | | this.storageClearNotContactAppointmentIdFromMsg(); |
| | | } |
| | | |
| | | /////////////////////////////////////////////////////////////////////////////// |
| | | |
| | | get gender() { |
| | | get gender(): string { |
| | | if (this.appointmentDetail.gender) { |
| | | return this.appointmentDetail.gender === 'male' ? 'ç·æ§' : '女æ§'; |
| | | } |
| | | return '' |
| | | } |
| | | |
| | | get hopeContactTime() { |
| | | get hopeContactTime(): string[] { |
| | | const contactList = this.appointmentDetail.hopeContactTime |
| | | .split("'").map((item: any) => item.slice(0, item.length)); |
| | | return contactList.filter((item: any) => !!item && item !== ",") |
| | |
| | | @roleStorage.Mutation |
| | | storageRole!: (role:string) => void; |
| | | |
| | | @roleStorage.Mutation |
| | | storageUserInfo!: (userInfo: RegisterInfo) => void; |
| | | |
| | | @Ref('contract') readonly contract!: any; |
| | | |
| | | connectDevice: 'MOBILE' | 'EMAIL' = 'MOBILE'; |
| | |
| | | |
| | | beforeRouteEnter (to, from, next) { |
| | | next(vm => { |
| | | console.log(from.path, 'beforeRouteEnter'); |
| | | vm.previousPath = from.path; |
| | | }) |
| | | } |
| | |
| | | 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('/'); |
| | | } |
| | | |
| | |
| | | |
| | | private storagePhoneOrEmail(registerInfo:RegisterInfo):void{ |
| | | const info = {...registerInfo, time: new Date()} |
| | | localStorage.setItem('userInfo',JSON.stringify(info)); |
| | | // storageUserInfo!: (userInfo: RegisterInfo) => void; |
| | | this.storageUserInfo(info); |
| | | // localStorage.setItem('userInfo',JSON.stringify(info)); |
| | | } |
| | | |
| | | private removeOtpTime() { |
| | |
| | | |
| | | <!-- DIALOG --> |
| | | <PopUpFrame |
| | | :isOpen.sync="showNewAppointmentHint" |
| | | :isOpen.sync="isShowNewAppointmentHint" |
| | | > |
| | | <div class="text--center mdTxt"> |
| | | <p class="mb-50">æ¨æ <span class="text--primary">{{ newAppointmentSum }}</span> åæ°çé ç´</p> |
| | | <div class="text--center"> |
| | | <el-button |
| | | type="primary" |
| | | @click="showNewAppointmentHint = 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, namespace } from 'nuxt-property-decorator'; |
| | | 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'; |
| | | |
| | |
| | | @localStorage.Getter |
| | | currentAppointmentIdFromMsg!: string; |
| | | |
| | | activeTabName : string = 'appointmentList'; |
| | | contactStatus = ContactStatus; |
| | | showNewAppointmentHint: boolean = false; |
| | | |
| | | activeTabName = 'appointmentList'; |
| | | isShowNewAppointmentHint = false; |
| | | isShowRemindAppointmentDialog = false; |
| | | pendingAppointmentSum = 0; |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | | |
| | | mounted() { |
| | | this.getMyAppointmentList(); |
| | | appointmentService.getPendingAppointmentSum().then((pendingAppointmentSum) => { |
| | | this.pendingAppointmentSum = pendingAppointmentSum; |
| | | if (this.pendingAppointmentSum) { |
| | | this.isShowRemindAppointmentDialog = true; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | destroyed() { |
| | |
| | | |
| | | @Watch('newAppointmentSum') |
| | | newAppointmentSumChange(): void { |
| | | this.showNewAppointmentHint = this.newAppointmentSum > 0; |
| | | this.isShowNewAppointmentHint = this.newAppointmentSum > 0; |
| | | } |
| | | |
| | | @Watch('$route', {immediate: true}) |
| | |
| | | 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.appointmentDate)})) |
| | | .map((appointment) => ({ ...appointment, sortTime: new Date(appointment.appointmentLastModifiedDate)})) |
| | | .sort((preAppointment, nextAppointment) => +nextAppointment.sortTime - +preAppointment.sortTime); |
| | | } |
| | | |
| | |
| | | class="satisfaction-banner my-10 cursor--pointer" |
| | | @click="$router.push('/satisfactionList')" |
| | | > |
| | | <p class="satisfaction-text text--center">è«å¡«å¯«æ»¿æåº¦èª¿æ¥</p> |
| | | </div> |
| | | <el-row |
| | | v-for="(item, index) in notificationList" |
| | |
| | | .satisfaction-banner { |
| | | width: 100%; |
| | | height: 60px; |
| | | background-image: url('~/assets/images/satisfaction/satisfactionBtn_mob.svg'); |
| | | background-image: url('~/assets/images/satisfaction/satisfactionBtn_s_mob.svg'); |
| | | background-repeat: no-repeat; |
| | | background-size: cover; |
| | | background-position: center; |
| | |
| | | |
| | | @include desktop { |
| | | height: 110px; |
| | | background-image: url('~/assets/images/satisfaction/satisfactionBtn_web.svg'); |
| | | background-image: url('~/assets/images/satisfaction/satisfactionBtn_s_web.svg'); |
| | | |
| | | .satisfaction-text { |
| | | font-size: 24px; |
| | |
| | | font-size: 24px; |
| | | @extend .cursor--pointer; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <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 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" |
| | |
| | | <PopUpFrame :isOpen.sync="sendReserve" @update:isOpen="closeReservePopUp"> |
| | | <div class="mdTxt mt-30 sendReserve-txt">é ç´æåï¼</div> |
| | | <div class="mdTxt sendReserve-txt mb-30">æ¨é ç´çé¡§åæåéèæ¨è¯çµ¡ï¼</div> |
| | | <!-- TODO: æªä¸²æ¥ api, é±è平尿»¿æåº¦ --> |
| | | <!-- <div class="pam-app-review mb-10"> |
| | | <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> --> |
| | | <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 @click="closeReservePopUp">ç¥é</el-button> |
| | | <el-button type="primary" |
| | | @click="closeReservePopUp"> |
| | | @click="reviewPlatform"> |
| | | éåº |
| | | </el-button> --> |
| | | <el-button type="primary" |
| | | @click="closeReservePopUp"> |
| | | æç¥éäº |
| | | </el-button> |
| | | </div> |
| | | </PopUpFrame> |
| | |
| | | import { getRequestsFromStorage, removeRequestQuestionFromStorage, setRequestsToStorage } from '~/shared/storageRequests'; |
| | | import _ from 'lodash'; |
| | | |
| | | 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 |
| | |
| | | @roleStorage.State |
| | | recommendConsultantItem!:string; |
| | | |
| | | score ="" ; |
| | | @roleStorage.Mutation |
| | | storageUserInfo!: (params: RegisterInfo) => void; |
| | | |
| | | score = 0; |
| | | |
| | | genderOptions=[ |
| | | { |
| | |
| | | ]; |
| | | |
| | | 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 : '', |
| | |
| | | private setMyRequest(): void { |
| | | const storageMyRequest = getRequestsFromStorage(); |
| | | const storageMyRequirement = this.recommendConsultantItem ? JSON.parse(this.recommendConsultantItem).requirements:[]; |
| | | const contactTypePromise = accountSettingService.getUserAccountSetting(); |
| | | |
| | | if (storageMyRequest) { |
| | | this.myRequest = { |
| | |
| | | } |
| | | removeRequestQuestionFromStorage(); |
| | | } |
| | | |
| | | contactTypePromise.then((contactTypeDetail) => { |
| | | this.myRequest = { |
| | | ...this.myRequest, |
| | | ...contactTypeDetail |
| | | } |
| | | }) |
| | | |
| | | } |
| | | |
| | | //////////////////////////////////////////////////////////////////////////// |
| | |
| | | } else { |
| | | 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() { |
| | |
| | | queryConsultantService.appointmentDemand(data).then(res => { |
| | | this.sendReserve = true; |
| | | this.myRequest.hopeContactTime = []; |
| | | this.appointmentId = res['id']; |
| | | setRequestsToStorage(this.myRequest); |
| | | }); |
| | | } |
| | |
| | | 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() { |
| | |
| | | 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; |
| | |
| | | {{item.value | formatSeniorityTitle}} |
| | | <span class="smTxt">{{item.value | formatSenioritySubTitle}}</span> |
| | | </span> |
| | | <!-- TODO:é±è滿æåº¦ --> |
| | | <!-- <span v-else-if="item.option === 'avgScore'">{{item.value + 'æä»¥ä¸æ»¿æåº¦'}}</span> --> |
| | | <span v-else-if="item.option === 'avgScore' && !hideReviews">{{item.value + 'æä»¥ä¸æ»¿æåº¦'}}</span> |
| | | <span v-else>{{item.value}}</span> |
| | | </UiTags> |
| | | </template> |
| | |
| | | <SingleSelectBtn :singleSelected.sync="strictQueryDto.seniority" |
| | | :options="seniorityOptions" /> |
| | | </div> |
| | | <!-- <div class="pam-paragraph"> |
| | | TODO:é±è滿æåº¦ |
| | | <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> |
| | | <div class="pam-paragraph"> |
| | | <div class="rec-popular"> |
| | | <div class="pb-10 mdTxt">ç±é檢索</div> |
| | |
| | | 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; |
| | | hideReviews = hideReviews; |
| | | strictQueryDto: StrictQueryDto = { |
| | | gender: '', |
| | | area: '', |
| | |
| | | <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 |
| | |
| | | {{ info.seniority }} |
| | | </div> |
| | | </el-col> |
| | | <!-- TODO:é±è滿æåº¦ --> |
| | | <el-col :span="12" v-if="!hideReviews"> |
| | | <div class="field__label"> |
| | | å®¢æ¶æ»¿æåº¦ |
| | |
| | | |
| | | <UiPagination |
| | | class="mb-30" |
| | | :totalList="strictQueryList" |
| | | :totalList="strictResultList" |
| | | @changePage="changePage" |
| | | :pageSize = 6 |
| | | ></UiPagination> |
| | |
| | | <script lang="ts"> |
| | | import { AgentOfStrictQuery } from '~/shared/models/strict-query.model'; |
| | | import { hideReviews } from '~/shared/const/hide-reviews'; |
| | | import { Vue,Component, State, namespace, Action} from 'nuxt-property-decorator'; |
| | | import { Vue,Component, State, namespace, Action, Getter} from 'nuxt-property-decorator'; |
| | | |
| | | const localStorage = namespace('localStorage'); |
| | | |
| | | @Component |
| | | export default class Reslut extends Vue{ |
| | | 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 = ''; |
| | | popUpTxt = 'å·²å å
¥é¡§åæ¸
å®'; |
| | | hideReviews = hideReviews; |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | |
| | | const strictQueryDto = JSON.parse(this.recommendConsultantItem); |
| | | this.storeStrictQueryList(strictQueryDto); |
| | | } |
| | | |
| | | } |
| | | |
| | | ////////////////////////////////////////////////////////////////////// |
| | |
| | | } |
| | | |
| | | 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 { |
| | |
| | | </div> |
| | | <template v-if="mapUnReviewLogList.length"> |
| | | <div class="satisfaction-card" v-for="(item, index) in mapUnReviewLogList" :key="index"> |
| | | <div class="satisfaction-card-content"> |
| | | <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 |
| | |
| | | |
| | | <script lang="ts"> |
| | | import { Vue, Component, Action, State, Watch } from 'nuxt-property-decorator'; |
| | | import { AppointmentLog } from '~/shared/models/appointment.model'; |
| | | import { UserReviewsConsultantsParams } from '~/shared/models/reviews.model'; |
| | | |
| | | import reviewsService from '~/shared/services/reviews.service'; |
| | | import { AppointmentLog } from '~/shared/models/appointment.model'; |
| | | import { UserReviewParams } from '~/shared/models/reviews.model'; |
| | | |
| | | @Component({ |
| | | layout: 'home' |
| | |
| | | /////////////////////////////////////////////////////// |
| | | |
| | | sent() { |
| | | const reviewParams: UserReviewsConsultantsParams[] = this.mapUnReviewLogList |
| | | const reviewParams: UserReviewParams[] = this.mapUnReviewLogList |
| | | .filter(item => item.satisfaction > 0) |
| | | .map(item => { |
| | | return { |
| | | appointmentId: item.appointmentId, |
| | | score: item.satisfaction |
| | | score: item.satisfaction, |
| | | type: item.type |
| | | } |
| | | }) |
| | | |
| | |
| | | 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; |
¤ñ¹ï·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; |
| | | }) |
| | |
| | | export const hideReviews = true; |
| | | export const hideReviews = false; |
| | |
| | | ], |
| | | type: 'radio' |
| | | }, |
| | | // { TODO:é±è滿æåº¦ |
| | | // name: 'avgScore', |
| | | // title: 'é¡§åæ»¿æåº¦', |
| | | // detail: [], |
| | | // type: '' |
| | | // }, |
| | | { |
| | | name: 'avgScore', |
| | | title: 'é¡§åæ»¿æåº¦', |
| | | detail: [], |
| | | type: '' |
| | | }, |
| | | { |
| | | name: 'communicationStyles', |
| | | title: 'æºéé¢¨æ ¼', |
| | |
| | | // detail: [], |
| | | // type: 'radio' |
| | | // } |
| | | ]; |
| | | ]; |
| | |
| | | export interface AgentInfoSetting{ |
| | | agentNo : string; |
| | | name : string; |
| | | expertise : string[]; |
| | | expertise : string[]; |
| | | title : string; |
| | | role : string; |
| | | serveArea : string; |
| | | gender : string; |
| | | serveArea : string[]; |
| | | gender : string; |
| | | phoneNumber : string; |
| | | companyAddress : string; |
| | | seniorityYear : number; |
| | | seniorityMonth : number; |
| | | seniorityYear : number; |
| | | seniorityMonth : number; |
| | | concept : string; |
| | | experiences : string; |
| | | experiences : string; |
| | | awards : string; |
| | | communicationStyle: string; |
| | | communicationStyle: string; |
| | | photoBase64 : string; |
| | | } |
| | |
| | | import { ContactStatus } from "./enum/contact-status"; |
| | | import { SatisfactionType } from "./enum/satisfaction-type"; |
| | | |
| | | export interface AppointmentLog { |
| | | agentName : string; |
| | | agentNo : string; |
| | | appointmentId : number; |
| | | createdDate : string; |
| | | customerId : number; |
| | | customerName : string; |
| | | id : number; |
| | | lastModifiedDate: string; |
| | | score : number; |
| | | status : 'UNFILLED' | 'FILLED'; |
| | | 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 { |
| | |
| | | agentNo : string; |
| | | contactType : string; |
| | | email : string; |
| | | name : string; |
| | | gender : string; |
| | | hopeContactTime: ContactTime[]; |
| | | job : string; |
| | |
| | | import { Appointment } from "./appointment.model"; |
| | | |
| | | export interface Consultant { |
| | | agentNo : string; |
| | | name : string; |
| | | img : string; |
| | | expertise : string[]; |
| | | avgScore : number; |
| | | contactStatus? : string; |
| | | createTime : Date | string; |
| | | updateTime : Date | string; |
| | | customerViewTime? : Date | string; |
| | | role : string; |
| | | seniority : string, |
| | | appointments? : Appointment[]; |
| | | 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 { |
| | | appointmentId : number; |
| | | appointmentDate : string; |
| | | appointmentScore?: number; |
| | | appointmentStatus: string; |
| | | appointmentDate : string; |
| | | appointmentId : number; |
| | | appointmentLastModifiedDate: string; |
| | | appointmentScore? : number; |
| | | appointmentStatus : string; |
| | | } |
| | | |
¤ñ¹ï·sÀÉ®× |
| | |
| | | export enum SatisfactionType { |
| | | SYSTEM = 'SYSTEM', |
| | | APPOINTMENT = 'APPOINTMENT', |
| | | } |
| | | |
| | |
| | | export interface UserReviewsConsultantsParams{ |
| | | import { SatisfactionType } from './enum/satisfaction-type'; |
| | | export interface UserReviewParams{ |
| | | appointmentId: number, |
| | | score : number, |
| | | type : SatisfactionType, |
| | | } |
| | | |
| | | export interface NotificationList { |
| | |
| | | createdDate: string; |
| | | /** å·²è®æé */ |
| | | readDate: string; |
| | | } |
| | | } |
| | | |
| | | export interface UserReviewPlatformRes { |
| | | agentNo? : string; |
| | | appointmentId: number; |
| | | customerId : string; |
| | | id : number, |
| | | score : string; |
| | | type : SatisfactionType; |
| | | } |
| | |
| | | name : string; |
| | | img : string; |
| | | expertise : string[]; |
| | | suitability : number; |
| | | avgScore : number; |
| | | contactStatus: null; |
| | | updateTime : null; |
| | | seniority : string; |
| | | role : string; |
| | | new : boolean; |
| | | latestAppointmentId :null |
| | | } |
| | |
| | | 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(); |
| | |
| | | |
| | | // é ç´åè©¢å |
| | | async appointmentDemand(data: AppointmentParams) { |
| | | return http.post('/appointment/customer/create', data); |
| | | return http.post('/appointment/customer/create', data).then((res) => res.data); |
| | | } |
| | | |
| | | } |
| | |
| | | import { http } from "./httpClient"; |
| | | |
| | | import { NotificationList, UserReviewsConsultantsParams } from "../models/reviews.model"; |
| | | import { NotificationList, UserReviewPlatformRes, UserReviewParams } from "../models/reviews.model"; |
| | | import { AppointmentLog } from "../models/appointment.model"; |
| | | |
| | | class ReviewsService { |
| | | |
| | | //客æ¶é²è¡æ»¿æåº¦è©å(å®ç) |
| | | userReviewsConsultants(data: UserReviewsConsultantsParams) { |
| | | userReviewsConsultants(data: UserReviewParams) { |
| | | return http.post('/satisfaction/score', data); |
| | | } |
| | | |
| | | // 客æ¶é²è¡æ»¿æåº¦(å¤ç) |
| | | allUserReviewsConsultants(data: UserReviewsConsultantsParams[]) { |
| | | allUserReviewsConsultants(data: UserReviewParams[]) { |
| | | return http.post('/satisfaction/score/all', data); |
| | | } |
| | | |
| | |
| | | readAllMyNotification() { |
| | | return http.post('/personal_notification/readAllMyNotification') |
| | | } |
| | | |
| | | // 客æ¶å¡«å¯«å¹³å°æ»¿æåº¦ |
| | | reviewPlatform(params: UserReviewParams): Promise<UserReviewPlatformRes> { |
| | | return http.post('/satisfaction/score', params); |
| | | } |
| | | } |
| | | |
| | | export default new ReviewsService(); |
| | |
| | | return this.context.getters['localStorage/isUserLogin']; |
| | | } |
| | | |
| | | 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 |
| | | updateStrictQueryList(data: AgentOfStrictQuery[]) { |
| | | this.strictQueryList = data; |
| | | this.strictQueryList = data.sort((a, b) => b.suitability - a.suitability); |
| | | } |
| | | |
| | | @Mutation |
| | |
| | | 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'); |
| | |
| | | get consultantId():string|null{ |
| | | return this.consultant_id; |
| | | } |
| | | |
| | | get isPrimaryContactTypeEmail(): boolean { |
| | | return this.userInfo.contactType === ContactType.EMAIL; |
| | | } |
| | | |
| | | |
| | | get quickFilterSelectedData(): Selected[] { |
| | | return JSON.parse(this.quickFilterSelectedItem || '[]') as Selected[]; |
| | |
| | | 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.id_token = localStorage.getItem('id_token') ; |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |
| | |
| | | -- å»ºç« å·²ç¶éç¥å®¢æ¶æªèçé ç´å®çç´é table |
| | | CREATE TABLE public.appointment_expiring_notify_record ( |
| | | id bigserial NOT NULL, |
| | | appointment_id bigserial NOT NULL, |
¤ñ¹ï·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ÀÉ®× |
| | |
| | | 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" |
| | | } |
| | | ] |
| | | ] |
| | |
| | | |
| | | |
| | | 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 |
| | | } |
| | |
| | | "財åè¦å", |
| | | "è³ç¢è½ç§»" |
| | | ], |
| | | "suitability": 50 // å¹é
度 |
| | | "avgScore": 4.7, |
| | | "contactStatus": null, |
| | | "updateTime": null, |
| | |
| | | "ç¯ç¨
", |
| | | "æ¨æ´»éä¼" |
| | | ], |
| | | "suitability": 100 // å¹é
度 |
| | | "avgScore": 3.8, |
| | | "contactStatus": null, |
| | | "updateTime": null, |
| | |
| | | "name" : "å´å¯¨", |
| | | "agentNo" : "R221444250", |
| | | "role" : "å°åä¿éªç¶ç´äºº", |
| | | "img" : "avatar10.jpg", |
| | | "avgScore" : 3.1, |
| | | "title" : "èç¶ç(DM)", |
| | | "phoneNumber" : "0987168787", |
| | | "serveArea" : "å
¨å°", |
| | | "serveArea" : "åæç¸£ãé«éå¸ã屿±ç¸£", |
| | | "companyAddress" : "è±è®ç¸£çéé®ä¸æ£è·¯30è9æ¨", |
| | | "latestLoginTime" : "2021-12-24T08:48:21.497Z", |
| | | "seniority" : "38 å¹´ ", |
| | | "suitability" : 50, |
| | | "evaluation" : 50, |
| | | "expertise" : [ "å¥åº·èä¿é", "å女æè²", "è³ç¢è¦å", "æ¨æ´»éä¼", "ä¿å®å¥æª¢/è¦å", "åç´
ä¿å®" ], |
| | | "concept" : "æ¯ä»½ä¿å®è¦åå¾ãå¿ãåºç¼\r\nç¨å¿ãç±å¿ãè²¼å¿å°å¾
æ¯ä½å®¢æ¶\r\n\r\næçä¸å¤§ä¿¡å¿µ\r\nâ é«cpå¼ ãä½ä¿è²»ãé«ä¿éã\r\nâ ç°¡å®å ãè¼é¬ãææä¿éªã\r\nâ 客製å ãé¸ä¸ä»½é©åçè¦åã\r\n\r\næä¾å®åçè¦åä¿è·æ¨åææç人", |
| | |
| | | "awards" : "20次åéç¹¼çºçç(IQA)\r\n30次ç¾è¬åæ¡åæ(MDRT)æå¡\r\nç財è¦åé¡§åèªè(CFP)", |
| | | "gender" : "female", |
| | | "communicationStyle" : "謹æ
å實ãæå¿«ä¸»åãèå¿å¾è½ãå¥è«é¢¨è¶£" |
| | | } |
| | | } |
| | |
| | | @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.createSatisfaction(appointment); |
| | | satisfactionService.createAppointmentSatisfaction(appointment); |
| | | return appointmentClosedInfoRepository.save(closedInfo); |
| | | } |
| | | |
| | | |
| | | private ClosedProcessDTO toClosedProcessDTO(AbstractAppointmentProcessDTO processDTO) { |
| | | ClosedProcessDTO closeProcess = (ClosedProcessDTO)processDTO; |
| | | BeanUtils.copyProperties(processDTO, closeProcess); |
| | |
| | | public ContactStatusEnum getProcessType() { |
| | | return ContactStatusEnum.CLOSED; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public AppointmentClosedInfo editClosedInfo( |
| | | AbstractAppointmentProcessDTO abstractDTO |
| | |
| | | BeanUtils.copyProperties(closeProcess, closedInfo); |
| | | return appointmentClosedInfoRepository.save(closedInfo); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | @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.createSatisfaction(appointment); |
| | | satisfactionService.createAppointmentSatisfaction(appointment); |
| | | return appointmentClosedInfoRepository.save(closedInfo); |
| | | } |
| | | |
| | |
| | | public ContactStatusEnum getProcessType() { |
| | | return ContactStatusEnum.DONE; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public AppointmentClosedInfo editClosedInfo( |
| | | AbstractAppointmentProcessDTO abstractDTO |
| | |
| | | BeanUtils.copyProperties(abstractDTO, doneProcess); |
| | | return doneProcess; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | .deny() |
| | | .and() |
| | | .sessionManagement() |
| | | .sessionCreationPolicy(SessionCreationPolicy.STATELESS) |
| | | .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) |
| | | .and() |
| | | .authorizeRequests() |
| | | .antMatchers("/api/authenticate").permitAll() |
| | |
| | | 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; |
| | | } |
| | | } |
¤ñ¹ï·sÀÉ®× |
| | |
| | | package com.pollex.pam.enums; |
| | | |
| | | public enum SatisfactionTypeEnum { |
| | | APPOINTMENT, // å°é¡§åé ç´ç滿æåº¦ |
| | | SYSTEM // å°å¹³å°ç滿æåº¦ |
| | | } |
| | |
| | | import java.util.Optional; |
| | | |
| | | import com.pollex.pam.enums.SatisfactionStatusEnum; |
| | | import com.pollex.pam.enums.SatisfactionTypeEnum; |
| | | import org.springframework.data.jpa.repository.JpaRepository; |
| | | import org.springframework.data.jpa.repository.Query; |
| | | import org.springframework.data.repository.query.Param; |
| | |
| | | @Repository |
| | | public interface SatisfactionRepository extends JpaRepository<Satisfaction, Long>{ |
| | | |
| | | List<Satisfaction> findByAgentNo(String agentNo); |
| | | List<Satisfaction> findByAgentNoAndType(String agentNo, SatisfactionTypeEnum type); |
| | | |
| | | List<Satisfaction> findByCustomerId(Long customerId); |
| | | |
| | | Optional<Satisfaction> findOneByAppointmentId(Long appointmentId); |
| | | Optional<Satisfaction> findOneByAppointmentIdAndType(Long appointmentId, SatisfactionTypeEnum type); |
| | | |
| | | List<Satisfaction> findAllByStatus(SatisfactionStatusEnum status); |
| | | List<Satisfaction> findAllByStatusAndType(SatisfactionStatusEnum status, SatisfactionTypeEnum type); |
| | | |
| | | @Query(value = "SELECT avg(score) FROM satisfaction where agent_no=:agent_no" |
| | | @Query(value = "SELECT avg(score) FROM satisfaction where type='APPOINTMENT'" |
| | | + " and agent_no=:agent_no" |
| | | + " and score is not null" |
| | | , nativeQuery = true) |
| | | Float getAgentScoreAvg(@Param("agent_no") String agentNo); |
| | | Optional<Float> getAgentScoreAvg(@Param("agent_no") String agentNo); |
| | | } |
| | |
| | | import com.pollex.pam.security.token.EServiceAuthenticationToken; |
| | | import com.pollex.pam.service.LoginRecordService; |
| | | import com.pollex.pam.service.dto.EServiceResponse; |
| | | import com.pollex.pam.service.util.HttpRequestUtil; |
| | | import com.pollex.pam.web.rest.errors.EServiceErrorException; |
| | | import org.apache.http.conn.ssl.NoopHostnameVerifier; |
| | | import org.apache.http.conn.ssl.SSLConnectionSocketFactory; |
| | |
| | | @Component |
| | | public class EServiceAuthenticationProvider { |
| | | |
| | | private static final String E_SERVICE_LOGIN_SUCCESS_CODE = "0"; |
| | | private static final String E_SERVICE_LOGIN_SUCCESS_CODE = "true"; |
| | | private static final Logger log = LoggerFactory.getLogger(EServiceAuthenticationProvider.class); |
| | | |
| | | @Autowired |
| | |
| | | EServiceResponse eServiceResponse = responseEntity.getBody(); |
| | | log.debug("eService response = {}", eServiceResponse); |
| | | |
| | | if(E_SERVICE_LOGIN_SUCCESS_CODE.equals(eServiceResponse.getCode())){ |
| | | if(E_SERVICE_LOGIN_SUCCESS_CODE.equals(eServiceResponse.getIssuccess())){ |
| | | loginRecordService.saveEServiceLoginSuccessRecord(account); |
| | | return getConsultantToken(account, credentials); |
| | | } |
| | |
| | | import com.pollex.pam.appointment.process.AppointmentProcess; |
| | | import com.pollex.pam.config.ApplicationProperties; |
| | | import com.pollex.pam.config.Constants; |
| | | import com.pollex.pam.enums.SatisfactionTypeEnum; |
| | | import com.pollex.pam.service.dto.*; |
| | | import com.pollex.pam.web.rest.errors.NotFoundExpiringAppointmentException; |
| | | import com.pollex.pam.web.rest.errors.SendEmailFailException; |
| | | import com.pollex.pam.web.rest.errors.SendSMSFailException; |
| | | import io.jsonwebtoken.lang.Assert; |
| | |
| | | } |
| | | |
| | | public void setSatisfactionScore(AppointmentCustomerViewDTO dto, Long appointmentId) { |
| | | satisfactionService.getByAppointmentId(appointmentId).ifPresent(satisfaction -> { |
| | | satisfactionService.getByAppointmentIdAndType(appointmentId, SatisfactionTypeEnum.APPOINTMENT).ifPresent(satisfaction -> { |
| | | dto.setSatisfactionScore(satisfaction.getScore()); |
| | | }); |
| | | } |
| | |
| | | set.add(criteriaBuilder.equal(root.get("gender"), param.getGender())); |
| | | } |
| | | |
| | | if(Objects.nonNull(param.getAvgScore()) && param.getAvgScore().intValue() != 0) { |
| | | set.add(criteriaBuilder.greaterThanOrEqualTo(root.get("avgScore"), param.getAvgScore().intValue())); |
| | | } |
| | | |
| | | if(StringUtils.isNotEmpty(param.getSeniority()) && !StringUtils.equals(UNLIMITED, param.getSeniority())) { |
| | | if(YOUNG.equals(param.getSeniority())) { |
| | | set.add(criteriaBuilder.lessThanOrEqualTo(root.get("seniorityYear"), 5)); |
| | | } |
| | | else if(SENIOR.equals(param.getSeniority())) { |
| | | set.add(criteriaBuilder.greaterThan(root.get("seniorityYear"), 5)); |
| | | } |
| | | } |
| | | |
| | | if(StringUtils.isNotEmpty(param.getArea())) { |
| | | Predicate predicate1 = criteriaBuilder.like(root.get("serveArea"), "%" + param.getArea() + "%"); |
| | | Predicate predicate2 = criteriaBuilder.like(root.get("serveArea"), "%å
¨å°%"); |
| | | |
| | | Predicate finalPredicate = criteriaBuilder.or(predicate1, predicate2); |
| | | set.add(finalPredicate); |
| | | set.add(criteriaBuilder.like(root.get("serveArea"), "%" + param.getArea() + "%")); |
| | | } |
| | | |
| | | List<String> allRequirements = Objects.nonNull(param.getRequirements()) ? param.getRequirements() : new ArrayList<>(); |
| | | if(StringUtils.isNotEmpty(param.getOtherPopularTags())) { |
| | | allRequirements.add(param.getOtherRequirement()); |
| | | } |
| | | allRequirements.forEach(requirement -> set.add(criteriaBuilder.like(root.get("expertise"), "%" + requirement + "%"))); |
| | | |
| | | List<String> allPopularTags = Objects.nonNull(param.getPopularTags()) ? param.getPopularTags() : new ArrayList<>(); |
| | | if(StringUtils.isNotEmpty(param.getOtherPopularTags())) { |
| | | allPopularTags.add(param.getOtherPopularTags()); |
| | | } |
| | | allPopularTags.forEach(popularTag -> set.add(criteriaBuilder.like(root.get("concept"), "%" + popularTag + "%"))); |
| | | |
| | | Predicate[] predicates = new Predicate[set.size()]; |
| | | predicates = set.toArray(predicates); |
| | |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.FileNotFoundException; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.math.BigDecimal; |
| | | import java.time.Instant; |
| | | import java.util.Comparator; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.Optional; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static com.pollex.pam.consts.SeniorityQueryConst.*; |
| | | import static com.pollex.pam.enums.ContactStatusEnum.*; |
| | | |
| | | @Service |
| | |
| | | public List<ConsultantDTO> strictQueryConsultant(StrictQueryConsultantParam param) { |
| | | return consultantRepository.findAll(ConsultantQuerySpec.getStrictQuerySpec(param)) |
| | | .stream() |
| | | .map(consultantMapper::toDto) |
| | | .map(consultant -> { |
| | | int suitabilityScore = getStrictQuerySuitabilityScore(param, consultant); |
| | | |
| | | ConsultantDTO dto = consultantMapper.toDto(consultant); |
| | | dto.setSuitability(suitabilityScore); |
| | | |
| | | return dto; |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | private int getStrictQuerySuitabilityScore(StrictQueryConsultantParam param, Consultant consultant) { |
| | | Float queryAvgScore = param.getAvgScore(); |
| | | String querySeniority = param.getSeniority(); |
| | | List<String> queryRequirements = param.getRequirements(); |
| | | |
| | | int score = 0; |
| | | if(isConsultantGreaterThanScore(queryAvgScore, consultant.getAvgScore())) { |
| | | score += 30; |
| | | } |
| | | |
| | | if(isConsultantInSeniority(querySeniority, consultant.getSeniorityYear())) { |
| | | score += 20; |
| | | } |
| | | |
| | | if(isAllRequirementsIncludeConsultant(queryRequirements, consultant.getExpertise())) { |
| | | score += 50; |
| | | } |
| | | |
| | | return score; |
| | | } |
| | | |
| | | private boolean isAllRequirementsIncludeConsultant(List<String> queryRequirements, String consultantExpertise) { |
| | | return queryRequirements |
| | | .stream() |
| | | .allMatch(queryRequirement -> consultantExpertise.matches(".*"+queryRequirement+".*")); |
| | | } |
| | | |
| | | private boolean isConsultantInSeniority(String querySeniority, Long consultantSeniorityYear) { |
| | | switch (querySeniority == null ? "" : querySeniority) { |
| | | case YOUNG: |
| | | return consultantSeniorityYear < 5; |
| | | case SENIOR: |
| | | return consultantSeniorityYear > 5; |
| | | case UNLIMITED: |
| | | case "": |
| | | return true; |
| | | default: |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | private boolean isConsultantGreaterThanScore(Float queryAvgScore, Float consultantAvgScore) { |
| | | return Objects.isNull(queryAvgScore) || queryAvgScore < consultantAvgScore; |
| | | } |
| | | |
| | | public List<ConsultantDTO> fastQueryConsultant(FastQueryConsultantParam param) { |
| | |
| | | } |
| | | |
| | | public void setConsultantAvgScore(Satisfaction satisfaction) { |
| | | float avgScore = getAgentAvgScore(satisfaction.getAgentNo()); |
| | | Consultant consultant = consultantRepository.findOneByAgentNo(satisfaction.getAgentNo()) |
| | | .get(); |
| | | consultant.setAvgScore(avgScore); |
| | | consultantRepository.save(consultant); |
| | | Optional<Float> avgScore = getAgentAvgScore(satisfaction.getAgentNo()); |
| | | |
| | | if(avgScore.isPresent()) { |
| | | BigDecimal bigDecimal = BigDecimal.valueOf(avgScore.get()); |
| | | |
| | | Consultant consultant = consultantRepository.findOneByAgentNo(satisfaction.getAgentNo()).get(); |
| | | consultant.setAvgScore(bigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP).floatValue()); |
| | | consultantRepository.save(consultant); |
| | | } |
| | | } |
| | | |
| | | public float getAgentAvgScore(String agentNo) { |
| | | Float avgScore = satisfactionRepository.getAgentScoreAvg(agentNo); |
| | | if(avgScore==null)return 0; |
| | | BigDecimal bigDecimal = new BigDecimal(avgScore); |
| | | return avgScore = bigDecimal.setScale(1,BigDecimal.ROUND_HALF_UP).floatValue(); |
| | | public Optional<Float> getAgentAvgScore(String agentNo) { |
| | | return satisfactionRepository.getAgentScoreAvg(agentNo); |
| | | } |
| | | } |
| | |
| | | personalNotificationRepository.save(entity); |
| | | } |
| | | |
| | | public void createNotFillSatisfactionSumToCustomer(Long customerId, int notFillSatisfactionSum) { |
| | | public void createNotFillAppointmentSatisfactionNumberToCustomer(Long customerId, int notFillSatisfactionSum) { |
| | | PersonalNotification entity = new PersonalNotification(); |
| | | |
| | | String content = "æ¨æ "+notFillSatisfactionSum+" çé¡§åçæ»¿æåº¦éè¦å¡«å¯«"; |
| | |
| | | readAllNotification(PersonalNotificationRoleEnum.CUSTOMER, SecurityUtils.getCustomerDBId()); |
| | | } |
| | | } |
| | | |
| | | |
| | | public void readAllNotification(PersonalNotificationRoleEnum ownerRole |
| | | , Long ownerId) { |
| | | List<PersonalNotification> allNotification = personalNotificationRepository.findAllByOwnerRoleAndOwnerId(ownerRole, ownerId); |
| | |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | |
| | | import com.pollex.pam.enums.SatisfactionTypeEnum; |
| | | import com.pollex.pam.security.SecurityUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | import com.pollex.pam.service.mapper.SatisfactionMapper; |
| | | import com.pollex.pam.web.rest.errors.SatisfactionAlreadyExistException; |
| | | import com.pollex.pam.web.rest.errors.SatisfactionNotFoundException; |
| | | import org.springframework.util.Assert; |
| | | |
| | | @Service |
| | | @Transactional |
| | | public class SatisfactionService { |
| | | |
| | | private static final Logger log = LoggerFactory.getLogger(SatisfactionService.class); |
| | | |
| | | @Autowired |
| | | SatisfactionRepository satisfactionRepository; |
| | |
| | | |
| | | public Satisfaction save(Satisfaction satisfaction) { |
| | | satisfaction = satisfactionRepository.save(satisfaction); |
| | | consultantService.setConsultantAvgScore(satisfaction); |
| | | if(satisfaction.getType() == SatisfactionTypeEnum.APPOINTMENT) { |
| | | consultantService.setConsultantAvgScore(satisfaction); |
| | | } |
| | | return satisfaction; |
| | | } |
| | | |
| | | public Satisfaction scorefaction(SatisfactionCustomerScoreDTO scoreDTO) { |
| | | Optional<Satisfaction> satisfactionOP = getByAppointmentId(scoreDTO.getAppointmentId()); |
| | | Optional<Satisfaction> satisfactionOP = satisfactionRepository.findOneByAppointmentIdAndType(scoreDTO.getAppointmentId(), scoreDTO.getType()); |
| | | Satisfaction satisfaction = satisfactionOP.orElseThrow(SatisfactionNotFoundException::new); |
| | | |
| | | boolean isSameCustomer = satisfaction.getCustomerId().equals(SecurityUtils.getCustomerDBId()); |
| | | Assert.isTrue(isSameCustomer, "The currently logged in customer has a different ID than the customer on Satisfaction"); |
| | | |
| | | satisfaction.setScore(scoreDTO.getScore()); |
| | | satisfaction.setStatus(SatisfactionStatusEnum.FILLED); |
| | | save(satisfaction); |
| | | personalNotificationService.createScorefactionToConsultant(satisfaction); |
| | | return satisfaction; |
| | | |
| | | if(satisfaction.getType() == SatisfactionTypeEnum.APPOINTMENT) { |
| | | personalNotificationService.createScorefactionToConsultant(satisfaction); |
| | | } |
| | | return satisfaction; |
| | | } |
| | | |
| | | public Satisfaction createSatisfaction(Appointment appointment) { |
| | | boolean isexist = getByAppointmentId(appointment.getId()).isPresent(); |
| | | public Satisfaction createAppointmentSatisfaction(Appointment appointment) { |
| | | boolean isexist = getByAppointmentIdAndType(appointment.getId(), SatisfactionTypeEnum.APPOINTMENT).isPresent(); |
| | | if(isexist) { |
| | | throw new SatisfactionAlreadyExistException(); |
| | | } |
| | | Satisfaction satisfaction = appointmentMapper.toSatisfaction(appointment); |
| | | Satisfaction satisfaction = appointmentMapper.toAppointmentSatisfaction(appointment); |
| | | return save(satisfaction); |
| | | } |
| | | // |
| | |
| | | // return save(satisfaction); |
| | | // } |
| | | |
| | | public List<SatisfactionDTO> getByAgentNo(String agentNo) { |
| | | List<Satisfaction> satisfactionList = satisfactionRepository.findByAgentNo(agentNo); |
| | | public List<SatisfactionDTO> getByAgentNoAndType(String agentNo, SatisfactionTypeEnum type) { |
| | | List<Satisfaction> satisfactionList = satisfactionRepository.findByAgentNoAndType(agentNo, type); |
| | | return satisfactionMapper.toDTO(satisfactionList); |
| | | } |
| | | |
| | |
| | | return satisfactionMapper.toDTO(satisfactionList); |
| | | } |
| | | |
| | | public Optional<Satisfaction> getByAppointmentId(Long appointmentId) { |
| | | return satisfactionRepository.findOneByAppointmentId(appointmentId); |
| | | public Optional<Satisfaction> getByAppointmentIdAndType(Long appointmentId, SatisfactionTypeEnum type) { |
| | | return satisfactionRepository.findOneByAppointmentIdAndType(appointmentId, type); |
| | | } |
| | | |
| | | public List<Satisfaction> getByStatus(SatisfactionStatusEnum status) { |
| | | return satisfactionRepository.findAllByStatus(status); |
| | | public List<Satisfaction> getByStatusAndType(SatisfactionStatusEnum status, SatisfactionTypeEnum type) { |
| | | return satisfactionRepository.findAllByStatusAndType(status, type); |
| | | } |
| | | |
| | | public List<Satisfaction> scoreAllfaction(List<SatisfactionCustomerScoreDTO> scoreDTO) { |
| | |
| | | }); |
| | | return satisfactionList; |
| | | } |
| | | |
| | | public void createUnfilledSystemSatisfaction(Appointment appointment) { |
| | | Satisfaction satisfaction = new Satisfaction(); |
| | | satisfaction.setAppointmentId(appointment.getId()); |
| | | satisfaction.setCustomerId(SecurityUtils.getCustomerDBId()); |
| | | satisfaction.setStatus(SatisfactionStatusEnum.UNFILLED); |
| | | satisfaction.setType(SatisfactionTypeEnum.SYSTEM); |
| | | |
| | | satisfactionRepository.save(satisfaction); |
| | | } |
| | | } |
| | |
| | | import com.pollex.pam.enums.AppointmentStatusEnum; |
| | | import com.pollex.pam.enums.ContactStatusEnum; |
| | | import com.pollex.pam.enums.SatisfactionStatusEnum; |
| | | import com.pollex.pam.enums.SatisfactionTypeEnum; |
| | | import com.pollex.pam.repository.AppointmentCustomerViewRepository; |
| | | import com.pollex.pam.repository.AppointmentExpiringNotifyRecordRepository; |
| | | import org.slf4j.Logger; |
| | |
| | | |
| | | // todo é確èªè©²æé, otis todo=134497 |
| | | @Scheduled(cron = "0 30 8 * * *") |
| | | public void sendNotFillSatisfactionToPersonalNotification() { |
| | | Map<Long, List<Satisfaction>> customerNotFillSatisfactions = satisfactionService.getByStatus(SatisfactionStatusEnum.UNFILLED) |
| | | public void sendNotFillAppointmentSatisfactionToPersonalNotification() { |
| | | Map<Long, List<Satisfaction>> customerNotFillSatisfactions = |
| | | satisfactionService.getByStatusAndType(SatisfactionStatusEnum.UNFILLED, SatisfactionTypeEnum.APPOINTMENT) |
| | | .stream() |
| | | .collect(Collectors.groupingBy(Satisfaction::getCustomerId)); |
| | | |
| | | customerNotFillSatisfactions.forEach((customerId, notFillSatisfactions) -> |
| | | personalNotificationService.createNotFillSatisfactionSumToCustomer(customerId, notFillSatisfactions.size()) |
| | | personalNotificationService.createNotFillAppointmentSatisfactionNumberToCustomer(customerId, notFillSatisfactions.size()) |
| | | ); |
| | | } |
| | | |
| | |
| | | private Instant updateTime; |
| | | private String role; |
| | | private String seniority; |
| | | private int suitability; |
| | | |
| | | public boolean isNewConsultant() { |
| | | if(updateTime != null){ |
| | |
| | | public void setNewConsultant(boolean newConsultant) { |
| | | this.newConsultant = newConsultant; |
| | | } |
| | | |
| | | public int getSuitability() { |
| | | return suitability; |
| | | } |
| | | |
| | | public void setSuitability(int suitability) { |
| | | this.suitability = suitability; |
| | | } |
| | | } |
| | |
| | | private String companyAddress; |
| | | private Instant latestLoginTime; |
| | | private String seniority; |
| | | private Number suitability; |
| | | private Number evaluation; |
| | | private List<String> expertise; |
| | | private String concept; |
| | |
| | | this.seniority = seniority; |
| | | } |
| | | |
| | | public Number getSuitability() { |
| | | return suitability; |
| | | } |
| | | |
| | | public void setSuitability(Number suitability) { |
| | | this.suitability = suitability; |
| | | } |
| | | |
| | | public Number getEvaluation() { |
| | | return evaluation; |
| | | } |
| | |
| | | public void setEmail(String email) { |
| | | this.email = email; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | package com.pollex.pam.service.dto; |
| | | |
| | | import com.pollex.pam.enums.SatisfactionTypeEnum; |
| | | |
| | | public class SatisfactionCustomerScoreDTO { |
| | | |
| | | |
| | | private Long appointmentId; |
| | | private Float score; |
| | | |
| | | private SatisfactionTypeEnum type; |
| | | |
| | | public Long getAppointmentId() { |
| | | return appointmentId; |
| | | } |
| | |
| | | public void setScore(Float score) { |
| | | this.score = score; |
| | | } |
| | | |
| | | |
| | | public SatisfactionTypeEnum getType() { |
| | | return type; |
| | | } |
| | | public void setType(SatisfactionTypeEnum type) { |
| | | this.type = type; |
| | | } |
| | | } |
| | |
| | | import java.time.Instant; |
| | | |
| | | import com.pollex.pam.enums.SatisfactionStatusEnum; |
| | | import com.pollex.pam.enums.SatisfactionTypeEnum; |
| | | |
| | | public class SatisfactionDTO { |
| | | |
| | |
| | | private Long appointmentId; |
| | | private String customerName; |
| | | private String agentName; |
| | | |
| | | private SatisfactionTypeEnum type; |
| | | |
| | | public Long getId() { |
| | | return id; |
| | | } |
| | |
| | | public void setAgentName(String agentName) { |
| | | this.agentName = agentName; |
| | | } |
| | | |
| | | |
| | | public SatisfactionTypeEnum getType() { |
| | | return type; |
| | | } |
| | | public void setType(SatisfactionTypeEnum type) { |
| | | this.type = type; |
| | | } |
| | | } |
| | |
| | | public class StrictQueryConsultantParam { |
| | | |
| | | private GenderEnum gender; |
| | | private Number avgScore; |
| | | private Float avgScore; |
| | | private String status; |
| | | private String area; |
| | | private List<String> requirements; |
| | |
| | | this.gender = gender; |
| | | } |
| | | |
| | | public Number getAvgScore() { |
| | | public Float getAvgScore() { |
| | | return avgScore; |
| | | } |
| | | |
| | | public void setAvgScore(Number avgScore) { |
| | | public void setAvgScore(Float avgScore) { |
| | | this.avgScore = avgScore; |
| | | } |
| | | |
| | |
| | | |
| | | import java.util.List; |
| | | |
| | | import com.pollex.pam.enums.SatisfactionTypeEnum; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import com.pollex.pam.enums.SatisfactionStatusEnum; |
| | | import com.pollex.pam.repository.AppointmentRepository; |
| | | import com.pollex.pam.service.dto.AppointmentDTO; |
| | | import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO; |
| | | |
| | | @Service |
| | | public class AppointmentMapper { |
| | |
| | | .map(s -> toAppointmentDTO(s)).collect(toList()); |
| | | } |
| | | |
| | | public Satisfaction toSatisfaction(Appointment appointment) { |
| | | public Satisfaction toAppointmentSatisfaction(Appointment appointment) { |
| | | Satisfaction target = new Satisfaction(); |
| | | target.setAppointmentId(appointment.getId()); |
| | | target.setAgentNo(appointment.getAgentNo()); |
| | | target.setCustomerId(appointment.getCustomerId()); |
| | | target.setType(SatisfactionTypeEnum.APPOINTMENT); |
| | | target.setStatus(SatisfactionStatusEnum.UNFILLED); |
| | | return target; |
| | | } |
| | | |
| | | public Satisfaction toSatisfaction(Long appointmentId) { |
| | | public Satisfaction toAppointmentSatisfaction(Long appointmentId) { |
| | | Appointment appointment = appointmentRepository.findById(appointmentId).get(); |
| | | return toSatisfaction(appointment); |
| | | return toAppointmentSatisfaction(appointment); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | @Service |
| | | public class ConsultantDTOMapper { |
| | | |
| | | |
| | | @Autowired |
| | | ApplicationProperties applicationProperty; |
| | | |
| | |
| | | target.setAward(source.getAwards()); |
| | | target.setExperience(source.getExperiences()); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | consultantDTO.setImg(source.getPhotoPath()); |
| | | consultantDTO.setRole(source.getRole()); |
| | | |
| | | consultantDTO.setSuitability(0); |
| | | consultantDTO.setContactStatus(null); |
| | | consultantDTO.setUpdateTime(null); |
| | | // consultantDTO.setLatestAppointmentId(null); |
| | |
| | | consultantDetailDTO.setExpertise(splitStringWithChar(source.getExpertise())); |
| | | consultantDetailDTO.setExperiences(source.getExperience()); |
| | | |
| | | // todo 決å®å¹é
ç¨åº¦ |
| | | consultantDetailDTO.setSuitability(50); |
| | | // todo é確èªè«®è©¢åº¦è¡¨ç¾ |
| | | consultantDetailDTO.setEvaluation(50); |
| | | |
| | | return consultantDetailDTO; |
| | |
| | | |
| | | import com.pollex.pam.domain.Satisfaction; |
| | | import com.pollex.pam.enums.SatisfactionStatusEnum; |
| | | import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO; |
| | | // import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO; |
| | | |
| | | @Service |
| | | public class SatisfactionDTOMapper { |
| | | |
| | | |
| | | @Autowired |
| | | AppointmentMapper appointmentMapper; |
| | | |
| | | public Satisfaction toSatisfaction(SatisfactionCustomerScoreDTO source) { |
| | | Satisfaction satisfaction = appointmentMapper.toSatisfaction(source.getAppointmentId()); |
| | | satisfaction.setScore(source.getScore()); |
| | | if(satisfaction.getScore()!=null) { |
| | | satisfaction.setStatus(SatisfactionStatusEnum.FILLED); |
| | | }else { |
| | | satisfaction.setStatus(SatisfactionStatusEnum.UNFILLED); |
| | | } |
| | | return satisfaction; |
| | | } |
| | | |
| | | // public Satisfaction toSatisfaction(SatisfactionCustomerScoreDTO source) { |
| | | // Satisfaction satisfaction = appointmentMapper.toAppointmentSatisfaction(source.getAppointmentId()); |
| | | // satisfaction.setScore(source.getScore()); |
| | | // if(satisfaction.getScore()!=null) { |
| | | // satisfaction.setStatus(SatisfactionStatusEnum.FILLED); |
| | | // }else { |
| | | // satisfaction.setStatus(SatisfactionStatusEnum.UNFILLED); |
| | | // } |
| | | // return satisfaction; |
| | | // } |
| | | } |
| | |
| | | import static java.util.stream.Collectors.toList; |
| | | |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | |
| | | @Service |
| | | public class SatisfactionMapper { |
| | | |
| | | |
| | | @Autowired |
| | | ConsultantRepository consultantRepository; |
| | | |
| | | |
| | | @Autowired |
| | | CustomerRepository customerRepository; |
| | | |
| | | |
| | | public SatisfactionDTO toDTO(Satisfaction source) { |
| | | SatisfactionDTO target = new SatisfactionDTO(); |
| | | BeanUtils.copyProperties(source, target); |
| | | target.setScore(source.getScore()); |
| | | Consultant consultant= consultantRepository.findOneByAgentNo(source.getAgentNo()).get(); |
| | | target.setAgentName(consultant.getName()); |
| | | Consultant consultant= consultantRepository.findOneByAgentNo(source.getAgentNo()).orElse(null); |
| | | target.setAgentName(Objects.isNull(consultant) ? null : consultant.getName()); |
| | | Customer customer = customerRepository.findById(source.getCustomerId()).get(); |
| | | target.setCustomerName(customer.getName()); |
| | | return target; |
| | |
| | | import com.pollex.pam.domain.Appointment; |
| | | import com.pollex.pam.security.SecurityUtils; |
| | | import com.pollex.pam.service.SendMsgService; |
| | | import com.pollex.pam.service.dto.AppointmentUpdateDTO; |
| | | import com.pollex.pam.service.dto.*; |
| | | |
| | | import com.pollex.pam.service.mapper.AppointmentMapper; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.ResponseEntity; |
| | |
| | | import com.pollex.pam.service.AppointmentService; |
| | | import com.pollex.pam.service.PersonalNotificationService; |
| | | import com.pollex.pam.service.SatisfactionService; |
| | | import com.pollex.pam.service.dto.AppointmentCloseDTO; |
| | | import com.pollex.pam.service.dto.AppointmentCreateDTO; |
| | | import com.pollex.pam.service.dto.AppointmentCustomerViewDTO; |
| | | |
| | | import java.util.Objects; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api/appointment") |
| | |
| | | |
| | | @Autowired |
| | | AppointmentService appointmentService; |
| | | |
| | | @Autowired |
| | | AppointmentMapper appointmentMapper; |
| | | |
| | | @Autowired |
| | | SatisfactionService satisfactionService; |
| | |
| | | } |
| | | |
| | | @PostMapping("/customer/create") |
| | | public void clientCreateAppointment(@RequestBody AppointmentCreateDTO appointmentCreateDTO) { |
| | | public AppointmentDTO clientCreateAppointment(@RequestBody AppointmentCreateDTO appointmentCreateDTO) { |
| | | Appointment appointment = appointmentService.customerCreateAppointment(appointmentCreateDTO); |
| | | appointmentService.sendAppointmentNotify(appointment); |
| | | satisfactionService.createUnfilledSystemSatisfaction(appointment); |
| | | |
| | | return appointmentMapper.toAppointmentDTO(appointment); |
| | | } |
| | | |
| | | @PostMapping("/markAsContacted/{appointmentId}") |
| | |
| | | |
| | | import java.util.List; |
| | | |
| | | import com.pollex.pam.enums.SatisfactionTypeEnum; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import com.pollex.pam.domain.Appointment; |
| | | import com.pollex.pam.domain.Satisfaction; |
| | | import com.pollex.pam.security.SecurityUtils; |
| | | import com.pollex.pam.service.SatisfactionService; |
| | | import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO; |
| | | import com.pollex.pam.service.dto.SatisfactionDTO; |
| | | import com.pollex.pam.service.dto.SatisfactionUpdateDTO; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api/satisfaction") |
| | | public class SatisfactionResource { |
| | | |
| | | |
| | | private final Logger log = LoggerFactory.getLogger(SatisfactionResource.class); |
| | | |
| | | |
| | | |
| | | @Autowired |
| | | SatisfactionService satisfactionService; |
| | | |
| | | |
| | | @PostMapping("/score") |
| | | public Satisfaction scorefaction(@RequestBody SatisfactionCustomerScoreDTO scoreDTO) { |
| | | return satisfactionService.scorefaction(scoreDTO); |
| | | } |
| | | |
| | | |
| | | @PostMapping("/score/all") |
| | | public List<Satisfaction> scoreAllfaction(@RequestBody List<SatisfactionCustomerScoreDTO> scoreDTO) { |
| | | return satisfactionService.scoreAllfaction(scoreDTO); |
| | | } |
| | | |
| | | |
| | | @GetMapping("/getMySatisfaction") |
| | | public List<SatisfactionDTO> getMySatisfaction(){ |
| | | if(StringUtils.hasText(SecurityUtils.getAgentNo())) { |
| | | return satisfactionService.getByAgentNo(SecurityUtils.getAgentNo()); |
| | | return satisfactionService.getByAgentNoAndType(SecurityUtils.getAgentNo(), SatisfactionTypeEnum.APPOINTMENT); |
| | | }else if(SecurityUtils.getCustomerDBId()!=null){ |
| | | return satisfactionService.getByCustomerId(SecurityUtils.getCustomerDBId()); |
| | | } |
| | |
| | | function-id: epos |
| | | sender-email: noreply@pcalife.com.tw |
| | | method: 'PAM_EMAIL_SERVICE' |
| | | file-folder-path: /sfs_omo/vtwlifewpsfs01/SensitiveData4AP$/OMO |
| | | file-folder-path: /sfs_omo/AgentPhoto/ |
| | |
| | | function-id: epos |
| | | sender-email: noreply@pcalife.com.tw |
| | | method: 'PAM_EMAIL_SERVICE' |
| | | file-folder-path: /sfs_omo/vtwlifewuftp66/sensitivedata4ap$/OMOSIT |
| | | file-folder-path: /sfs_omo/AgentPhoto/ |
| | |
| | | function-id: epos |
| | | sender-email: noreply@pcalife.com.tw |
| | | method: 'PAM_EMAIL_SERVICE' |
| | | file-folder-path: /sfs_omo/vtwlifewuftp66/sensitivedata4ap$/OMO |
| | | file-folder-path: /sfs_omo/AgentPhoto/ |