designer-team-assignment-modal.component.scss 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593
  1. .modal-overlay {
  2. position: fixed;
  3. top: 0;
  4. left: 0;
  5. right: 0;
  6. bottom: 0;
  7. background: rgba(0, 0, 0, 0.5);
  8. display: flex;
  9. align-items: center;
  10. justify-content: center;
  11. z-index: 1050; // 🔥 降低到1050,让子弹窗可以显示在上层
  12. opacity: 0;
  13. visibility: hidden;
  14. transition: all 0.3s ease;
  15. &.visible {
  16. opacity: 1;
  17. visibility: visible;
  18. }
  19. }
  20. // === 复用员工详情面板的日历颜色统一覆盖(与组长端一致的绿色方案) ===
  21. // 说明:员工详情面板在其组件内使用了蓝色系的日历配色;
  22. // 组长端(dashboard-calendar.scss)对有项目/高负载采用绿色/红色方案。
  23. // 由于该面板在本弹窗中被复用且启用了样式封装,需要使用 ::ng-deep 做定向覆盖,
  24. // 仅影响本弹窗内的 app-employee-detail-panel,不改变原组件在组长端的表现。
  25. :host ::ng-deep app-employee-detail-panel .employee-calendar .calendar-grid .calendar-day.has-projects {
  26. background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);
  27. border-color: #10b981;
  28. }
  29. :host ::ng-deep app-employee-detail-panel .employee-calendar .calendar-grid .calendar-day .day-badge {
  30. background: #10b981;
  31. color: #ffffff;
  32. }
  33. :host ::ng-deep app-employee-detail-panel .employee-calendar .calendar-grid .calendar-day .day-badge.high-load {
  34. background: linear-gradient(135deg, #fecaca 0%, #fca5a5 100%);
  35. color: #dc2626;
  36. font-weight: 600;
  37. }
  38. :host ::ng-deep app-employee-detail-panel .employee-calendar .calendar-legend .legend-dot.project-dot {
  39. background: #10b981;
  40. }
  41. .modal-container {
  42. background: white;
  43. border-radius: 12px;
  44. width: 90vw; // 🔥 桌面端默认90vw,确保足够宽
  45. min-width: 900px; // 🔥 桌面端最小宽度900px
  46. max-width: 1200px;
  47. max-height: 95vh; // 🔥 从92vh增加到95vh,提供更多空间
  48. display: flex;
  49. flex-direction: column;
  50. box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
  51. transform: scale(0.9);
  52. transition: transform 0.3s ease;
  53. .modal-overlay.visible & {
  54. transform: scale(1);
  55. }
  56. }
  57. .modal-header {
  58. display: flex;
  59. align-items: center;
  60. justify-content: space-between;
  61. padding: 24px 32px;
  62. border-bottom: 1px solid #f0f0f0;
  63. h2 {
  64. margin: 0;
  65. font-size: 20px;
  66. font-weight: 600;
  67. color: #262626;
  68. }
  69. .close-btn {
  70. background: none;
  71. border: none;
  72. padding: 8px;
  73. cursor: pointer;
  74. border-radius: 6px;
  75. color: #8c8c8c;
  76. transition: all 0.2s ease;
  77. &:hover {
  78. background: #f5f5f5;
  79. color: #262626;
  80. }
  81. }
  82. }
  83. .modal-body {
  84. flex: 1;
  85. overflow-y: auto;
  86. overflow-x: hidden; // 🔥 防止横向滚动
  87. padding: 24px 32px 80px 32px; // 🔥 底部内边距从48px大幅增加到80px
  88. background: #fafafa; // 浅灰色背景,增强对比度
  89. min-height: 0; // 🔥 关键:允许flex子元素正确计算高度
  90. position: relative; // 🔥 为滚动指示器定位
  91. // 🔥 优化滚动体验
  92. scroll-behavior: smooth;
  93. // 🔥 美化滚动条(始终可见,提示用户可滚动)
  94. &::-webkit-scrollbar {
  95. width: 10px; // 🔥 稍微加宽,更显眼
  96. }
  97. &::-webkit-scrollbar-track {
  98. background: #e8e8e8; // 🔥 稍微深一点,更容易被注意到
  99. border-radius: 5px;
  100. margin: 4px 0; // 🔥 顶部和底部留出间距
  101. }
  102. &::-webkit-scrollbar-thumb {
  103. background: #1890ff; // 🔥 使用主色调,更显眼
  104. border-radius: 5px;
  105. border: 2px solid #e8e8e8; // 🔥 添加边框,视觉上更突出
  106. &:hover {
  107. background: #40a9ff; // 🔥 悬停时更亮
  108. }
  109. &:active {
  110. background: #096dd9; // 🔥 点击时更深
  111. }
  112. }
  113. }
  114. .team-selection-section {
  115. margin-bottom: 32px;
  116. h3 {
  117. margin: 0 0 16px 0;
  118. font-size: 16px;
  119. font-weight: 600;
  120. color: #262626;
  121. }
  122. }
  123. .team-grid {
  124. display: grid;
  125. grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  126. gap: 16px;
  127. }
  128. .team-card {
  129. border: 2px solid #f0f0f0;
  130. border-radius: 8px;
  131. padding: 20px;
  132. cursor: pointer;
  133. transition: all 0.2s ease;
  134. background: white;
  135. &:hover {
  136. border-color: #d9d9d9;
  137. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  138. }
  139. &.selected {
  140. border-color: #1890ff;
  141. background: #f6ffed;
  142. box-shadow: 0 4px 12px rgba(24, 144, 255, 0.15);
  143. }
  144. .team-header {
  145. margin-bottom: 12px;
  146. h4 {
  147. margin: 0 0 4px 0;
  148. font-size: 16px;
  149. font-weight: 600;
  150. color: #262626;
  151. }
  152. .team-leader {
  153. font-size: 14px;
  154. color: #8c8c8c;
  155. }
  156. }
  157. .team-description {
  158. font-size: 14px;
  159. color: #595959;
  160. margin-bottom: 16px;
  161. line-height: 1.5;
  162. }
  163. .team-stats {
  164. display: flex;
  165. gap: 16px;
  166. .stat-item {
  167. display: flex;
  168. flex-direction: column;
  169. align-items: center;
  170. .stat-label {
  171. font-size: 12px;
  172. color: #8c8c8c;
  173. margin-bottom: 4px;
  174. }
  175. .stat-value {
  176. font-size: 14px;
  177. font-weight: 600;
  178. color: #262626;
  179. &.idle {
  180. color: #52c41a;
  181. }
  182. }
  183. }
  184. }
  185. }
  186. .designer-selection-section {
  187. .section-header {
  188. display: flex;
  189. align-items: center;
  190. justify-content: space-between;
  191. margin-bottom: 24px;
  192. h3 {
  193. margin: 0;
  194. font-size: 16px;
  195. font-weight: 600;
  196. color: #262626;
  197. }
  198. .selection-summary {
  199. font-size: 14px;
  200. color: #1890ff;
  201. font-weight: 500;
  202. }
  203. }
  204. }
  205. .recommended-section {
  206. margin-bottom: 32px;
  207. padding: 20px;
  208. background: linear-gradient(135deg, #fff7e6 0%, #fff2e8 100%);
  209. border-radius: 8px;
  210. border: 1px solid #ffd591;
  211. h4 {
  212. margin: 0 0 16px 0;
  213. font-size: 15px;
  214. font-weight: 600;
  215. color: #d46b08;
  216. display: flex;
  217. align-items: center;
  218. gap: 8px;
  219. .recommend-icon {
  220. font-size: 16px;
  221. }
  222. }
  223. }
  224. .all-members-section {
  225. h4 {
  226. margin: 0 0 16px 0;
  227. font-size: 15px;
  228. font-weight: 600;
  229. color: #262626;
  230. }
  231. }
  232. .designer-grid {
  233. display: grid;
  234. grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  235. gap: 16px;
  236. }
  237. .designer-card {
  238. border: 3px solid #e8e8e8;
  239. border-radius: 10px;
  240. padding: 16px;
  241. cursor: pointer;
  242. transition: all 0.3s ease;
  243. background: white;
  244. display: flex;
  245. gap: 12px;
  246. position: relative;
  247. overflow: hidden; // ⭐ 修复:防止内部元素溢出
  248. // 🎨 根据工作量状态添加明显的颜色标识
  249. // ⭐ 优化:调整长条样式,避免过于明显
  250. &::before {
  251. content: '';
  252. position: absolute;
  253. left: 0;
  254. top: 0;
  255. bottom: 0;
  256. width: 4px; // 从6px减少到4px,更加精致
  257. border-radius: 10px 0 0 10px;
  258. transition: all 0.3s ease;
  259. opacity: 0.8; // 添加透明度,使其不那么突兀
  260. }
  261. // 🟢 空闲(0个项目)- 明显的绿色
  262. &.status-idle {
  263. border-color: #52c41a;
  264. background: linear-gradient(135deg, #f6ffed 0%, #ffffff 100%);
  265. &::before {
  266. background: linear-gradient(180deg, #73d13d 0%, #52c41a 100%);
  267. box-shadow: 0 0 10px rgba(82, 196, 26, 0.4);
  268. }
  269. &:hover {
  270. border-color: #73d13d;
  271. box-shadow: 0 6px 16px rgba(82, 196, 26, 0.25);
  272. transform: translateY(-2px);
  273. }
  274. }
  275. // 🟠 有项目(1-5个)- 明显的橙色
  276. &.status-reviewing {
  277. border-color: #faad14;
  278. background: linear-gradient(135deg, #fff7e6 0%, #ffffff 100%);
  279. &::before {
  280. background: linear-gradient(180deg, #ffc53d 0%, #faad14 100%);
  281. box-shadow: 0 0 10px rgba(250, 173, 20, 0.4);
  282. }
  283. &:hover {
  284. border-color: #ffc53d;
  285. box-shadow: 0 6px 16px rgba(250, 173, 20, 0.25);
  286. transform: translateY(-2px);
  287. }
  288. }
  289. // 🔴 繁忙(>5个项目)- 明显的红色
  290. &.status-stagnant {
  291. border-color: #ff4d4f;
  292. background: linear-gradient(135deg, #fff1f0 0%, #ffffff 100%);
  293. &::before {
  294. background: linear-gradient(180deg, #ff7875 0%, #ff4d4f 100%);
  295. box-shadow: 0 0 10px rgba(255, 77, 79, 0.4);
  296. }
  297. &:hover {
  298. border-color: #ff7875;
  299. box-shadow: 0 6px 16px rgba(255, 77, 79, 0.25);
  300. transform: translateY(-2px);
  301. }
  302. }
  303. &.selected {
  304. border-color: #1890ff;
  305. border-width: 3px;
  306. box-shadow: 0 6px 20px rgba(24, 144, 255, 0.25);
  307. transform: translateY(-2px);
  308. // 选中状态保留原有颜色标识
  309. &.status-idle::before {
  310. background: linear-gradient(180deg, #73d13d 0%, #52c41a 100%);
  311. }
  312. &.status-reviewing::before {
  313. background: linear-gradient(180deg, #ffc53d 0%, #faad14 100%);
  314. }
  315. &.status-stagnant::before {
  316. background: linear-gradient(180deg, #ff7875 0%, #ff4d4f 100%);
  317. }
  318. }
  319. &.recommended {
  320. border-color: #faad14;
  321. &.selected {
  322. border-color: #1890ff;
  323. }
  324. }
  325. &.cross-team {
  326. // 🟢 空闲(0个项目)- 明显的绿色
  327. &.status-idle {
  328. border-color: #52c41a;
  329. background: linear-gradient(135deg, #f6ffed 0%, #ffffff 100%);
  330. &::before {
  331. background: linear-gradient(180deg, #73d13d 0%, #52c41a 100%);
  332. box-shadow: 0 0 10px rgba(82, 196, 26, 0.4);
  333. }
  334. &:hover {
  335. border-color: #73d13d;
  336. box-shadow: 0 6px 16px rgba(82, 196, 26, 0.25);
  337. transform: translateY(-2px);
  338. }
  339. }
  340. // 🟠 有项目(1-5个)- 明显的橙色
  341. &.status-reviewing {
  342. border-color: #faad14;
  343. background: linear-gradient(135deg, #fff7e6 0%, #ffffff 100%);
  344. &::before {
  345. background: linear-gradient(180deg, #ffc53d 0%, #faad14 100%);
  346. box-shadow: 0 0 10px rgba(250, 173, 20, 0.4);
  347. }
  348. &:hover {
  349. border-color: #ffc53d;
  350. box-shadow: 0 6px 16px rgba(250, 173, 20, 0.25);
  351. transform: translateY(-2px);
  352. }
  353. }
  354. // 🔴 繁忙(>5个项目)- 明显的红色
  355. &.status-stagnant {
  356. border-color: #ff4d4f;
  357. background: linear-gradient(135deg, #fff1f0 0%, #ffffff 100%);
  358. &::before {
  359. background: linear-gradient(180deg, #ff7875 0%, #ff4d4f 100%);
  360. box-shadow: 0 0 10px rgba(255, 77, 79, 0.4);
  361. }
  362. &:hover {
  363. border-color: #ff7875;
  364. box-shadow: 0 6px 16px rgba(255, 77, 79, 0.25);
  365. transform: translateY(-2px);
  366. }
  367. }
  368. &.selected {
  369. border-color: #1890ff;
  370. border-width: 3px;
  371. box-shadow: 0 6px 20px rgba(24, 144, 255, 0.25);
  372. transform: translateY(-2px);
  373. // 选中状态保留原有颜色标识
  374. &.status-idle::before {
  375. background: linear-gradient(180deg, #73d13d 0%, #52c41a 100%);
  376. }
  377. &.status-reviewing::before {
  378. background: linear-gradient(180deg, #ffc53d 0%, #faad14 100%);
  379. }
  380. &.status-stagnant::before {
  381. background: linear-gradient(180deg, #ff7875 0%, #ff4d4f 100%);
  382. }
  383. }
  384. }
  385. .designer-avatar {
  386. position: relative;
  387. flex-shrink: 0;
  388. img, .avatar-placeholder {
  389. width: 48px;
  390. height: 48px;
  391. border-radius: 50%;
  392. }
  393. .avatar-placeholder {
  394. background: #f0f0f0;
  395. display: flex;
  396. align-items: center;
  397. justify-content: center;
  398. font-weight: 600;
  399. color: #8c8c8c;
  400. font-size: 18px;
  401. }
  402. .status-dot {
  403. position: absolute;
  404. bottom: 2px;
  405. right: 2px;
  406. width: 12px;
  407. height: 12px;
  408. border-radius: 50%;
  409. border: 2px solid white;
  410. }
  411. }
  412. .designer-info {
  413. flex: 1;
  414. min-width: 0;
  415. // ⭐ 修复:限制信息区域最大高度,避免卡片过高
  416. max-height: 160px;
  417. overflow: hidden;
  418. display: flex;
  419. flex-direction: column;
  420. .designer-name {
  421. font-size: 15px;
  422. font-weight: 600;
  423. color: #262626;
  424. margin-bottom: 4px;
  425. display: flex;
  426. align-items: center;
  427. gap: 8px;
  428. flex-shrink: 0; // 名称不收缩
  429. .leader-badge {
  430. background: #1890ff;
  431. color: white;
  432. font-size: 11px;
  433. padding: 2px 6px;
  434. border-radius: 4px;
  435. font-weight: 500;
  436. }
  437. .project-leader-star {
  438. font-size: 16px;
  439. margin-right: 4px;
  440. animation: sparkle 2s ease-in-out infinite;
  441. }
  442. .project-leader-badge {
  443. background: linear-gradient(135deg, #ff6b6b, #ffa500);
  444. color: white;
  445. font-size: 11px;
  446. padding: 2px 6px;
  447. border-radius: 4px;
  448. font-weight: 600;
  449. margin-left: 4px;
  450. box-shadow: 0 2px 4px rgba(255, 107, 107, 0.3);
  451. }
  452. .team-tag {
  453. background: #722ed1;
  454. color: white;
  455. font-size: 11px;
  456. padding: 2px 6px;
  457. border-radius: 4px;
  458. font-weight: 500;
  459. }
  460. }
  461. .designer-status {
  462. display: flex;
  463. align-items: center;
  464. gap: 12px;
  465. margin-bottom: 8px;
  466. .status-text {
  467. font-size: 13px;
  468. font-weight: 500;
  469. }
  470. // 🔥 新增:项目数量显示样式
  471. .project-count {
  472. font-size: 12px;
  473. padding: 2px 8px;
  474. border-radius: 12px;
  475. font-weight: 600;
  476. background: rgba(0, 0, 0, 0.04);
  477. border: 1px solid currentColor;
  478. opacity: 0.9;
  479. }
  480. .workload {
  481. font-size: 12px;
  482. padding: 2px 6px;
  483. border-radius: 4px;
  484. font-weight: 500;
  485. &.low {
  486. background: #f6ffed;
  487. color: #52c41a;
  488. }
  489. &.medium {
  490. background: #fff7e6;
  491. color: #faad14;
  492. }
  493. &.high {
  494. background: #fff2f0;
  495. color: #ff4d4f;
  496. }
  497. }
  498. }
  499. .designer-metrics {
  500. margin-bottom: 8px;
  501. flex-shrink: 1; // 允许收缩
  502. overflow: hidden; // 隐藏溢出内容
  503. .metric-item {
  504. margin-bottom: 4px;
  505. .metric-label {
  506. font-size: 12px;
  507. color: #8c8c8c;
  508. // ⭐ 修复:限制单行显示,避免日期过长导致卡片变形
  509. white-space: nowrap;
  510. overflow: hidden;
  511. text-overflow: ellipsis;
  512. max-width: 100%;
  513. }
  514. &.active .metric-label {
  515. color: #52c41a;
  516. font-weight: 500;
  517. }
  518. &.recent .metric-label {
  519. color: #faad14;
  520. font-weight: 500;
  521. }
  522. &.moderate .metric-label {
  523. color: #1890ff;
  524. font-weight: 500;
  525. }
  526. &.long .metric-label {
  527. color: #ff4d4f;
  528. font-weight: 500;
  529. }
  530. &.review-dates .metric-label {
  531. color: #722ed1;
  532. font-weight: 500;
  533. // ⭐ 修复:对图日期特别处理,最多显示2行
  534. white-space: normal;
  535. display: -webkit-box;
  536. -webkit-box-orient: vertical;
  537. -webkit-line-clamp: 2;
  538. line-clamp: 2; // 标准属性,放在vendor前缀之后
  539. line-height: 1.4;
  540. .more-dates {
  541. display: inline-block;
  542. margin-left: 4px;
  543. padding: 2px 6px;
  544. background: rgba(114, 46, 209, 0.1);
  545. border-radius: 4px;
  546. font-size: 11px;
  547. color: #722ed1;
  548. font-weight: 600;
  549. }
  550. }
  551. }
  552. }
  553. .designer-skills {
  554. display: flex;
  555. flex-wrap: wrap;
  556. gap: 4px;
  557. .skill-tag {
  558. background: #f0f0f0;
  559. color: #595959;
  560. font-size: 11px;
  561. padding: 2px 6px;
  562. border-radius: 4px;
  563. }
  564. .skill-more {
  565. background: #d9d9d9;
  566. color: #8c8c8c;
  567. font-size: 11px;
  568. padding: 2px 6px;
  569. border-radius: 4px;
  570. }
  571. }
  572. }
  573. .designer-actions {
  574. flex-shrink: 0;
  575. display: flex;
  576. flex-direction: column; // ⭐ 改为垂直布局,避免横向过宽
  577. align-items: center;
  578. gap: 6px; // 按钮之间的间距
  579. .calendar-btn,
  580. .space-assign-btn {
  581. background: white;
  582. border: 1px solid #e2e8f0;
  583. padding: 6px 10px;
  584. cursor: pointer;
  585. border-radius: 6px;
  586. font-size: 14px; // 从16px减少到14px
  587. transition: all 0.2s ease;
  588. white-space: nowrap; // 防止文字换行
  589. &:hover {
  590. background: #f8fafc;
  591. border-color: #cbd5e1;
  592. transform: scale(1.05);
  593. }
  594. }
  595. }
  596. }
  597. .cross-team-section {
  598. margin-top: 32px;
  599. padding-top: 24px;
  600. border-top: 1px solid #f0f0f0;
  601. .cross-team-header {
  602. display: flex;
  603. align-items: center;
  604. gap: 12px;
  605. margin-bottom: 16px;
  606. .checkbox-label {
  607. display: flex;
  608. align-items: center;
  609. gap: 8px;
  610. cursor: pointer;
  611. font-weight: 500;
  612. color: #262626;
  613. input[type="checkbox"] {
  614. width: 16px;
  615. height: 16px;
  616. }
  617. }
  618. .cross-team-hint {
  619. font-size: 13px;
  620. color: #8c8c8c;
  621. }
  622. }
  623. .cross-team-designers {
  624. h4 {
  625. margin: 16px 0 12px 0;
  626. font-size: 14px;
  627. font-weight: 600;
  628. color: #722ed1;
  629. }
  630. }
  631. }
  632. // 移除原来的 modal-footer 样式,因为已经移到内容区域内
  633. .assignment-summary-section {
  634. margin-top: 32px; // 🔥 增加顶部间距
  635. margin-bottom: 60px; // 🔥 底部间距从40px再增加到60px,确保按钮可见
  636. padding: 24px;
  637. background: #ffffff; // 🔥 改为白色背景,更显眼
  638. border-radius: 12px;
  639. border: 2px solid #1890ff; // 🔥 加粗边框,使用主色调
  640. box-shadow: 0 4px 12px rgba(24, 144, 255, 0.1); // 🔥 添加阴影
  641. // 🔥 确保在可见区域内
  642. position: relative;
  643. z-index: 1;
  644. .summary-header {
  645. margin-bottom: 16px;
  646. h4 {
  647. margin: 0;
  648. font-size: 16px;
  649. font-weight: 600;
  650. color: #262626;
  651. }
  652. }
  653. .selection-summary {
  654. margin-bottom: 20px;
  655. .summary-item {
  656. margin-bottom: 12px;
  657. font-size: 14px;
  658. display: flex;
  659. align-items: center;
  660. gap: 8px;
  661. .summary-label {
  662. color: #8c8c8c;
  663. font-weight: 500;
  664. }
  665. .summary-value {
  666. color: #262626;
  667. font-weight: 500;
  668. &.project-leader {
  669. color: #ff6b6b;
  670. font-weight: 600;
  671. background: linear-gradient(135deg, rgba(255, 107, 107, 0.1), rgba(255, 165, 0, 0.1));
  672. padding: 2px 8px;
  673. border-radius: 4px;
  674. border: 1px solid rgba(255, 107, 107, 0.3);
  675. }
  676. }
  677. }
  678. }
  679. .modal-actions {
  680. display: flex;
  681. gap: 12px;
  682. justify-content: flex-end;
  683. margin-top: 20px; // 🔥 增加与摘要内容的间距
  684. padding: 20px; // 🔥 四周内边距
  685. margin: 20px -24px -24px -24px; // 🔥 负边距让其延伸到容器边缘
  686. background: linear-gradient(to top, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0.98) 100%); // 🔥 渐变背景
  687. border-top: 2px solid #e8e8e8; // 🔥 加粗分隔线
  688. border-radius: 0 0 12px 12px; // 🔥 底部圆角
  689. box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.05); // 🔥 向上的阴影,增强可见性
  690. .btn-secondary, .btn-primary {
  691. padding: 12px 24px; // 🔥 增大按钮
  692. border-radius: 8px; // 🔥 增加圆角
  693. font-size: 14px;
  694. font-weight: 600; // 🔥 加粗字体
  695. cursor: pointer;
  696. transition: all 0.2s ease;
  697. border: none;
  698. min-width: 100px; // 🔥 最小宽度
  699. flex-shrink: 0; // 🔥 防止缩小
  700. }
  701. .btn-secondary {
  702. background: #f5f5f5;
  703. color: #595959;
  704. border: 1px solid #d9d9d9; // 🔥 添加边框
  705. &:hover {
  706. background: #e6e6e6;
  707. border-color: #bfbfbf;
  708. }
  709. }
  710. .btn-primary {
  711. background: #1890ff;
  712. color: white;
  713. box-shadow: 0 2px 8px rgba(24, 144, 255, 0.2); // 🔥 添加阴影
  714. &:hover:not(:disabled) {
  715. background: #40a9ff;
  716. box-shadow: 0 4px 12px rgba(24, 144, 255, 0.3);
  717. transform: translateY(-1px); // 🔥 轻微上移效果
  718. }
  719. &:disabled {
  720. background: #d9d9d9;
  721. color: #bfbfbf;
  722. cursor: not-allowed;
  723. box-shadow: none;
  724. }
  725. }
  726. // 🔥 响应式优化:小屏幕下按钮占满宽度
  727. @media (max-width: 480px) {
  728. flex-direction: column;
  729. .btn-secondary, .btn-primary {
  730. width: 100%;
  731. }
  732. }
  733. }
  734. }
  735. // 设计师详细日历弹窗样式
  736. .calendar-modal-overlay {
  737. position: fixed;
  738. top: 0;
  739. left: 0;
  740. right: 0;
  741. bottom: 0;
  742. background: rgba(0, 0, 0, 0.5);
  743. display: flex;
  744. align-items: center;
  745. justify-content: center;
  746. z-index: 1150; // 🔥 设置为1150,在主弹窗(1050)之上
  747. }
  748. .calendar-modal-container {
  749. background: white;
  750. border-radius: 12px;
  751. width: 80vw;
  752. max-width: 800px;
  753. max-height: 80vh;
  754. display: flex;
  755. flex-direction: column;
  756. box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
  757. }
  758. .calendar-modal-header {
  759. display: flex;
  760. align-items: center;
  761. justify-content: space-between;
  762. padding: 20px 24px;
  763. border-bottom: 1px solid #f0f0f0;
  764. h3 {
  765. margin: 0;
  766. font-size: 18px;
  767. font-weight: 600;
  768. color: #262626;
  769. }
  770. .close-btn {
  771. background: none;
  772. border: none;
  773. padding: 6px;
  774. cursor: pointer;
  775. border-radius: 4px;
  776. color: #8c8c8c;
  777. transition: all 0.2s ease;
  778. &:hover {
  779. background: #f5f5f5;
  780. color: #262626;
  781. }
  782. }
  783. }
  784. .calendar-modal-body {
  785. flex: 1;
  786. overflow-y: auto;
  787. padding: 24px;
  788. }
  789. // 响应式设计
  790. @media (max-width: 768px) {
  791. .modal-container {
  792. width: 95vw;
  793. max-height: 95vh;
  794. }
  795. .modal-header,
  796. .modal-body,
  797. .modal-footer {
  798. padding-left: 16px;
  799. padding-right: 16px;
  800. }
  801. .team-grid {
  802. grid-template-columns: 1fr;
  803. }
  804. .designer-grid {
  805. grid-template-columns: 1fr;
  806. }
  807. .modal-footer {
  808. flex-direction: column;
  809. align-items: stretch;
  810. gap: 16px;
  811. .modal-actions {
  812. justify-content: stretch;
  813. .btn-secondary,
  814. .btn-primary {
  815. flex: 1;
  816. }
  817. }
  818. }
  819. }
  820. // ===== 空间分配相关样式 =====
  821. // ⭐ 注意:.designer-actions 已在上面的 .designer-card 中定义,这里移除重复定义
  822. .designer-spaces-info {
  823. margin-top: 12px;
  824. padding: 10px;
  825. background: #f0f9ff;
  826. border: 1px solid #bae6fd;
  827. border-radius: 6px;
  828. font-size: 13px;
  829. .spaces-label {
  830. color: #0369a1;
  831. font-weight: 500;
  832. margin-right: 6px;
  833. }
  834. .spaces-value {
  835. color: #075985;
  836. }
  837. }
  838. // 空间分配弹窗
  839. .space-assignment-overlay {
  840. position: fixed;
  841. top: 0;
  842. left: 0;
  843. right: 0;
  844. bottom: 0;
  845. background: rgba(0, 0, 0, 0.6);
  846. display: flex;
  847. align-items: center;
  848. justify-content: center;
  849. z-index: 1200; // 🔥 设置为1200,在主弹窗(1050)和日历弹窗(1150)之上
  850. animation: fadeIn 0.2s ease;
  851. }
  852. .space-assignment-container {
  853. background: white;
  854. border-radius: 12px;
  855. width: 90%;
  856. max-width: 600px;
  857. max-height: 85vh; // 🔥 从80vh增加到85vh,提供更多空间
  858. display: flex;
  859. flex-direction: column;
  860. animation: slideUp 0.3s ease;
  861. overflow: hidden;
  862. }
  863. .space-assignment-header {
  864. display: flex;
  865. align-items: center;
  866. justify-content: space-between;
  867. padding: 20px 24px;
  868. border-bottom: 1px solid #e2e8f0;
  869. .designer-preview {
  870. display: flex;
  871. align-items: center;
  872. gap: 12px;
  873. .designer-avatar {
  874. width: 48px;
  875. height: 48px;
  876. border-radius: 50%;
  877. overflow: hidden;
  878. position: relative;
  879. img {
  880. width: 100%;
  881. height: 100%;
  882. object-fit: cover;
  883. }
  884. .avatar-placeholder {
  885. width: 100%;
  886. height: 100%;
  887. display: flex;
  888. align-items: center;
  889. justify-content: center;
  890. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  891. color: white;
  892. font-size: 20px;
  893. font-weight: 600;
  894. }
  895. }
  896. .designer-name {
  897. font-size: 18px;
  898. font-weight: 600;
  899. color: #1e293b;
  900. }
  901. }
  902. .close-btn {
  903. width: 32px;
  904. height: 32px;
  905. border: none;
  906. background: #f8fafc;
  907. border-radius: 6px;
  908. cursor: pointer;
  909. display: flex;
  910. align-items: center;
  911. justify-content: center;
  912. color: #64748b;
  913. transition: all 0.2s ease;
  914. &:hover {
  915. background: #f1f5f9;
  916. color: #0f172a;
  917. }
  918. }
  919. }
  920. .space-selection-section {
  921. padding: 24px 24px 32px 24px; // 🔥 增加底部padding从24px到32px
  922. overflow-y: auto; // 🔥 添加滚动
  923. flex: 1; // 🔥 允许弹性增长
  924. // 🔥 滚动条样式
  925. &::-webkit-scrollbar {
  926. width: 8px;
  927. }
  928. &::-webkit-scrollbar-track {
  929. background: #f1f5f9;
  930. border-radius: 4px;
  931. }
  932. &::-webkit-scrollbar-thumb {
  933. background: #cbd5e1;
  934. border-radius: 4px;
  935. &:hover {
  936. background: #94a3b8;
  937. }
  938. }
  939. .form-label {
  940. font-size: 16px;
  941. font-weight: 600;
  942. color: #1e293b;
  943. margin-bottom: 8px;
  944. display: block;
  945. .required {
  946. color: #dc2626;
  947. margin-left: 4px;
  948. }
  949. }
  950. .form-help {
  951. font-size: 13px;
  952. color: #64748b;
  953. margin-bottom: 20px;
  954. }
  955. .space-checkbox-list {
  956. display: flex;
  957. flex-direction: column;
  958. gap: 12px;
  959. max-height: 400px;
  960. overflow-y: auto;
  961. padding-right: 8px;
  962. padding-bottom: 16px; // 🔥 列表底部额外空间
  963. &::-webkit-scrollbar {
  964. width: 6px;
  965. }
  966. &::-webkit-scrollbar-track {
  967. background: #f1f5f9;
  968. border-radius: 3px;
  969. }
  970. &::-webkit-scrollbar-thumb {
  971. background: #cbd5e1;
  972. border-radius: 3px;
  973. &:hover {
  974. background: #94a3b8;
  975. }
  976. }
  977. .space-checkbox-item {
  978. display: flex;
  979. align-items: flex-start;
  980. gap: 12px;
  981. padding: 14px;
  982. border: 1px solid #e2e8f0;
  983. border-radius: 8px;
  984. cursor: pointer;
  985. transition: all 0.2s ease;
  986. &:hover {
  987. border-color: #cbd5e1;
  988. background: #f8fafc;
  989. }
  990. input[type="checkbox"] {
  991. display: none;
  992. }
  993. .checkbox-custom {
  994. width: 20px;
  995. height: 20px;
  996. border: 2px solid #cbd5e1;
  997. border-radius: 4px;
  998. flex-shrink: 0;
  999. position: relative;
  1000. transition: all 0.2s ease;
  1001. &::after {
  1002. content: '';
  1003. position: absolute;
  1004. left: 50%;
  1005. top: 50%;
  1006. transform: translate(-50%, -50%) scale(0);
  1007. width: 10px;
  1008. height: 6px;
  1009. border: 2px solid white;
  1010. border-top: none;
  1011. border-right: none;
  1012. transform: translate(-50%, -60%) rotate(-45deg) scale(0);
  1013. transition: transform 0.2s ease;
  1014. }
  1015. }
  1016. input[type="checkbox"]:checked + .checkbox-custom {
  1017. background: #4f46e5;
  1018. border-color: #4f46e5;
  1019. &::after {
  1020. transform: translate(-50%, -60%) rotate(-45deg) scale(1);
  1021. }
  1022. }
  1023. .space-info {
  1024. flex: 1;
  1025. display: flex;
  1026. flex-direction: column;
  1027. gap: 4px;
  1028. .space-name {
  1029. font-size: 14px;
  1030. font-weight: 500;
  1031. color: #1e293b;
  1032. }
  1033. .space-area {
  1034. font-size: 13px;
  1035. color: #64748b;
  1036. font-weight: 400;
  1037. }
  1038. .space-desc {
  1039. font-size: 12px;
  1040. color: #94a3b8;
  1041. }
  1042. }
  1043. }
  1044. }
  1045. }
  1046. .space-assignment-footer {
  1047. display: flex;
  1048. justify-content: flex-end;
  1049. gap: 12px;
  1050. padding: 20px 24px; // 🔥 增加padding从16px到20px
  1051. border-top: 2px solid #e2e8f0; // 🔥 加粗边框
  1052. background: linear-gradient(to top, #f8fafc 0%, #ffffff 100%); // 🔥 渐变背景
  1053. box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.05); // 🔥 向上阴影增强可见性
  1054. flex-shrink: 0; // 🔥 防止缩小
  1055. .btn-secondary,
  1056. .btn-primary {
  1057. padding: 12px 28px; // 🔥 增加padding从10px 24px到12px 28px
  1058. border-radius: 8px; // 🔥 增加圆角
  1059. border: none;
  1060. font-size: 14px;
  1061. font-weight: 600; // 🔥 加粗字体从500到600
  1062. cursor: pointer;
  1063. transition: all 0.2s ease;
  1064. min-width: 100px; // 🔥 最小宽度
  1065. flex-shrink: 0; // 🔥 防止缩小
  1066. }
  1067. .btn-secondary {
  1068. background: white;
  1069. color: #64748b;
  1070. border: 1px solid #e2e8f0;
  1071. &:hover {
  1072. background: #f1f5f9;
  1073. border-color: #cbd5e1;
  1074. transform: translateY(-1px); // 🔥 hover时轻微上移
  1075. }
  1076. &:active {
  1077. transform: translateY(0); // 🔥 点击时回到原位
  1078. }
  1079. }
  1080. .btn-primary {
  1081. background: #4f46e5;
  1082. color: white;
  1083. box-shadow: 0 2px 8px rgba(79, 70, 229, 0.2); // 🔥 添加阴影
  1084. &:hover {
  1085. background: #4338ca;
  1086. box-shadow: 0 4px 12px rgba(79, 70, 229, 0.3); // 🔥 hover时增强阴影
  1087. transform: translateY(-1px); // 🔥 hover时轻微上移
  1088. }
  1089. &:active {
  1090. transform: translateY(0); // 🔥 点击时回到原位
  1091. }
  1092. }
  1093. }
  1094. // 空间加载状态
  1095. .space-loading {
  1096. display: flex;
  1097. align-items: center;
  1098. justify-content: center;
  1099. gap: 12px;
  1100. padding: 40px 20px;
  1101. color: #64748b;
  1102. font-size: 14px;
  1103. .spinner {
  1104. width: 20px;
  1105. height: 20px;
  1106. border: 2px solid #e2e8f0;
  1107. border-top-color: #4f46e5;
  1108. border-radius: 50%;
  1109. animation: spin 0.8s linear infinite;
  1110. }
  1111. }
  1112. // 空间加载错误
  1113. .space-error {
  1114. display: flex;
  1115. align-items: center;
  1116. gap: 12px;
  1117. padding: 16px;
  1118. background: #fef2f2;
  1119. border: 1px solid #fecaca;
  1120. border-radius: 8px;
  1121. color: #dc2626;
  1122. font-size: 14px;
  1123. margin-bottom: 16px;
  1124. .icon-warning {
  1125. width: 20px;
  1126. height: 20px;
  1127. flex-shrink: 0;
  1128. }
  1129. }
  1130. // 🔥 响应式优化:小屏幕下空间分配弹窗
  1131. @media (max-width: 768px) {
  1132. .space-assignment-container {
  1133. width: 95%;
  1134. max-height: 90vh; // 🔥 增加高度
  1135. }
  1136. .space-assignment-header {
  1137. padding: 16px 20px;
  1138. .designer-name {
  1139. font-size: 16px;
  1140. }
  1141. }
  1142. .space-selection-section {
  1143. padding: 20px 20px 40px 20px; // 🔥 增加底部空间
  1144. }
  1145. .space-assignment-footer {
  1146. padding: 18px 20px;
  1147. .btn-secondary,
  1148. .btn-primary {
  1149. padding: 12px 24px;
  1150. font-size: 14px;
  1151. min-width: 90px;
  1152. }
  1153. }
  1154. }
  1155. @media (max-width: 480px) {
  1156. .space-assignment-container {
  1157. width: 98%;
  1158. max-height: 92vh; // 🔥 进一步增加高度
  1159. border-radius: 8px;
  1160. }
  1161. .space-assignment-header {
  1162. padding: 14px 16px;
  1163. .designer-avatar {
  1164. width: 40px;
  1165. height: 40px;
  1166. }
  1167. .designer-name {
  1168. font-size: 15px;
  1169. }
  1170. }
  1171. .space-selection-section {
  1172. padding: 16px 16px 36px 16px; // 🔥 增加底部空间
  1173. .form-label {
  1174. font-size: 15px;
  1175. }
  1176. .space-checkbox-list {
  1177. max-height: 300px;
  1178. padding-bottom: 20px; // 🔥 增加列表底部空间
  1179. }
  1180. }
  1181. .space-assignment-footer {
  1182. padding: 16px;
  1183. gap: 10px;
  1184. .btn-secondary,
  1185. .btn-primary {
  1186. padding: 12px 20px;
  1187. font-size: 14px;
  1188. min-width: 85px;
  1189. flex: 1; // 🔥 在小屏幕下平分空间
  1190. }
  1191. }
  1192. }
  1193. // 空间列表为空
  1194. .space-empty {
  1195. display: flex;
  1196. flex-direction: column;
  1197. align-items: center;
  1198. justify-content: center;
  1199. padding: 60px 20px;
  1200. text-align: center;
  1201. .icon-empty {
  1202. width: 48px;
  1203. height: 48px;
  1204. color: #cbd5e1;
  1205. margin-bottom: 16px;
  1206. }
  1207. p {
  1208. margin: 0 0 8px;
  1209. font-size: 14px;
  1210. font-weight: 500;
  1211. color: #64748b;
  1212. }
  1213. small {
  1214. font-size: 12px;
  1215. color: #94a3b8;
  1216. }
  1217. }
  1218. @keyframes spin {
  1219. to {
  1220. transform: rotate(360deg);
  1221. }
  1222. }
  1223. @keyframes fadeIn {
  1224. from {
  1225. opacity: 0;
  1226. }
  1227. to {
  1228. opacity: 1;
  1229. }
  1230. }
  1231. @keyframes slideUp {
  1232. from {
  1233. transform: translateY(20px);
  1234. opacity: 0;
  1235. }
  1236. to {
  1237. transform: translateY(0);
  1238. opacity: 1;
  1239. }
  1240. }
  1241. @keyframes sparkle {
  1242. 0%, 100% {
  1243. transform: scale(1);
  1244. opacity: 1;
  1245. }
  1246. 50% {
  1247. transform: scale(1.2);
  1248. opacity: 0.8;
  1249. }
  1250. }
  1251. // 🔥 响应式优化:大屏幕桌面端
  1252. @media (min-width: 1441px) {
  1253. .modal-container {
  1254. width: 85vw; // 🔥 超大屏幕稍微窄一点
  1255. min-width: 1000px;
  1256. max-width: 1400px; // 🔥 增加最大宽度
  1257. }
  1258. }
  1259. // 🔥 响应式优化:标准桌面端
  1260. @media (min-width: 1025px) and (max-width: 1440px) {
  1261. .modal-container {
  1262. width: 90vw;
  1263. min-width: 900px;
  1264. max-width: 1200px;
  1265. }
  1266. }
  1267. // 🔥 响应式优化:中等屏幕适配
  1268. @media (min-width: 769px) and (max-width: 1024px) {
  1269. .modal-container {
  1270. width: 90vw;
  1271. min-width: 700px; // 🔥 中等屏幕最小宽度700px
  1272. max-width: 1000px;
  1273. }
  1274. }
  1275. // 🔥 响应式优化:小屏幕适配
  1276. @media (max-width: 768px) {
  1277. .modal-container {
  1278. width: 95vw;
  1279. min-width: auto; // 🔥 移除最小宽度限制
  1280. max-height: 96vh; // 🔥 增加到96vh
  1281. }
  1282. .modal-header {
  1283. padding: 20px 24px;
  1284. h2 {
  1285. font-size: 18px;
  1286. }
  1287. }
  1288. .modal-body {
  1289. padding: 20px 24px 80px 24px; // 🔥 底部内边距从60px增加到80px,确保按钮完全可见
  1290. }
  1291. .assignment-summary-section {
  1292. margin-top: 24px;
  1293. margin-bottom: 50px; // 🔥 底部间距从32px增加到50px,确保按钮完全可见
  1294. padding: 20px;
  1295. .summary-header h4 {
  1296. font-size: 15px;
  1297. }
  1298. .selection-summary .summary-item {
  1299. font-size: 13px;
  1300. flex-wrap: wrap;
  1301. }
  1302. .modal-actions {
  1303. margin: 16px -20px -20px -20px; // 🔥 负边距延伸到容器边缘
  1304. padding: 16px 20px; // 🔥 四周内边距
  1305. background: linear-gradient(to top, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0.98) 100%);
  1306. border-top: 2px solid #e8e8e8;
  1307. box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.08);
  1308. border-radius: 0 0 12px 12px;
  1309. .btn-secondary, .btn-primary {
  1310. padding: 12px 22px;
  1311. font-size: 14px;
  1312. min-width: 95px;
  1313. font-weight: 600;
  1314. }
  1315. }
  1316. }
  1317. }
  1318. @media (max-width: 480px) {
  1319. .modal-container {
  1320. width: 98vw;
  1321. min-width: auto; // 🔥 移除最小宽度限制
  1322. max-height: 97vh; // 🔥 增加到97vh
  1323. border-radius: 8px;
  1324. }
  1325. .modal-header {
  1326. padding: 16px 20px;
  1327. h2 {
  1328. font-size: 16px;
  1329. }
  1330. }
  1331. .modal-body {
  1332. padding: 16px 20px 70px 20px; // 🔥 底部内边距从50px增加到70px,确保按钮完全可见
  1333. }
  1334. .assignment-summary-section {
  1335. margin-top: 20px;
  1336. margin-bottom: 40px; // 🔥 底部间距从24px增加到40px,确保按钮完全可见
  1337. padding: 16px;
  1338. border-radius: 8px;
  1339. .summary-header h4 {
  1340. font-size: 14px;
  1341. }
  1342. .selection-summary .summary-item {
  1343. font-size: 12px;
  1344. margin-bottom: 8px;
  1345. }
  1346. .modal-actions {
  1347. margin: 16px -16px -16px -16px; // 🔥 负边距延伸到容器边缘
  1348. padding: 16px; // 🔥 四周内边距
  1349. gap: 10px; // 🔥 减小按钮间距节省空间
  1350. background: linear-gradient(to top, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0.98) 100%);
  1351. border-top: 2px solid #e8e8e8;
  1352. box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.08); // 🔥 增强阴影
  1353. border-radius: 0 0 8px 8px;
  1354. .btn-secondary, .btn-primary {
  1355. padding: 12px 20px; // 🔥 增加padding确保易点击
  1356. font-size: 14px; // 🔥 保持字体大小
  1357. min-width: 90px; // 🔥 最小宽度
  1358. font-weight: 600;
  1359. }
  1360. }
  1361. }
  1362. }