@use 'sass:math'; @function px2rpx($px) { @return $px * 1rpx; } :root { --color-red-400: oklch(70.4% .191 22.216); --color-orange-600: oklch(64.6% .222 41.116); --color-amber-50: oklch(98.7% .022 95.277); --color-amber-400: oklch(82.8% .189 84.429); --color-yellow-100: oklch(97.3% .071 103.193); --color-yellow-400: oklch(85.2% .199 91.936); --color-yellow-500: oklch(79.5% .184 86.047); --color-green-300: oklch(87.1% .15 154.449); --color-green-400: oklch(79.2% .209 151.711); --color-sky-100: oklch(95.1% .026 236.824); --color-sky-400: oklch(74.6% .16 232.661); --color-blue-500: oklch(62.3% .214 259.815); --color-blue-600: oklch(54.6% .245 262.881); --color-indigo-50: oklch(96.2% .018 272.314); --color-indigo-100: oklch(93% .034 272.788); --color-indigo-400: oklch(67.3% .182 276.935); --color-indigo-600: oklch(51.1% .262 276.966); --color-violet-400: oklch(70.2% .183 293.541); --color-purple-300: oklch(82.7% .119 306.383); --color-purple-500: oklch(62.7% .265 303.9); --color-purple-600: oklch(55.8% .288 302.321); --color-fuchsia-400: oklch(74% .238 322.16); --color-fuchsia-600: oklch(59.1% .293 322.896); --color-pink-100: oklch(94.8% .028 342.258); --color-pink-300: oklch(82.3% .12 346.018); --color-pink-500: oklch(0.59 0.22 25.62); --color-pink-600: oklch(0.67 0.21 36.35); --color-rose-500: oklch(64.5% .246 16.439); --color-slate-50: oklch(98.4% .003 247.858); --color-slate-100: oklch(96.8% .007 247.896); --color-slate-200: oklch(92.9% .013 255.508); --color-slate-300: oklch(86.9% .022 252.894); --color-slate-400: oklch(70.4% .04 256.788); --color-slate-500: oklch(55.4% .046 257.417); --color-slate-600: oklch(44.6% .043 257.281); --color-slate-700: oklch(37.2% .044 257.287); --color-slate-800: oklch(27.9% .041 260.031); --color-slate-900: oklch(20.8% .042 265.755); --color-gray-200: oklch(92.8% .006 264.531); --color-zinc-100: oklch(96.7% .001 286.375); --color-black: #000; --color-white: #fff; --font-size-10: px2rpx(10); --font-size-12: px2rpx(12); --font-size-13: px2rpx(13); --font-size-14: px2rpx(14); --font-size-15: px2rpx(15); --font-size-16: px2rpx(16); --font-size-18: px2rpx(18); --font-size-20: px2rpx(20); --font-size-22: px2rpx(22); --font-size-24: px2rpx(24); --font-size-26: px2rpx(26); --font-size-28: px2rpx(28); --font-size-32: px2rpx(32); --font-size-36: px2rpx(36); --font-size-40: px2rpx(40); --el-component-size: px2rpx(40); --ease-in: cubic-bezier(.4, 0, 1, 1); --ease-out: cubic-bezier(0, 0, .2, 1); --ease-in-out: cubic-bezier(.4, 0, .2, 1); --animate-spin: spin 1s linear infinite; --animate-ping: ping 1s cubic-bezier(0, 0, .2, 1) infinite; --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite; --blur-sm: 8px; --default-transition-duration: .15s; --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); --default-font-family: var(--font-sans); --default-mono-font-family: var(--font-mono); --font-inter: Inter, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --color-navy-50: #e7e9ef; --color-navy-100: #fff; --color-navy-200: #a3adc2; --color-navy-300: #697a9b; --color-navy-400: #5c6b8a; --color-navy-450: #465675; --color-navy-500: #3a3c43; --color-navy-600: #313e59; --color-navy-700: #242726; --color-navy-750: #222e45; --color-navy-800: #202b40; --color-navy-900: #141a18; --color-slate-150: #e9eef5; --color-primary: #4f46e5; --color-primary-focus: #4338ca; --color-secondary-light: #ff57d8; --color-secondary: #141a18; --color-secondary-focus: #242726; --color-accent-light: #242726; --color-accent: #5f5af6; --color-accent-focus: #4d47f5; --color-info: #0ea5e9; --color-info-focus: #0284c7; --color-success: #1ac23a; --color-success-focus: #17a732; --color-warning: #ff9800; --color-warning-focus: #e68200; --color-error: #e32326; --color-error-focus: #f03000; --text-tiny: .625rem; --text-tiny--line-height: .8125rem; --text-tiny-plus: .6875rem; --text-tiny-plus--line-height: .875rem; --text-xs-plus: .8125rem; --text-xs-plus--line-height: 1.125rem; --text-sm-plus: .9375rem; --text-sm-plus--line-height: 1.375rem; --animate-shimmer: shimmer 2s linear infinite; // 状态背景色 --status-warning-bg: var(--color-amber-50); --status-success-bg: var(--color-green-300); --status-processing-bg: var(--color-sky-100); --status-danger-bg: var(--color-pink-100); --status-expired-bg: var(--color-slate-200); --status-cancelled-bg: var(--color-slate-100); // 状态文字颜色 --status-warning-text: var(--color-orange-600); --status-success-text: var(--color-green-400); --status-processing-text: var(--color-blue-600); --status-danger-text: var(--color-rose-500); --status-expired-text: var(--color-slate-600); --status-cancelled-text: var(--color-slate-500); // 状态边框颜色 --status-warning-border: var(--color-amber-400); --status-success-border: var(--color-green-400); --status-processing-border: var(--color-sky-400); --status-danger-border: var(--color-pink-300); --status-expired-border: var(--color-slate-400); --status-cancelled-border: var(--color-slate-300); } .dark { --color-red-400: oklch(70.4% .191 22.216); --color-orange-600: oklch(64.6% .222 41.116); --color-amber-50: oklch(98.7% .022 95.277); --color-amber-400: oklch(82.8% .189 84.429); --color-yellow-100: oklch(97.3% .071 103.193); --color-yellow-400: oklch(85.2% .199 91.936); --color-yellow-500: oklch(79.5% .184 86.047); --color-green-300: oklch(87.1% .15 154.449); --color-green-400: oklch(79.2% .209 151.711); --color-sky-100: oklch(95.1% .026 236.824); --color-sky-400: oklch(74.6% .16 232.661); --color-blue-500: oklch(62.3% .214 259.815); --color-blue-600: oklch(54.6% .245 262.881); --color-indigo-50: oklch(96.2% .018 272.314); --color-indigo-100: oklch(93% .034 272.788); --color-indigo-400: oklch(67.3% .182 276.935); --color-indigo-600: oklch(51.1% .262 276.966); --color-violet-400: oklch(70.2% .183 293.541); --color-purple-300: oklch(82.7% .119 306.383); --color-purple-500: oklch(62.7% .265 303.9); --color-purple-600: oklch(55.8% .288 302.321); --color-fuchsia-400: oklch(74% .238 322.16); --color-fuchsia-600: oklch(59.1% .293 322.896); --color-pink-100: oklch(94.8% .028 342.258); --color-pink-300: oklch(82.3% .12 346.018); --color-pink-500: oklch(0.59 0.22 25.62); --color-pink-600: oklch(0.67 0.21 36.35); --color-rose-500: oklch(64.5% .246 16.439); --color-slate-50: oklch(98.4% .003 247.858); --color-slate-100: oklch(96.8% .007 247.896); --color-slate-200: oklch(92.9% .013 255.508); --color-slate-300: oklch(86.9% .022 252.894); --color-slate-400: oklch(70.4% .04 256.788); --color-slate-500: oklch(55.4% .046 257.417); --color-slate-600: oklch(44.6% .043 257.281); --color-slate-700: oklch(37.2% .044 257.287); --color-slate-800: oklch(27.9% .041 260.031); --color-slate-900: oklch(20.8% .042 265.755); --color-gray-200: oklch(92.8% .006 264.531); --color-zinc-100: oklch(96.7% .001 286.375); --color-black: #000; --color-white: #fff; --color-navy-900: #11224d; --font-size-10: px2rpx(10); --font-size-12: px2rpx(12); --font-size-13: px2rpx(13); --font-size-14: px2rpx(14); --font-size-15: px2rpx(15); --font-size-16: px2rpx(16); --font-size-18: px2rpx(18); --font-size-20: px2rpx(20); --font-size-22: px2rpx(22); --font-size-24: px2rpx(24); --font-size-26: px2rpx(26); --font-size-28: px2rpx(28); --font-size-32: px2rpx(32); --font-size-36: px2rpx(36); --font-size-40: px2rpx(40); --el-component-size: px2rpx(40); --ease-in: cubic-bezier(.4, 0, 1, 1); --ease-out: cubic-bezier(0, 0, .2, 1); --ease-in-out: cubic-bezier(.4, 0, .2, 1); --animate-spin: spin 1s linear infinite; --animate-ping: ping 1s cubic-bezier(0, 0, .2, 1) infinite; --animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite; --blur-sm: 8px; --default-transition-duration: .15s; --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); --default-font-family: var(--font-sans); --default-mono-font-family: var(--font-mono); --font-inter: Inter, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --color-navy-50: #e7e9ef; --color-navy-100: #fff; --color-navy-200: #a3adc2; --color-navy-300: #697a9b; --color-navy-400: #5c6b8a; --color-navy-450: #465675; --color-navy-500: #3a3c43; --color-navy-600: #313e59; --color-navy-700: #242726; --color-navy-750: #222e45; --color-navy-800: #202b40; --color-navy-900: #141a18; --color-slate-150: #e9eef5; --color-primary: #4f46e5; --color-primary-focus: #4338ca; --color-secondary-light: #ff57d8; --color-secondary: #141a18; --color-secondary-focus: #242726; --color-accent-light: #242726; --color-accent: #5f5af6; --color-accent-focus: #4d47f5; --color-info: #0ea5e9; --color-info-focus: #0284c7; --color-success: #1ac23a; --color-success-focus: #17a732; --color-warning: #ff9800; --color-warning-focus: #e68200; --color-error: #e32326; --color-error-focus: #f03000; --text-tiny: .625rem; --text-tiny--line-height: .8125rem; --text-tiny-plus: .6875rem; --text-tiny-plus--line-height: .875rem; --text-xs-plus: .8125rem; --text-xs-plus--line-height: 1.125rem; --text-sm-plus: .9375rem; --text-sm-plus--line-height: 1.375rem; --animate-shimmer: shimmer 2s linear infinite; } body { min-height: 100vh; margin: 0 auto !important; font-size: px2rpx(12); line-height: 1; color: #000; background: #fff; } .body { position: absolute; box-sizing: border-box; width: 100%; // height: 100vh; // padding-bottom: var(--tabbar-height); height: 100vh; overflow-y: scroll; transition: all 0.4s; -webkit-overflow-scrolling: touch; &.is-tab { // height: calc(100vh - var(--tabbar-height)); } } .wrap { position: relative; width: 100%; height: 100vh; overflow: hidden; } .global-loading { position: fixed; top: 0; left: 0; z-index: 999; display: flex; align-items: center; justify-content: center; width: 100vw; height: 100vh; background: var(--main-bg); } .router-loading { position: fixed; top: 0; left: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; width: 100vw; height: 100vh; background: var(--main-bg); } .full-screen-loading { position: fixed; top: 0; left: 0; z-index: 1001; display: flex; align-items: center; justify-content: center; width: 100vw; height: 100vh; background: var(--main-bg); } .request-loading, .full-screen-loading { position: fixed; top: 50%; left: 50%; z-index: 1001; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: px2rpx(16) px2rpx(24); background: rgb(0, 0, 0, 0.88); backdrop-filter: blur(4px); box-shadow: 0 4px 12px rgb(0, 0, 0, 0.15); transform: translate(-50%, -50%); animation: fadeIn 0.2s ease-in-out; .van-loading { margin-bottom: px2rpx(8); } .loading-text { font-size: px2rpx(14); font-weight: 500; color: #fff; text-shadow: 0 px2rpx(1) px2rpx(2) rgb(0, 0, 0, 0.1); letter-spacing: px2rpx(0.5); } &::after { position: absolute; inset: px2rpx(-1); z-index: -1; content: ''; background: linear-gradient(45deg, rgb(255, 255, 255, 0.1), rgb(255, 255, 255, 0.05)); border-radius: px2rpx(12); } } .full-screen-loading { width: 100vw; height: 100vh; } @keyframes fadeIn { from { opacity: 0; transform: translate(-50%, -48%); } to { opacity: 1; transform: translate(-50%, -50%); } } .load-more { margin: px2rpx(10) 0; } /* 通用样式 */ .slide-left-enter, .slide-right-leave-active { opacity: 0; transform: translate(100%, 0); } .slide-left-leave-active, .slide-right-enter { opacity: 0; transform: translate(-100%, 0); } /* .fade-leave-active below version 2.1.8 */ .fade-enter-active, .fade-leave-active { transition: opacity 0.5s; } .fade-enter, .fade-leave-to { opacity: 0; } /* start--文本行数限制--start */ .u-line-1 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .u-line-2 { -webkit-line-clamp: 2; } .u-line-3 { -webkit-line-clamp: 3; } .u-line-4 { -webkit-line-clamp: 4; } .u-line-5 { -webkit-line-clamp: 5; } .u-line-2, .u-line-3, .u-line-4, .u-line-5 { display: flex; overflow: hidden; text-overflow: ellipsis; word-break: break-all; -webkit-box-orient: vertical; // 设置伸缩盒子元素排列方式 } /* end--文本行数限制--end */ /* start--Retina 屏幕下的 1px 边框--start */ .u-border, .u-border-bottom, .u-border-left, .u-border-right, .u-border-top, .u-border-top-bottom { position: relative; } .u-border-bottom::after, .u-border-left::after, .u-border-right::after, .u-border-top-bottom::after, .u-border-top::after, .u-border::after { position: absolute; top: 0; left: 0; z-index: 2; box-sizing: border-box; // 多加0.1%,能解决有时候边框缺失的问题 width: 199.8%; height: 199.7%; pointer-events: none; content: ' '; border: 0 solid #e4e7ed; transform: scale(0.5, 0.5); transform-origin: 0 0; } .u-border-top::after { border-top-width: 1PX; } .u-border-left::after { border-left-width: 1PX; } .u-border-right::after { border-right-width: 1PX; } .u-border-bottom::after { border-bottom-width: 1PX; } .u-border-top-bottom::after { border-width: 1PX 0; } .u-border::after { border-width: 1PX; } .cwg-button { width: 100%; .u-button { height: px2rpx(44) !important; font-size: var(--font-size-16); font-weight: bold; color: var(--black); background: var(--main-yellow) !important; border: none !important; border-radius: px2rpx(100) !important; &:active { opacity: 0.9; } } } .fixed-btn { position: fixed; bottom: 0; left: 0; z-index: 1100; display: flex; flex-direction: column; align-items: center; justify-content: center; width: 100%; height: px2rpx(90); padding: px2rpx(21) px2rpx(30); color: var(--black); background-color: var(--black); box-shadow: 0 -1px 2px rgb(134, 134, 133, 0.25); box-sizing: border-box; } .cwg-upload { box-sizing: border-box; display: flex; flex-direction: column; align-items: center; justify-content: center; width: 100%; height: px2rpx(160); padding: px2rpx(16); border: 1px dashed #beb6b6; border-radius: px2rpx(4); .name { display: flex; align-items: center; font-size: px2rpx(16); font-weight: 600; line-height: px2rpx(44); color: #1a1a1a; text-align: center; } .back { display: flex; align-items: center; font-size: px2rpx(16); line-height: px2rpx(24); color: #474747; text-align: center; letter-spacing: 0.005em; } } .g { display: flex; img { height: px2rpx(50); } .g-l { flex: 1; margin-left: px2rpx(16); .g-item { display: flex; justify-content: space-between; margin-bottom: px2rpx(16); } .label { font-family: Roboto; font-size: px2rpx(14); font-style: normal; font-weight: 600; line-height: px2rpx(20); color: #1a1a1a; text-align: left; } .v { font-family: Roboto; font-size: px2rpx(14); font-style: normal; font-weight: 600; line-height: px2rpx(20); color: #1a1a1a; text-align: center; } } } .fixed-right { position: fixed; top: px2rpx(4); right: px2rpx(10); z-index: 100; display: flex; align-items: center; justify-content: center; width: px2rpx(40); height: px2rpx(40); color: var(--main-yellow); cursor: pointer; i { display: flex; align-items: center; justify-content: center; width: px2rpx(20); height: px2rpx(20); font-size: px2rpx(14); color: var(--main-yellow); } &:hover { opacity: 0.8; } } .status-default { display: flex; gap: px2rpx(10); align-items: center; justify-content: center; padding: px2rpx(4) px2rpx(8); font-family: Roboto; font-size: px2rpx(12); font-style: normal; font-weight: 600; line-height: px2rpx(16); color: #009deb; letter-spacing: px2rpx(0.06); background: rgb(0, 157, 235, 0.2); border: 0 solid #f4f4f4; border-radius: px2rpx(9999); } .status-success { color: #4caf50; background: rgb(76, 175, 80, 0.2); } .status-error { color: #d32f2f; background: rgb(211, 47, 47, 0.21); } .status-views { display: flex; align-items: center; justify-content: center; width: px2rpx(65.063); // height: 36px; padding: px2rpx(8) px2rpx(16); font-family: Roboto; font-size: px2rpx(14); font-style: normal; font-weight: 600; line-height: px2rpx(20); color: #fff; text-align: center; letter-spacing: px2rpx(0.07); background: #ea002a; border-radius: px2rpx(10); } .ellipsis { width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .custom-toast { top: 40%; display: flex; flex-direction: column; gap: px2rpx(16); align-items: center; width: px2rpx(348); padding: px2rpx(32) px2rpx(24); background: #fff; border-radius: px2rpx(20); box-shadow: 0 4px 12px rgb(0, 0, 0, 0.1); .van-icon__image { width: px2rpx(88); height: px2rpx(88); } .van-toast__text { font-family: Roboto; font-size: px2rpx(14); font-style: normal; font-weight: 400; line-height: px2rpx(20); color: #474747; text-align: center; letter-spacing: px2rpx(0.07); } } .page-header { position: fixed; top: calc(var(--secure-height, 0px) + env(safe-area-inset-top)); left: 0; z-index: 13; display: flex; align-items: center; width: 100%; height: px2rpx(60); font-size: var(--font-size-22); font-weight: 700; color: var(--white); text-align: left; background: #fff; } .u-form-item__body { padding: 0 !important; } .u-form-item__body__right__message { margin-left: 10px !important; } .filter-picker { background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: px2rpx(8); padding: px2rpx(6); display: flex; align-items: center; min-width: px2rpx(60); max-width: px2rpx(120); flex-shrink: 1; overflow: hidden; div { width: 100% !important; } } .picker-value { display: flex; align-items: center; gap: px2rpx(4); width: 100%; } .picker-text { min-width: px2rpx(60); max-width: px2rpx(100); font-size: px2rpx(12); color: #111827; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .picker-icon { flex-shrink: 0; width: px2rpx(14); height: px2rpx(14); } .status-badge { display: flex; align-items: center; gap: px2rpx(4); padding: px2rpx(3) px2rpx(8) px2rpx(3) px2rpx(3); border-radius: px2rpx(12); } .filter-select { background-color: #ffffff; border: 1px solid #e5e7eb; border-radius: px2rpx(8); padding: px2rpx(6); display: flex; align-items: center; min-width: px2rpx(90); max-width: px2rpx(120); flex-shrink: 1; // overflow: hidden; div { // width: 100% !important; } .uni-select { width: 100% !important; padding: 0 !important; border: none !important; min-height: px2rpx(14) !important; } .uni-select__selector { min-width: 100px !important; max-width: 300px !important; width: max-content !important; } .uni-select__selector-item { white-space: nowrap !important; padding: 0 12px !important; } .uni-select__input-text { color: #6a6a6a; font-size: 12px; margin: 1px 0; padding: 0 !important; } .padding-top-bottom { padding: 0 !important; } } // 公共title样式 .content-title { width: 100%; min-height: px2rpx(40); line-height: px2rpx(40); box-sizing: border-box; color: var(--color-white); background-color: var(--color-navy-900); padding: 0 px2rpx(15); font-size: px2rpx(20); font-weight: bold; } .crm-form { :deep(.uni-row1) { .uni-col { padding: 0 10px !important; } .base-info-form>span { display: contents; } .uni-forms-item { min-height: px2rpx(79); margin-bottom: px2rpx(10); } .uni-select, .uni-combox, .uni-easyinput__content, .uni-date-editor--x { border: none !important; background-color: var(--color-zinc-100) !important; } .uni-date-x { border: none !important; background-color: rgba(195, 195, 195, 0) !important; } .uni-easyinput__content { padding: 0 !important; } .checklist-text { color: #666 !important; } .checklist-box.is--default.is-checked .checkbox__inner { border-color: var(--color-error) !important; background-color: var(--color-error) !important; } } } .bg-secondary { background-color: var(--color-secondary) !important; border: 1px solid #333333; color: var(--color-white); } .underline { text-decoration: underline; text-decoration-color: currentColor; text-underline-offset: px2rpx(2); cursor: pointer; } .info-card { margin-top: px2rpx(4); border-radius: px2rpx(8); background-color: white; padding: px2rpx(16); // box-shadow: 0 0 px2rpx(8) rgba(0, 0, 0, 0.1); box-shadow: 0 0 px2rpx(4) rgba(0, 0, 0, 0.06), 0 px2rpx(6) px2rpx(12) rgba(0, 0, 0, 0.08); box-sizing: border-box; } // 状态标签基础样式 .status-badge { display: inline-flex; align-items: center; padding: 4rpx 12rpx; border-radius: 4rpx; font-size: var(--font-size-24); font-weight: 500; line-height: 1.5; white-space: nowrap; transition: all var(--default-transition-duration) var(--default-transition-timing-function); // 当有取消按钮时调整右边距 &.has-cancel { margin-right: 8rpx; } } // 待处理 .status-warning { background-color: var(--status-warning-bg); color: var(--status-warning-text); } // 已完成 .status-success { background-color: var(--status-success-bg); color: var(--status-success-text); } // 进行中 .status-processing { background-color: var(--status-processing-bg); color: var(--status-processing-text); } // 已拒绝 .status-danger { background-color: var(--status-danger-bg); color: var(--status-danger-text); } // 已过期 .status-expired { background-color: var(--status-expired-bg); color: var(--status-expired-text); } // 已取消 .status-cancelled { background-color: var(--status-cancelled-bg); color: var(--status-cancelled-text); } // 取消按钮容器 .cancel-btn-wrapper { display: inline-flex; align-items: center; } // 取消按钮样式 .cancel-btn { display: inline-flex; align-items: center; padding: 4rpx 12rpx; border-radius: 4rpx; font-size: var(--font-size-24); font-weight: 500; line-height: 1.5; color: var(--color-rose-500); background-color: var(--color-white); border: 1px solid var(--color-rose-500); cursor: pointer; transition: all var(--default-transition-duration) var(--default-transition-timing-function); white-space: nowrap; &:hover { color: var(--color-white); background-color: var(--color-rose-500); border-color: var(--color-rose-500); } // 添加点击效果 &:active { transform: scale(0.95); } }