Commit 938e65a9ee7dc62b923734dabbc35babe9436e78

Authored by vking
1 parent c1dea71e

new 2.0

@@ -132,16 +132,12 @@ @@ -132,16 +132,12 @@
132 "text": "订座" 132 "text": "订座"
133 }, 133 },
134 { 134 {
135 - "pagePath": "pages/me/follow", 135 + "pagePath": "pages/reserve/search",
136 "text": "关注" 136 "text": "关注"
137 }, 137 },
138 { 138 {
139 - "pagePath": "pages/customer/list", 139 + "pagePath": "pages/me/list",
140 "text": "日程" 140 "text": "日程"
141 - },  
142 - {  
143 - "pagePath": "pages/me/index",  
144 - "text": "我的"  
145 } 141 }
146 ] 142 ]
147 }, 143 },
  1 +/*
  2 + Animation 微动画
  3 + 基于ColorUI组建库的动画模块 by 文晓港 2019年3月26日19:52:28
  4 + */
  5 +
  6 +/* css 滤镜 控制黑白底色gif的 */
  7 +.gif-black{
  8 + mix-blend-mode: screen;
  9 +}
  10 +.gif-white{
  11 + mix-blend-mode: multiply;
  12 +}
  13 +
  14 +
  15 +/* Animation css */
  16 +[class*=animation-] {
  17 + animation-duration: .5s;
  18 + animation-timing-function: ease-out;
  19 + animation-fill-mode: both
  20 +}
  21 +
  22 +.animation-fade {
  23 + animation-name: fade;
  24 + animation-duration: .8s;
  25 + animation-timing-function: linear
  26 +}
  27 +
  28 +.animation-scale-up {
  29 + animation-name: scale-up
  30 +}
  31 +
  32 +.animation-scale-down {
  33 + animation-name: scale-down
  34 +}
  35 +
  36 +.animation-slide-top {
  37 + animation-name: slide-top
  38 +}
  39 +
  40 +.animation-slide-bottom {
  41 + animation-name: slide-bottom
  42 +}
  43 +
  44 +.animation-slide-left {
  45 + animation-name: slide-left
  46 +}
  47 +
  48 +.animation-slide-right {
  49 + animation-name: slide-right
  50 +}
  51 +
  52 +.animation-shake {
  53 + animation-name: shake
  54 +}
  55 +
  56 +.animation-reverse {
  57 + animation-direction: reverse
  58 +}
  59 +
  60 +@keyframes fade {
  61 + 0% {
  62 + opacity: 0
  63 + }
  64 +
  65 + 100% {
  66 + opacity: 1
  67 + }
  68 +}
  69 +
  70 +@keyframes scale-up {
  71 + 0% {
  72 + opacity: 0;
  73 + transform: scale(.2)
  74 + }
  75 +
  76 + 100% {
  77 + opacity: 1;
  78 + transform: scale(1)
  79 + }
  80 +}
  81 +
  82 +@keyframes scale-down {
  83 + 0% {
  84 + opacity: 0;
  85 + transform: scale(1.8)
  86 + }
  87 +
  88 + 100% {
  89 + opacity: 1;
  90 + transform: scale(1)
  91 + }
  92 +}
  93 +
  94 +@keyframes slide-top {
  95 + 0% {
  96 + opacity: 0;
  97 + transform: translateY(-100%)
  98 + }
  99 +
  100 + 100% {
  101 + opacity: 1;
  102 + transform: translateY(0)
  103 + }
  104 +}
  105 +
  106 +@keyframes slide-bottom {
  107 + 0% {
  108 + opacity: 0;
  109 + transform: translateY(100%)
  110 + }
  111 +
  112 + 100% {
  113 + opacity: 1;
  114 + transform: translateY(0)
  115 + }
  116 +}
  117 +
  118 +@keyframes shake {
  119 +
  120 + 0%,
  121 + 100% {
  122 + transform: translateX(0)
  123 + }
  124 +
  125 + 10% {
  126 + transform: translateX(-9px)
  127 + }
  128 +
  129 + 20% {
  130 + transform: translateX(8px)
  131 + }
  132 +
  133 + 30% {
  134 + transform: translateX(-7px)
  135 + }
  136 +
  137 + 40% {
  138 + transform: translateX(6px)
  139 + }
  140 +
  141 + 50% {
  142 + transform: translateX(-5px)
  143 + }
  144 +
  145 + 60% {
  146 + transform: translateX(4px)
  147 + }
  148 +
  149 + 70% {
  150 + transform: translateX(-3px)
  151 + }
  152 +
  153 + 80% {
  154 + transform: translateX(2px)
  155 + }
  156 +
  157 + 90% {
  158 + transform: translateX(-1px)
  159 + }
  160 +}
  161 +
  162 +@keyframes slide-left {
  163 + 0% {
  164 + opacity: 0;
  165 + transform: translateX(-100%)
  166 + }
  167 +
  168 + 100% {
  169 + opacity: 1;
  170 + transform: translateX(0)
  171 + }
  172 +}
  173 +
  174 +@keyframes slide-right {
  175 + 0% {
  176 + opacity: 0;
  177 + transform: translateX(100%)
  178 + }
  179 +
  180 + 100% {
  181 + opacity: 1;
  182 + transform: translateX(0)
  183 + }
  184 +}
  1 +/*
  2 + ColorUi for MP-weixin v2.1.4 | by 文晓港 2019年4月25日19:15:42
  3 + 仅供学习交流,如作它用所承受的法律责任一概与作者无关
  4 + 使用ColorUi开发扩展与插件时,请注明基于ColorUi开发
  5 +
  6 + (QQ交流群:240787041)
  7 +*/
  8 +
  9 +/* ==================
  10 + 初始化
  11 + ==================== */
  12 +page {
  13 + /* Color 可以自定义相关配色 */
  14 + /* var属性兼容性 --> https://www.caniuse.com/#feat=css-variables */
  15 + /* 标准色 */
  16 + --red: #e54d42;
  17 + --orange: #f37b1d;
  18 + --yellow: #fbbd08;
  19 + --olive: #8dc63f;
  20 + --green: #39b54a;
  21 + --cyan: #1cbbb4;
  22 + --blue: #42A5FF;
  23 + --purple: #6739b6;
  24 + --mauve: #9c26b0;
  25 + --pink: #e03997;
  26 + --brown: #a5673f;
  27 + --grey: #8799a3;
  28 + --black: #333333;
  29 + --darkGray: #666666;
  30 + --gray: #999999;
  31 + --ghostWhite: #f1f1f1;
  32 + --white: #ffffff;
  33 + /* 浅色 */
  34 + --redLight: #fadbd9;
  35 + --orangeLight: #fde6d2;
  36 + --yellowLight: #fef2ce;
  37 + --oliveLight: #e8f4d9;
  38 + --greenLight: #d7f0db;
  39 + --cyanLight: #d2f1f0;
  40 + --blueLight: #cce6ff;
  41 + --purpleLight: #e1d7f0;
  42 + --mauveLight: #ebd4ef;
  43 + --pinkLight: #f9d7ea;
  44 + --brownLight: #ede1d9;
  45 + --greyLight: #e7ebed;
  46 + /* 渐变色 */
  47 + --gradualRed: linear-gradient(45deg, #f43f3b, #ec008c);
  48 + --gradualOrange: linear-gradient(45deg, #ff9700, #ed1c24);
  49 + --gradualGreen: linear-gradient(45deg, #39b54a, #8dc63f);
  50 + --gradualPurple: linear-gradient(45deg, #9000ff, #5e00ff);
  51 + --gradualPink: linear-gradient(45deg, #ec008c, #6739b6);
  52 + --gradualBlue: linear-gradient(45deg, #0081ff, #1cbbb4);
  53 + /* 阴影透明色 */
  54 + --ShadowSize: 6rpx 6rpx 8rpx;
  55 + --redShadow: rgba(204, 69, 59, 0.2);
  56 + --orangeShadow: rgba(217, 109, 26, 0.2);
  57 + --yellowShadow: rgba(224, 170, 7, 0.2);
  58 + --oliveShadow: rgba(124, 173, 55, 0.2);
  59 + --greenShadow: rgba(48, 156, 63, 0.2);
  60 + --cyanShadow: rgba(28, 187, 180, 0.2);
  61 + --blueShadow: rgba(0, 102, 204, 0.2);
  62 + --purpleShadow: rgba(88, 48, 156, 0.2);
  63 + --mauveShadow: rgba(133, 33, 150, 0.2);
  64 + --pinkShadow: rgba(199, 50, 134, 0.2);
  65 + --brownShadow: rgba(140, 88, 53, 0.2);
  66 + --greyShadow: rgba(114, 130, 138, 0.2);
  67 + --grayShadow: rgba(114, 130, 138, 0.2);
  68 + --blackShadow: rgba(26, 26, 26, 0.2);
  69 +
  70 + /*background-color: var(--ghostWhite);*/
  71 + font-size: 28rpx;
  72 + color: var(--black);
  73 + font-family: Helvetica Neue, Helvetica, sans-serif;
  74 +}
  75 +
  76 +.view,
  77 +.scroll-view,
  78 +.swiper,
  79 +.button,
  80 +.input,
  81 +.textarea,
  82 +.label,
  83 +.navigator,
  84 +.image {
  85 + box-sizing: border-box;
  86 + background-size: 100% 100%;
  87 +}
  88 +
  89 +.round {
  90 + border-radius: 5000rpx;
  91 +}
  92 +
  93 +.radius {
  94 + border-radius: 6rpx;
  95 +}
  96 +
  97 +/* ==================
  98 + 图片
  99 + ==================== */
  100 +
  101 +image {
  102 + max-width: 100%;
  103 + display: inline-block;
  104 + position: relative;
  105 + z-index: 0;
  106 +}
  107 +
  108 +image.loading::before {
  109 + content: "";
  110 + background-color: #f5f5f5;
  111 + display: block;
  112 + position: absolute;
  113 + width: 100%;
  114 + height: 100%;
  115 + z-index: -2;
  116 +}
  117 +
  118 +image.loading::after {
  119 + content: "\e7f1";
  120 + font-family: "cuIcon";
  121 + position: absolute;
  122 + top: 0;
  123 + left: 0;
  124 + width: 32rpx;
  125 + height: 32rpx;
  126 + line-height: 32rpx;
  127 + right: 0;
  128 + bottom: 0;
  129 + z-index: -1;
  130 + font-size: 32rpx;
  131 + margin: auto;
  132 + color: #ccc;
  133 + -webkit-animation: cuIcon-spin 2s infinite linear;
  134 + animation: cuIcon-spin 2s infinite linear;
  135 + display: block;
  136 +}
  137 +
  138 +.response {
  139 + width: 100%;
  140 +}
  141 +
  142 +/* ==================
  143 + 开关
  144 + ==================== */
  145 +
  146 +switch,
  147 +checkbox,
  148 +radio {
  149 + position: relative;
  150 +}
  151 +
  152 +switch::after,
  153 +switch::before {
  154 + font-family: "cuIcon";
  155 + content: "\e645";
  156 + position: absolute;
  157 + color: var(--white) !important;
  158 + top: 0%;
  159 + left: 0rpx;
  160 + font-size: 26rpx;
  161 + line-height: 26px;
  162 + width: 50%;
  163 + text-align: center;
  164 + pointer-events: none;
  165 + transform: scale(0, 0);
  166 + transition: all 0.3s ease-in-out 0s;
  167 + z-index: 9;
  168 + bottom: 0;
  169 + height: 26px;
  170 + margin: auto;
  171 +}
  172 +
  173 +switch::before {
  174 + content: "\e646";
  175 + right: 0;
  176 + transform: scale(1, 1);
  177 + left: auto;
  178 +}
  179 +
  180 +switch[checked]::after,
  181 +switch.checked::after {
  182 + transform: scale(1, 1);
  183 +}
  184 +
  185 +switch[checked]::before,
  186 +switch.checked::before {
  187 + transform: scale(0, 0);
  188 +}
  189 +
  190 +switch[checked]::before {
  191 + transform: scale(0, 0);
  192 +}
  193 +
  194 +radio::before,
  195 +checkbox::before {
  196 + font-family: "cuIcon";
  197 + content: "\e645";
  198 + position: absolute;
  199 + color: var(--white) !important;
  200 + top: 50%;
  201 + margin-top: -8px;
  202 + right: 5px;
  203 + font-size: 32rpx;
  204 + line-height: 16px;
  205 + pointer-events: none;
  206 + transform: scale(1, 1);
  207 + transition: all 0.3s ease-in-out 0s;
  208 + z-index: 9;
  209 +}
  210 +
  211 +radio .wx-radio-input,
  212 +checkbox .wx-checkbox-input {
  213 + margin: 0;
  214 + width: 24px;
  215 + height: 24px;
  216 +}
  217 +
  218 +checkbox.round .wx-checkbox-input {
  219 + border-radius: 100rpx;
  220 +}
  221 +
  222 +switch .wx-switch-input {
  223 + border: none;
  224 + padding: 0 24px;
  225 + width: 48px;
  226 + height: 26px;
  227 + margin: 0;
  228 + border-radius: 100rpx;
  229 +}
  230 +
  231 +switch .wx-switch-input:not([class*="bg-"]) {
  232 + background: var(--grey) !important;
  233 +}
  234 +
  235 +switch .wx-switch-input::after {
  236 + margin: auto;
  237 + width: 26px;
  238 + height: 26px;
  239 + border-radius: 100rpx;
  240 + left: 0rpx;
  241 + top: 0rpx;
  242 + bottom: 0rpx;
  243 + position: absolute;
  244 + transform: scale(0.9, 0.9);
  245 + transition: all 0.1s ease-in-out 0s;
  246 +}
  247 +
  248 +switch .wx-switch-input.wx-switch-input-checked::after {
  249 + margin: auto;
  250 + left: 22px;
  251 + box-shadow: none;
  252 + transform: scale(0.9, 0.9);
  253 +}
  254 +
  255 +radio-group {
  256 + display: inline-block;
  257 +}
  258 +
  259 +
  260 +
  261 +switch.radius .wx-switch-input::after,
  262 +switch.radius .wx-switch-input,
  263 +switch.radius .wx-switch-input::before {
  264 + border-radius: 10rpx;
  265 +}
  266 +
  267 +switch .wx-switch-input::before,
  268 +radio.radio::before,
  269 +checkbox .wx-checkbox-input::before,
  270 +radio .wx-radio-input::before,
  271 +radio.radio::before {
  272 + display: none;
  273 +}
  274 +
  275 +radio.radio[checked]::after {
  276 + content: "";
  277 + background-color: transparent;
  278 + display: block;
  279 + position: absolute;
  280 + width: 8px;
  281 + height: 8px;
  282 + z-index: 999;
  283 + top: 0rpx;
  284 + left: 0rpx;
  285 + right: 0;
  286 + bottom: 0;
  287 + margin: auto;
  288 + border-radius: 200rpx;
  289 + border: 8px solid var(--white) !important;
  290 +}
  291 +
  292 +.switch-sex::after {
  293 + content: "\e71c";
  294 +}
  295 +
  296 +.switch-sex::before {
  297 + content: "\e71a";
  298 +}
  299 +
  300 +.switch-sex .wx-switch-input {
  301 + background: var(--red) !important;
  302 + border-color: var(--red) !important;
  303 +}
  304 +
  305 +.switch-sex[checked] .wx-switch-input {
  306 + background: var(--blue) !important;
  307 + border-color: var(--blue) !important;
  308 +}
  309 +
  310 +.switch-user::after {
  311 + content: "\e7f5";
  312 +}
  313 +
  314 +.switch-user::before {
  315 + content: "\e78c";
  316 +}
  317 +
  318 +.switch-user .wx-switch-input {
  319 + background-color: var(--red) !important;
  320 + border-color: var(--red) !important;
  321 +}
  322 +
  323 +.switch-user[checked] .wx-switch-input {
  324 + background-color: var(--blue) !important;
  325 + border-color: var(--blue) !important;
  326 +}
  327 +
  328 +switch.red[checked] .wx-switch-input,
  329 +checkbox.red[checked] .wx-checkbox-input,
  330 +radio.red[checked] .wx-radio-input {
  331 + border-color: var(--red) !important;
  332 +}
  333 +
  334 +switch.orange[checked] .wx-switch-input,
  335 +checkbox.orange[checked] .wx-checkbox-input,
  336 +radio.orange[checked] .wx-radio-input {
  337 + border-color: var(--orange) !important;
  338 +}
  339 +
  340 +switch.yellow[checked] .wx-switch-input,
  341 +checkbox.yellow[checked] .wx-checkbox-input,
  342 +radio.yellow[checked] .wx-radio-input {
  343 + border-color: var(--yellow) !important;
  344 +}
  345 +
  346 +switch.olive[checked] .wx-switch-input,
  347 +checkbox.olive[checked] .wx-checkbox-input,
  348 +radio.olive[checked] .wx-radio-input {
  349 + border-color: var(--olive) !important;
  350 +}
  351 +
  352 +switch.green[checked] .wx-switch-input,
  353 +checkbox.green[checked] .wx-checkbox-input,
  354 +checkbox[checked] .wx-checkbox-input,
  355 +radio.green[checked] .wx-radio-input {
  356 + border-color: var(--green) !important;
  357 +}
  358 +
  359 +switch.cyan[checked] .wx-switch-input,
  360 +checkbox.cyan[checked] .wx-checkbox-input,
  361 +radio.cyan[checked] .wx-radio-input {
  362 + border-color: var(--cyan) !important;
  363 +}
  364 +
  365 +switch.blue[checked] .wx-switch-input,
  366 +checkbox.blue[checked] .wx-checkbox-input,
  367 +radio.blue[checked] .wx-radio-input {
  368 + border-color: var(--blue) !important;
  369 +}
  370 +
  371 +switch.purple[checked] .wx-switch-input,
  372 +checkbox.purple[checked] .wx-checkbox-input,
  373 +radio.purple[checked] .wx-radio-input {
  374 + border-color: var(--purple) !important;
  375 +}
  376 +
  377 +switch.mauve[checked] .wx-switch-input,
  378 +checkbox.mauve[checked] .wx-checkbox-input,
  379 +radio.mauve[checked] .wx-radio-input {
  380 + border-color: var(--mauve) !important;
  381 +}
  382 +
  383 +switch.pink[checked] .wx-switch-input,
  384 +checkbox.pink[checked] .wx-checkbox-input,
  385 +radio.pink[checked] .wx-radio-input {
  386 + border-color: var(--pink) !important;
  387 +}
  388 +
  389 +switch.brown[checked] .wx-switch-input,
  390 +checkbox.brown[checked] .wx-checkbox-input,
  391 +radio.brown[checked] .wx-radio-input {
  392 + border-color: var(--brown) !important;
  393 +}
  394 +
  395 +switch.grey[checked] .wx-switch-input,
  396 +checkbox.grey[checked] .wx-checkbox-input,
  397 +radio.grey[checked] .wx-radio-input {
  398 + border-color: var(--grey) !important;
  399 +}
  400 +
  401 +switch.gray[checked] .wx-switch-input,
  402 +checkbox.gray[checked] .wx-checkbox-input,
  403 +radio.gray[checked] .wx-radio-input {
  404 + border-color: var(--grey) !important;
  405 +}
  406 +
  407 +switch.black[checked] .wx-switch-input,
  408 +checkbox.black[checked] .wx-checkbox-input,
  409 +radio.black[checked] .wx-radio-input {
  410 + border-color: var(--black) !important;
  411 +}
  412 +
  413 +switch.white[checked] .wx-switch-input,
  414 +checkbox.white[checked] .wx-checkbox-input,
  415 +radio.white[checked] .wx-radio-input {
  416 + border-color: var(--white) !important;
  417 +}
  418 +
  419 +switch.red[checked] .wx-switch-input.wx-switch-input-checked,
  420 +checkbox.red[checked] .wx-checkbox-input,
  421 +radio.red[checked] .wx-radio-input {
  422 + background-color: var(--red) !important;
  423 + color: var(--white) !important;
  424 +}
  425 +
  426 +switch.orange[checked] .wx-switch-input,
  427 +checkbox.orange[checked] .wx-checkbox-input,
  428 +radio.orange[checked] .wx-radio-input {
  429 + background-color: var(--orange) !important;
  430 + color: var(--white) !important;
  431 +}
  432 +
  433 +switch.yellow[checked] .wx-switch-input,
  434 +checkbox.yellow[checked] .wx-checkbox-input,
  435 +radio.yellow[checked] .wx-radio-input {
  436 + background-color: var(--yellow) !important;
  437 + color: var(--black) !important;
  438 +}
  439 +
  440 +switch.olive[checked] .wx-switch-input,
  441 +checkbox.olive[checked] .wx-checkbox-input,
  442 +radio.olive[checked] .wx-radio-input {
  443 + background-color: var(--olive) !important;
  444 + color: var(--white) !important;
  445 +}
  446 +
  447 +switch.green[checked] .wx-switch-input,
  448 +switch[checked] .wx-switch-input,
  449 +checkbox.green[checked] .wx-checkbox-input,
  450 +checkbox[checked] .wx-checkbox-input,
  451 +radio.green[checked] .wx-radio-input,
  452 +radio[checked] .wx-radio-input {
  453 + background-color: var(--green) !important;
  454 + color: var(--white) !important;
  455 +}
  456 +
  457 +switch.cyan[checked] .wx-switch-input,
  458 +checkbox.cyan[checked] .wx-checkbox-input,
  459 +radio.cyan[checked] .wx-radio-input {
  460 + background-color: var(--cyan) !important;
  461 + color: var(--white) !important;
  462 +}
  463 +
  464 +switch.blue[checked] .wx-switch-input,
  465 +checkbox.blue[checked] .wx-checkbox-input,
  466 +radio.blue[checked] .wx-radio-input {
  467 + background-color: var(--blue) !important;
  468 + color: var(--white) !important;
  469 +}
  470 +
  471 +switch.purple[checked] .wx-switch-input,
  472 +checkbox.purple[checked] .wx-checkbox-input,
  473 +radio.purple[checked] .wx-radio-input {
  474 + background-color: var(--purple) !important;
  475 + color: var(--white) !important;
  476 +}
  477 +
  478 +switch.mauve[checked] .wx-switch-input,
  479 +checkbox.mauve[checked] .wx-checkbox-input,
  480 +radio.mauve[checked] .wx-radio-input {
  481 + background-color: var(--mauve) !important;
  482 + color: var(--white) !important;
  483 +}
  484 +
  485 +switch.pink[checked] .wx-switch-input,
  486 +checkbox.pink[checked] .wx-checkbox-input,
  487 +radio.pink[checked] .wx-radio-input {
  488 + background-color: var(--pink) !important;
  489 + color: var(--white) !important;
  490 +}
  491 +
  492 +switch.brown[checked] .wx-switch-input,
  493 +checkbox.brown[checked] .wx-checkbox-input,
  494 +radio.brown[checked] .wx-radio-input {
  495 + background-color: var(--brown) !important;
  496 + color: var(--white) !important;
  497 +}
  498 +
  499 +switch.grey[checked] .wx-switch-input,
  500 +checkbox.grey[checked] .wx-checkbox-input,
  501 +radio.grey[checked] .wx-radio-input {
  502 + background-color: var(--grey) !important;
  503 + color: var(--white) !important;
  504 +}
  505 +
  506 +switch.gray[checked] .wx-switch-input,
  507 +checkbox.gray[checked] .wx-checkbox-input,
  508 +radio.gray[checked] .wx-radio-input {
  509 + background-color: #f0f0f0 !important;
  510 + color: var(--black) !important;
  511 +}
  512 +
  513 +switch.black[checked] .wx-switch-input,
  514 +checkbox.black[checked] .wx-checkbox-input,
  515 +radio.black[checked] .wx-radio-input {
  516 + background-color: var(--black) !important;
  517 + color: var(--white) !important;
  518 +}
  519 +
  520 +switch.white[checked] .wx-switch-input,
  521 +checkbox.white[checked] .wx-checkbox-input,
  522 +radio.white[checked] .wx-radio-input {
  523 + background-color: var(--white) !important;
  524 + color: var(--black) !important;
  525 +}
  526 +
  527 +/* ==================
  528 + 边框
  529 + ==================== */
  530 +
  531 +/* -- 实线 -- */
  532 +
  533 +.solid,
  534 +.solid-top,
  535 +.solid-right,
  536 +.solid-bottom,
  537 +.solid-left,
  538 +.solids,
  539 +.solids-top,
  540 +.solids-right,
  541 +.solids-bottom,
  542 +.solids-left,
  543 +.dashed,
  544 +.dashed-top,
  545 +.dashed-right,
  546 +.dashed-bottom,
  547 +.dashed-left {
  548 + position: relative;
  549 +}
  550 +
  551 +.solid::after,
  552 +.solid-top::after,
  553 +.solid-right::after,
  554 +.solid-bottom::after,
  555 +.solid-left::after,
  556 +.solids::after,
  557 +.solids-top::after,
  558 +.solids-right::after,
  559 +.solids-bottom::after,
  560 +.solids-left::after,
  561 +.dashed::after,
  562 +.dashed-top::after,
  563 +.dashed-right::after,
  564 +.dashed-bottom::after,
  565 +.dashed-left::after {
  566 + content: " ";
  567 + width: 200%;
  568 + height: 200%;
  569 + position: absolute;
  570 + top: 0;
  571 + left: 0;
  572 + border-radius: inherit;
  573 + transform: scale(0.5);
  574 + transform-origin: 0 0;
  575 + pointer-events: none;
  576 + box-sizing: border-box;
  577 +}
  578 +
  579 +.solid::after {
  580 + border: 1rpx solid rgba(0, 0, 0, 0.1);
  581 +}
  582 +
  583 +.solid-top::after {
  584 + border-top: 1rpx solid rgba(0, 0, 0, 0.1);
  585 +}
  586 +
  587 +.solid-right::after {
  588 + border-right: 1rpx solid rgba(0, 0, 0, 0.1);
  589 +}
  590 +
  591 +.solid-bottom::after {
  592 + border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
  593 +}
  594 +
  595 +.solid-left::after {
  596 + border-left: 1rpx solid rgba(0, 0, 0, 0.1);
  597 +}
  598 +
  599 +.solids::after {
  600 + border: 8rpx solid #eee;
  601 +}
  602 +
  603 +.solids-top::after {
  604 + border-top: 8rpx solid #eee;
  605 +}
  606 +
  607 +.solids-right::after {
  608 + border-right: 8rpx solid #eee;
  609 +}
  610 +
  611 +.solids-bottom::after {
  612 + border-bottom: 8rpx solid #eee;
  613 +}
  614 +
  615 +.solids-left::after {
  616 + border-left: 8rpx solid #eee;
  617 +}
  618 +
  619 +/* -- 虚线 -- */
  620 +
  621 +.dashed::after {
  622 + border: 1rpx dashed #ddd;
  623 +}
  624 +
  625 +.dashed-top::after {
  626 + border-top: 1rpx dashed #ddd;
  627 +}
  628 +
  629 +.dashed-right::after {
  630 + border-right: 1rpx dashed #ddd;
  631 +}
  632 +
  633 +.dashed-bottom::after {
  634 + border-bottom: 1rpx dashed #ddd;
  635 +}
  636 +
  637 +.dashed-left::after {
  638 + border-left: 1rpx dashed #ddd;
  639 +}
  640 +
  641 +/* -- 阴影 -- */
  642 +
  643 +.shadow[class*='white'] {
  644 + --ShadowSize: 0 1rpx 6rpx;
  645 +}
  646 +
  647 +.shadow-lg {
  648 + --ShadowSize: 0rpx 40rpx 100rpx 0rpx;
  649 +}
  650 +
  651 +.shadow-warp {
  652 + position: relative;
  653 + box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.1);
  654 +}
  655 +
  656 +.shadow-warp:before,
  657 +.shadow-warp:after {
  658 + position: absolute;
  659 + content: "";
  660 + top: 20rpx;
  661 + bottom: 30rpx;
  662 + left: 20rpx;
  663 + width: 50%;
  664 + box-shadow: 0 30rpx 20rpx rgba(0, 0, 0, 0.2);
  665 + transform: rotate(-3deg);
  666 + z-index: -1;
  667 +}
  668 +
  669 +.shadow-warp:after {
  670 + right: 20rpx;
  671 + left: auto;
  672 + transform: rotate(3deg);
  673 +}
  674 +
  675 +.shadow-blur {
  676 + position: relative;
  677 +}
  678 +
  679 +.shadow-blur::before {
  680 + content: "";
  681 + display: block;
  682 + background: inherit;
  683 + filter: blur(10rpx);
  684 + position: absolute;
  685 + width: 100%;
  686 + height: 100%;
  687 + top: 10rpx;
  688 + left: 10rpx;
  689 + z-index: -1;
  690 + opacity: 0.4;
  691 + transform-origin: 0 0;
  692 + border-radius: inherit;
  693 + transform: scale(1, 1);
  694 +}
  695 +
  696 +/* ==================
  697 + 按钮
  698 + ==================== */
  699 +
  700 +.cu-btn {
  701 + position: relative;
  702 + border: 0rpx;
  703 + display: inline-flex;
  704 + align-items: center;
  705 + justify-content: center;
  706 + box-sizing: border-box;
  707 + padding: 0 30rpx;
  708 + font-size: 28rpx;
  709 + height: 64rpx;
  710 + line-height: 1;
  711 + text-align: center;
  712 + text-decoration: none;
  713 + overflow: visible;
  714 + margin-left: initial;
  715 + transform: translate(0rpx, 0rpx);
  716 + margin-right: initial;
  717 +}
  718 +
  719 +.cu-btn::after {
  720 + display: none;
  721 +}
  722 +
  723 +.cu-btn:not([class*="bg-"]) {
  724 + background-color: #f0f0f0;
  725 +}
  726 +
  727 +.cu-btn[class*="line"] {
  728 + background-color: transparent;
  729 +}
  730 +
  731 +.cu-btn[class*="line"]::after {
  732 + content: " ";
  733 + display: block;
  734 + width: 200%;
  735 + height: 200%;
  736 + position: absolute;
  737 + top: 0;
  738 + left: 0;
  739 + border: 1rpx solid currentColor;
  740 + transform: scale(0.5);
  741 + transform-origin: 0 0;
  742 + box-sizing: border-box;
  743 + border-radius: 12rpx;
  744 + z-index: 1;
  745 + pointer-events: none;
  746 +}
  747 +
  748 +.cu-btn.round[class*="line"]::after {
  749 + border-radius: 1000rpx;
  750 +}
  751 +
  752 +.cu-btn[class*="lines"]::after {
  753 + border: 6rpx solid currentColor;
  754 +}
  755 +
  756 +.cu-btn[class*="bg-"]::after {
  757 + display: none;
  758 +}
  759 +
  760 +.cu-btn.sm {
  761 + padding: 0 20rpx;
  762 + font-size: 20rpx;
  763 + height: 48rpx;
  764 +}
  765 +
  766 +.cu-btn.lg {
  767 + padding: 0 40rpx;
  768 + font-size: 32rpx;
  769 + height: 80rpx;
  770 +}
  771 +
  772 +.cu-btn.icon.sm {
  773 + width: 48rpx;
  774 + height: 48rpx;
  775 +}
  776 +
  777 +.cu-btn.icon {
  778 + width: 64rpx;
  779 + height: 64rpx;
  780 + border-radius: 500rpx;
  781 + padding: 0;
  782 +}
  783 +
  784 +button.icon.lg {
  785 + width: 80rpx;
  786 + height: 80rpx;
  787 +}
  788 +
  789 +.cu-btn.shadow-blur::before {
  790 + top: 4rpx;
  791 + left: 4rpx;
  792 + filter: blur(6rpx);
  793 + opacity: 0.6;
  794 +}
  795 +
  796 +.cu-btn.button-hover {
  797 + transform: translate(1rpx, 1rpx);
  798 +}
  799 +
  800 +.block {
  801 + display: block;
  802 +}
  803 +
  804 +.cu-btn.block {
  805 + display: flex;
  806 +}
  807 +
  808 +.cu-btn[disabled] {
  809 + opacity: 0.6;
  810 + color: var(--white);
  811 +}
  812 +
  813 +/* ==================
  814 + 徽章
  815 + ==================== */
  816 +
  817 +.cu-tag {
  818 + font-size: 24rpx;
  819 + vertical-align: middle;
  820 + position: relative;
  821 + display: inline-flex;
  822 + align-items: center;
  823 + justify-content: center;
  824 + box-sizing: border-box;
  825 + padding: 0rpx 16rpx;
  826 + height: 48rpx;
  827 + font-family: Helvetica Neue, Helvetica, sans-serif;
  828 + white-space: nowrap;
  829 +}
  830 +
  831 +.cu-tag:not([class*="bg"]):not([class*="line"]) {
  832 + background-color: var(--ghostWhite);
  833 +}
  834 +
  835 +.cu-tag[class*="line-"]::after {
  836 + content: " ";
  837 + width: 200%;
  838 + height: 200%;
  839 + position: absolute;
  840 + top: 0;
  841 + left: 0;
  842 + border: 1rpx solid currentColor;
  843 + transform: scale(0.5);
  844 + transform-origin: 0 0;
  845 + box-sizing: border-box;
  846 + border-radius: inherit;
  847 + z-index: 1;
  848 + pointer-events: none;
  849 +}
  850 +
  851 +.cu-tag.radius[class*="line"]::after {
  852 + border-radius: 12rpx;
  853 +}
  854 +
  855 +.cu-tag.round[class*="line"]::after {
  856 + border-radius: 1000rpx;
  857 +}
  858 +
  859 +.cu-tag[class*="line-"]::after {
  860 + border-radius: 0;
  861 +}
  862 +
  863 +.cu-tag+.cu-tag {
  864 + margin-left: 10rpx;
  865 +}
  866 +
  867 +.cu-tag.sm {
  868 + font-size: 20rpx;
  869 + padding: 0rpx 12rpx;
  870 + height: 32rpx;
  871 +}
  872 +
  873 +.cu-capsule {
  874 + display: inline-flex;
  875 + vertical-align: middle;
  876 +}
  877 +
  878 +.cu-capsule+.cu-capsule {
  879 + margin-left: 10rpx;
  880 +}
  881 +
  882 +.cu-capsule .cu-tag {
  883 + margin: 0;
  884 +}
  885 +
  886 +.cu-capsule .cu-tag[class*="line-"]:last-child::after {
  887 + border-left: 0rpx solid transparent;
  888 +}
  889 +
  890 +.cu-capsule .cu-tag[class*="line-"]:first-child::after {
  891 + border-right: 0rpx solid transparent;
  892 +}
  893 +
  894 +.cu-capsule.radius .cu-tag:first-child {
  895 + border-top-left-radius: 6rpx;
  896 + border-bottom-left-radius: 6rpx;
  897 +}
  898 +
  899 +.cu-capsule.radius .cu-tag:last-child::after,
  900 +.cu-capsule.radius .cu-tag[class*="line-"] {
  901 + border-top-right-radius: 12rpx;
  902 + border-bottom-right-radius: 12rpx;
  903 +}
  904 +
  905 +.cu-capsule.round .cu-tag:first-child {
  906 + border-top-left-radius: 200rpx;
  907 + border-bottom-left-radius: 200rpx;
  908 + text-indent: 4rpx;
  909 +}
  910 +
  911 +.cu-capsule.round .cu-tag:last-child::after,
  912 +.cu-capsule.round .cu-tag:last-child {
  913 + border-top-right-radius: 200rpx;
  914 + border-bottom-right-radius: 200rpx;
  915 + text-indent: -4rpx;
  916 +}
  917 +
  918 +.cu-tag.badge {
  919 + border-radius: 200rpx;
  920 + position: absolute;
  921 + top: -10rpx;
  922 + right: -10rpx;
  923 + font-size: 20rpx;
  924 + padding: 0rpx 10rpx;
  925 + height: 28rpx;
  926 + color: var(--white);
  927 +}
  928 +
  929 +.cu-tag.badge:not([class*="bg-"]) {
  930 + background-color: #dd514c;
  931 +}
  932 +
  933 +.cu-tag:empty:not([class*="cuIcon-"]) {
  934 + padding: 0rpx;
  935 + width: 16rpx;
  936 + height: 16rpx;
  937 + top: -4rpx;
  938 + right: -4rpx;
  939 +}
  940 +
  941 +.cu-tag[class*="cuIcon-"] {
  942 + width: 32rpx;
  943 + height: 32rpx;
  944 + top: -4rpx;
  945 + right: -4rpx;
  946 +}
  947 +
  948 +/* ==================
  949 + 头像
  950 + ==================== */
  951 +
  952 +.cu-avatar {
  953 + font-variant: small-caps;
  954 + margin: 0;
  955 + padding: 0;
  956 + display: inline-flex;
  957 + text-align: center;
  958 + justify-content: center;
  959 + align-items: center;
  960 + background-color: #ccc;
  961 + color: var(--white);
  962 + white-space: nowrap;
  963 + position: relative;
  964 + width: 64rpx;
  965 + height: 64rpx;
  966 + background-size: cover;
  967 + background-position: center;
  968 + vertical-align: middle;
  969 + font-size: 1.5em;
  970 +}
  971 +
  972 +.cu-avatar.sm {
  973 + width: 48rpx;
  974 + height: 48rpx;
  975 + font-size: 1em;
  976 +}
  977 +
  978 +.cu-avatar.lg {
  979 + width: 96rpx;
  980 + height: 96rpx;
  981 + font-size: 2em;
  982 +}
  983 +
  984 +.cu-avatar.xl {
  985 + width: 128rpx;
  986 + height: 128rpx;
  987 + font-size: 2.5em;
  988 +}
  989 +
  990 +.cu-avatar .avatar-text {
  991 + font-size: 0.4em;
  992 +}
  993 +
  994 +.cu-avatar-group {
  995 + direction: rtl;
  996 + unicode-bidi: bidi-override;
  997 + padding: 0 10rpx 0 40rpx;
  998 + display: inline-block;
  999 +}
  1000 +
  1001 +.cu-avatar-group .cu-avatar {
  1002 + margin-left: -30rpx;
  1003 + border: 4rpx solid var(--ghostWhite);
  1004 + vertical-align: middle;
  1005 +}
  1006 +
  1007 +.cu-avatar-group .cu-avatar.sm {
  1008 + margin-left: -20rpx;
  1009 + border: 1rpx solid var(--ghostWhite);
  1010 +}
  1011 +
  1012 +/* ==================
  1013 + 进度条
  1014 + ==================== */
  1015 +
  1016 +.cu-progress {
  1017 + overflow: hidden;
  1018 + height: 28rpx;
  1019 + background-color: #ebeef5;
  1020 + display: inline-flex;
  1021 + align-items: center;
  1022 + width: 100%;
  1023 +}
  1024 +
  1025 +.cu-progress+view,
  1026 +.cu-progress+text {
  1027 + line-height: 1;
  1028 +}
  1029 +
  1030 +.cu-progress.xs {
  1031 + height: 10rpx;
  1032 +}
  1033 +
  1034 +.cu-progress.sm {
  1035 + height: 20rpx;
  1036 +}
  1037 +
  1038 +.cu-progress view {
  1039 + width: 0;
  1040 + height: 100%;
  1041 + align-items: center;
  1042 + display: flex;
  1043 + justify-items: flex-end;
  1044 + justify-content: space-around;
  1045 + font-size: 20rpx;
  1046 + color: var(--white);
  1047 + transition: width 0.6s ease;
  1048 +}
  1049 +
  1050 +.cu-progress text {
  1051 + align-items: center;
  1052 + display: flex;
  1053 + font-size: 20rpx;
  1054 + color: var(--black);
  1055 + text-indent: 10rpx;
  1056 +}
  1057 +
  1058 +.cu-progress.text-progress {
  1059 + padding-right: 60rpx;
  1060 +}
  1061 +
  1062 +.cu-progress.striped view {
  1063 + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  1064 + background-size: 72rpx 72rpx;
  1065 +}
  1066 +
  1067 +.cu-progress.active view {
  1068 + animation: progress-stripes 2s linear infinite;
  1069 +}
  1070 +
  1071 +@keyframes progress-stripes {
  1072 + from {
  1073 + background-position: 72rpx 0;
  1074 + }
  1075 +
  1076 + to {
  1077 + background-position: 0 0;
  1078 + }
  1079 +}
  1080 +
  1081 +/* ==================
  1082 + 加载
  1083 + ==================== */
  1084 +
  1085 +.cu-load {
  1086 + display: block;
  1087 + line-height: 3em;
  1088 + text-align: center;
  1089 +}
  1090 +
  1091 +.cu-load::before {
  1092 + font-family: "cuIcon";
  1093 + display: inline-block;
  1094 + margin-right: 6rpx;
  1095 +}
  1096 +
  1097 +.cu-load.loading::before {
  1098 + content: "\e67a";
  1099 + animation: cuIcon-spin 2s infinite linear;
  1100 +}
  1101 +
  1102 +.cu-load.loading::after {
  1103 + content: "加载中...";
  1104 +}
  1105 +
  1106 +.cu-load.over::before {
  1107 + content: "\e64a";
  1108 +}
  1109 +
  1110 +.cu-load.over::after {
  1111 + content: "没有更多了";
  1112 +}
  1113 +
  1114 +.cu-load.erro::before {
  1115 + content: "\e658";
  1116 +}
  1117 +
  1118 +.cu-load.erro::after {
  1119 + content: "加载失败";
  1120 +}
  1121 +
  1122 +.cu-load.load-icon::before {
  1123 + font-size: 32rpx;
  1124 +}
  1125 +
  1126 +.cu-load.load-icon::after {
  1127 + display: none;
  1128 +}
  1129 +
  1130 +.cu-load.load-icon.over {
  1131 + display: none;
  1132 +}
  1133 +
  1134 +.cu-load.load-modal {
  1135 + position: fixed;
  1136 + top: 0;
  1137 + right: 0;
  1138 + bottom: 140rpx;
  1139 + left: 0;
  1140 + margin: auto;
  1141 + width: 260rpx;
  1142 + height: 260rpx;
  1143 + background-color: var(--white);
  1144 + border-radius: 10rpx;
  1145 + box-shadow: 0 0 0rpx 2000rpx rgba(0, 0, 0, 0.5);
  1146 + display: flex;
  1147 + align-items: center;
  1148 + flex-direction: column;
  1149 + justify-content: center;
  1150 + font-size: 28rpx;
  1151 + z-index: 9999;
  1152 + line-height: 2.4em;
  1153 +}
  1154 +
  1155 +.cu-load.load-modal [class*="cuIcon-"] {
  1156 + font-size: 60rpx;
  1157 +}
  1158 +
  1159 +.cu-load.load-modal image {
  1160 + width: 70rpx;
  1161 + height: 70rpx;
  1162 +}
  1163 +
  1164 +.cu-load.load-modal::after {
  1165 + content: "";
  1166 + position: absolute;
  1167 + background-color: var(--white);
  1168 + border-radius: 50%;
  1169 + width: 200rpx;
  1170 + height: 200rpx;
  1171 + font-size: 10px;
  1172 + border-top: 6rpx solid rgba(0, 0, 0, 0.05);
  1173 + border-right: 6rpx solid rgba(0, 0, 0, 0.05);
  1174 + border-bottom: 6rpx solid rgba(0, 0, 0, 0.05);
  1175 + border-left: 6rpx solid var(--orange);
  1176 + animation: cuIcon-spin 1s infinite linear;
  1177 + z-index: -1;
  1178 +}
  1179 +
  1180 +.load-progress {
  1181 + pointer-events: none;
  1182 + top: 0;
  1183 + position: fixed;
  1184 + width: 100%;
  1185 + left: 0;
  1186 + z-index: 2000;
  1187 +}
  1188 +
  1189 +.load-progress.hide {
  1190 + display: none;
  1191 +}
  1192 +
  1193 +.load-progress .load-progress-bar {
  1194 + position: relative;
  1195 + width: 100%;
  1196 + height: 4rpx;
  1197 + overflow: hidden;
  1198 + transition: all 200ms ease 0s;
  1199 +}
  1200 +
  1201 +.load-progress .load-progress-spinner {
  1202 + position: absolute;
  1203 + top: 10rpx;
  1204 + right: 10rpx;
  1205 + z-index: 2000;
  1206 + display: block;
  1207 +}
  1208 +
  1209 +.load-progress .load-progress-spinner::after {
  1210 + content: "";
  1211 + display: block;
  1212 + width: 24rpx;
  1213 + height: 24rpx;
  1214 + -webkit-box-sizing: border-box;
  1215 + box-sizing: border-box;
  1216 + border: solid 4rpx transparent;
  1217 + border-top-color: inherit;
  1218 + border-left-color: inherit;
  1219 + border-radius: 50%;
  1220 + -webkit-animation: load-progress-spinner 0.4s linear infinite;
  1221 + animation: load-progress-spinner 0.4s linear infinite;
  1222 +}
  1223 +
  1224 +@-webkit-keyframes load-progress-spinner {
  1225 + 0% {
  1226 + -webkit-transform: rotate(0);
  1227 + transform: rotate(0);
  1228 + }
  1229 +
  1230 + 100% {
  1231 + -webkit-transform: rotate(360deg);
  1232 + transform: rotate(360deg);
  1233 + }
  1234 +}
  1235 +
  1236 +@keyframes load-progress-spinner {
  1237 + 0% {
  1238 + -webkit-transform: rotate(0);
  1239 + transform: rotate(0);
  1240 + }
  1241 +
  1242 + 100% {
  1243 + -webkit-transform: rotate(360deg);
  1244 + transform: rotate(360deg);
  1245 + }
  1246 +}
  1247 +
  1248 +/* ==================
  1249 + 列表
  1250 + ==================== */
  1251 +.grayscale {
  1252 + filter: grayscale(1);
  1253 +}
  1254 +
  1255 +.cu-list+.cu-list {
  1256 + margin-top: 30rpx
  1257 +}
  1258 +
  1259 +.cu-list>.cu-item {
  1260 + transition: all .6s ease-in-out 0s;
  1261 + transform: translateX(0rpx)
  1262 +}
  1263 +
  1264 +.cu-list>.cu-item.move-cur {
  1265 + transform: translateX(-260rpx)
  1266 +}
  1267 +
  1268 +.cu-list>.cu-item .move {
  1269 + position: absolute;
  1270 + right: 0;
  1271 + display: flex;
  1272 + width: 260rpx;
  1273 + height: 100%;
  1274 + transform: translateX(100%)
  1275 +}
  1276 +
  1277 +.cu-list>.cu-item .move view {
  1278 + display: flex;
  1279 + flex: 1;
  1280 + justify-content: center;
  1281 + align-items: center
  1282 +}
  1283 +
  1284 +.cu-list.menu-avatar {
  1285 + overflow: hidden;
  1286 +}
  1287 +
  1288 +.cu-list.menu-avatar>.cu-item {
  1289 + position: relative;
  1290 + display: flex;
  1291 + padding-right: 10rpx;
  1292 + height: 140rpx;
  1293 + background-color: var(--white);
  1294 + justify-content: flex-end;
  1295 + align-items: center
  1296 +}
  1297 +
  1298 +.cu-list.menu-avatar>.cu-item>.cu-avatar {
  1299 + position: absolute;
  1300 + left: 30rpx
  1301 +}
  1302 +
  1303 +.cu-list.menu-avatar>.cu-item .flex .text-cut {
  1304 + max-width: 510rpx
  1305 +}
  1306 +
  1307 +.cu-list.menu-avatar>.cu-item .content {
  1308 + position: absolute;
  1309 + left: 146rpx;
  1310 + width: calc(100% - 96rpx - 60rpx - 120rpx - 20rpx);
  1311 + line-height: 1.6em;
  1312 +}
  1313 +
  1314 +.cu-list.menu-avatar>.cu-item .content.flex-sub {
  1315 + width: calc(100% - 96rpx - 60rpx - 20rpx);
  1316 +}
  1317 +
  1318 +.cu-list.menu-avatar>.cu-item .content>view:first-child {
  1319 + font-size: 30rpx;
  1320 + display: flex;
  1321 + align-items: center
  1322 +}
  1323 +
  1324 +.cu-list.menu-avatar>.cu-item .content .cu-tag.sm {
  1325 + display: inline-block;
  1326 + margin-left: 10rpx;
  1327 + height: 28rpx;
  1328 + font-size: 16rpx;
  1329 + line-height: 32rpx
  1330 +}
  1331 +
  1332 +.cu-list.menu-avatar>.cu-item .action {
  1333 + width: 100rpx;
  1334 + text-align: center
  1335 +}
  1336 +
  1337 +.cu-list.menu-avatar>.cu-item .action view+view {
  1338 + margin-top: 10rpx
  1339 +}
  1340 +
  1341 +.cu-list.menu-avatar.comment>.cu-item .content {
  1342 + position: relative;
  1343 + left: 0;
  1344 + width: auto;
  1345 + flex: 1;
  1346 +}
  1347 +
  1348 +.cu-list.menu-avatar.comment>.cu-item {
  1349 + padding: 30rpx 30rpx 30rpx 120rpx;
  1350 + height: auto
  1351 +}
  1352 +
  1353 +.cu-list.menu-avatar.comment .cu-avatar {
  1354 + align-self: flex-start
  1355 +}
  1356 +
  1357 +.cu-list.menu>.cu-item {
  1358 + position: relative;
  1359 + display: flex;
  1360 + padding: 0 30rpx;
  1361 + min-height: 100rpx;
  1362 + background-color: var(--white);
  1363 + justify-content: space-between;
  1364 + align-items: center
  1365 +}
  1366 +
  1367 +.cu-list.menu>.cu-item:last-child:after {
  1368 + border: none
  1369 +}
  1370 +
  1371 +.cu-list.menu>.cu-item:after {
  1372 + position: absolute;
  1373 + top: 0;
  1374 + left: 0;
  1375 + box-sizing: border-box;
  1376 + width: 200%;
  1377 + height: 200%;
  1378 + border-bottom: 1rpx solid #ddd;
  1379 + border-radius: inherit;
  1380 + content: " ";
  1381 + transform: scale(.5);
  1382 + transform-origin: 0 0;
  1383 + pointer-events: none
  1384 +}
  1385 +
  1386 +.cu-list.menu>.cu-item.grayscale {
  1387 + background-color: #f5f5f5
  1388 +}
  1389 +
  1390 +.cu-list.menu>.cu-item.cur {
  1391 + background-color: #fcf7e9
  1392 +}
  1393 +
  1394 +.cu-list.menu>.cu-item.arrow {
  1395 + padding-right: 90rpx
  1396 +}
  1397 +
  1398 +.cu-list.menu>.cu-item.arrow:before {
  1399 + position: absolute;
  1400 + top: 0;
  1401 + right: 30rpx;
  1402 + bottom: 0;
  1403 + display: block;
  1404 + margin: auto;
  1405 + width: 30rpx;
  1406 + height: 30rpx;
  1407 + color: var(--grey);
  1408 + content: "\e6a3";
  1409 + text-align: center;
  1410 + font-size: 34rpx;
  1411 + font-family: "cuIcon";
  1412 + line-height: 30rpx
  1413 +}
  1414 +
  1415 +.cu-list.menu>.cu-item button.content {
  1416 + padding: 0;
  1417 + background-color: transparent;
  1418 + justify-content: flex-start
  1419 +}
  1420 +
  1421 +.cu-list.menu>.cu-item button.content:after {
  1422 + display: none
  1423 +}
  1424 +
  1425 +.cu-list.menu>.cu-item .cu-avatar-group .cu-avatar {
  1426 + border-color: var(--white)
  1427 +}
  1428 +
  1429 +.cu-list.menu>.cu-item .content>view:first-child {
  1430 + display: flex;
  1431 + align-items: center
  1432 +}
  1433 +
  1434 +.cu-list.menu>.cu-item .content>text[class*=cuIcon] {
  1435 + display: inline-block;
  1436 + margin-right: 10rpx;
  1437 + width: 1.6em;
  1438 + text-align: center
  1439 +}
  1440 +
  1441 +.cu-list.menu>.cu-item .content>image {
  1442 + display: inline-block;
  1443 + margin-right: 10rpx;
  1444 + width: 1.6em;
  1445 + height: 1.6em;
  1446 + vertical-align: middle
  1447 +}
  1448 +
  1449 +.cu-list.menu>.cu-item .content {
  1450 + font-size: 30rpx;
  1451 + line-height: 1.6em;
  1452 + flex: 1
  1453 +}
  1454 +
  1455 +.cu-list.menu>.cu-item .content .cu-tag.sm {
  1456 + display: inline-block;
  1457 + margin-left: 10rpx;
  1458 + height: 28rpx;
  1459 + font-size: 16rpx;
  1460 + line-height: 32rpx
  1461 +}
  1462 +
  1463 +.cu-list.menu>.cu-item .action .cu-tag:empty {
  1464 + right: 10rpx
  1465 +}
  1466 +
  1467 +.cu-list.menu {
  1468 + display: block;
  1469 + overflow: hidden
  1470 +}
  1471 +
  1472 +.cu-list.menu.sm-border>.cu-item:after {
  1473 + left: 30rpx;
  1474 + width: calc(200% - 120rpx)
  1475 +}
  1476 +
  1477 +.cu-list.grid>.cu-item {
  1478 + position: relative;
  1479 + display: flex;
  1480 + padding: 20rpx 0 30rpx;
  1481 + transition-duration: 0s;
  1482 + flex-direction: column
  1483 +}
  1484 +
  1485 +.cu-list.grid>.cu-item:after {
  1486 + position: absolute;
  1487 + top: 0;
  1488 + left: 0;
  1489 + box-sizing: border-box;
  1490 + width: 200%;
  1491 + height: 200%;
  1492 + border-right: 1px solid rgba(0, 0, 0, .1);
  1493 + border-bottom: 1px solid rgba(0, 0, 0, .1);
  1494 + border-radius: inherit;
  1495 + content: " ";
  1496 + transform: scale(.5);
  1497 + transform-origin: 0 0;
  1498 + pointer-events: none
  1499 +}
  1500 +
  1501 +.cu-list.grid>.cu-item text {
  1502 + display: block;
  1503 + margin-top: 10rpx;
  1504 + color: #888;
  1505 + font-size: 26rpx;
  1506 + line-height: 40rpx
  1507 +}
  1508 +
  1509 +.cu-list.grid>.cu-item [class*=cuIcon] {
  1510 + position: relative;
  1511 + display: block;
  1512 + margin-top: 20rpx;
  1513 + width: 100%;
  1514 + font-size: 48rpx
  1515 +}
  1516 +
  1517 +.cu-list.grid>.cu-item .cu-tag {
  1518 + right: auto;
  1519 + left: 50%;
  1520 + margin-left: 20rpx
  1521 +}
  1522 +
  1523 +.cu-list.grid {
  1524 + background-color: var(--white);
  1525 + text-align: center
  1526 +}
  1527 +
  1528 +.cu-list.grid.no-border>.cu-item {
  1529 + padding-top: 10rpx;
  1530 + padding-bottom: 20rpx
  1531 +}
  1532 +
  1533 +.cu-list.grid.no-border>.cu-item:after {
  1534 + border: none
  1535 +}
  1536 +
  1537 +.cu-list.grid.no-border {
  1538 + padding: 20rpx 10rpx
  1539 +}
  1540 +
  1541 +.cu-list.grid.col-3>.cu-item:nth-child(3n):after,
  1542 +.cu-list.grid.col-4>.cu-item:nth-child(4n):after,
  1543 +.cu-list.grid.col-5>.cu-item:nth-child(5n):after {
  1544 + border-right-width: 0
  1545 +}
  1546 +
  1547 +.cu-list.card-menu {
  1548 + overflow: hidden;
  1549 + margin-right: 30rpx;
  1550 + margin-left: 30rpx;
  1551 + border-radius: 20rpx
  1552 +}
  1553 +
  1554 +
  1555 +/* ==================
  1556 + 操作条
  1557 + ==================== */
  1558 +
  1559 +.cu-bar {
  1560 + display: flex;
  1561 + position: relative;
  1562 + align-items: center;
  1563 + min-height: 100rpx;
  1564 + justify-content: space-between;
  1565 +}
  1566 +
  1567 +.cu-bar .action {
  1568 + display: flex;
  1569 + align-items: center;
  1570 + height: 100%;
  1571 + justify-content: center;
  1572 + max-width: 100%;
  1573 +}
  1574 +
  1575 +.cu-bar .action.border-title {
  1576 + position: relative;
  1577 + top: -10rpx;
  1578 +}
  1579 +
  1580 +.cu-bar .action.border-title text[class*="bg-"]:last-child {
  1581 + position: absolute;
  1582 + bottom: -0.5rem;
  1583 + min-width: 2rem;
  1584 + height: 6rpx;
  1585 + left: 0;
  1586 +}
  1587 +
  1588 +.cu-bar .action.sub-title {
  1589 + position: relative;
  1590 + top: -0.2rem;
  1591 +}
  1592 +
  1593 +.cu-bar .action.sub-title text {
  1594 + position: relative;
  1595 + z-index: 1;
  1596 +}
  1597 +
  1598 +.cu-bar .action.sub-title text[class*="bg-"]:last-child {
  1599 + position: absolute;
  1600 + display: inline-block;
  1601 + bottom: -0.2rem;
  1602 + border-radius: 6rpx;
  1603 + width: 100%;
  1604 + height: 0.6rem;
  1605 + left: 0.6rem;
  1606 + opacity: 0.3;
  1607 + z-index: 0;
  1608 +}
  1609 +
  1610 +.cu-bar .action.sub-title text[class*="text-"]:last-child {
  1611 + position: absolute;
  1612 + display: inline-block;
  1613 + bottom: -0.7rem;
  1614 + left: 0.5rem;
  1615 + opacity: 0.2;
  1616 + z-index: 0;
  1617 + text-align: right;
  1618 + font-weight: 900;
  1619 + font-size: 36rpx;
  1620 +}
  1621 +
  1622 +.cu-bar.justify-center .action.border-title text:last-child,
  1623 +.cu-bar.justify-center .action.sub-title text:last-child {
  1624 + left: 0;
  1625 + right: 0;
  1626 + margin: auto;
  1627 + text-align: center;
  1628 +}
  1629 +
  1630 +.cu-bar .action:first-child {
  1631 + margin-left: 30rpx;
  1632 + font-size: 30rpx;
  1633 +}
  1634 +
  1635 +.cu-bar .action text.text-cut {
  1636 + text-align: left;
  1637 + width: 100%;
  1638 +}
  1639 +
  1640 +.cu-bar .cu-avatar:first-child {
  1641 + margin-left: 20rpx;
  1642 +}
  1643 +
  1644 +.cu-bar .action:first-child>text[class*="cuIcon-"] {
  1645 + margin-left: -0.3em;
  1646 + margin-right: 0.3em;
  1647 +}
  1648 +
  1649 +.cu-bar .action:last-child {
  1650 + margin-right: 30rpx;
  1651 +}
  1652 +
  1653 +.cu-bar .action>text[class*="cuIcon-"],
  1654 +.cu-bar .action>view[class*="cuIcon-"] {
  1655 + font-size: 36rpx;
  1656 +}
  1657 +
  1658 +.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] {
  1659 + margin-left: 0.5em;
  1660 +}
  1661 +
  1662 +.cu-bar .content {
  1663 + position: absolute;
  1664 + text-align: center;
  1665 + width: calc(100% - 340rpx);
  1666 + left: 0;
  1667 + right: 0;
  1668 + bottom: 0;
  1669 + top: 0;
  1670 + margin: auto;
  1671 + height: 60rpx;
  1672 + font-size: 32rpx;
  1673 + line-height: 60rpx;
  1674 + cursor: none;
  1675 + pointer-events: none;
  1676 + text-overflow: ellipsis;
  1677 + white-space: nowrap;
  1678 + overflow: hidden;
  1679 +}
  1680 +
  1681 +.cu-bar.ios .content {
  1682 + bottom: 7px;
  1683 + height: 30px;
  1684 + font-size: 32rpx;
  1685 + line-height: 30px;
  1686 +}
  1687 +
  1688 +.cu-bar.btn-group {
  1689 + justify-content: space-around;
  1690 +}
  1691 +
  1692 +.cu-bar.btn-group button {
  1693 + padding: 20rpx 32rpx;
  1694 +}
  1695 +
  1696 +.cu-bar.btn-group button {
  1697 + flex: 1;
  1698 + margin: 0 20rpx;
  1699 + max-width: 50%;
  1700 +}
  1701 +
  1702 +.cu-bar .search-form {
  1703 + background-color: #f5f5f5;
  1704 + line-height: 64rpx;
  1705 + height: 64rpx;
  1706 + font-size: 24rpx;
  1707 + color: var(--black);
  1708 + flex: 1;
  1709 + display: flex;
  1710 + align-items: center;
  1711 + margin: 0 30rpx;
  1712 +}
  1713 +
  1714 +.cu-bar .search-form+.action {
  1715 + margin-right: 30rpx;
  1716 +}
  1717 +
  1718 +.cu-bar .search-form input {
  1719 + flex: 1;
  1720 + padding-right: 30rpx;
  1721 + height: 64rpx;
  1722 + line-height: 64rpx;
  1723 + font-size: 26rpx;
  1724 + background-color: transparent;
  1725 +}
  1726 +
  1727 +.cu-bar .search-form [class*="cuIcon-"] {
  1728 + margin: 0 0.5em 0 0.8em;
  1729 +}
  1730 +
  1731 +.cu-bar .search-form [class*="cuIcon-"]::before {
  1732 + top: 0rpx;
  1733 +}
  1734 +
  1735 +.cu-bar.fixed,
  1736 +.nav.fixed {
  1737 + position: fixed;
  1738 + width: 100%;
  1739 + top: 0;
  1740 + z-index: 1024;
  1741 + box-shadow: 0 1rpx 6rpx rgba(0, 0, 0, 0.1);
  1742 +}
  1743 +
  1744 +.cu-bar.foot {
  1745 + position: fixed;
  1746 + width: 100%;
  1747 + bottom: 0;
  1748 + z-index: 1024;
  1749 + box-shadow: 0 -1rpx 6rpx rgba(0, 0, 0, 0.1);
  1750 +}
  1751 +
  1752 +.cu-bar.tabbar {
  1753 + padding: 0;
  1754 + height: calc(100rpx + env(safe-area-inset-bottom) / 2);
  1755 + padding-bottom: calc(env(safe-area-inset-bottom) / 2);
  1756 +}
  1757 +
  1758 +.cu-tabbar-height {
  1759 + min-height: 100rpx;
  1760 + height: calc(100rpx + env(safe-area-inset-bottom) / 2);
  1761 +}
  1762 +
  1763 +.cu-bar.tabbar.shadow {
  1764 + box-shadow: 0 -1rpx 6rpx rgba(0, 0, 0, 0.1);
  1765 +}
  1766 +
  1767 +.cu-bar.tabbar .action {
  1768 + font-size: 22rpx;
  1769 + position: relative;
  1770 + flex: 1;
  1771 + text-align: center;
  1772 + padding: 0;
  1773 + display: block;
  1774 + height: auto;
  1775 + line-height: 1;
  1776 + margin: 0;
  1777 + overflow: initial;
  1778 +}
  1779 +
  1780 +.cu-bar.tabbar.shop .action {
  1781 + width: 140rpx;
  1782 + flex: initial;
  1783 +}
  1784 +
  1785 +.cu-bar.tabbar .action.add-action {
  1786 + position: relative;
  1787 + z-index: 2;
  1788 + padding-top: 50rpx;
  1789 + background-color: inherit;
  1790 +}
  1791 +
  1792 +.cu-bar.tabbar .action.add-action [class*="cuIcon-"] {
  1793 + position: absolute;
  1794 + width: 70rpx;
  1795 + z-index: 2;
  1796 + height: 70rpx;
  1797 + border-radius: 50%;
  1798 + line-height: 70rpx;
  1799 + font-size: 50rpx;
  1800 + top: -35rpx;
  1801 + left: 0;
  1802 + right: 0;
  1803 + margin: auto;
  1804 + padding: 0;
  1805 +}
  1806 +
  1807 +.cu-bar.tabbar .action.add-action::after {
  1808 + content: "";
  1809 + position: absolute;
  1810 + width: 100rpx;
  1811 + height: 100rpx;
  1812 + top: -50rpx;
  1813 + left: 0;
  1814 + right: 0;
  1815 + margin: auto;
  1816 + box-shadow: 0 -3rpx 8rpx rgba(0, 0, 0, 0.08);
  1817 + border-radius: 50rpx;
  1818 + background-color: inherit;
  1819 + z-index: 0;
  1820 +}
  1821 +
  1822 +.cu-bar.tabbar .action.add-action::before {
  1823 + content: "";
  1824 + position: absolute;
  1825 + width: 100rpx;
  1826 + height: 30rpx;
  1827 + bottom: 30rpx;
  1828 + left: 0;
  1829 + right: 0;
  1830 + margin: auto;
  1831 + background-color: inherit;
  1832 + z-index: 1;
  1833 +}
  1834 +
  1835 +.cu-bar.tabbar .btn-group {
  1836 + flex: 1;
  1837 + display: flex;
  1838 + justify-content: space-around;
  1839 + align-items: center;
  1840 + padding: 0 10rpx;
  1841 +}
  1842 +
  1843 +.cu-bar.tabbar button.action::after {
  1844 + border: 0;
  1845 +}
  1846 +
  1847 +.cu-bar.tabbar .action [class*="cuIcon-"] {
  1848 + width: 100rpx;
  1849 + position: relative;
  1850 + display: block;
  1851 + height: auto;
  1852 + margin: 0 auto 10rpx;
  1853 + text-align: center;
  1854 + font-size: 40rpx;
  1855 +}
  1856 +
  1857 +.cu-bar.tabbar .action .cuIcon-cu-image {
  1858 + margin: 0 auto;
  1859 +}
  1860 +
  1861 +.cu-bar.tabbar .action .cuIcon-cu-image image {
  1862 + width: 50rpx;
  1863 + height: 50rpx;
  1864 + display: inline-block;
  1865 +}
  1866 +
  1867 +.cu-bar.tabbar .submit {
  1868 + align-items: center;
  1869 + display: flex;
  1870 + justify-content: center;
  1871 + text-align: center;
  1872 + position: relative;
  1873 + flex: 2;
  1874 + align-self: stretch;
  1875 +}
  1876 +
  1877 +.cu-bar.tabbar .submit:last-child {
  1878 + flex: 2.6;
  1879 +}
  1880 +
  1881 +.cu-bar.tabbar .submit+.submit {
  1882 + flex: 2;
  1883 +}
  1884 +
  1885 +.cu-bar.tabbar.border .action::before {
  1886 + content: " ";
  1887 + width: 200%;
  1888 + height: 200%;
  1889 + position: absolute;
  1890 + top: 0;
  1891 + left: 0;
  1892 + transform: scale(0.5);
  1893 + transform-origin: 0 0;
  1894 + border-right: 1rpx solid rgba(0, 0, 0, 0.1);
  1895 + z-index: 3;
  1896 +}
  1897 +
  1898 +.cu-bar.tabbar.border .action:last-child:before {
  1899 + display: none;
  1900 +}
  1901 +
  1902 +.cu-bar.input {
  1903 + padding-right: 20rpx;
  1904 + background-color: var(--white);
  1905 +}
  1906 +
  1907 +.cu-bar.input input {
  1908 + overflow: initial;
  1909 + line-height: 64rpx;
  1910 + height: 64rpx;
  1911 + min-height: 64rpx;
  1912 + flex: 1;
  1913 + font-size: 30rpx;
  1914 + margin: 0 20rpx;
  1915 +}
  1916 +
  1917 +.cu-bar.input .action {
  1918 + margin-left: 20rpx;
  1919 +}
  1920 +
  1921 +.cu-bar.input .action [class*="cuIcon-"] {
  1922 + font-size: 48rpx;
  1923 +}
  1924 +
  1925 +.cu-bar.input input+.action {
  1926 + margin-right: 20rpx;
  1927 + margin-left: 0rpx;
  1928 +}
  1929 +
  1930 +.cu-bar.input .action:first-child [class*="cuIcon-"] {
  1931 + margin-left: 0rpx;
  1932 +}
  1933 +
  1934 +.cu-custom {
  1935 + display: block;
  1936 + position: relative;
  1937 +}
  1938 +
  1939 +.cu-custom .cu-bar .content {
  1940 + width: calc(100% - 440rpx);
  1941 +}
  1942 +
  1943 +
  1944 +.cu-custom .cu-bar .content image {
  1945 + height: 60rpx;
  1946 + width: 240rpx;
  1947 +}
  1948 +
  1949 +.cu-custom .cu-bar {
  1950 + min-height: 0px;
  1951 + padding-right: 220rpx;
  1952 + box-shadow: 0rpx 0rpx 0rpx;
  1953 + z-index: 9999;
  1954 +}
  1955 +
  1956 +.cu-custom .cu-bar .border-custom {
  1957 + position: relative;
  1958 + background: rgba(0, 0, 0, 0.15);
  1959 + border-radius: 1000rpx;
  1960 + height: 30px;
  1961 +}
  1962 +
  1963 +.cu-custom .cu-bar .border-custom::after {
  1964 + content: " ";
  1965 + width: 200%;
  1966 + height: 200%;
  1967 + position: absolute;
  1968 + top: 0;
  1969 + left: 0;
  1970 + border-radius: inherit;
  1971 + transform: scale(0.5);
  1972 + transform-origin: 0 0;
  1973 + pointer-events: none;
  1974 + box-sizing: border-box;
  1975 + border: 1rpx solid var(--white);
  1976 + opacity: 0.5;
  1977 +}
  1978 +
  1979 +.cu-custom .cu-bar .border-custom::before {
  1980 + content: " ";
  1981 + width: 1rpx;
  1982 + height: 110%;
  1983 + position: absolute;
  1984 + top: 22.5%;
  1985 + left: 0;
  1986 + right: 0;
  1987 + margin: auto;
  1988 + transform: scale(0.5);
  1989 + transform-origin: 0 0;
  1990 + pointer-events: none;
  1991 + box-sizing: border-box;
  1992 + opacity: 0.6;
  1993 + background-color: var(--white);
  1994 +}
  1995 +
  1996 +.cu-custom .cu-bar .border-custom text {
  1997 + display: block;
  1998 + flex: 1;
  1999 + margin: auto !important;
  2000 + text-align: center;
  2001 + font-size: 34rpx;
  2002 +}
  2003 +
  2004 +/* ==================
  2005 + 导航栏
  2006 + ==================== */
  2007 +
  2008 +.nav {
  2009 + white-space: nowrap;
  2010 +}
  2011 +
  2012 +::-webkit-scrollbar {
  2013 + display: none;
  2014 +}
  2015 +
  2016 +.nav .cu-item {
  2017 + height: 90rpx;
  2018 + display: inline-block;
  2019 + line-height: 90rpx;
  2020 + margin: 0 10rpx;
  2021 + padding: 0 20rpx;
  2022 +}
  2023 +
  2024 +.nav .cu-item.cur {
  2025 + border-bottom: 4rpx solid;
  2026 +}
  2027 +
  2028 +/* ==================
  2029 + 时间轴
  2030 + ==================== */
  2031 +
  2032 +.cu-timeline {
  2033 + display: block;
  2034 + background-color: var(--white);
  2035 +}
  2036 +
  2037 +.cu-timeline .cu-time {
  2038 + width: 120rpx;
  2039 + text-align: center;
  2040 + padding: 20rpx 0;
  2041 + font-size: 26rpx;
  2042 + color: #888;
  2043 + display: block;
  2044 +}
  2045 +
  2046 +.cu-timeline>.cu-item {
  2047 + padding: 30rpx 30rpx 30rpx 120rpx;
  2048 + position: relative;
  2049 + display: block;
  2050 + z-index: 0;
  2051 +}
  2052 +
  2053 +.cu-timeline>.cu-item:not([class*="text-"]) {
  2054 + color: #ccc;
  2055 +}
  2056 +
  2057 +.cu-timeline>.cu-item::after {
  2058 + content: "";
  2059 + display: block;
  2060 + position: absolute;
  2061 + width: 1rpx;
  2062 + background-color: #ddd;
  2063 + left: 60rpx;
  2064 + height: 100%;
  2065 + top: 0;
  2066 + z-index: 8;
  2067 +}
  2068 +
  2069 +.cu-timeline>.cu-item::before {
  2070 + font-family: "cuIcon";
  2071 + display: block;
  2072 + position: absolute;
  2073 + top: 36rpx;
  2074 + z-index: 9;
  2075 + background-color: var(--white);
  2076 + width: 50rpx;
  2077 + height: 50rpx;
  2078 + text-align: center;
  2079 + border: none;
  2080 + line-height: 50rpx;
  2081 + left: 36rpx;
  2082 +}
  2083 +
  2084 +.cu-timeline>.cu-item:not([class*="cuIcon-"])::before {
  2085 + content: "\e763";
  2086 +}
  2087 +
  2088 +.cu-timeline>.cu-item[class*="cuIcon-"]::before {
  2089 + background-color: var(--white);
  2090 + width: 50rpx;
  2091 + height: 50rpx;
  2092 + text-align: center;
  2093 + border: none;
  2094 + line-height: 50rpx;
  2095 + left: 36rpx;
  2096 +}
  2097 +
  2098 +.cu-timeline>.cu-item>.content {
  2099 + padding: 30rpx;
  2100 + border-radius: 6rpx;
  2101 + display: block;
  2102 + line-height: 1.6;
  2103 +}
  2104 +
  2105 +.cu-timeline>.cu-item>.content:not([class*="bg-"]) {
  2106 + background-color: var(--ghostWhite);
  2107 + color: var(--black);
  2108 +}
  2109 +
  2110 +.cu-timeline>.cu-item>.content+.content {
  2111 + margin-top: 20rpx;
  2112 +}
  2113 +
  2114 +/* ==================
  2115 + 聊天
  2116 + ==================== */
  2117 +
  2118 +.cu-chat {
  2119 + display: flex;
  2120 + flex-direction: column;
  2121 +}
  2122 +
  2123 +.cu-chat .cu-item {
  2124 + display: flex;
  2125 + padding: 30rpx 30rpx 70rpx;
  2126 + position: relative;
  2127 +}
  2128 +
  2129 +.cu-chat .cu-item>.cu-avatar {
  2130 + width: 80rpx;
  2131 + height: 80rpx;
  2132 +}
  2133 +
  2134 +.cu-chat .cu-item>.main {
  2135 + max-width: calc(100% - 260rpx);
  2136 + margin: 0 40rpx;
  2137 + display: flex;
  2138 + align-items: center;
  2139 +}
  2140 +
  2141 +.cu-chat .cu-item>image {
  2142 + height: 320rpx;
  2143 +}
  2144 +
  2145 +.cu-chat .cu-item>.main .content {
  2146 + padding: 20rpx;
  2147 + border-radius: 6rpx;
  2148 + display: inline-flex;
  2149 + max-width: 100%;
  2150 + align-items: center;
  2151 + font-size: 30rpx;
  2152 + position: relative;
  2153 + min-height: 80rpx;
  2154 + line-height: 40rpx;
  2155 + text-align: left;
  2156 +}
  2157 +
  2158 +.cu-chat .cu-item>.main .content:not([class*="bg-"]) {
  2159 + background-color: var(--white);
  2160 + color: var(--black);
  2161 +}
  2162 +
  2163 +.cu-chat .cu-item .date {
  2164 + position: absolute;
  2165 + font-size: 24rpx;
  2166 + color: var(--grey);
  2167 + width: calc(100% - 320rpx);
  2168 + bottom: 20rpx;
  2169 + left: 160rpx;
  2170 +}
  2171 +
  2172 +.cu-chat .cu-item .action {
  2173 + padding: 0 30rpx;
  2174 + display: flex;
  2175 + align-items: center;
  2176 +}
  2177 +
  2178 +.cu-chat .cu-item>.main .content::after {
  2179 + content: "";
  2180 + top: 27rpx;
  2181 + transform: rotate(45deg);
  2182 + position: absolute;
  2183 + z-index: 100;
  2184 + display: inline-block;
  2185 + overflow: hidden;
  2186 + width: 24rpx;
  2187 + height: 24rpx;
  2188 + left: -12rpx;
  2189 + right: initial;
  2190 + background-color: inherit;
  2191 +}
  2192 +
  2193 +.cu-chat .cu-item.self>.main .content::after {
  2194 + left: auto;
  2195 + right: -12rpx;
  2196 +}
  2197 +
  2198 +.cu-chat .cu-item>.main .content::before {
  2199 + content: "";
  2200 + top: 30rpx;
  2201 + transform: rotate(45deg);
  2202 + position: absolute;
  2203 + z-index: -1;
  2204 + display: inline-block;
  2205 + overflow: hidden;
  2206 + width: 24rpx;
  2207 + height: 24rpx;
  2208 + left: -12rpx;
  2209 + right: initial;
  2210 + background-color: inherit;
  2211 + filter: blur(5rpx);
  2212 + opacity: 0.3;
  2213 +}
  2214 +
  2215 +.cu-chat .cu-item>.main .content:not([class*="bg-"])::before {
  2216 + background-color: var(--black);
  2217 + opacity: 0.1;
  2218 +}
  2219 +
  2220 +.cu-chat .cu-item.self>.main .content::before {
  2221 + left: auto;
  2222 + right: -12rpx;
  2223 +}
  2224 +
  2225 +.cu-chat .cu-item.self {
  2226 + justify-content: flex-end;
  2227 + text-align: right;
  2228 +}
  2229 +
  2230 +.cu-chat .cu-info {
  2231 + display: inline-block;
  2232 + margin: 20rpx auto;
  2233 + font-size: 24rpx;
  2234 + padding: 8rpx 12rpx;
  2235 + background-color: rgba(0, 0, 0, 0.2);
  2236 + border-radius: 6rpx;
  2237 + color: var(--white);
  2238 + max-width: 400rpx;
  2239 + line-height: 1.4;
  2240 +}
  2241 +
  2242 +/* ==================
  2243 + 卡片
  2244 + ==================== */
  2245 +
  2246 +.cu-card {
  2247 + display: block;
  2248 + overflow: hidden;
  2249 +}
  2250 +
  2251 +.cu-card>.cu-item {
  2252 + display: block;
  2253 + background-color: var(--white);
  2254 + overflow: hidden;
  2255 + border-radius: 10rpx;
  2256 + margin: 30rpx;
  2257 +}
  2258 +
  2259 +.cu-card>.cu-item.shadow-blur {
  2260 + overflow: initial;
  2261 +}
  2262 +
  2263 +.cu-card.no-card>.cu-item {
  2264 + margin: 0rpx;
  2265 + border-radius: 0rpx;
  2266 +}
  2267 +
  2268 +.cu-card .grid.grid-square {
  2269 + margin-bottom: -20rpx;
  2270 +}
  2271 +
  2272 +.cu-card.case .image {
  2273 + position: relative;
  2274 +}
  2275 +
  2276 +.cu-card.case .image image {
  2277 + width: 100%;
  2278 +}
  2279 +
  2280 +.cu-card.case .image .cu-tag {
  2281 + position: absolute;
  2282 + right: 0;
  2283 + top: 0;
  2284 +}
  2285 +
  2286 +.cu-card.case .image .cu-bar {
  2287 + position: absolute;
  2288 + bottom: 0;
  2289 + width: 100%;
  2290 + background-color: transparent;
  2291 + padding: 0rpx 30rpx;
  2292 +}
  2293 +
  2294 +.cu-card.case.no-card .image {
  2295 + margin: 30rpx 30rpx 0;
  2296 + overflow: hidden;
  2297 + border-radius: 10rpx;
  2298 +}
  2299 +
  2300 +.cu-card.dynamic {
  2301 + display: block;
  2302 +}
  2303 +
  2304 +.cu-card.dynamic>.cu-item {
  2305 + display: block;
  2306 + background-color: var(--white);
  2307 + overflow: hidden;
  2308 +}
  2309 +
  2310 +.cu-card.dynamic>.cu-item>.text-content {
  2311 + padding: 0 30rpx 0;
  2312 + max-height: 6.4em;
  2313 + overflow: hidden;
  2314 + font-size: 30rpx;
  2315 + margin-bottom: 20rpx;
  2316 +}
  2317 +
  2318 +.cu-card.dynamic>.cu-item .square-img {
  2319 + width: 100%;
  2320 + height: 200rpx;
  2321 + border-radius: 6rpx;
  2322 +}
  2323 +
  2324 +.cu-card.dynamic>.cu-item .only-img {
  2325 + width: 100%;
  2326 + height: 320rpx;
  2327 + border-radius: 6rpx;
  2328 +}
  2329 +
  2330 +.cu-card.article {
  2331 + display: block;
  2332 +}
  2333 +
  2334 +.cu-card.article>.cu-item {
  2335 + padding-bottom: 30rpx;
  2336 +}
  2337 +
  2338 +.cu-card.article>.cu-item .title {
  2339 + font-size: 30rpx;
  2340 + font-weight: 900;
  2341 + color: var(--black);
  2342 + line-height: 100rpx;
  2343 + padding: 0 30rpx;
  2344 +}
  2345 +
  2346 +.cu-card.article>.cu-item .content {
  2347 + display: flex;
  2348 + padding: 0 30rpx;
  2349 +}
  2350 +
  2351 +.cu-card.article>.cu-item .content>image {
  2352 + width: 240rpx;
  2353 + height: 6.4em;
  2354 + margin-right: 20rpx;
  2355 + border-radius: 6rpx;
  2356 +}
  2357 +
  2358 +.cu-card.article>.cu-item .content .desc {
  2359 + flex: 1;
  2360 + display: flex;
  2361 + flex-direction: column;
  2362 + justify-content: space-between;
  2363 +}
  2364 +
  2365 +.cu-card.article>.cu-item .content .text-content {
  2366 + font-size: 28rpx;
  2367 + color: #888;
  2368 + height: 4.8em;
  2369 + overflow: hidden;
  2370 +}
  2371 +
  2372 +/* ==================
  2373 + 表单
  2374 + ==================== */
  2375 +
  2376 +.cu-form-group {
  2377 + background-color: var(--white);
  2378 + padding: 1rpx 30rpx;
  2379 + display: flex;
  2380 + align-items: center;
  2381 + min-height: 100rpx;
  2382 + justify-content: space-between;
  2383 +}
  2384 +
  2385 +.cu-form-group+.cu-form-group {
  2386 + border-top: 1rpx solid #eee;
  2387 +}
  2388 +
  2389 +.cu-form-group .title {
  2390 + text-align: justify;
  2391 + padding-right: 30rpx;
  2392 + font-size: 30rpx;
  2393 + position: relative;
  2394 + height: 60rpx;
  2395 + line-height: 60rpx;
  2396 +}
  2397 +
  2398 +.cu-form-group input {
  2399 + flex: 1;
  2400 + font-size: 30rpx;
  2401 + color: #555;
  2402 + padding-right: 20rpx;
  2403 +}
  2404 +
  2405 +.cu-form-group>text[class*="cuIcon-"] {
  2406 + font-size: 36rpx;
  2407 + padding: 0;
  2408 + box-sizing: border-box;
  2409 +}
  2410 +
  2411 +.cu-form-group textarea {
  2412 + margin: 32rpx 0 30rpx;
  2413 + height: 4.6em;
  2414 + width: 100%;
  2415 + line-height: 1.2em;
  2416 + flex: 1;
  2417 + font-size: 28rpx;
  2418 + padding: 0;
  2419 +}
  2420 +
  2421 +.cu-form-group.align-start .title {
  2422 + height: 1em;
  2423 + margin-top: 32rpx;
  2424 + line-height: 1em;
  2425 +}
  2426 +
  2427 +.cu-form-group picker {
  2428 + flex: 1;
  2429 + padding-right: 40rpx;
  2430 + overflow: hidden;
  2431 + position: relative;
  2432 +}
  2433 +
  2434 +.cu-form-group picker .picker {
  2435 + line-height: 100rpx;
  2436 + font-size: 28rpx;
  2437 + text-overflow: ellipsis;
  2438 + white-space: nowrap;
  2439 + overflow: hidden;
  2440 + width: 100%;
  2441 + text-align: right;
  2442 +}
  2443 +
  2444 +.cu-form-group picker::after {
  2445 + font-family: "cuIcon";
  2446 + display: block;
  2447 + content: "\e6a3";
  2448 + position: absolute;
  2449 + font-size: 34rpx;
  2450 + color: var(--grey);
  2451 + line-height: 100rpx;
  2452 + width: 60rpx;
  2453 + text-align: center;
  2454 + top: 0;
  2455 + bottom: 0;
  2456 + right: -20rpx;
  2457 + margin: auto;
  2458 +}
  2459 +
  2460 +.cu-form-group textarea[disabled],
  2461 +.cu-form-group textarea[disabled] .placeholder {
  2462 + color: transparent;
  2463 +}
  2464 +
  2465 +/* ==================
  2466 + 模态窗口
  2467 + ==================== */
  2468 +
  2469 +.cu-modal {
  2470 + position: fixed;
  2471 + top: 0;
  2472 + right: 0;
  2473 + bottom: 0;
  2474 + left: 0;
  2475 + z-index: 1110;
  2476 + opacity: 0;
  2477 + outline: 0;
  2478 + text-align: center;
  2479 + -ms-transform: scale(1.185);
  2480 + transform: scale(1.185);
  2481 + backface-visibility: hidden;
  2482 + perspective: 2000rpx;
  2483 + background: rgba(0, 0, 0, 0.6);
  2484 + transition: all 0.3s ease-in-out 0s;
  2485 + pointer-events: none;
  2486 +}
  2487 +
  2488 +.cu-modal::before {
  2489 + content: "\200B";
  2490 + display: inline-block;
  2491 + height: 100%;
  2492 + vertical-align: middle;
  2493 +}
  2494 +
  2495 +.cu-modal.show {
  2496 + opacity: 1;
  2497 + transition-duration: 0.3s;
  2498 + -ms-transform: scale(1);
  2499 + transform: scale(1);
  2500 + overflow-x: hidden;
  2501 + overflow-y: auto;
  2502 + pointer-events: auto;
  2503 +}
  2504 +
  2505 +.cu-dialog {
  2506 + position: relative;
  2507 + display: inline-block;
  2508 + vertical-align: middle;
  2509 + margin-left: auto;
  2510 + margin-right: auto;
  2511 + width: 680rpx;
  2512 + max-width: 100%;
  2513 + background-color: #f8f8f8;
  2514 + border-radius: 10rpx;
  2515 + overflow: hidden;
  2516 +}
  2517 +
  2518 +.cu-modal.bottom-modal::before {
  2519 + vertical-align: bottom;
  2520 +}
  2521 +
  2522 +.cu-modal.bottom-modal .cu-dialog {
  2523 + width: 100%;
  2524 + border-radius: 0;
  2525 +}
  2526 +
  2527 +.cu-modal.bottom-modal {
  2528 + margin-bottom: -1000rpx;
  2529 +}
  2530 +
  2531 +.cu-modal.bottom-modal.show {
  2532 + margin-bottom: 0;
  2533 +}
  2534 +
  2535 +.cu-modal.drawer-modal {
  2536 + transform: scale(1);
  2537 + display: flex;
  2538 +}
  2539 +
  2540 +.cu-modal.drawer-modal .cu-dialog {
  2541 + height: 100%;
  2542 + min-width: 200rpx;
  2543 + border-radius: 0;
  2544 + margin: initial;
  2545 + transition-duration: 0.3s;
  2546 +}
  2547 +
  2548 +.cu-modal.drawer-modal.justify-start .cu-dialog {
  2549 + transform: translateX(-100%);
  2550 +}
  2551 +
  2552 +.cu-modal.drawer-modal.justify-end .cu-dialog {
  2553 + transform: translateX(100%);
  2554 +}
  2555 +
  2556 +.cu-modal.drawer-modal.show .cu-dialog {
  2557 + transform: translateX(0%);
  2558 +}
  2559 +.cu-modal .cu-dialog>.cu-bar:first-child .action{
  2560 + min-width: 100rpx;
  2561 + margin-right: 0;
  2562 + min-height: 100rpx;
  2563 +}
  2564 +/* ==================
  2565 + 轮播
  2566 + ==================== */
  2567 +swiper .a-swiper-dot {
  2568 + display: inline-block;
  2569 + width: 16rpx;
  2570 + height: 16rpx;
  2571 + background: rgba(0, 0, 0, .3);
  2572 + border-radius: 50%;
  2573 + vertical-align: middle;
  2574 +}
  2575 +
  2576 +swiper[class*="-dot"] .wx-swiper-dots {
  2577 + display: flex;
  2578 + align-items: center;
  2579 + width: 100%;
  2580 + justify-content: center;
  2581 +}
  2582 +
  2583 +swiper.square-dot .wx-swiper-dot {
  2584 + background-color: var(--white);
  2585 + opacity: 0.4;
  2586 + width: 10rpx;
  2587 + height: 10rpx;
  2588 + border-radius: 20rpx;
  2589 + margin: 0 8rpx !important;
  2590 +}
  2591 +
  2592 +swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active {
  2593 + opacity: 1;
  2594 + width: 30rpx;
  2595 +}
  2596 +
  2597 +swiper.round-dot .wx-swiper-dot {
  2598 + width: 10rpx;
  2599 + height: 10rpx;
  2600 + position: relative;
  2601 + margin: 4rpx 8rpx !important;
  2602 +}
  2603 +
  2604 +swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after {
  2605 + content: "";
  2606 + position: absolute;
  2607 + width: 10rpx;
  2608 + height: 10rpx;
  2609 + top: 0rpx;
  2610 + left: 0rpx;
  2611 + right: 0;
  2612 + bottom: 0;
  2613 + margin: auto;
  2614 + background-color: var(--white);
  2615 + border-radius: 20rpx;
  2616 +}
  2617 +
  2618 +swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active {
  2619 + width: 18rpx;
  2620 + height: 18rpx;
  2621 +}
  2622 +
  2623 +.screen-swiper {
  2624 + min-height: 375rpx;
  2625 +}
  2626 +
  2627 +.screen-swiper image,
  2628 +.screen-swiper video,
  2629 +.swiper-item image,
  2630 +.swiper-item video {
  2631 + width: 100%;
  2632 + display: block;
  2633 + height: 100%;
  2634 + margin: 0;
  2635 + pointer-events: none;
  2636 +}
  2637 +
  2638 +.card-swiper {
  2639 + height: 420rpx !important;
  2640 +}
  2641 +
  2642 +.card-swiper swiper-item {
  2643 + width: 610rpx !important;
  2644 + left: 70rpx;
  2645 + box-sizing: border-box;
  2646 + padding: 40rpx 0rpx 70rpx;
  2647 + overflow: initial;
  2648 +}
  2649 +
  2650 +.card-swiper swiper-item .swiper-item {
  2651 + width: 100%;
  2652 + display: block;
  2653 + height: 100%;
  2654 + border-radius: 10rpx;
  2655 + transform: scale(0.9);
  2656 + transition: all 0.2s ease-in 0s;
  2657 + overflow: hidden;
  2658 +}
  2659 +
  2660 +.card-swiper swiper-item.cur .swiper-item {
  2661 + transform: none;
  2662 + transition: all 0.2s ease-in 0s;
  2663 +}
  2664 +
  2665 +
  2666 +.tower-swiper {
  2667 + height: 420rpx;
  2668 + position: relative;
  2669 + max-width: 750rpx;
  2670 + overflow: hidden;
  2671 +}
  2672 +
  2673 +.tower-swiper .tower-item {
  2674 + position: absolute;
  2675 + width: 300rpx;
  2676 + height: 380rpx;
  2677 + top: 0;
  2678 + bottom: 0;
  2679 + left: 50%;
  2680 + margin: auto;
  2681 + transition: all 0.2s ease-in 0s;
  2682 + opacity: 1;
  2683 +}
  2684 +
  2685 +.tower-swiper .tower-item.none {
  2686 + opacity: 0;
  2687 +}
  2688 +
  2689 +.tower-swiper .tower-item .swiper-item {
  2690 + width: 100%;
  2691 + height: 100%;
  2692 + border-radius: 6rpx;
  2693 + overflow: hidden;
  2694 +}
  2695 +
  2696 +/* ==================
  2697 + 步骤条
  2698 + ==================== */
  2699 +
  2700 +.cu-steps {
  2701 + display: flex;
  2702 +}
  2703 +
  2704 +scroll-view.cu-steps {
  2705 + display: block;
  2706 + white-space: nowrap;
  2707 +}
  2708 +
  2709 +scroll-view.cu-steps .cu-item {
  2710 + display: inline-block;
  2711 +}
  2712 +
  2713 +.cu-steps .cu-item {
  2714 + flex: 1;
  2715 + text-align: center;
  2716 + position: relative;
  2717 + min-width: 100rpx;
  2718 +}
  2719 +
  2720 +.cu-steps .cu-item:not([class*="text-"]) {
  2721 + color: var(--grey);
  2722 +}
  2723 +
  2724 +.cu-steps .cu-item [class*="cuIcon-"],
  2725 +.cu-steps .cu-item .num {
  2726 + display: block;
  2727 + font-size: 40rpx;
  2728 + line-height: 80rpx;
  2729 +}
  2730 +
  2731 +.cu-steps .cu-item::before,
  2732 +.cu-steps .cu-item::after,
  2733 +.cu-steps.steps-arrow .cu-item::before,
  2734 +.cu-steps.steps-arrow .cu-item::after {
  2735 + content: "";
  2736 + display: block;
  2737 + position: absolute;
  2738 + height: 0px;
  2739 + width: calc(100% - 80rpx);
  2740 + border-bottom: 1px solid #ccc;
  2741 + left: calc(0px - (100% - 80rpx) / 2);
  2742 + top: 40rpx;
  2743 + z-index: 0;
  2744 +}
  2745 +
  2746 +.cu-steps.steps-arrow .cu-item::before,
  2747 +.cu-steps.steps-arrow .cu-item::after {
  2748 + content: "\e6a3";
  2749 + font-family: "cuIcon";
  2750 + height: 30rpx;
  2751 + border-bottom-width: 0px;
  2752 + line-height: 30rpx;
  2753 + top: 0;
  2754 + bottom: 0;
  2755 + margin: auto;
  2756 + color: #ccc;
  2757 +}
  2758 +
  2759 +.cu-steps.steps-bottom .cu-item::before,
  2760 +.cu-steps.steps-bottom .cu-item::after {
  2761 + bottom: 40rpx;
  2762 + top: initial;
  2763 +}
  2764 +
  2765 +.cu-steps .cu-item::after {
  2766 + border-bottom: 1px solid currentColor;
  2767 + width: 0px;
  2768 + transition: all 0.3s ease-in-out 0s;
  2769 +}
  2770 +
  2771 +.cu-steps .cu-item[class*="text-"]::after {
  2772 + width: calc(100% - 80rpx);
  2773 + color: currentColor;
  2774 +}
  2775 +
  2776 +.cu-steps .cu-item:first-child::before,
  2777 +.cu-steps .cu-item:first-child::after {
  2778 + display: none;
  2779 +}
  2780 +
  2781 +.cu-steps .cu-item .num {
  2782 + width: 40rpx;
  2783 + height: 40rpx;
  2784 + border-radius: 50%;
  2785 + line-height: 40rpx;
  2786 + margin: 20rpx auto;
  2787 + font-size: 24rpx;
  2788 + border: 1px solid currentColor;
  2789 + position: relative;
  2790 + overflow: hidden;
  2791 +}
  2792 +
  2793 +.cu-steps .cu-item[class*="text-"] .num {
  2794 + background-color: currentColor;
  2795 +}
  2796 +
  2797 +.cu-steps .cu-item .num::before,
  2798 +.cu-steps .cu-item .num::after {
  2799 + content: attr(data-index);
  2800 + position: absolute;
  2801 + left: 0;
  2802 + right: 0;
  2803 + top: 0;
  2804 + bottom: 0;
  2805 + margin: auto;
  2806 + transition: all 0.3s ease-in-out 0s;
  2807 + transform: translateY(0rpx);
  2808 +}
  2809 +
  2810 +.cu-steps .cu-item[class*="text-"] .num::before {
  2811 + transform: translateY(-40rpx);
  2812 + color: var(--white);
  2813 +}
  2814 +
  2815 +.cu-steps .cu-item .num::after {
  2816 + transform: translateY(40rpx);
  2817 + color: var(--white);
  2818 + transition: all 0.3s ease-in-out 0s;
  2819 +}
  2820 +
  2821 +.cu-steps .cu-item[class*="text-"] .num::after {
  2822 + content: "\e645";
  2823 + font-family: "cuIcon";
  2824 + color: var(--white);
  2825 + transform: translateY(0rpx);
  2826 +}
  2827 +
  2828 +.cu-steps .cu-item[class*="text-"] .num.err::after {
  2829 + content: "\e646";
  2830 +}
  2831 +
  2832 +/* ==================
  2833 + 布局
  2834 + ==================== */
  2835 +
  2836 +/* -- flex弹性布局 -- */
  2837 +
  2838 +.flex {
  2839 + display: flex;
  2840 +}
  2841 +
  2842 +.basis-xs {
  2843 + flex-basis: 20%;
  2844 +}
  2845 +
  2846 +.basis-sm {
  2847 + flex-basis: 40%;
  2848 +}
  2849 +
  2850 +.basis-df {
  2851 + flex-basis: 50%;
  2852 +}
  2853 +
  2854 +.basis-lg {
  2855 + flex-basis: 60%;
  2856 +}
  2857 +
  2858 +.basis-xl {
  2859 + flex-basis: 80%;
  2860 +}
  2861 +
  2862 +.flex-sub {
  2863 + flex: 1;
  2864 +}
  2865 +
  2866 +.flex-twice {
  2867 + flex: 2;
  2868 +}
  2869 +
  2870 +.flex-treble {
  2871 + flex: 3;
  2872 +}
  2873 +
  2874 +.flex-direction {
  2875 + flex-direction: column;
  2876 +}
  2877 +
  2878 +.flex-wrap {
  2879 + flex-wrap: wrap;
  2880 +}
  2881 +
  2882 +.align-start {
  2883 + align-items: flex-start;
  2884 +}
  2885 +
  2886 +.align-end {
  2887 + align-items: flex-end;
  2888 +}
  2889 +
  2890 +.align-center {
  2891 + align-items: center;
  2892 +}
  2893 +
  2894 +.align-stretch {
  2895 + align-items: stretch;
  2896 +}
  2897 +
  2898 +.self-start {
  2899 + align-self: flex-start;
  2900 +}
  2901 +
  2902 +.self-center {
  2903 + align-self: flex-center;
  2904 +}
  2905 +
  2906 +.self-end {
  2907 + align-self: flex-end;
  2908 +}
  2909 +
  2910 +.self-stretch {
  2911 + align-self: stretch;
  2912 +}
  2913 +
  2914 +.align-stretch {
  2915 + align-items: stretch;
  2916 +}
  2917 +
  2918 +.justify-start {
  2919 + justify-content: flex-start;
  2920 +}
  2921 +
  2922 +.justify-end {
  2923 + justify-content: flex-end;
  2924 +}
  2925 +
  2926 +.justify-center {
  2927 + justify-content: center;
  2928 +}
  2929 +
  2930 +.justify-between {
  2931 + justify-content: space-between;
  2932 +}
  2933 +
  2934 +.justify-around {
  2935 + justify-content: space-around;
  2936 +}
  2937 +
  2938 +/* grid布局 */
  2939 +
  2940 +.grid {
  2941 + display: flex;
  2942 + flex-wrap: wrap;
  2943 +}
  2944 +
  2945 +.grid.grid-square {
  2946 + overflow: hidden;
  2947 +}
  2948 +
  2949 +.grid.grid-square .cu-tag {
  2950 + position: absolute;
  2951 + right: 0;
  2952 + top: 0;
  2953 + border-bottom-left-radius: 6rpx;
  2954 + padding: 6rpx 12rpx;
  2955 + height: auto;
  2956 + background-color: rgba(0, 0, 0, 0.5);
  2957 +}
  2958 +
  2959 +.grid.grid-square>view>text[class*="cuIcon-"] {
  2960 + font-size: 52rpx;
  2961 + position: absolute;
  2962 + color: var(--grey);
  2963 + margin: auto;
  2964 + top: 0;
  2965 + bottom: 0;
  2966 + left: 0;
  2967 + right: 0;
  2968 + display: flex;
  2969 + justify-content: center;
  2970 + align-items: center;
  2971 + flex-direction: column;
  2972 +}
  2973 +
  2974 +.grid.grid-square>view {
  2975 + margin-right: 20rpx;
  2976 + margin-bottom: 20rpx;
  2977 + border-radius: 6rpx;
  2978 + position: relative;
  2979 + overflow: hidden;
  2980 +}
  2981 +
  2982 +.grid.grid-square>view.bg-img image {
  2983 + width: 100%;
  2984 + height: 100%;
  2985 + position: absolute;
  2986 +}
  2987 +
  2988 +.grid.col-1.grid-square>view {
  2989 + padding-bottom: 100%;
  2990 + height: 0;
  2991 + margin-right: 0;
  2992 +}
  2993 +
  2994 +.grid.col-2.grid-square>view {
  2995 + padding-bottom: calc((100% - 20rpx)/2);
  2996 + height: 0;
  2997 + width: calc((100% - 20rpx)/2);
  2998 +}
  2999 +
  3000 +.grid.col-3.grid-square>view {
  3001 + padding-bottom: calc((100% - 40rpx)/3);
  3002 + height: 0;
  3003 + width: calc((100% - 40rpx)/3);
  3004 +}
  3005 +
  3006 +.grid.col-4.grid-square>view {
  3007 + padding-bottom: calc((100% - 60rpx)/4);
  3008 + height: 0;
  3009 + width: calc((100% - 60rpx)/4);
  3010 +}
  3011 +
  3012 +.grid.col-5.grid-square>view {
  3013 + padding-bottom: calc((100% - 80rpx)/5);
  3014 + height: 0;
  3015 + width: calc((100% - 80rpx)/5);
  3016 +}
  3017 +
  3018 +.grid.col-2.grid-square>view:nth-child(2n),
  3019 +.grid.col-3.grid-square>view:nth-child(3n),
  3020 +.grid.col-4.grid-square>view:nth-child(4n),
  3021 +.grid.col-5.grid-square>view:nth-child(5n){
  3022 + margin-right: 0;
  3023 +}
  3024 +
  3025 +.grid.col-1>view {
  3026 + width: 100%;
  3027 +}
  3028 +
  3029 +.grid.col-2>view {
  3030 + width: 50%;
  3031 +}
  3032 +
  3033 +.grid.col-3>view {
  3034 + width: 33.33%;
  3035 +}
  3036 +
  3037 +.grid.col-4>view {
  3038 + width: 25%;
  3039 +}
  3040 +
  3041 +.grid.col-5>view {
  3042 + width: 20%;
  3043 +}
  3044 +
  3045 +/* -- 内外边距 -- */
  3046 +
  3047 +.margin-0 {
  3048 + margin: 0;
  3049 +}
  3050 +
  3051 +.margin-xs {
  3052 + margin: 10rpx;
  3053 +}
  3054 +
  3055 +.margin-sm {
  3056 + margin: 20rpx;
  3057 +}
  3058 +
  3059 +.margin {
  3060 + margin: 30rpx;
  3061 +}
  3062 +
  3063 +.margin-lg {
  3064 + margin: 40rpx;
  3065 +}
  3066 +
  3067 +.margin-xl {
  3068 + margin: 50rpx;
  3069 +}
  3070 +
  3071 +.margin-top-xs {
  3072 + margin-top: 10rpx;
  3073 +}
  3074 +
  3075 +.margin-top-sm {
  3076 + margin-top: 20rpx;
  3077 +}
  3078 +
  3079 +.margin-top {
  3080 + margin-top: 30rpx;
  3081 +}
  3082 +
  3083 +.margin-top-lg {
  3084 + margin-top: 40rpx;
  3085 +}
  3086 +
  3087 +.margin-top-xl {
  3088 + margin-top: 50rpx;
  3089 +}
  3090 +
  3091 +.margin-right-xs {
  3092 + margin-right: 10rpx;
  3093 +}
  3094 +
  3095 +.margin-right-sm {
  3096 + margin-right: 20rpx;
  3097 +}
  3098 +
  3099 +.margin-right {
  3100 + margin-right: 30rpx;
  3101 +}
  3102 +
  3103 +.margin-right-lg {
  3104 + margin-right: 40rpx;
  3105 +}
  3106 +
  3107 +.margin-right-xl {
  3108 + margin-right: 50rpx;
  3109 +}
  3110 +
  3111 +.margin-bottom-xs {
  3112 + margin-bottom: 10rpx;
  3113 +}
  3114 +
  3115 +.margin-bottom-sm {
  3116 + margin-bottom: 20rpx;
  3117 +}
  3118 +
  3119 +.margin-bottom {
  3120 + margin-bottom: 30rpx;
  3121 +}
  3122 +
  3123 +.margin-bottom-lg {
  3124 + margin-bottom: 40rpx;
  3125 +}
  3126 +
  3127 +.margin-bottom-xl {
  3128 + margin-bottom: 50rpx;
  3129 +}
  3130 +
  3131 +.margin-left-xs {
  3132 + margin-left: 10rpx;
  3133 +}
  3134 +
  3135 +.margin-left-sm {
  3136 + margin-left: 20rpx;
  3137 +}
  3138 +
  3139 +.margin-left {
  3140 + margin-left: 30rpx;
  3141 +}
  3142 +
  3143 +.margin-left-lg {
  3144 + margin-left: 40rpx;
  3145 +}
  3146 +
  3147 +.margin-left-xl {
  3148 + margin-left: 50rpx;
  3149 +}
  3150 +
  3151 +.margin-lr-xs {
  3152 + margin-left: 10rpx;
  3153 + margin-right: 10rpx;
  3154 +}
  3155 +
  3156 +.margin-lr-sm {
  3157 + margin-left: 20rpx;
  3158 + margin-right: 20rpx;
  3159 +}
  3160 +
  3161 +.margin-lr {
  3162 + margin-left: 30rpx;
  3163 + margin-right: 30rpx;
  3164 +}
  3165 +
  3166 +.margin-lr-lg {
  3167 + margin-left: 40rpx;
  3168 + margin-right: 40rpx;
  3169 +}
  3170 +
  3171 +.margin-lr-xl {
  3172 + margin-left: 50rpx;
  3173 + margin-right: 50rpx;
  3174 +}
  3175 +
  3176 +.margin-tb-xs {
  3177 + margin-top: 10rpx;
  3178 + margin-bottom: 10rpx;
  3179 +}
  3180 +
  3181 +.margin-tb-sm {
  3182 + margin-top: 20rpx;
  3183 + margin-bottom: 20rpx;
  3184 +}
  3185 +
  3186 +.margin-tb {
  3187 + margin-top: 30rpx;
  3188 + margin-bottom: 30rpx;
  3189 +}
  3190 +
  3191 +.margin-tb-lg {
  3192 + margin-top: 40rpx;
  3193 + margin-bottom: 40rpx;
  3194 +}
  3195 +
  3196 +.margin-tb-xl {
  3197 + margin-top: 50rpx;
  3198 + margin-bottom: 50rpx;
  3199 +}
  3200 +
  3201 +.padding-0 {
  3202 + padding: 0;
  3203 +}
  3204 +
  3205 +.padding-xs {
  3206 + padding: 10rpx;
  3207 +}
  3208 +
  3209 +.padding-sm {
  3210 + padding: 20rpx;
  3211 +}
  3212 +
  3213 +.padding {
  3214 + padding: 30rpx;
  3215 +}
  3216 +
  3217 +.padding-lg {
  3218 + padding: 40rpx;
  3219 +}
  3220 +
  3221 +.padding-xl {
  3222 + padding: 50rpx;
  3223 +}
  3224 +
  3225 +.padding-top-xs {
  3226 + padding-top: 10rpx;
  3227 +}
  3228 +
  3229 +.padding-top-sm {
  3230 + padding-top: 20rpx;
  3231 +}
  3232 +
  3233 +.padding-top {
  3234 + padding-top: 30rpx;
  3235 +}
  3236 +
  3237 +.padding-top-lg {
  3238 + padding-top: 40rpx;
  3239 +}
  3240 +
  3241 +.padding-top-xl {
  3242 + padding-top: 50rpx;
  3243 +}
  3244 +
  3245 +.padding-right-xs {
  3246 + padding-right: 10rpx;
  3247 +}
  3248 +
  3249 +.padding-right-sm {
  3250 + padding-right: 20rpx;
  3251 +}
  3252 +
  3253 +.padding-right {
  3254 + padding-right: 30rpx;
  3255 +}
  3256 +
  3257 +.padding-right-lg {
  3258 + padding-right: 40rpx;
  3259 +}
  3260 +
  3261 +.padding-right-xl {
  3262 + padding-right: 50rpx;
  3263 +}
  3264 +
  3265 +.padding-bottom-xs {
  3266 + padding-bottom: 10rpx;
  3267 +}
  3268 +
  3269 +.padding-bottom-sm {
  3270 + padding-bottom: 20rpx;
  3271 +}
  3272 +
  3273 +.padding-bottom {
  3274 + padding-bottom: 30rpx;
  3275 +}
  3276 +
  3277 +.padding-bottom-lg {
  3278 + padding-bottom: 40rpx;
  3279 +}
  3280 +
  3281 +.padding-bottom-xl {
  3282 + padding-bottom: 50rpx;
  3283 +}
  3284 +
  3285 +.padding-left-xs {
  3286 + padding-left: 10rpx;
  3287 +}
  3288 +
  3289 +.padding-left-sm {
  3290 + padding-left: 20rpx;
  3291 +}
  3292 +
  3293 +.padding-left {
  3294 + padding-left: 30rpx;
  3295 +}
  3296 +
  3297 +.padding-left-lg {
  3298 + padding-left: 40rpx;
  3299 +}
  3300 +
  3301 +.padding-left-xl {
  3302 + padding-left: 50rpx;
  3303 +}
  3304 +
  3305 +.padding-lr-xs {
  3306 + padding-left: 10rpx;
  3307 + padding-right: 10rpx;
  3308 +}
  3309 +
  3310 +.padding-lr-sm {
  3311 + padding-left: 20rpx;
  3312 + padding-right: 20rpx;
  3313 +}
  3314 +
  3315 +.padding-lr {
  3316 + padding-left: 30rpx;
  3317 + padding-right: 30rpx;
  3318 +}
  3319 +
  3320 +.padding-lr-lg {
  3321 + padding-left: 40rpx;
  3322 + padding-right: 40rpx;
  3323 +}
  3324 +
  3325 +.padding-lr-xl {
  3326 + padding-left: 50rpx;
  3327 + padding-right: 50rpx;
  3328 +}
  3329 +
  3330 +.padding-tb-xs {
  3331 + padding-top: 10rpx;
  3332 + padding-bottom: 10rpx;
  3333 +}
  3334 +
  3335 +.padding-tb-sm {
  3336 + padding-top: 20rpx;
  3337 + padding-bottom: 20rpx;
  3338 +}
  3339 +
  3340 +.padding-tb {
  3341 + padding-top: 30rpx;
  3342 + padding-bottom: 30rpx;
  3343 +}
  3344 +
  3345 +.padding-tb-lg {
  3346 + padding-top: 40rpx;
  3347 + padding-bottom: 40rpx;
  3348 +}
  3349 +
  3350 +.padding-tb-xl {
  3351 + padding-top: 50rpx;
  3352 + padding-bottom: 50rpx;
  3353 +}
  3354 +
  3355 +/* -- 浮动 -- */
  3356 +
  3357 +.cf::after,
  3358 +.cf::before {
  3359 + content: " ";
  3360 + display: table;
  3361 +}
  3362 +
  3363 +.cf::after {
  3364 + clear: both;
  3365 +}
  3366 +
  3367 +.fl {
  3368 + float: left;
  3369 +}
  3370 +
  3371 +.fr {
  3372 + float: right;
  3373 +}
  3374 +
  3375 +/* ==================
  3376 + 背景
  3377 + ==================== */
  3378 +
  3379 +.line-red::after,
  3380 +.lines-red::after {
  3381 + border-color: var(--red);
  3382 +}
  3383 +
  3384 +.line-orange::after,
  3385 +.lines-orange::after {
  3386 + border-color: var(--orange);
  3387 +}
  3388 +
  3389 +.line-yellow::after,
  3390 +.lines-yellow::after {
  3391 + border-color: var(--yellow);
  3392 +}
  3393 +
  3394 +.line-olive::after,
  3395 +.lines-olive::after {
  3396 + border-color: var(--olive);
  3397 +}
  3398 +
  3399 +.line-green::after,
  3400 +.lines-green::after {
  3401 + border-color: var(--green);
  3402 +}
  3403 +
  3404 +.line-cyan::after,
  3405 +.lines-cyan::after {
  3406 + border-color: var(--cyan);
  3407 +}
  3408 +
  3409 +.line-blue::after,
  3410 +.lines-blue::after {
  3411 + border-color: var(--blue);
  3412 +}
  3413 +
  3414 +.line-purple::after,
  3415 +.lines-purple::after {
  3416 + border-color: var(--purple);
  3417 +}
  3418 +
  3419 +.line-mauve::after,
  3420 +.lines-mauve::after {
  3421 + border-color: var(--mauve);
  3422 +}
  3423 +
  3424 +.line-pink::after,
  3425 +.lines-pink::after {
  3426 + border-color: var(--pink);
  3427 +}
  3428 +
  3429 +.line-brown::after,
  3430 +.lines-brown::after {
  3431 + border-color: var(--brown);
  3432 +}
  3433 +
  3434 +.line-grey::after,
  3435 +.lines-grey::after {
  3436 + border-color: var(--grey);
  3437 +}
  3438 +
  3439 +.line-gray::after,
  3440 +.lines-gray::after {
  3441 + border-color: var(--gray);
  3442 +}
  3443 +
  3444 +.line-black::after,
  3445 +.lines-black::after {
  3446 + border-color: var(--black);
  3447 +}
  3448 +
  3449 +.line-white::after,
  3450 +.lines-white::after {
  3451 + border-color: var(--white);
  3452 +}
  3453 +
  3454 +.bg-red {
  3455 + background-color: var(--red);
  3456 + color: var(--white);
  3457 +}
  3458 +
  3459 +.bg-orange {
  3460 + background-color: var(--orange);
  3461 + color: var(--white);
  3462 +}
  3463 +
  3464 +.bg-yellow {
  3465 + background-color: var(--yellow);
  3466 + color: var(--black);
  3467 +}
  3468 +
  3469 +.bg-olive {
  3470 + background-color: var(--olive);
  3471 + color: var(--white);
  3472 +}
  3473 +
  3474 +.bg-green {
  3475 + background-color: var(--green);
  3476 + color: var(--white);
  3477 +}
  3478 +
  3479 +.bg-cyan {
  3480 + background-color: var(--cyan);
  3481 + color: var(--white);
  3482 +}
  3483 +
  3484 +.bg-blue {
  3485 + background-color: var(--blue);
  3486 + color: var(--white);
  3487 +}
  3488 +
  3489 +.bg-purple {
  3490 + background-color: var(--purple);
  3491 + color: var(--white);
  3492 +}
  3493 +
  3494 +.bg-mauve {
  3495 + background-color: var(--mauve);
  3496 + color: var(--white);
  3497 +}
  3498 +
  3499 +.bg-pink {
  3500 + background-color: var(--pink);
  3501 + color: var(--white);
  3502 +}
  3503 +
  3504 +.bg-brown {
  3505 + background-color: var(--brown);
  3506 + color: var(--white);
  3507 +}
  3508 +
  3509 +.bg-grey {
  3510 + background-color: var(--grey);
  3511 + color: var(--white);
  3512 +}
  3513 +
  3514 +.bg-gray {
  3515 + background-color: #f0f0f0;
  3516 + color: var(--black);
  3517 +}
  3518 +
  3519 +.bg-black {
  3520 + background-color: var(--black);
  3521 + color: var(--white);
  3522 +}
  3523 +
  3524 +.bg-white {
  3525 + background-color: var(--white);
  3526 + color: var(--darkGray);
  3527 +}
  3528 +
  3529 +.bg-shadeTop {
  3530 + background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01));
  3531 + color: var(--white);
  3532 +}
  3533 +
  3534 +.bg-shadeBottom {
  3535 + background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1));
  3536 + color: var(--white);
  3537 +}
  3538 +
  3539 +.bg-red.light {
  3540 + color: var(--red);
  3541 + background-color: var(--redLight);
  3542 +}
  3543 +
  3544 +.bg-orange.light {
  3545 + color: var(--orange);
  3546 + background-color: var(--orangeLight);
  3547 +}
  3548 +
  3549 +.bg-yellow.light {
  3550 + color: var(--yellow);
  3551 + background-color: var(--yellowLight);
  3552 +}
  3553 +
  3554 +.bg-olive.light {
  3555 + color: var(--olive);
  3556 + background-color: var(--oliveLight);
  3557 +}
  3558 +
  3559 +.bg-green.light {
  3560 + color: var(--green);
  3561 + background-color: var(--greenLight);
  3562 +}
  3563 +
  3564 +.bg-cyan.light {
  3565 + color: var(--cyan);
  3566 + background-color: var(--cyanLight);
  3567 +}
  3568 +
  3569 +.bg-blue.light {
  3570 + color: var(--blue);
  3571 + background-color: var(--blueLight);
  3572 +}
  3573 +
  3574 +.bg-purple.light {
  3575 + color: var(--purple);
  3576 + background-color: var(--purpleLight);
  3577 +}
  3578 +
  3579 +.bg-mauve.light {
  3580 + color: var(--mauve);
  3581 + background-color: var(--mauveLight);
  3582 +}
  3583 +
  3584 +.bg-pink.light {
  3585 + color: var(--pink);
  3586 + background-color: var(--pinkLight);
  3587 +}
  3588 +
  3589 +.bg-brown.light {
  3590 + color: var(--brown);
  3591 + background-color: var(--brownLight);
  3592 +}
  3593 +
  3594 +.bg-grey.light {
  3595 + color: var(--grey);
  3596 + background-color: var(--greyLight);
  3597 +}
  3598 +
  3599 +.bg-gradual-red {
  3600 + background-image: var(--gradualRed);
  3601 + color: var(--white);
  3602 +}
  3603 +
  3604 +.bg-gradual-orange {
  3605 + background-image: var(--gradualOrange);
  3606 + color: var(--white);
  3607 +}
  3608 +
  3609 +.bg-gradual-green {
  3610 + background-image: var(--gradualGreen);
  3611 + color: var(--white);
  3612 +}
  3613 +
  3614 +.bg-gradual-purple {
  3615 + background-image: var(--gradualPurple);
  3616 + color: var(--white);
  3617 +}
  3618 +
  3619 +.bg-gradual-pink {
  3620 + background-image: var(--gradualPink);
  3621 + color: var(--white);
  3622 +}
  3623 +
  3624 +.bg-gradual-blue {
  3625 + background-image: var(--gradualBlue);
  3626 + color: var(--white);
  3627 +}
  3628 +
  3629 +.shadow[class*="-red"] {
  3630 + box-shadow: var(--ShadowSize) var(--redShadow);
  3631 +}
  3632 +
  3633 +.shadow[class*="-orange"] {
  3634 + box-shadow: var(--ShadowSize) var(--orangeShadow);
  3635 +}
  3636 +
  3637 +.shadow[class*="-yellow"] {
  3638 + box-shadow: var(--ShadowSize) var(--yellowShadow);
  3639 +}
  3640 +
  3641 +.shadow[class*="-olive"] {
  3642 + box-shadow: var(--ShadowSize) var(--oliveShadow);
  3643 +}
  3644 +
  3645 +.shadow[class*="-green"] {
  3646 + box-shadow: var(--ShadowSize) var(--greenShadow);
  3647 +}
  3648 +
  3649 +.shadow[class*="-cyan"] {
  3650 + box-shadow: var(--ShadowSize) var(--cyanShadow);
  3651 +}
  3652 +
  3653 +.shadow[class*="-blue"] {
  3654 + box-shadow: var(--ShadowSize) var(--blueShadow);
  3655 +}
  3656 +
  3657 +.shadow[class*="-purple"] {
  3658 + box-shadow: var(--ShadowSize) var(--purpleShadow);
  3659 +}
  3660 +
  3661 +.shadow[class*="-mauve"] {
  3662 + box-shadow: var(--ShadowSize) var(--mauveShadow);
  3663 +}
  3664 +
  3665 +.shadow[class*="-pink"] {
  3666 + box-shadow: var(--ShadowSize) var(--pinkShadow);
  3667 +}
  3668 +
  3669 +.shadow[class*="-brown"] {
  3670 + box-shadow: var(--ShadowSize) var(--brownShadow);
  3671 +}
  3672 +
  3673 +.shadow[class*="-grey"] {
  3674 + box-shadow: var(--ShadowSize) var(--greyShadow);
  3675 +}
  3676 +
  3677 +.shadow[class*="-gray"] {
  3678 + box-shadow: var(--ShadowSize) var(--grayShadow);
  3679 +}
  3680 +
  3681 +.shadow[class*="-black"] {
  3682 + box-shadow: var(--ShadowSize) var(--blackShadow);
  3683 +}
  3684 +
  3685 +.shadow[class*="-white"] {
  3686 + box-shadow: var(--ShadowSize) var(--blackShadow);
  3687 +}
  3688 +
  3689 +.text-shadow[class*="-red"] {
  3690 + text-shadow: var(--ShadowSize) var(--redShadow);
  3691 +}
  3692 +
  3693 +.text-shadow[class*="-orange"] {
  3694 + text-shadow: var(--ShadowSize) var(--orangeShadow);
  3695 +}
  3696 +
  3697 +.text-shadow[class*="-yellow"] {
  3698 + text-shadow: var(--ShadowSize) var(--yellowShadow);
  3699 +}
  3700 +
  3701 +.text-shadow[class*="-olive"] {
  3702 + text-shadow: var(--ShadowSize) var(--oliveShadow);
  3703 +}
  3704 +
  3705 +.text-shadow[class*="-green"] {
  3706 + text-shadow: var(--ShadowSize) var(--greenShadow);
  3707 +}
  3708 +
  3709 +.text-shadow[class*="-cyan"] {
  3710 + text-shadow: var(--ShadowSize) var(--cyanShadow);
  3711 +}
  3712 +
  3713 +.text-shadow[class*="-blue"] {
  3714 + text-shadow: var(--ShadowSize) var(--blueShadow);
  3715 +}
  3716 +
  3717 +.text-shadow[class*="-purple"] {
  3718 + text-shadow: var(--ShadowSize) var(--purpleShadow);
  3719 +}
  3720 +
  3721 +.text-shadow[class*="-mauve"] {
  3722 + text-shadow: var(--ShadowSize) var(--mauveShadow);
  3723 +}
  3724 +
  3725 +.text-shadow[class*="-pink"] {
  3726 + text-shadow: var(--ShadowSize) var(--pinkShadow);
  3727 +}
  3728 +
  3729 +.text-shadow[class*="-brown"] {
  3730 + text-shadow: var(--ShadowSize) var(--brownShadow);
  3731 +}
  3732 +
  3733 +.text-shadow[class*="-grey"] {
  3734 + text-shadow: var(--ShadowSize) var(--greyShadow);
  3735 +}
  3736 +
  3737 +.text-shadow[class*="-gray"] {
  3738 + text-shadow: var(--ShadowSize) var(--grayShadow);
  3739 +}
  3740 +
  3741 +.text-shadow[class*="-black"] {
  3742 + text-shadow: var(--ShadowSize) var(--blackShadow);
  3743 +}
  3744 +
  3745 +.bg-img {
  3746 + background-size: cover;
  3747 + background-position: center;
  3748 + background-repeat: no-repeat;
  3749 +}
  3750 +
  3751 +.bg-mask {
  3752 + background-color: var(--black);
  3753 + position: relative;
  3754 +}
  3755 +
  3756 +.bg-mask::after {
  3757 + content: "";
  3758 + border-radius: inherit;
  3759 + width: 100%;
  3760 + height: 100%;
  3761 + display: block;
  3762 + background-color: rgba(0, 0, 0, 0.4);
  3763 + position: absolute;
  3764 + left: 0;
  3765 + right: 0;
  3766 + bottom: 0;
  3767 + top: 0;
  3768 +}
  3769 +
  3770 +.bg-mask view,
  3771 +.bg-mask cover-view {
  3772 + z-index: 5;
  3773 + position: relative;
  3774 +}
  3775 +
  3776 +.bg-video {
  3777 + position: relative;
  3778 +}
  3779 +
  3780 +.bg-video video {
  3781 + display: block;
  3782 + height: 100%;
  3783 + width: 100%;
  3784 + -o-object-fit: cover;
  3785 + object-fit: cover;
  3786 + position: absolute;
  3787 + top: 0;
  3788 + z-index: 0;
  3789 + pointer-events: none;
  3790 +}
  3791 +
  3792 +/* ==================
  3793 + 文本
  3794 + ==================== */
  3795 +
  3796 +.text-xs {
  3797 + font-size: 20rpx;
  3798 +}
  3799 +
  3800 +.text-sm {
  3801 + font-size: 24rpx;
  3802 +}
  3803 +
  3804 +.text-df {
  3805 + font-size: 28rpx;
  3806 +}
  3807 +
  3808 +.text-lg {
  3809 + font-size: 32rpx;
  3810 +}
  3811 +
  3812 +.text-xl {
  3813 + font-size: 36rpx;
  3814 +}
  3815 +
  3816 +.text-xxl {
  3817 + font-size: 44rpx;
  3818 +}
  3819 +
  3820 +.text-sl {
  3821 + font-size: 80rpx;
  3822 +}
  3823 +
  3824 +.text-xsl {
  3825 + font-size: 120rpx;
  3826 +}
  3827 +
  3828 +.text-Abc {
  3829 + text-transform: Capitalize;
  3830 +}
  3831 +
  3832 +.text-ABC {
  3833 + text-transform: Uppercase;
  3834 +}
  3835 +
  3836 +.text-abc {
  3837 + text-transform: Lowercase;
  3838 +}
  3839 +
  3840 +.text-price::before {
  3841 + content: "¥";
  3842 + font-size: 80%;
  3843 + margin-right: 4rpx;
  3844 +}
  3845 +
  3846 +.text-cut {
  3847 + text-overflow: ellipsis;
  3848 + white-space: nowrap;
  3849 + overflow: hidden;
  3850 +}
  3851 +
  3852 +.text-bold {
  3853 + font-weight: bold;
  3854 +}
  3855 +
  3856 +.text-center {
  3857 + text-align: center;
  3858 +}
  3859 +
  3860 +.text-content {
  3861 + line-height: 1.6;
  3862 +}
  3863 +
  3864 +.text-left {
  3865 + text-align: left;
  3866 +}
  3867 +
  3868 +.text-right {
  3869 + text-align: right;
  3870 +}
  3871 +
  3872 +.text-red,
  3873 +.line-red,
  3874 +.lines-red {
  3875 + color: var(--red);
  3876 +}
  3877 +
  3878 +.text-orange,
  3879 +.line-orange,
  3880 +.lines-orange {
  3881 + color: var(--orange);
  3882 +}
  3883 +
  3884 +.text-yellow,
  3885 +.line-yellow,
  3886 +.lines-yellow {
  3887 + color: var(--yellow);
  3888 +}
  3889 +
  3890 +.text-olive,
  3891 +.line-olive,
  3892 +.lines-olive {
  3893 + color: var(--olive);
  3894 +}
  3895 +
  3896 +.text-green,
  3897 +.line-green,
  3898 +.lines-green {
  3899 + color: var(--green);
  3900 +}
  3901 +
  3902 +.text-cyan,
  3903 +.line-cyan,
  3904 +.lines-cyan {
  3905 + color: var(--cyan);
  3906 +}
  3907 +
  3908 +.text-blue,
  3909 +.line-blue,
  3910 +.lines-blue {
  3911 + color: var(--blue);
  3912 +}
  3913 +
  3914 +.text-purple,
  3915 +.line-purple,
  3916 +.lines-purple {
  3917 + color: var(--purple);
  3918 +}
  3919 +
  3920 +.text-mauve,
  3921 +.line-mauve,
  3922 +.lines-mauve {
  3923 + color: var(--mauve);
  3924 +}
  3925 +
  3926 +.text-pink,
  3927 +.line-pink,
  3928 +.lines-pink {
  3929 + color: var(--pink);
  3930 +}
  3931 +
  3932 +.text-brown,
  3933 +.line-brown,
  3934 +.lines-brown {
  3935 + color: var(--brown);
  3936 +}
  3937 +
  3938 +.text-grey,
  3939 +.line-grey,
  3940 +.lines-grey {
  3941 + color: var(--grey);
  3942 +}
  3943 +
  3944 +.text-gray,
  3945 +.line-gray,
  3946 +.lines-gray {
  3947 + color: var(--gray);
  3948 +}
  3949 +
  3950 +.text-black,
  3951 +.line-black,
  3952 +.lines-black {
  3953 + color: var(--black);
  3954 +}
  3955 +
  3956 +.text-white,
  3957 +.line-white,
  3958 +.lines-white {
  3959 + color: var(--white);
  3960 +}
1 // components/book/tabBar/tabBar.js 1 // components/book/tabBar/tabBar.js
2 import util from '../utils/util' 2 import util from '../utils/util'
  3 +import PubSub from '../utils/PubSub'
3 Component({ 4 Component({
4 /** 5 /**
5 * 组件的属性列表 6 * 组件的属性列表
@@ -10,34 +11,17 @@ Component({ @@ -10,34 +11,17 @@ Component({
10 * 组件的初始数据 11 * 组件的初始数据
11 */ 12 */
12 data: { 13 data: {
13 - pi: 0,  
14 - dot:0,  
15 - list: [  
16 - {  
17 - "pagePath": "pages/reserve/index",  
18 - "text": "订座",  
19 - "iconPath": "pages/image/tabicon1.png",  
20 - "selectedIconPath": "pages/image/tabicon1.active.png"  
21 - },  
22 - {  
23 - "pagePath": "pages/me/follow",  
24 - "text": "关注",  
25 - "iconPath": "pages/image/follow.png",  
26 - "selectedIconPath": "pages/image/follow.active.png"  
27 - },  
28 - {  
29 - "pagePath": "pages/customer/list",  
30 - "text": "日程",  
31 - "iconPath": "pages/image/tabicon3.png",  
32 - "selectedIconPath": "pages/image/tabicon3.active.png"  
33 - },  
34 - {  
35 - "pagePath": "pages/me/index",  
36 - "text": "我的",  
37 - "iconPath": "pages/image/tabicon4.png",  
38 - "selectedIconPath": "pages/image/tabicon4.active.png"  
39 - }  
40 - ] 14 + url:'pages/reserve/index'
  15 + },
  16 + pageLifetimes:{
  17 + show(){
  18 + console.log('custom-tab-bar.pageLifetimes.show')
  19 + //this.setStatus()
  20 + },
  21 + hide(){
  22 + console.log('custom-tab-bar.pageLifetimes.hide')
  23 + //this.setStatus()
  24 + },
41 }, 25 },
42 lifetimes: { 26 lifetimes: {
43 ready(){ 27 ready(){
@@ -46,6 +30,9 @@ Component({ @@ -46,6 +30,9 @@ Component({
46 attached: function() { 30 attached: function() {
47 // 在组件实例进入页面节点树时执行 31 // 在组件实例进入页面节点树时执行
48 console.log('custom-tab-bar.attached') 32 console.log('custom-tab-bar.attached')
  33 + PubSub.on('custom-tab-bar',()=>{
  34 + this.setStatus()
  35 + })
49 }, 36 },
50 detached: function() { 37 detached: function() {
51 // 在组件实例被从页面节点树移除时执行 38 // 在组件实例被从页面节点树移除时执行
@@ -53,22 +40,29 @@ Component({ @@ -53,22 +40,29 @@ Component({
53 }, 40 },
54 moved:function() { 41 moved:function() {
55 console.log('custom-tab-bar.moved') 42 console.log('custom-tab-bar.moved')
  43 + PubSub.off('custom-tab-bar');
56 }, 44 },
57 }, 45 },
58 -  
59 /** 46 /**
60 * 组件的方法列表 47 * 组件的方法列表
61 */ 48 */
62 methods: { 49 methods: {
63 - redirectTo(e){  
64 - let url = util.attr(e, 'url'); 50 + setStatus(){
65 let pages = getCurrentPages(); 51 let pages = getCurrentPages();
66 let p = pages[pages.length - 1]; 52 let p = pages[pages.length - 1];
67 - if (url.indexOf(p.route) < 0) {  
68 - wx.switchTab({  
69 - url: '/'+url,  
70 - })  
71 - } 53 + console.log('custom-tab-bar.setStatus',p.route)
  54 + this.setData({
  55 + url:p.route,
  56 + })
  57 + },
  58 + redirectTo(e){
  59 + let url= util.attr(e, 'url');
  60 + this.setData({
  61 + url:url,
  62 + })
  63 + wx.switchTab({
  64 + url: '/'+url,
  65 + })
72 }, 66 },
73 } 67 }
74 }) 68 })
1 <!--components/book/tabBar/tabBar.wxml--> 1 <!--components/book/tabBar/tabBar.wxml-->
2 -<view class="tabBar flex-cc" >  
3 - <block wx:for="{{list}}" wx:key="list">  
4 - <view class="item flex-vc" bindtap="redirectTo" data-url="{{item.pagePath}}">  
5 - <view class="item-view {{(selected==index)?'checked':''}}">  
6 - <view class="icon tabicon{{index+1}}"></view>  
7 - <view class="text">{{item.text}}</view>  
8 - </view> 2 +<view class="view tabBar flex align-center" >
  3 + <view class="view home flex justify-center align-center {{('pages/reserve/index'==url)?'checked':''}}"
  4 + bindtap="redirectTo" data-url="pages/reserve/index">
  5 + <view class="view icon"></view><view class="text">附近</view>
  6 + </view>
  7 + <view class="view search flex justify-center align-center {{('pages/reserve/search'==url)?'checked':''}}" bindtap="redirectTo" data-url="pages/reserve/search">
  8 + <view>
  9 + <view class="view icon"></view>
  10 + <view class="text">找包间</view>
9 </view> 11 </view>
10 - </block> 12 + </view>
  13 + <view class="view order flex justify-center align-center {{('pages/me/list'==url)?'checked':''}}" bindtap="redirectTo" data-url="pages/me/list">
  14 + <view class="view icon"></view>
  15 + <view class="text">订单</view>
  16 + </view>
11 </view> 17 </view>
1 /* components/book/tabBar/tabBar.wxss */ 1 /* components/book/tabBar/tabBar.wxss */
2 -@import "../app.wxss"; 2 +@import "../colorui/main.wxss";
3 .tabBar{ 3 .tabBar{
4 - height: calc(98rpx + env(safe-area-inset-bottom));  
5 - background:rgba(249,249,249,1);  
6 - box-shadow:0rpx 0rpx 8rpx 0rpx rgba(224,224,224,1);  
7 - width:100%;  
8 position: fixed; 4 position: fixed;
9 z-index: 9; 5 z-index: 9;
10 - box-sizing: border-box;  
11 - bottom: 0; 6 + bottom: 34rpx;
  7 + left: calc(50% - 232rpx);
  8 + width: 464rpx;
  9 + height: calc(100rpx + env(safe-area-inset-bottom));
  10 + background: #FFFFFF;
  11 + box-shadow: 0rpx 0rpx 10rpx 0rpx #E5E5E5;
  12 + border-radius: 50rpx;
  13 + border: 2rpx solid #E5E5E5;
  14 +}
  15 +
  16 +.home,.order{
  17 + width:176rpx;
12 18
  19 + font-size: 28rpx;
  20 + font-family: PingFangSC-Semibold, PingFang SC;
  21 + font-weight: 600;
  22 + color: #999999;
13 } 23 }
14 .tabBar .text{ 24 .tabBar .text{
15 - height:32rpx;  
16 - font-size:22rpx;  
17 - font-family:PingFangSC-Medium,PingFang SC;  
18 - font-weight:500;  
19 - color:rgba(102,102,102,1);  
20 - line-height:32rpx; 25 + margin-left: 14rpx;
21 } 26 }
22 .tabBar .checked .text{ 27 .tabBar .checked .text{
23 - color: #C28C56;  
24 -}  
25 -.tabBar .item{  
26 - width: 33%;  
27 - min-width: 20%;  
28 - height: 100%; 28 + color: #5EB2FF;
29 } 29 }
30 -.tabBar .item-view{  
31 - height: 100%;  
32 -}  
33 -.dot{  
34 - position: absolute;  
35 - width: 16rpx;  
36 - height: 16rpx;  
37 - background-color: #F05522;  
38 - border-radius: 50%;  
39 - right:-14rpx;  
40 - top:-8rpx; 30 +.tabBar .search.checked .text{
  31 + color: #FFFFFF;
41 } 32 }
42 -.tabBar .icon{  
43 - width: 48rpx;  
44 - height: 48rpx;  
45 - background-size: 100%;  
46 - position: relative; 33 +.home .icon{
  34 + width: 34rpx;
  35 + height: 40rpx;
  36 + background-image: url("http://nosqn.colorcun.com/2.0/home%20%287%29.png");
47 } 37 }
48 -.tabBar .icon image{  
49 - width: 100%;  
50 - height: 100%; 38 +.home.checked .icon{
  39 + background-image: url("http://nosqn.colorcun.com/2.0/home%20%286%29.png");
51 } 40 }
52 -  
53 -.tabBar .tabicon1{  
54 - width: 46rpx;  
55 - height: 46rpx;  
56 - background-image: url("http://nosqn.colorcun.com/mapmenu/tabicon1.png");  
57 - margin-top: 8rpx;  
58 - margin-bottom: 4rpx; 41 +.order .icon{
  42 + width: 40rpx;
  43 + height: 40rpx;
  44 + background-image: url("http://nosqn.colorcun.com/2.0/home%20%2812%29.png");
59 } 45 }
60 -.tabBar .checked .tabicon1{  
61 - background-image: url("http://nosqn.colorcun.com/mapmenu/tabicon1.active.png"); 46 +.order.checked .icon{
  47 + background-image: url("http://nosqn.colorcun.com/2.0/home%20%285%29.png");
62 } 48 }
63 -  
64 -.tabBar .tabicon2{  
65 - width:40rpx;  
66 - height:39rpx;  
67 - background-image: url("http://nosqn.colorcun.com/mapmenu/tabicon2.png");  
68 - margin-top: 14rpx;  
69 - margin-bottom: 6rpx;  
70 - background-repeat: no-repeat; 49 +.search{
  50 + width: 112rpx;
  51 + height: 112rpx;
  52 + background: linear-gradient(90deg, #3BBFF5 0%, #57A0FF 100%);
  53 + box-shadow: 0rpx 0rpx 6rpx 0rpx #42A5FF;
  54 + border-radius: 50%;
71 } 55 }
72 -.tabBar .checked .tabicon2{  
73 - background-image: url("http://nosqn.colorcun.com/mapmenu/tabicon2.active.png"); 56 +.search .text{
  57 + font-size: 20rpx;
  58 + font-family: PingFangSC-Regular, PingFang SC;
  59 + font-weight: 400;
  60 + color: #FFFFFF;
  61 + line-height: 28rpx;
  62 + height: 28rpx;
  63 + margin-left: 0;
74 } 64 }
75 -  
76 -.tabBar .tabicon3{  
77 - width:44rpx;  
78 - height:42rpx;  
79 - background-image: url("http://nosqn.colorcun.com/mapmenu/tabicon3.png");  
80 - margin-top: 12rpx; 65 +.search .icon{
  66 + width: 48rpx;
  67 + height: 48rpx;
  68 + background-image: url("http://nosqn.colorcun.com/2.0/home%20%2810%29.png");
81 margin-bottom: 4rpx; 69 margin-bottom: 4rpx;
82 - background-repeat: no-repeat;  
83 -}  
84 -.tabBar .checked .tabicon3{  
85 - background-image: url("http://nosqn.colorcun.com/mapmenu/tabicon3.active.png");  
86 } 70 }
87 71
88 -.tabBar .tabicon4{  
89 - width:40rpx;  
90 - height:40rpx;  
91 - background-image: url("http://nosqn.colorcun.com/mapmenu/tabicon4.png");  
92 - margin-top: 12rpx;  
93 - margin-bottom: 6rpx;  
94 -}  
95 -.tabBar .checked .tabicon4{  
96 - background-image: url("http://nosqn.colorcun.com/mapmenu/tabicon4.active.png");  
97 -}  
98 -  
99 -  
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 import util from '../../utils/util'; 2 import util from '../../utils/util';
3 import App from '../../utils/api'; 3 import App from '../../utils/api';
4 import RS from '../../utils/reserveStatus' 4 import RS from '../../utils/reserveStatus'
  5 +import PubSub from '../../utils/PubSub'
5 6
6 const {regeneratorRuntime} = global 7 const {regeneratorRuntime} = global
7 Page({ 8 Page({
@@ -44,7 +45,7 @@ Page({ @@ -44,7 +45,7 @@ Page({
44 * 生命周期函数--监听页面显示 45 * 生命周期函数--监听页面显示
45 */ 46 */
46 onShow: function () { 47 onShow: function () {
47 - 48 + PubSub.emit('custom-tab-bar')
48 }, 49 },
49 50
50 /** 51 /**
1 // pages/reservr/index.js 1 // pages/reservr/index.js
2 -var mta = require('mta-wechat-analysis')  
3 import util from '../../utils/util'; 2 import util from '../../utils/util';
4 import App from '../../utils/api'; 3 import App from '../../utils/api';
5 import DA from './data'; 4 import DA from './data';
6 -import reddot from '../../utils/reddot';  
7 import PubSub from '../../utils/PubSub' 5 import PubSub from '../../utils/PubSub'
8 const {regeneratorRuntime} = global 6 const {regeneratorRuntime} = global
9 -const mapScale=15//18;  
10 -const barHeight=50;  
11 -const transverseViewHeight=253+barHeight;  
12 -  
13 -const renNum=function(){  
14 - let arr=[]  
15 - for(let i=1;i<=30;i++){  
16 - arr.push(i+'位')  
17 - }  
18 - return arr;  
19 -}  
20 -const cates_version='?1.2';  
21 -const hasSellerConcat=false;//变量存储所有商户  
22 -const def_latitude=39.684670;  
23 -const def_longitude=118.176300;  
24 Page({ 7 Page({
25 -  
26 - /**  
27 - * 页面的初始数据  
28 - */  
29 - data: {  
30 - map: {  
31 - latitude: def_latitude+0.0001,  
32 - longitude: def_longitude+0.0001,  
33 - scale: mapScale,  
34 - height: 300,  
35 - },  
36 - markers: [],  
37 - //polygons:{},  
38 - //sellers:[],  
39 - multiArray: ['全部菜系'],  
40 - multiIndex: [0],  
41 - //scrollIntoView:'',  
42 - suggestion:{},  
43 - hasSuggestion:false,//搜索返回  
44 - current:0,  
45 - hasSellers:false,  
46 - hasGetSellersEnd:false,  
47 - hasSetActivity:false,  
48 - tags:[  
49 - {id:1,name:'环境好'},  
50 - {id:2,name:'菜品有特色'},  
51 - {id:3,name:'超大包间'},  
52 - ],  
53 - listMoreCount:0,  
54 - hasSearchLimit:false,  
55 - hasGetPos:false,  
56 - },  
57 - hasClickMoveToLocation:false,//点击回到我的位置  
58 - hasSellerConcat:hasSellerConcat,  
59 - transverseViewHeight:transverseViewHeight,//横向滚动高度,苹果要比安卓多20  
60 - //qqmapsdk:null,  
61 - sellers: [],  
62 - sellersIds:[],  
63 - sellersNow:[],//本次视图内商户  
64 - searchAddrTop:50,  
65 - user:{  
66 - latitude: def_latitude,  
67 - longitude: def_longitude,  
68 - }, 8 + data:{},
69 /** 9 /**
70 * 生命周期函数--监听页面加载 10 * 生命周期函数--监听页面加载
71 */ 11 */
72 - hasOnLoad:false,  
73 - hasGetLocation:false,//定位信息  
74 - hasAppHide:false,//app切至后台  
75 - param:{},  
76 - onLoad: async function (options) {  
77 - this.reportTime=new Date() 12 + onLoad: function (options) {
78 13
79 - this.hasOnLoad=true;  
80 - // this.qqmapsdk=new QQMapWX({  
81 - // key: 'SDEBZ-I74W4-QLGUX-XXYXU-HIR23-3QFBJ'  
82 - // });  
83 - this.setData({  
84 - multiArray:[['全部菜系'].concat(await DA.getCates())]  
85 - })  
86 - mta.Page.init({  
87 - "appID": "500667280",  
88 - "eventID": "500667287",  
89 - "statPullDownFresh": true,  
90 - "statShareApp": true,  
91 - "statReachBottom": true,  
92 - "lauchOpts": options, //渠道分析  
93 - });  
94 - PubSub.on(  
95 - 'searchParam',  
96 - data=>{  
97 - console.log('searchParam.msg',data)  
98 - if(data.fun=='tagsChange'){  
99 - this.tagsChange(data.e);  
100 - }  
101 - if(data.fun=='caixiActive'){  
102 - this.caixiActive(data.e);  
103 - }  
104 - if(data.fun=='setSuggestion'){  
105 - this.setSuggestion(data.suggestion);  
106 - }  
107 - if(data.fun=='moveToLocation'){  
108 - this.moveToLocation();  
109 - }  
110 - if(data.fun=='filterEvent'){  
111 - this.filterEvent(data.e)  
112 - }  
113 - }  
114 - )  
115 - PubSub.on(  
116 - 'appHide',  
117 - data=>{  
118 - console.log('appHide');  
119 - let pages=getCurrentPages();  
120 - if(pages.length==1){//用户停留在首页  
121 - this.hasGetLocation=false  
122 - this.hasClickMoveToLocation=false  
123 - this.hasAppHide=true  
124 - }  
125 - }  
126 - )  
127 - reddot.init()  
128 }, 14 },
129 15
130 /** 16 /**
131 * 生命周期函数--监听页面初次渲染完成 17 * 生命周期函数--监听页面初次渲染完成
132 */ 18 */
133 - mapCtx: null,  
134 - mapData:{  
135 - lat:'',  
136 - lng:'',  
137 - latitude: 0,  
138 - longitude: 0,  
139 - scale: 18,  
140 - hasRegionchange:false,  
141 - region:{  
142 - southwest:{},  
143 - northeast:{},  
144 - },  
145 - },  
146 - mapDataLast:null,//最后一次成功视角,防止地图视角丢失  
147 onReady: function () { 19 onReady: function () {
148 - if (wx.canIUse('reportPerformance')) {  
149 - wx.reportPerformance(2002, new Date()-this.reportTime)  
150 - }  
151 - this.mapCtx = wx.createMapContext('map')  
152 - // this.mapCtx.moveToLocation({  
153 - // success:(res)=>{  
154 - // console.log('moveToLocation',res)  
155 - // }  
156 - // }) 20 +
157 }, 21 },
  22 +
158 /** 23 /**
159 * 生命周期函数--监听页面显示 24 * 生命周期函数--监听页面显示
160 */ 25 */
161 - onShow: async function (e) {  
162 - if (typeof this.getTabBar === 'function' &&  
163 - this.getTabBar()) {  
164 - this.getTabBar().setData({  
165 - selected: 0  
166 - })  
167 - }  
168 - console.log({  
169 - 'this.hasGetLocation':this.hasGetLocation,  
170 - 'this.hasOnLoad':this.hasOnLoad,  
171 - 'this.hasClickMoveToLocation':this.hasClickMoveToLocation,  
172 - 'this.data.hasSuggestion':this.data.hasSuggestion,  
173 - })  
174 - this.getClassNameFlag=true;  
175 - //this.getPos();  
176 - if(this.data.hasSuggestion) return;  
177 - if(!this.hasOnLoad && this.hasGetLocation) return;  
178 - this.hasOnLoad=false;  
179 - //导航栏自适应  
180 - let systemInfo = wx.getSystemInfoSync();  
181 - console.log('systemInfo:',systemInfo)  
182 - let reg = /ios/i;  
183 - let pt = 20;//导航状态栏上内边距  
184 - let h = 44;//导航状态栏高度  
185 - if(reg.test(systemInfo.system)){  
186 - pt = systemInfo.statusBarHeight;  
187 - h = 44;  
188 - if(systemInfo.pixelRatio>2){  
189 - this.transverseViewHeight=transverseViewHeight+26;  
190 - }  
191 - }else{  
192 - if(/xiaomi/i.test(systemInfo.brand)){  
193 - this.transverseViewHeight=transverseViewHeight+15;  
194 - }else{  
195 - this.transverseViewHeight=transverseViewHeight-15;  
196 - }  
197 - pt = systemInfo.statusBarHeight;  
198 - h = 48;  
199 - }  
200 - console.log('onShow',systemInfo,systemInfo.windowHeight,systemInfo.windowHeight-this.transverseViewHeight)  
201 - this.setData({  
202 - [`map.height`]: systemInfo.windowHeight-this.transverseViewHeight,  
203 - statusBarHeight: pt,  
204 - titleBarHeight:h,  
205 - })  
206 - //this.getPos(systemInfo);  
207 - this.systemInfo=systemInfo  
208 - //this.selectComponent('#getpos').getPos();  
209 - if(!this.hasClickMoveToLocation){  
210 - //this.getMarkers();  
211 - //this.timeoutGetMarkers();  
212 - }  
213 - 26 + onShow: function () {
  27 + PubSub.emit('custom-tab-bar')
214 }, 28 },
215 29
216 /** 30 /**
217 * 生命周期函数--监听页面隐藏 31 * 生命周期函数--监听页面隐藏
218 */ 32 */
219 - onHide: function (e) {  
220 - util.elog(null,'离开地图页') 33 + onHide: function () {
  34 +
221 }, 35 },
222 36
223 /** 37 /**
224 * 生命周期函数--监听页面卸载 38 * 生命周期函数--监听页面卸载
225 */ 39 */
226 onUnload: function () { 40 onUnload: function () {
227 - PubSub.off('searchParam')  
228 - PubSub.off('appHide')  
229 - },  
230 -  
231 - /**  
232 - * 页面相关事件处理函数--监听用户下拉动作  
233 - */  
234 - onPullDownRefresh: function () {  
235 41
236 }, 42 },
  43 + back:function() {
  44 + /*
  45 + var mta = require('mta-wechat-analysis')
  46 + import util from '../../utils/util';
  47 + import App from '../../utils/api';
  48 + import DA from './data';
  49 + import reddot from '../../utils/reddot';
  50 + import PubSub from '../../utils/PubSub'
  51 + const {regeneratorRuntime} = global
  52 + const mapScale = 15//18;
  53 + const barHeight = 50;
  54 + const transverseViewHeight = 253 + barHeight;
237 55
238 - /**  
239 - * 页面上拉触底事件的处理函数  
240 - */  
241 - onReachBottom: function () { 56 + const renNum = function () {
  57 + let arr = []
  58 + for (let i = 1; i <= 30; i++) {
  59 + arr.push(i + '位')
  60 + }
  61 + return arr;
  62 + }
  63 + const cates_version = '?1.2';
  64 + const hasSellerConcat = false;//变量存储所有商户
  65 + const def_latitude = 39.684670;
  66 + const def_longitude = 118.176300;
  67 + */
  68 + Page({
242 69
243 - }, 70 + /**
  71 + * 页面的初始数据
  72 + */
  73 + data: {
  74 + map: {
  75 + latitude: def_latitude + 0.0001,
  76 + longitude: def_longitude + 0.0001,
  77 + scale: mapScale,
  78 + height: 300,
  79 + },
  80 + markers: [],
  81 + //polygons:{},
  82 + //sellers:[],
  83 + multiArray: ['全部菜系'],
  84 + multiIndex: [0],
  85 + //scrollIntoView:'',
  86 + suggestion: {},
  87 + hasSuggestion: false,//搜索返回
  88 + current: 0,
  89 + hasSellers: false,
  90 + hasGetSellersEnd: false,
  91 + hasSetActivity: false,
  92 + tags: [
  93 + {id: 1, name: '环境好'},
  94 + {id: 2, name: '菜品有特色'},
  95 + {id: 3, name: '超大包间'},
  96 + ],
  97 + listMoreCount: 0,
  98 + hasSearchLimit: false,
  99 + hasGetPos: false,
  100 + },
  101 + hasClickMoveToLocation: false,//点击回到我的位置
  102 + hasSellerConcat: hasSellerConcat,
  103 + transverseViewHeight: transverseViewHeight,//横向滚动高度,苹果要比安卓多20
  104 + //qqmapsdk:null,
  105 + sellers: [],
  106 + sellersIds: [],
  107 + sellersNow: [],//本次视图内商户
  108 + searchAddrTop: 50,
  109 + user: {
  110 + latitude: def_latitude,
  111 + longitude: def_longitude,
  112 + },
  113 + /**
  114 + * 生命周期函数--监听页面加载
  115 + */
  116 + hasOnLoad: false,
  117 + hasGetLocation: false,//定位信息
  118 + hasAppHide: false,//app切至后台
  119 + param: {},
  120 + onLoad: async function (options) {
  121 + this.reportTime = new Date()
244 122
245 - /**  
246 - * 用户点击右上角分享  
247 - */  
248 - onShareAppMessage: function () {  
249 - return{  
250 - title:'请客订包间,就上周到安排'  
251 - }  
252 - },  
253 - onpos(e){  
254 - console.log('onpos',e);  
255 - let res=e.detail;  
256 - if(!res.latitude) return this.timeoutGetMarkers();  
257 - this.hasGetLocation=true;  
258 - this.sellersIds=[]  
259 - this.sellers=[]  
260 - let map = this.data.map;  
261 - map.latitude = res.latitude;  
262 - map.longitude = res.longitude;  
263 - map.scale=mapScale;  
264 - this.user.latitude = res.latitude;  
265 - this.user.longitude = res.longitude;  
266 - map.height = this.systemInfo.windowHeight-this.transverseViewHeight  
267 - let sdobj={  
268 - map: map,  
269 - hasSuggestion:false,  
270 - }  
271 - if(!this.hasSellerConcat){  
272 - sdobj.markers=[]  
273 - }  
274 - this.setData(sdobj)  
275 - this.timeoutGetMarkers()  
276 - /*  
277 - if(this.mapCtx){  
278 - //this.mapCtx.moveToLocation();  
279 - this.mapCtx.getRegion({  
280 - success:(res)=>{  
281 - console.log('onpos.getRegion',res)  
282 - if(this.mapData.region.southwest.latitude) {  
283 - this.mapData.region = res  
284 - this.timeoutGetMarkers() 123 + this.hasOnLoad = true;
  124 + // this.qqmapsdk=new QQMapWX({
  125 + // key: 'SDEBZ-I74W4-QLGUX-XXYXU-HIR23-3QFBJ'
  126 + // });
  127 + this.setData({
  128 + multiArray: [['全部菜系'].concat(await DA.getCates())]
  129 + })
  130 + mta.Page.init({
  131 + "appID": "500667280",
  132 + "eventID": "500667287",
  133 + "statPullDownFresh": true,
  134 + "statShareApp": true,
  135 + "statReachBottom": true,
  136 + "lauchOpts": options, //渠道分析
  137 + });
  138 + PubSub.on(
  139 + 'searchParam',
  140 + data => {
  141 + console.log('searchParam.msg', data)
  142 + if (data.fun == 'tagsChange') {
  143 + this.tagsChange(data.e);
  144 + }
  145 + if (data.fun == 'caixiActive') {
  146 + this.caixiActive(data.e);
  147 + }
  148 + if (data.fun == 'setSuggestion') {
  149 + this.setSuggestion(data.suggestion);
  150 + }
  151 + if (data.fun == 'moveToLocation') {
  152 + this.moveToLocation();
  153 + }
  154 + if (data.fun == 'filterEvent') {
  155 + this.filterEvent(data.e)
  156 + }
  157 + }
  158 + )
  159 + PubSub.on(
  160 + 'appHide',
  161 + data => {
  162 + console.log('appHide');
  163 + let pages = getCurrentPages();
  164 + if (pages.length == 1) {//用户停留在首页
  165 + this.hasGetLocation = false
  166 + this.hasClickMoveToLocation = false
  167 + this.hasAppHide = true
  168 + }
285 } 169 }
  170 + )
  171 + reddot.init()
  172 + },
  173 +
  174 + /**
  175 + * 生命周期函数--监听页面初次渲染完成
  176 + */
  177 + mapCtx: null,
  178 + mapData: {
  179 + lat: '',
  180 + lng: '',
  181 + latitude: 0,
  182 + longitude: 0,
  183 + scale: 18,
  184 + hasRegionchange: false,
  185 + region: {
  186 + southwest: {},
  187 + northeast: {},
286 }, 188 },
287 - })  
288 - }  
289 - */  
290 - },  
291 - regionchange(e){  
292 - if(e.type!='end') return;  
293 - console.log('regionchange', e)  
294 - if(typeof this.mapCtx=='undefined' || !this.mapCtx) return;  
295 - this.getClassNameFlag=true;  
296 - this.mapCtx.getScale({  
297 - success: (res) => {  
298 - this.mapData.scale = res.scale;  
299 - console.log('regionchange.getScale', res, this.data.map.scale)  
300 }, 189 },
301 - })  
302 - this.mapCtx.getCenterLocation({  
303 - success:(res)=>{  
304 - console.log('regionchange.getCenterLocation',res)  
305 - this.mapData.latitude=res.latitude;  
306 - this.mapData.longitude=res.longitude;  
307 - if(this.mapData.lat=='' && res.latitude.toString().length>6 && res.longitude.toString().length>6){  
308 - this.mapData.lat=res.latitude;  
309 - this.mapData.lng=res.longitude;  
310 - }  
311 - },  
312 - });  
313 - this.mapCtx.getRegion({  
314 - success:(res)=>{  
315 - console.log('regionchange.getRegion',res.southwest.latitude,this.mapData.region.southwest.latitude,res)  
316 - this.hasClickMoveToLocation=false  
317 - if(res.southwest.latitude) {  
318 - this.mapData.region = res  
319 - };  
320 - this.timeoutGetMarkers(); 190 + mapDataLast: null,//最后一次成功视角,防止地图视角丢失
  191 + onReady: function () {
  192 + if (wx.canIUse('reportPerformance')) {
  193 + wx.reportPerformance(2002, new Date() - this.reportTime)
  194 + }
  195 + this.mapCtx = wx.createMapContext('map')
  196 + // this.mapCtx.moveToLocation({
  197 + // success:(res)=>{
  198 + // console.log('moveToLocation',res)
  199 + // }
  200 + // })
321 }, 201 },
322 - })  
323 - },  
324 - setTimeoutGetMarkers:'',  
325 - timeoutGetMarkers(){//延时获取  
326 - if(this.setTimeoutGetMarkers){  
327 - clearTimeout(this.setTimeoutGetMarkers);  
328 - this.setTimeoutGetMarkers='';  
329 - }  
330 - this.setTimeoutGetMarkers=setTimeout(()=>{  
331 - this.getMarkers();  
332 - },300)  
333 - },  
334 - mapUpdated(e){  
335 - console.log('mapUpdated', e)  
336 - if(typeof this.mapCtx=='undefined' || !this.mapCtx) return;  
337 - this.getClassNameFlag=true;  
338 - this.mapCtx.getScale({  
339 - success:(res)=>{  
340 - this.mapData.scale=res.scale;  
341 - console.log('mapUpdated.getScale',res,this.data.map.scale) 202 + /**
  203 + * 生命周期函数--监听页面显示
  204 + */
  205 + onShow: async function (e) {
  206 + if (typeof this.getTabBar === 'function' &&
  207 + this.getTabBar()) {
  208 + this.getTabBar().setData({
  209 + selected: 0
  210 + })
  211 + }
  212 + console.log({
  213 + 'this.hasGetLocation': this.hasGetLocation,
  214 + 'this.hasOnLoad': this.hasOnLoad,
  215 + 'this.hasClickMoveToLocation': this.hasClickMoveToLocation,
  216 + 'this.data.hasSuggestion': this.data.hasSuggestion,
  217 + })
  218 + this.getClassNameFlag = true;
  219 + //this.getPos();
  220 + if (this.data.hasSuggestion) return;
  221 + if (!this.hasOnLoad && this.hasGetLocation) return;
  222 + this.hasOnLoad = false;
  223 + //导航栏自适应
  224 + let systemInfo = wx.getSystemInfoSync();
  225 + console.log('systemInfo:', systemInfo)
  226 + let reg = /ios/i;
  227 + let pt = 20;//导航状态栏上内边距
  228 + let h = 44;//导航状态栏高度
  229 + if (reg.test(systemInfo.system)) {
  230 + pt = systemInfo.statusBarHeight;
  231 + h = 44;
  232 + if (systemInfo.pixelRatio > 2) {
  233 + this.transverseViewHeight = transverseViewHeight + 26;
  234 + }
  235 + } else {
  236 + if (/xiaomi/i.test(systemInfo.brand)) {
  237 + this.transverseViewHeight = transverseViewHeight + 15;
  238 + } else {
  239 + this.transverseViewHeight = transverseViewHeight - 15;
  240 + }
  241 + pt = systemInfo.statusBarHeight;
  242 + h = 48;
  243 + }
  244 + console.log('onShow', systemInfo, systemInfo.windowHeight, systemInfo.windowHeight - this.transverseViewHeight)
  245 + this.setData({
  246 + [`map.height`]: systemInfo.windowHeight - this.transverseViewHeight,
  247 + statusBarHeight: pt,
  248 + titleBarHeight: h,
  249 + })
  250 + //this.getPos(systemInfo);
  251 + this.systemInfo = systemInfo
  252 + //this.selectComponent('#getpos').getPos();
  253 + if (!this.hasClickMoveToLocation) {
  254 + //this.getMarkers();
  255 + //this.timeoutGetMarkers();
  256 + }
  257 +
342 }, 258 },
343 - })  
344 - this.mapCtx.getCenterLocation({  
345 - success:(res)=>{  
346 - console.log('mapUpdated.getCenterLocation',res)  
347 - this.mapData.latitude=res.latitude;  
348 - this.mapData.longitude=res.longitude;  
349 - if(this.mapData.lat=='' && res.latitude.toString().length>6 && res.longitude.toString().length>6){  
350 - this.mapData.lat=res.latitude;  
351 - this.mapData.lng=res.longitude;  
352 - }  
353 - },  
354 - });  
355 - this.mapCtx.getRegion({  
356 - success:(res)=>{  
357 - if(this.mapData.region.southwest.latitude=='' || !res.southwest.latitude) return;  
358 - console.log('mapUpdated.getRegion',[res.southwest.latitude,this.mapData.region.southwest.latitude])  
359 - this.mapData.region=res  
360 - //this.timeoutGetMarkers(); 259 +
  260 + /**
  261 + * 生命周期函数--监听页面隐藏
  262 + */
  263 + onHide: function (e) {
  264 + util.elog(null, '离开地图页')
361 }, 265 },
362 - })  
363 - this.setData({  
364 - hasBoost:true,  
365 - })  
366 - },  
367 - hasMarkertap:false,  
368 - markertap(e,flag=true){  
369 - if(e.markerId=='location' || e.markerId=='locationMe')return;  
370 - this.hasMarkertap=false  
371 - let markers=this.data.markers;  
372 - console.log('markertap',e)  
373 - this.activeSellerID=e.markerId  
374 - let bl=1.2;  
375 - let current=0,hasCurrent=true;  
376 - markers.forEach((m,i)=>{  
377 - m.iconPath=m.iconPath.replace('/cates-active/','/cates/')  
378 - m.zIndex=m.zIndexBak  
379 - if(m.width==20*bl){  
380 - m.width=20;  
381 - m.height=25;  
382 - }  
383 - if(m.width==12){  
384 - m.width=8;  
385 - m.height=8;  
386 - }  
387 - if(m.callout){  
388 - m.callout.borderColor= '#cccccc';  
389 - m.callout.bgColor= '#fefefe';  
390 - m.callout.color= '#353535';  
391 - m.callout.display=m.calloutDisplay;  
392 - }  
393 - if(m.id==e.markerId){  
394 - m.iconPath=m.iconPath.replace('/cates/','/cates-active/')  
395 - if(m.width==20){  
396 - m.width=20*bl;  
397 - m.height=25*bl;  
398 - }else{  
399 - m.width=12;  
400 - m.height=12;  
401 - }  
402 - m.zIndex=9999  
403 - if(m.callout){  
404 - m.callout.borderColor= '#F05522';  
405 - m.callout.bgColor= '#F05522';  
406 - m.callout.color= '#fefefe';  
407 - m.callout.display='ALWAYS';  
408 - }  
409 - hasCurrent=false  
410 - if("markertap"==e.type){  
411 - util.elog({id:m.seller.id,sellername:m.seller.sellername},'点击地图区域的店铺标记')  
412 - }  
413 266
414 - }  
415 - if(m.display!='none' && hasCurrent){  
416 - current++  
417 - }  
418 - })  
419 - let obj={  
420 - markers:markers,  
421 - };  
422 - console.log('markertap::current,',current);  
423 - if(flag){  
424 - //obj.scrollIntoView='seller-'+e.markerId;  
425 - obj.current=current;  
426 - //this.hasMarkertap=true;  
427 - }  
428 - this.setData(obj)  
429 - },  
430 - hasInRegionFlag:false,  
431 - hasInRegion(){//定位是否在地图视野内  
432 - let map = this.mapData;  
433 - if(!map.region.northeast.latitude || !map.region.northeast.longitude) {//未获得视野  
434 - if(this.mapDataLast){  
435 - this.mapData=this.mapDataLast  
436 - }  
437 - return {flag:false,msg:'未获得视野',map:map,mapDataLast:this.mapDataLast};  
438 - }  
439 - if(!map.region.southwest.latitude || !map.region.southwest.longitude) {//未获得视野  
440 - if(this.mapDataLast){  
441 - this.mapData=this.mapDataLast  
442 - }  
443 - return {flag:false,msg:'未获得视野',map:map,mapDataLast:this.mapDataLast};  
444 - }  
445 - this.mapDataLast=JSON.parse(JSON.stringify(this.mapData));  
446 - if(this.hasInRegionFlag) return {flag:true,msg:'二次获取'};  
447 - if(!this.user.latitude) return {flag:false,msg:'用户无定位'};//用户无定位  
448 - //if(this.user.latitude==def_latitude && this.user.longitude==def_longitude) return false;//默认位置  
449 - ///判断定位 首次 进入视野  
450 - if((this.user.latitude>map.region.southwest.latitude  
451 - && this.user.longitude>map.region.southwest.longitude  
452 - && this.user.latitude<map.region.northeast.latitude  
453 - && this.user.longitude<map.region.northeast.longitude) || this.data.hasSuggestion){  
454 - this.hasInRegionFlag=true;  
455 - return {flag:true,msg:'用户首次或搜索地标'};  
456 - }else{  
457 - //视野不匹配  
458 - this.mapCtx.getRegion({  
459 - success:(res)=>{  
460 - console.log('hasInRegion.getRegion',res)  
461 - this.mapData.region=res  
462 - },  
463 - })  
464 - }  
465 - return {flag:false,msg:'视野不匹配'};  
466 - },  
467 - async getMarkers(){  
468 - let cmap=this.data.map;  
469 - let map = this.mapData;  
470 - //console.log('getMarkers',map.region);  
471 - let region=this.hasInRegion();  
472 - console.log('this.hasInRegion',region)  
473 - if(!region.flag) {  
474 - return setTimeout(()=>{  
475 - this.getMarkers();  
476 - },300)  
477 - }  
478 - let markers = [];  
479 - let param={  
480 - lat: this.user.latitude==def_latitude?'':this.user.latitude,  
481 - lng: this.user.longitude==def_longitude?'':this.user.longitude,  
482 - offset: 0,  
483 - rows: 50,  
484 - distance: 100000,  
485 - map:JSON.stringify({...this.mapData.region,scale:this.mapData.scale>=19?20:this.mapData.scale})  
486 - }  
487 - if(this.data.multiIndex[0]>0){  
488 - param.cuisine=await DA.getCatesID(this.data.multiIndex[0]-1);  
489 - }  
490 - let tags=[];  
491 - this.data.tags.forEach(t=>{  
492 - if(t.active){  
493 - tags.push(t.id)  
494 - }  
495 - })  
496 - if(tags.length>0){  
497 - param.tags=tags;  
498 - }  
499 - if(param.lat){  
500 - param.centre_pos=`${param.lat},${param.lng}`  
501 - }else{  
502 - let lat=(this.mapData.region.southwest.latitude+this.mapData.region.northeast.latitude)/2  
503 - let lng=(this.mapData.region.southwest.longitude+this.mapData.region.northeast.longitude)/2  
504 - param.centre_pos=`${lat},${lng}`  
505 - }  
506 - if(this.data.hasSuggestion){  
507 - param.centre_pos=`${this.data.suggestion.latitude},${this.data.suggestion.longitude}`  
508 - }  
509 - if(this.findSellerData){  
510 - param=Object.assign(param,this.findSellerData.paramObj)  
511 - }  
512 - if(this.filterParams){//人均过滤  
513 - let filterParams=this.filterParams.min+','+this.filterParams.max  
514 - if(this.filterParams.min==this.filterParams.max && this.filterParams.min==300){  
515 - filterParams=this.filterParams.min+','+parseInt(new Date()/1000)  
516 - }  
517 - param.average=filterParams  
518 - }  
519 - //this.selectComponent('#list').getList(param);  
520 - this.param=param;  
521 - let now_sid=[];  
522 - App.Customer.SellerList(param).then(async res => {  
523 - //this.mapData.region.southwest.latitude='';  
524 - if (res.ret == 200) {  
525 - let sellersList=res.data.list;  
526 - let sellersLength=sellersList.length;  
527 - sellersList.forEach((seller,si) => {  
528 - now_sid.push(seller.id);  
529 - let hasMark=false;  
530 - if(this.sellersIds._indexOf(seller.id)<0){  
531 - // if(seller.distance || seller.distance===0){  
532 - // seller.distance=parseInt(seller.distance);  
533 - // if(seller.distance>1000){  
534 - // seller.distance=(seller.distance/1000).toFixed(2)+'km'  
535 - // }else{  
536 - // seller.distance+='m';  
537 - // }  
538 - // }  
539 - if(this.hasSellerConcat){  
540 - this.sellersIds.push(seller.id); 267 + /**
  268 + * 生命周期函数--监听页面卸载
  269 + */
  270 + onUnload: function () {
  271 + PubSub.off('searchParam')
  272 + PubSub.off('appHide')
  273 + },
  274 +
  275 + /**
  276 + * 页面相关事件处理函数--监听用户下拉动作
  277 + */
  278 + onPullDownRefresh: function () {
  279 +
  280 + },
  281 +
  282 + /**
  283 + * 页面上拉触底事件的处理函数
  284 + */
  285 + onReachBottom: function () {
  286 +
  287 + },
  288 +
  289 + /**
  290 + * 用户点击右上角分享
  291 + */
  292 + onShareAppMessage: function () {
  293 + return {
  294 + title: '请客订包间,就上周到安排'
  295 + }
  296 + },
  297 + onpos(e) {
  298 + console.log('onpos', e);
  299 + let res = e.detail;
  300 + if (!res.latitude) return this.timeoutGetMarkers();
  301 + this.hasGetLocation = true;
  302 + this.sellersIds = []
  303 + this.sellers = []
  304 + let map = this.data.map;
  305 + map.latitude = res.latitude;
  306 + map.longitude = res.longitude;
  307 + map.scale = mapScale;
  308 + this.user.latitude = res.latitude;
  309 + this.user.longitude = res.longitude;
  310 + map.height = this.systemInfo.windowHeight - this.transverseViewHeight
  311 + let sdobj = {
  312 + map: map,
  313 + hasSuggestion: false,
  314 + }
  315 + if (!this.hasSellerConcat) {
  316 + sdobj.markers = []
  317 + }
  318 + this.setData(sdobj)
  319 + this.timeoutGetMarkers()
  320 + /*
  321 + if(this.mapCtx){
  322 + //this.mapCtx.moveToLocation();
  323 + this.mapCtx.getRegion({
  324 + success:(res)=>{
  325 + console.log('onpos.getRegion',res)
  326 + if(this.mapData.region.southwest.latitude) {
  327 + this.mapData.region = res
  328 + this.timeoutGetMarkers()
  329 + }
  330 + },
  331 + })
  332 + }
  333 + */
  334 + },
  335 + regionchange(e) {
  336 + if (e.type != 'end') return;
  337 + console.log('regionchange', e)
  338 + if (typeof this.mapCtx == 'undefined' || !this.mapCtx) return;
  339 + this.getClassNameFlag = true;
  340 + this.mapCtx.getScale({
  341 + success: (res) => {
  342 + this.mapData.scale = res.scale;
  343 + console.log('regionchange.getScale', res, this.data.map.scale)
  344 + },
  345 + })
  346 + this.mapCtx.getCenterLocation({
  347 + success: (res) => {
  348 + console.log('regionchange.getCenterLocation', res)
  349 + this.mapData.latitude = res.latitude;
  350 + this.mapData.longitude = res.longitude;
  351 + if (this.mapData.lat == '' && res.latitude.toString().length > 6 && res.longitude.toString().length > 6) {
  352 + this.mapData.lat = res.latitude;
  353 + this.mapData.lng = res.longitude;
541 } 354 }
542 - hasMark=true; 355 + },
  356 + });
  357 + this.mapCtx.getRegion({
  358 + success: (res) => {
  359 + console.log('regionchange.getRegion', res.southwest.latitude, this.mapData.region.southwest.latitude, res)
  360 + this.hasClickMoveToLocation = false
  361 + if (res.southwest.latitude) {
  362 + this.mapData.region = res
  363 + }
  364 + ;
  365 + this.timeoutGetMarkers();
  366 + },
  367 + })
  368 + },
  369 + setTimeoutGetMarkers: '',
  370 + timeoutGetMarkers() {//延时获取
  371 + if (this.setTimeoutGetMarkers) {
  372 + clearTimeout(this.setTimeoutGetMarkers);
  373 + this.setTimeoutGetMarkers = '';
  374 + }
  375 + this.setTimeoutGetMarkers = setTimeout(() => {
  376 + this.getMarkers();
  377 + }, 300)
  378 + },
  379 + mapUpdated(e) {
  380 + console.log('mapUpdated', e)
  381 + if (typeof this.mapCtx == 'undefined' || !this.mapCtx) return;
  382 + this.getClassNameFlag = true;
  383 + this.mapCtx.getScale({
  384 + success: (res) => {
  385 + this.mapData.scale = res.scale;
  386 + console.log('mapUpdated.getScale', res, this.data.map.scale)
  387 + },
  388 + })
  389 + this.mapCtx.getCenterLocation({
  390 + success: (res) => {
  391 + console.log('mapUpdated.getCenterLocation', res)
  392 + this.mapData.latitude = res.latitude;
  393 + this.mapData.longitude = res.longitude;
  394 + if (this.mapData.lat == '' && res.latitude.toString().length > 6 && res.longitude.toString().length > 6) {
  395 + this.mapData.lat = res.latitude;
  396 + this.mapData.lng = res.longitude;
  397 + }
  398 + },
  399 + });
  400 + this.mapCtx.getRegion({
  401 + success: (res) => {
  402 + if (this.mapData.region.southwest.latitude == '' || !res.southwest.latitude) return;
  403 + console.log('mapUpdated.getRegion', [res.southwest.latitude, this.mapData.region.southwest.latitude])
  404 + this.mapData.region = res
  405 + //this.timeoutGetMarkers();
  406 + },
  407 + })
  408 + this.setData({
  409 + hasBoost: true,
  410 + })
  411 + },
  412 + hasMarkertap: false,
  413 + markertap(e, flag = true) {
  414 + if (e.markerId == 'location' || e.markerId == 'locationMe') return;
  415 + this.hasMarkertap = false
  416 + let markers = this.data.markers;
  417 + console.log('markertap', e)
  418 + this.activeSellerID = e.markerId
  419 + let bl = 1.2;
  420 + let current = 0, hasCurrent = true;
  421 + markers.forEach((m, i) => {
  422 + m.iconPath = m.iconPath.replace('/cates-active/', '/cates/')
  423 + m.zIndex = m.zIndexBak
  424 + if (m.width == 20 * bl) {
  425 + m.width = 20;
  426 + m.height = 25;
  427 + }
  428 + if (m.width == 12) {
  429 + m.width = 8;
  430 + m.height = 8;
543 } 431 }
544 - if(hasMark){  
545 - if(this.findSellerData){  
546 - seller.findSellerParamObj=this.findSellerData.paramObj 432 + if (m.callout) {
  433 + m.callout.borderColor = '#cccccc';
  434 + m.callout.bgColor = '#fefefe';
  435 + m.callout.color = '#353535';
  436 + m.callout.display = m.calloutDisplay;
  437 + }
  438 + if (m.id == e.markerId) {
  439 + m.iconPath = m.iconPath.replace('/cates/', '/cates-active/')
  440 + if (m.width == 20) {
  441 + m.width = 20 * bl;
  442 + m.height = 25 * bl;
  443 + } else {
  444 + m.width = 12;
  445 + m.height = 12;
547 } 446 }
548 - let marker={  
549 - id: seller.id,  
550 - iconPath: "http://nosqn.colorcun.com/custom/lite-online/cates/circle1x5.png"+cates_version,  
551 - latitude: seller.lat,  
552 - longitude: seller.long,  
553 - width: 8,  
554 - height: 8,  
555 - //title:seller.seller_name,  
556 - zIndex:sellersLength-si,  
557 - zIndexBak:sellersLength-si,  
558 - seller:seller,  
559 - };  
560 - marker.callout={  
561 - content: ' ' + seller.sellername + ' ',  
562 - color: '#353535',  
563 - fontSize: 12,  
564 - borderWidth: 1,  
565 - borderColor: '#cccccc',  
566 - borderRadius: 50,  
567 - bgColor: '#fefefe',  
568 - padding: 5,  
569 - textAlign: 'left',  
570 - display:'BYCLICK',  
571 - };  
572 - marker.calloutDisplay='BYCLICK';  
573 - if(seller.mode.length>0){  
574 - seller.mode.forEach(x=>{  
575 - if(x.id==1){//大图标  
576 - marker.iconPath="http://nosqn.colorcun.com/custom/lite-online/cates/其他菜品.png";  
577 - if(seller.cate.length>0){  
578 - marker.iconPath=seller.cate[0].icon  
579 - }  
580 - marker.iconPath=marker.iconPath.replace(/\/cates\/(.*)\.png/,function ($0,$1) {  
581 - return '/cates/'+encodeURI($1)+'.png'  
582 - })  
583 - marker.iconPath+=cates_version  
584 - marker.width=20;  
585 - marker.height=25; 447 + m.zIndex = 9999
  448 + if (m.callout) {
  449 + m.callout.borderColor = '#F05522';
  450 + m.callout.bgColor = '#F05522';
  451 + m.callout.color = '#fefefe';
  452 + m.callout.display = 'ALWAYS';
  453 + }
  454 + hasCurrent = false
  455 + if ("markertap" == e.type) {
  456 + util.elog({id: m.seller.id, sellername: m.seller.sellername}, '点击地图区域的店铺标记')
  457 + }
  458 +
  459 + }
  460 + if (m.display != 'none' && hasCurrent) {
  461 + current++
  462 + }
  463 + })
  464 + let obj = {
  465 + markers: markers,
  466 + };
  467 + console.log('markertap::current,', current);
  468 + if (flag) {
  469 + //obj.scrollIntoView='seller-'+e.markerId;
  470 + obj.current = current;
  471 + //this.hasMarkertap=true;
  472 + }
  473 + this.setData(obj)
  474 + },
  475 + hasInRegionFlag: false,
  476 + hasInRegion() {//定位是否在地图视野内
  477 + let map = this.mapData;
  478 + if (!map.region.northeast.latitude || !map.region.northeast.longitude) {//未获得视野
  479 + if (this.mapDataLast) {
  480 + this.mapData = this.mapDataLast
  481 + }
  482 + return {flag: false, msg: '未获得视野', map: map, mapDataLast: this.mapDataLast};
  483 + }
  484 + if (!map.region.southwest.latitude || !map.region.southwest.longitude) {//未获得视野
  485 + if (this.mapDataLast) {
  486 + this.mapData = this.mapDataLast
  487 + }
  488 + return {flag: false, msg: '未获得视野', map: map, mapDataLast: this.mapDataLast};
  489 + }
  490 + this.mapDataLast = JSON.parse(JSON.stringify(this.mapData));
  491 + if (this.hasInRegionFlag) return {flag: true, msg: '二次获取'};
  492 + if (!this.user.latitude) return {flag: false, msg: '用户无定位'};//用户无定位
  493 + //if(this.user.latitude==def_latitude && this.user.longitude==def_longitude) return false;//默认位置
  494 + ///判断定位 首次 进入视野
  495 + if ((this.user.latitude > map.region.southwest.latitude
  496 + && this.user.longitude > map.region.southwest.longitude
  497 + && this.user.latitude < map.region.northeast.latitude
  498 + && this.user.longitude < map.region.northeast.longitude) || this.data.hasSuggestion) {
  499 + this.hasInRegionFlag = true;
  500 + return {flag: true, msg: '用户首次或搜索地标'};
  501 + } else {
  502 + //视野不匹配
  503 + this.mapCtx.getRegion({
  504 + success: (res) => {
  505 + console.log('hasInRegion.getRegion', res)
  506 + this.mapData.region = res
  507 + },
  508 + })
  509 + }
  510 + return {flag: false, msg: '视野不匹配'};
  511 + },
  512 + async getMarkers() {
  513 + let cmap = this.data.map;
  514 + let map = this.mapData;
  515 + //console.log('getMarkers',map.region);
  516 + let region = this.hasInRegion();
  517 + console.log('this.hasInRegion', region)
  518 + if (!region.flag) {
  519 + return setTimeout(() => {
  520 + this.getMarkers();
  521 + }, 300)
  522 + }
  523 + let markers = [];
  524 + let param = {
  525 + lat: this.user.latitude == def_latitude ? '' : this.user.latitude,
  526 + lng: this.user.longitude == def_longitude ? '' : this.user.longitude,
  527 + offset: 0,
  528 + rows: 50,
  529 + distance: 100000,
  530 + map: JSON.stringify({...this.mapData.region, scale: this.mapData.scale >= 19 ? 20 : this.mapData.scale})
  531 + }
  532 + if (this.data.multiIndex[0] > 0) {
  533 + param.cuisine = await DA.getCatesID(this.data.multiIndex[0] - 1);
  534 + }
  535 + let tags = [];
  536 + this.data.tags.forEach(t => {
  537 + if (t.active) {
  538 + tags.push(t.id)
  539 + }
  540 + })
  541 + if (tags.length > 0) {
  542 + param.tags = tags;
  543 + }
  544 + if (param.lat) {
  545 + param.centre_pos = `${param.lat},${param.lng}`
  546 + } else {
  547 + let lat = (this.mapData.region.southwest.latitude + this.mapData.region.northeast.latitude) / 2
  548 + let lng = (this.mapData.region.southwest.longitude + this.mapData.region.northeast.longitude) / 2
  549 + param.centre_pos = `${lat},${lng}`
  550 + }
  551 + if (this.data.hasSuggestion) {
  552 + param.centre_pos = `${this.data.suggestion.latitude},${this.data.suggestion.longitude}`
  553 + }
  554 + if (this.findSellerData) {
  555 + param = Object.assign(param, this.findSellerData.paramObj)
  556 + }
  557 + if (this.filterParams) {//人均过滤
  558 + let filterParams = this.filterParams.min + ',' + this.filterParams.max
  559 + if (this.filterParams.min == this.filterParams.max && this.filterParams.min == 300) {
  560 + filterParams = this.filterParams.min + ',' + parseInt(new Date() / 1000)
  561 + }
  562 + param.average = filterParams
  563 + }
  564 + //this.selectComponent('#list').getList(param);
  565 + this.param = param;
  566 + let now_sid = [];
  567 + App.Customer.SellerList(param).then(async res => {
  568 + //this.mapData.region.southwest.latitude='';
  569 + if (res.ret == 200) {
  570 + let sellersList = res.data.list;
  571 + let sellersLength = sellersList.length;
  572 + sellersList.forEach((seller, si) => {
  573 + now_sid.push(seller.id);
  574 + let hasMark = false;
  575 + if (this.sellersIds._indexOf(seller.id) < 0) {
  576 + // if(seller.distance || seller.distance===0){
  577 + // seller.distance=parseInt(seller.distance);
  578 + // if(seller.distance>1000){
  579 + // seller.distance=(seller.distance/1000).toFixed(2)+'km'
  580 + // }else{
  581 + // seller.distance+='m';
  582 + // }
  583 + // }
  584 + if (this.hasSellerConcat) {
  585 + this.sellersIds.push(seller.id);
586 } 586 }
587 - if(x.id==2){//商家名  
588 - marker.callout.display='ALWAYS';  
589 - marker.calloutDisplay='ALWAYS'; 587 + hasMark = true;
  588 + }
  589 + if (hasMark) {
  590 + if (this.findSellerData) {
  591 + seller.findSellerParamObj = this.findSellerData.paramObj
  592 + }
  593 + let marker = {
  594 + id: seller.id,
  595 + iconPath: "http://nosqn.colorcun.com/custom/lite-online/cates/circle1x5.png" + cates_version,
  596 + latitude: seller.lat,
  597 + longitude: seller.long,
  598 + width: 8,
  599 + height: 8,
  600 + //title:seller.seller_name,
  601 + zIndex: sellersLength - si,
  602 + zIndexBak: sellersLength - si,
  603 + seller: seller,
  604 + };
  605 + marker.callout = {
  606 + content: ' ' + seller.sellername + ' ',
  607 + color: '#353535',
  608 + fontSize: 12,
  609 + borderWidth: 1,
  610 + borderColor: '#cccccc',
  611 + borderRadius: 50,
  612 + bgColor: '#fefefe',
  613 + padding: 5,
  614 + textAlign: 'left',
  615 + display: 'BYCLICK',
  616 + };
  617 + marker.calloutDisplay = 'BYCLICK';
  618 + if (seller.mode.length > 0) {
  619 + seller.mode.forEach(x => {
  620 + if (x.id == 1) {//大图标
  621 + marker.iconPath = "http://nosqn.colorcun.com/custom/lite-online/cates/其他菜品.png";
  622 + if (seller.cate.length > 0) {
  623 + marker.iconPath = seller.cate[0].icon
  624 + }
  625 + marker.iconPath = marker.iconPath.replace(/\/cates\/(.*)\.png/, function ($0, $1) {
  626 + return '/cates/' + encodeURI($1) + '.png'
  627 + })
  628 + marker.iconPath += cates_version
  629 + marker.width = 20;
  630 + marker.height = 25;
  631 + }
  632 + if (x.id == 2) {//商家名
  633 + marker.callout.display = 'ALWAYS';
  634 + marker.calloutDisplay = 'ALWAYS';
  635 + }
  636 + })
590 } 637 }
591 - }) 638 + markers.push(marker)
  639 + }
  640 + })
  641 + } else {
  642 + console.log('接口报错了');
  643 + }
  644 + this.sellersNow = now_sid;
  645 + let obj = {
  646 + hasSellers: now_sid.length > 0,
  647 + hasGetSellersEnd: true,
  648 + hasSearchLimit: (tags.length > 0 || this.data.multiIndex[0] > 0) || this.findSellerData,
  649 + listMoreCount: res.data.flag
  650 + }
  651 + if (this.hasSellerConcat) {
  652 + obj.markers = this.data.markers.concat(markers);
  653 + } else {
  654 + obj.markers = markers;
  655 + }
  656 + obj.markers.forEach(mk => {
  657 + //mk.display='none';
  658 + if (now_sid._indexOf(mk.id) > -1) {
  659 + mk.display = '';
592 } 660 }
593 - markers.push(marker) 661 + })
  662 + obj.markers = await this.setLocationMarker(obj.markers);
  663 + this.setData(obj)
  664 + if (now_sid.length > 0) {
  665 + setTimeout(() => {
  666 + this.markertap({
  667 + markerId: now_sid._indexOf(this.activeSellerID) < 0 ? now_sid[0] : this.activeSellerID
  668 + }, true)
  669 + }, 100)
594 } 670 }
  671 + this.IsSetActivity();
595 }) 672 })
596 - } else {  
597 - console.log('接口报错了');  
598 - }  
599 - this.sellersNow=now_sid;  
600 - let obj={  
601 - hasSellers:now_sid.length>0,  
602 - hasGetSellersEnd:true,  
603 - hasSearchLimit:(tags.length>0 || this.data.multiIndex[0]>0) || this.findSellerData,  
604 - listMoreCount:res.data.flag  
605 - }  
606 - if(this.hasSellerConcat){  
607 - obj.markers=this.data.markers.concat(markers);  
608 - }else{  
609 - obj.markers=markers;  
610 - }  
611 - obj.markers.forEach(mk=>{  
612 - //mk.display='none';  
613 - if(now_sid._indexOf(mk.id)>-1){  
614 - mk.display='';  
615 - }  
616 - })  
617 - obj.markers=await this.setLocationMarker(obj.markers);  
618 - this.setData(obj)  
619 - if(now_sid.length>0) {  
620 - setTimeout(() => {  
621 - this.markertap({  
622 - markerId: now_sid._indexOf(this.activeSellerID) < 0?now_sid[0]:this.activeSellerID  
623 - }, true)  
624 - }, 100)  
625 - }  
626 - this.IsSetActivity();  
627 - })  
628 673
629 - },  
630 - //seller box 通知  
631 - sellerBoxEvent(e){  
632 - wx.showTabBar();  
633 - },  
634 - moveToLocation(){  
635 - this.hasClickMoveToLocation=true  
636 - if(this.user.latitude==def_latitude && this.user.longitude==def_longitude){  
637 - this.selectComponent('#getpos').getPos(true);  
638 - return;  
639 - }  
640 - this.sellersIds=[]  
641 - this.sellers=[]  
642 - let map = this.data.map;  
643 - map.latitude = this.user.latitude;  
644 - map.longitude = this.user.longitude;  
645 - map.scale=mapScale;  
646 - map.height = this.systemInfo.windowHeight-this.transverseViewHeight  
647 - let sdobj={  
648 - map: map,  
649 - hasSuggestion:false,  
650 - hasGetSellersEnd:false,  
651 - }  
652 - if(!this.hasSellerConcat){  
653 - sdobj.markers=[]  
654 - }  
655 - this.setData(sdobj)  
656 - this.mapCtx.moveToLocation({  
657 - success:(res)=>{  
658 - console.log('moveToLocation',res)  
659 - }  
660 - })  
661 - },  
662 - bindMultiPickerChange(e){  
663 - console.log(e);  
664 - let val=util.val(e);  
665 - this.setData({  
666 - multiIndex:val  
667 - })  
668 - this.hasSellerConcat=hasSellerConcat;  
669 - this.sellersIds=[];  
670 - if(val[0]>0){  
671 - this.hasSellerConcat=false;  
672 - }else{  
673 - if(!this.hasSellerConcat){ 674 + },
  675 + //seller box 通知
  676 + sellerBoxEvent(e) {
  677 + wx.showTabBar();
  678 + },
  679 + moveToLocation() {
  680 + this.hasClickMoveToLocation = true
  681 + if (this.user.latitude == def_latitude && this.user.longitude == def_longitude) {
  682 + this.selectComponent('#getpos').getPos(true);
  683 + return;
  684 + }
  685 + this.sellersIds = []
  686 + this.sellers = []
  687 + let map = this.data.map;
  688 + map.latitude = this.user.latitude;
  689 + map.longitude = this.user.longitude;
  690 + map.scale = mapScale;
  691 + map.height = this.systemInfo.windowHeight - this.transverseViewHeight
  692 + let sdobj = {
  693 + map: map,
  694 + hasSuggestion: false,
  695 + hasGetSellersEnd: false,
  696 + }
  697 + if (!this.hasSellerConcat) {
  698 + sdobj.markers = []
  699 + }
  700 + this.setData(sdobj)
  701 + this.mapCtx.moveToLocation({
  702 + success: (res) => {
  703 + console.log('moveToLocation', res)
  704 + }
  705 + })
  706 + },
  707 + bindMultiPickerChange(e) {
  708 + console.log(e);
  709 + let val = util.val(e);
674 this.setData({ 710 this.setData({
675 - markers:[] 711 + multiIndex: val
676 }) 712 })
677 - }  
678 - }  
679 - setTimeout(()=>{this.getMarkers();},0)  
680 - },  
681 - setSuggestion(suggestion){  
682 - let map=this.data.map;  
683 - //let pos=DA.gcj02towgs84(suggestion.longitude,suggestion.latitude)  
684 - map.latitude=suggestion.latitude  
685 - map.longitude=suggestion.longitude  
686 - if(suggestion.type==-1){//平台商户  
687 - this.activeSellerID=suggestion.id  
688 - map.scale=20  
689 - }else{  
690 - map.scale=mapScale  
691 - }  
692 - this.sellersIds=[]  
693 - this.sellers=[]  
694 - let sdobj={  
695 - map: map,  
696 - hasSuggestion:true,  
697 - suggestion:suggestion,  
698 - hasGetSellersEnd:false,  
699 - }  
700 - if(!this.hasSellerConcat){  
701 - sdobj.markers=[]  
702 - }  
703 - //this.findSellerData=null//清理搜索  
704 - this.setData(sdobj)  
705 - }, 713 + this.hasSellerConcat = hasSellerConcat;
  714 + this.sellersIds = [];
  715 + if (val[0] > 0) {
  716 + this.hasSellerConcat = false;
  717 + } else {
  718 + if (!this.hasSellerConcat) {
  719 + this.setData({
  720 + markers: []
  721 + })
  722 + }
  723 + }
  724 + setTimeout(() => {
  725 + this.getMarkers();
  726 + }, 0)
  727 + },
  728 + setSuggestion(suggestion) {
  729 + let map = this.data.map;
  730 + //let pos=DA.gcj02towgs84(suggestion.longitude,suggestion.latitude)
  731 + map.latitude = suggestion.latitude
  732 + map.longitude = suggestion.longitude
  733 + if (suggestion.type == -1) {//平台商户
  734 + this.activeSellerID = suggestion.id
  735 + map.scale = 20
  736 + } else {
  737 + map.scale = mapScale
  738 + }
  739 + this.sellersIds = []
  740 + this.sellers = []
  741 + let sdobj = {
  742 + map: map,
  743 + hasSuggestion: true,
  744 + suggestion: suggestion,
  745 + hasGetSellersEnd: false,
  746 + }
  747 + if (!this.hasSellerConcat) {
  748 + sdobj.markers = []
  749 + }
  750 + //this.findSellerData=null//清理搜索
  751 + this.setData(sdobj)
  752 + },
706 753
707 - getClassNameFlag:true,  
708 - activeSellerID:'',  
709 - bindscroll(e){  
710 - if(!this.getClassNameFlag) return;  
711 - this.getClassNameFlag=false;  
712 - let w=e.detail.scrollWidth/this.sellers.length;  
713 - let i=Math.round(e.detail.scrollLeft/w);  
714 - console.log(e.detail,this.sellers,i);  
715 - if(this.activeSellerID!=this.sellers[i].id){  
716 - this.activeSellerID=this.sellers[i];  
717 - this.markertap({  
718 - markerId:this.sellers[i].id  
719 - },false)  
720 - }  
721 - let that=this;  
722 - setTimeout(function(){  
723 - that.getClassNameFlag=true;  
724 - },300)  
725 - },  
726 - bindtransition(e){  
727 - if(this.hasMarkertap){  
728 - this.hasMarkertap=false;  
729 - return;  
730 - }  
731 - let i=e.detail.current  
732 - if(typeof this.data.markers[i]=='undefined') return;  
733 - this.activeSellerID=this.data.markers[i].id  
734 - console.log('bindtransition',this.sellersNow,e.detail.current,this.sellersNow[e.detail.current],this.activeSellerID);  
735 - // this.activeSellerID=this.sellersNow[i];  
736 - // this.markertap({  
737 - // markerId:this.activeSellerID  
738 - // },false)  
739 - this.markertap({  
740 - markerId:this.activeSellerID  
741 - },false)  
742 - },  
743 - gotoDetail(e){  
744 - wx.navigateTo({  
745 - url:'/pages/reserve/detail?id='+util.attr(e,'sid')  
746 - })  
747 - util.elog({sid:util.attr(e,'sid')},'点击橱窗中的商家,进入店铺详情')  
748 - },  
749 - IsSetActivity(){  
750 - let cmap=this.data.map;  
751 - App.Customer.IsSetActivity({lat:cmap.latitude,lng:cmap.longitude,distance:50}).then(res=>{  
752 - this.setData({  
753 - hasSetActivity:res.data==1,  
754 - })  
755 - })  
756 - },  
757 - a2lshow(e){  
758 - //console.log('a2lshow',e)  
759 - let ds=this.selectComponent('#ds');  
760 - if(!ds){  
761 - return setTimeout(()=>{  
762 - this.a2lshow(e)  
763 - },500)  
764 - }  
765 - ds.setA2LHeight(e.type=='hide'?0:40);  
766 - },  
767 - async setMapRegion(){  
768 - return new Promise((success,fail)=>{  
769 - if(this.mapCtx){  
770 - this.mapCtx.getRegion({  
771 - success:(res)=>{  
772 - if(res.southwest.latitude) {  
773 - this.mapData.region = res  
774 - success()  
775 - }  
776 - },  
777 - fail:()=>{ 754 + getClassNameFlag: true,
  755 + activeSellerID: '',
  756 + bindscroll(e) {
  757 + if (!this.getClassNameFlag) return;
  758 + this.getClassNameFlag = false;
  759 + let w = e.detail.scrollWidth / this.sellers.length;
  760 + let i = Math.round(e.detail.scrollLeft / w);
  761 + console.log(e.detail, this.sellers, i);
  762 + if (this.activeSellerID != this.sellers[i].id) {
  763 + this.activeSellerID = this.sellers[i];
  764 + this.markertap({
  765 + markerId: this.sellers[i].id
  766 + }, false)
  767 + }
  768 + let that = this;
  769 + setTimeout(function () {
  770 + that.getClassNameFlag = true;
  771 + }, 300)
  772 + },
  773 + bindtransition(e) {
  774 + if (this.hasMarkertap) {
  775 + this.hasMarkertap = false;
  776 + return;
  777 + }
  778 + let i = e.detail.current
  779 + if (typeof this.data.markers[i] == 'undefined') return;
  780 + this.activeSellerID = this.data.markers[i].id
  781 + console.log('bindtransition', this.sellersNow, e.detail.current, this.sellersNow[e.detail.current], this.activeSellerID);
  782 + // this.activeSellerID=this.sellersNow[i];
  783 + // this.markertap({
  784 + // markerId:this.activeSellerID
  785 + // },false)
  786 + this.markertap({
  787 + markerId: this.activeSellerID
  788 + }, false)
  789 + },
  790 + gotoDetail(e) {
  791 + wx.navigateTo({
  792 + url: '/pages/reserve/detail?id=' + util.attr(e, 'sid')
  793 + })
  794 + util.elog({sid: util.attr(e, 'sid')}, '点击橱窗中的商家,进入店铺详情')
  795 + },
  796 + IsSetActivity() {
  797 + let cmap = this.data.map;
  798 + App.Customer.IsSetActivity({lat: cmap.latitude, lng: cmap.longitude, distance: 50}).then(res => {
  799 + this.setData({
  800 + hasSetActivity: res.data == 1,
  801 + })
  802 + })
  803 + },
  804 + a2lshow(e) {
  805 + //console.log('a2lshow',e)
  806 + let ds = this.selectComponent('#ds');
  807 + if (!ds) {
  808 + return setTimeout(() => {
  809 + this.a2lshow(e)
  810 + }, 500)
  811 + }
  812 + ds.setA2LHeight(e.type == 'hide' ? 0 : 40);
  813 + },
  814 + async setMapRegion() {
  815 + return new Promise((success, fail) => {
  816 + if (this.mapCtx) {
  817 + this.mapCtx.getRegion({
  818 + success: (res) => {
  819 + if (res.southwest.latitude) {
  820 + this.mapData.region = res
  821 + success()
  822 + }
  823 + },
  824 + fail: () => {
  825 + fail()
  826 + }
  827 + })
  828 + } else {
778 fail() 829 fail()
779 } 830 }
780 }) 831 })
781 - }else{  
782 - fail()  
783 - }  
784 - })  
785 - },  
786 - async setLocationMarker(markers){  
787 - try{  
788 - await this.setMapRegion();  
789 - }catch (e){  
790 - this.timeoutGetMarkers()  
791 - return []  
792 - } 832 + },
  833 + async setLocationMarker(markers) {
  834 + try {
  835 + await this.setMapRegion();
  836 + } catch (e) {
  837 + this.timeoutGetMarkers()
  838 + return []
  839 + }
793 840
794 - let map = this.mapData;  
795 - let mks=[]  
796 - let matchPosNum=1  
797 - if(markers.length>0){  
798 - markers.forEach(mk=>{  
799 - if(mk.id!='location' && mk.id!='locationMe'  
800 - && mk.latitude>map.region.southwest.latitude  
801 - && mk.longitude>map.region.southwest.longitude  
802 - && mk.latitude<map.region.northeast.latitude  
803 - && mk.longitude<map.region.northeast.longitude){  
804 - mks.push(mk);  
805 - }  
806 - })  
807 - }  
808 - if(mks.length-markers.length<0){  
809 - this.timeoutGetMarkers()  
810 - return []  
811 - } 841 + let map = this.mapData;
  842 + let mks = []
  843 + let matchPosNum = 1
  844 + if (markers.length > 0) {
  845 + markers.forEach(mk => {
  846 + if (mk.id != 'location' && mk.id != 'locationMe'
  847 + && mk.latitude > map.region.southwest.latitude
  848 + && mk.longitude > map.region.southwest.longitude
  849 + && mk.latitude < map.region.northeast.latitude
  850 + && mk.longitude < map.region.northeast.longitude) {
  851 + mks.push(mk);
  852 + }
  853 + })
  854 + }
  855 + if (mks.length - markers.length < 0) {
  856 + this.timeoutGetMarkers()
  857 + return []
  858 + }
812 859
813 - if(this.data.hasSuggestion){  
814 - map=this.data.suggestion  
815 - mks.push({  
816 - id: 'location',  
817 - iconPath: "http://nosqn.colorcun.com/reserve/images/location.png"+cates_version,  
818 - latitude: map.latitude,  
819 - longitude: map.longitude,  
820 - width: 20,  
821 - height: 25,  
822 - })  
823 - }  
824 - mks.push({  
825 - id: 'locationMe',  
826 - iconPath: "http://nosqn.colorcun.com/reserve/images/lme.png"+cates_version,  
827 - latitude: this.user.latitude,  
828 - longitude: this.user.longitude,  
829 - width: 18,  
830 - height: 30,  
831 - })  
832 - return mks;  
833 - },  
834 - tagsChange(e){  
835 - if(this.data.listMoreCount<1 && !this.data.hasSearchLimit) return  
836 - let id=util.attr(e,'id');  
837 - let tags=this.data.tags;  
838 - let activeNum=0;  
839 - tags.forEach(t=>{  
840 - if(t.id==id){  
841 - t.active=!t.active  
842 - }  
843 - if(t.active){  
844 - activeNum++  
845 - }  
846 - })  
847 - this.setData({  
848 - tags:tags,  
849 - })  
850 - this.hasSellerConcat=hasSellerConcat;  
851 - this.sellersIds=[];  
852 - if(activeNum>0){  
853 - this.hasSellerConcat=false;  
854 - }else{  
855 - if(!this.hasSellerConcat){ 860 + if (this.data.hasSuggestion) {
  861 + map = this.data.suggestion
  862 + mks.push({
  863 + id: 'location',
  864 + iconPath: "http://nosqn.colorcun.com/reserve/images/location.png" + cates_version,
  865 + latitude: map.latitude,
  866 + longitude: map.longitude,
  867 + width: 20,
  868 + height: 25,
  869 + })
  870 + }
  871 + mks.push({
  872 + id: 'locationMe',
  873 + iconPath: "http://nosqn.colorcun.com/reserve/images/lme.png" + cates_version,
  874 + latitude: this.user.latitude,
  875 + longitude: this.user.longitude,
  876 + width: 18,
  877 + height: 30,
  878 + })
  879 + return mks;
  880 + },
  881 + tagsChange(e) {
  882 + if (this.data.listMoreCount < 1 && !this.data.hasSearchLimit) return
  883 + let id = util.attr(e, 'id');
  884 + let tags = this.data.tags;
  885 + let activeNum = 0;
  886 + tags.forEach(t => {
  887 + if (t.id == id) {
  888 + t.active = !t.active
  889 + }
  890 + if (t.active) {
  891 + activeNum++
  892 + }
  893 + })
856 this.setData({ 894 this.setData({
857 - markers:[] 895 + tags: tags,
858 }) 896 })
859 - }  
860 - }  
861 - setTimeout(()=>{this.getMarkers();},0) 897 + this.hasSellerConcat = hasSellerConcat;
  898 + this.sellersIds = [];
  899 + if (activeNum > 0) {
  900 + this.hasSellerConcat = false;
  901 + } else {
  902 + if (!this.hasSellerConcat) {
  903 + this.setData({
  904 + markers: []
  905 + })
  906 + }
  907 + }
  908 + setTimeout(() => {
  909 + this.getMarkers();
  910 + }, 0)
862 911
863 - },  
864 - caixiActive(e){  
865 - console.log('caixiActive',e);  
866 - this.bindMultiPickerChange({  
867 - detail:{  
868 - value:[e.detail]  
869 - }  
870 - })  
871 - },  
872 - caixiShow(){  
873 - if(this.data.listMoreCount<1 && !this.data.hasSearchLimit) return  
874 - this.selectComponent('#caixi').show();  
875 - },  
876 - listEvent(e){  
877 - let d=e.detail  
878 - console.log('listEvent',e);  
879 - if(d.type=="getListEnd"){  
880 - this.setData({  
881 - listMoreCount:d.total  
882 - });  
883 - }else if(d.type=='caixiShow'){  
884 - this.caixiShow();  
885 - }else if(d.type=='tagsChange'){  
886 - this.tagsChange(d.e);  
887 - }  
888 - },  
889 - listShow(){  
890 - //this.selectComponent('#list').show();  
891 - if(!this.param.map) return;  
892 - this.movableChangeInit()  
893 - wx.navigateTo({  
894 - url:util.http_build_query({  
895 - lat:this.param.lat==def_latitude?'':this.param.lat,  
896 - lng:this.param.lng==def_longitude?'':this.param.lng,  
897 - map:this.param.map,  
898 - multiIndex:this.data.multiIndex,  
899 - tags:this.param.tags,  
900 - centre_pos:this.param.centre_pos,  
901 - hasSuggestion:this.data.hasSuggestion?1:'',  
902 - keyword:this.data.hasSuggestion?this.data.suggestion.title:'',  
903 - filterParams:this.filterParams?JSON.stringify(this.filterParams):null,  
904 - },'./indexList'),  
905 - success: res=> {  
906 - // 通过eventChannel向被打开页面传送数据  
907 - if(this.findSellerData){  
908 - res.eventChannel.emit('acceptDataFromMapPage', this.findSellerData)  
909 - }  
910 - res.eventChannel.on('findSellerData',findSellerData=>{  
911 - console.log('findSellerData',findSellerData)  
912 - this.findSellerData=findSellerData  
913 - setTimeout(()=>{this.getMarkers();},0) 912 + },
  913 + caixiActive(e) {
  914 + console.log('caixiActive', e);
  915 + this.bindMultiPickerChange({
  916 + detail: {
  917 + value: [e.detail]
  918 + }
914 }) 919 })
915 - setTimeout(()=>{  
916 - this.movableChangeInit()  
917 - this.hasListShow=false  
918 - },1500)  
919 - }  
920 - });  
921 - },  
922 - setTSLocal(){  
923 - let map=this.data.map;  
924 - map.latitude=def_latitude  
925 - map.longitude=def_longitude  
926 - map.scale=mapScale  
927 - this.sellersIds=[]  
928 - this.sellers=[]  
929 - let sdobj={  
930 - map: map,  
931 - hasGetSellersEnd:false,  
932 - hasSuggestion:false,  
933 - suggestion:{},  
934 - }  
935 - if(!this.hasSellerConcat){  
936 - sdobj.markers=[]  
937 - }  
938 - this.setData(sdobj)  
939 - },  
940 - findSellerData:null,  
941 - findSeller(){  
942 - if(this.data.listMoreCount<1 && !this.data.hasSearchLimit) return  
943 - wx.navigateTo({  
944 - url: './findSeller',  
945 - success: res=> {  
946 - // 通过eventChannel向被打开页面传送数据  
947 - if(this.findSellerData){  
948 - res.eventChannel.emit('acceptDataFromMapPage', this.findSellerData)  
949 - }  
950 - res.eventChannel.on('findSellerData',findSellerData=>{  
951 - console.log('findSellerData',findSellerData)  
952 - this.findSellerData=findSellerData  
953 - setTimeout(()=>{this.getMarkers();},0) 920 + },
  921 + caixiShow() {
  922 + if (this.data.listMoreCount < 1 && !this.data.hasSearchLimit) return
  923 + this.selectComponent('#caixi').show();
  924 + },
  925 + listEvent(e) {
  926 + let d = e.detail
  927 + console.log('listEvent', e);
  928 + if (d.type == "getListEnd") {
  929 + this.setData({
  930 + listMoreCount: d.total
  931 + });
  932 + } else if (d.type == 'caixiShow') {
  933 + this.caixiShow();
  934 + } else if (d.type == 'tagsChange') {
  935 + this.tagsChange(d.e);
  936 + }
  937 + },
  938 + listShow() {
  939 + //this.selectComponent('#list').show();
  940 + if (!this.param.map) return;
  941 + this.movableChangeInit()
  942 + wx.navigateTo({
  943 + url: util.http_build_query({
  944 + lat: this.param.lat == def_latitude ? '' : this.param.lat,
  945 + lng: this.param.lng == def_longitude ? '' : this.param.lng,
  946 + map: this.param.map,
  947 + multiIndex: this.data.multiIndex,
  948 + tags: this.param.tags,
  949 + centre_pos: this.param.centre_pos,
  950 + hasSuggestion: this.data.hasSuggestion ? 1 : '',
  951 + keyword: this.data.hasSuggestion ? this.data.suggestion.title : '',
  952 + filterParams: this.filterParams ? JSON.stringify(this.filterParams) : null,
  953 + }, './indexList'),
  954 + success: res => {
  955 + // 通过eventChannel向被打开页面传送数据
  956 + if (this.findSellerData) {
  957 + res.eventChannel.emit('acceptDataFromMapPage', this.findSellerData)
  958 + }
  959 + res.eventChannel.on('findSellerData', findSellerData => {
  960 + console.log('findSellerData', findSellerData)
  961 + this.findSellerData = findSellerData
  962 + setTimeout(() => {
  963 + this.getMarkers();
  964 + }, 0)
  965 + })
  966 + setTimeout(() => {
  967 + this.movableChangeInit()
  968 + this.hasListShow = false
  969 + }, 1500)
  970 + }
  971 + });
  972 + },
  973 + setTSLocal() {
  974 + let map = this.data.map;
  975 + map.latitude = def_latitude
  976 + map.longitude = def_longitude
  977 + map.scale = mapScale
  978 + this.sellersIds = []
  979 + this.sellers = []
  980 + let sdobj = {
  981 + map: map,
  982 + hasGetSellersEnd: false,
  983 + hasSuggestion: false,
  984 + suggestion: {},
  985 + }
  986 + if (!this.hasSellerConcat) {
  987 + sdobj.markers = []
  988 + }
  989 + this.setData(sdobj)
  990 + },
  991 + findSellerData: null,
  992 + findSeller() {
  993 + if (this.data.listMoreCount < 1 && !this.data.hasSearchLimit) return
  994 + wx.navigateTo({
  995 + url: './findSeller',
  996 + success: res => {
  997 + // 通过eventChannel向被打开页面传送数据
  998 + if (this.findSellerData) {
  999 + res.eventChannel.emit('acceptDataFromMapPage', this.findSellerData)
  1000 + }
  1001 + res.eventChannel.on('findSellerData', findSellerData => {
  1002 + console.log('findSellerData', findSellerData)
  1003 + this.findSellerData = findSellerData
  1004 + setTimeout(() => {
  1005 + this.getMarkers();
  1006 + }, 0)
  1007 + })
  1008 + }
954 }) 1009 })
955 - } 1010 + },
  1011 + boostEvent(e) {
  1012 + util.elog(e.detail, '强提醒')
  1013 + if (e.detail.act == 'hide') {
  1014 + this.setData({
  1015 + hasGetPos: true,
  1016 + })
  1017 + this.selectComponent('#getpos').getPos();
  1018 + }
  1019 + },
  1020 + elog(e) {
  1021 + util.elog({attr: util.attr(e), detail: e.detail}, util.attr(e, 'ename') || '点击')
  1022 + },
  1023 + sbtrEvent(e) {
  1024 + console.log(e);
  1025 + if (e.detail.act == 'oncall') {
  1026 + this.selectComponent('#as').show(e.detail.seller);
  1027 + }
  1028 + },
  1029 + movableY0: 99,
  1030 + movableY1: 0,
  1031 + hasListShow: false,
  1032 + movableChangeInit() {
  1033 + this.movableY0 = 99
  1034 + this.movableY1 = 0
  1035 + },
  1036 + movableChange(e) {
  1037 + if (this.hasListShow) return;
  1038 + if (this.movableY0 == 99) {
  1039 + this.movableY0 = e.detail.y
  1040 + } else {
  1041 + if (e.detail.y != this.movableY0) {
  1042 + console.log('movableChange', '上拉');
  1043 + this.listShow();
  1044 + this.movableChangeInit()
  1045 + this.hasListShow = true
  1046 + }
  1047 + }
  1048 + },
  1049 + filterShow() {
  1050 + this.selectComponent('#filter').show(this.filterParams);
  1051 + },
  1052 + filterParams: null,
  1053 + filterEvent(e) {
  1054 + console.log('filterEvent', e)
  1055 + if (e.detail.type == 'clean') {
  1056 + this.filterParams = null
  1057 + this.setData({
  1058 + filterParams: null,
  1059 + })
  1060 + } else {
  1061 + this.filterParams = e.detail.data
  1062 + this.setData({
  1063 + filterParams: this.filterParams,
  1064 + })
  1065 + }
  1066 + setTimeout(() => {
  1067 + this.getMarkers();
  1068 + }, 0)
  1069 + },
956 }) 1070 })
957 - },  
958 - boostEvent(e){  
959 - util.elog(e.detail,'强提醒')  
960 - if(e.detail.act=='hide'){  
961 - this.setData({  
962 - hasGetPos:true,  
963 - })  
964 - this.selectComponent('#getpos').getPos();  
965 - }  
966 - },  
967 - elog(e){  
968 - util.elog({attr:util.attr(e),detail:e.detail},util.attr(e,'ename')||'点击')  
969 - },  
970 - sbtrEvent(e){  
971 - console.log(e);  
972 - if(e.detail.act=='oncall'){  
973 - this.selectComponent('#as').show(e.detail.seller);  
974 - }  
975 - },  
976 - movableY0:99,  
977 - movableY1:0,  
978 - hasListShow:false,  
979 - movableChangeInit(){  
980 - this.movableY0=99  
981 - this.movableY1=0  
982 - },  
983 - movableChange(e){  
984 - if(this.hasListShow) return;  
985 - if(this.movableY0==99){  
986 - this.movableY0=e.detail.y  
987 - }else{  
988 - if(e.detail.y!=this.movableY0){  
989 - console.log('movableChange','上拉');  
990 - this.listShow();  
991 - this.movableChangeInit()  
992 - this.hasListShow=true  
993 - }  
994 - }  
995 - },  
996 - filterShow(){  
997 - this.selectComponent('#filter').show(this.filterParams);  
998 - },  
999 - filterParams:null,  
1000 - filterEvent(e){  
1001 - console.log('filterEvent',e)  
1002 - if(e.detail.type=='clean'){  
1003 - this.filterParams=null  
1004 - this.setData({  
1005 - filterParams:null,  
1006 - })  
1007 - }else{  
1008 - this.filterParams=e.detail.data  
1009 - this.setData({  
1010 - filterParams:this.filterParams,  
1011 - })  
1012 - }  
1013 - setTimeout(()=>{this.getMarkers();},0)  
1014 - },  
1015 -})  
  1071 + }
  1072 +})
@@ -41,6 +41,7 @@ Page({ @@ -41,6 +41,7 @@ Page({
41 * 生命周期函数--监听页面显示 41 * 生命周期函数--监听页面显示
42 */ 42 */
43 onShow: function () { 43 onShow: function () {
  44 + PubSub.emit('custom-tab-bar')
44 this.getHistory(); 45 this.getHistory();
45 this.setData({ 46 this.setData({
46 navHeight:this.selectComponent('#nav').getHeight() 47 navHeight:this.selectComponent('#nav').getHeight()
@@ -302,6 +303,7 @@ Page({ @@ -302,6 +303,7 @@ Page({
302 } 303 }
303 }, 304 },
304 setSuggestion(data){//只通知前页变更数据 305 setSuggestion(data){//只通知前页变更数据
  306 + /*
305 let pages = getCurrentPages(); 307 let pages = getCurrentPages();
306 let p = pages[pages.length - 2]; 308 let p = pages[pages.length - 2];
307 if(p.route=='pages/reserve/index'){ 309 if(p.route=='pages/reserve/index'){
@@ -309,5 +311,17 @@ Page({ @@ -309,5 +311,17 @@ Page({
309 }else{ 311 }else{
310 PubSub.emit('searchParamList',data) 312 PubSub.emit('searchParamList',data)
311 } 313 }
  314 + */
  315 + let suggestion=data.suggestion
  316 + wx.navigateTo({
  317 + url:util.http_build_query({
  318 + hasSuggestion:1,
  319 + keyword:suggestion.title,
  320 + lat:suggestion.latitude,
  321 + lng:suggestion.longitude,
  322 + centre_pos:`${suggestion.latitude},${suggestion.longitude}`,
  323 + multiIndex:0,
  324 + },'/pages/reserve/indexList')
  325 + })
312 }, 326 },
313 }) 327 })
@@ -74,15 +74,12 @@ @@ -74,15 +74,12 @@
74 }, 74 },
75 "condition": { 75 "condition": {
76 "search": { 76 "search": {
77 - "current": -1,  
78 "list": [] 77 "list": []
79 }, 78 },
80 "conversation": { 79 "conversation": {
81 - "current": -1,  
82 "list": [] 80 "list": []
83 }, 81 },
84 "plugin": { 82 "plugin": {
85 - "current": -1,  
86 "list": [] 83 "list": []
87 }, 84 },
88 "game": { 85 "game": {
@@ -90,11 +87,9 @@ @@ -90,11 +87,9 @@
90 "list": [] 87 "list": []
91 }, 88 },
92 "gamePlugin": { 89 "gamePlugin": {
93 - "current": -1,  
94 "list": [] 90 "list": []
95 }, 91 },
96 "miniprogram": { 92 "miniprogram": {
97 - "current": -1,  
98 "list": [ 93 "list": [
99 { 94 {
100 "id": 0, 95 "id": 0,