admin.css 17 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045
  1. /* 管理后台样式 */
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. box-sizing: border-box;
  6. }
  7. body {
  8. font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  9. background: #f5f7fa;
  10. color: #1f2937;
  11. }
  12. /* 登录页面 */
  13. .login-page {
  14. display: flex;
  15. align-items: center;
  16. justify-content: center;
  17. min-height: 100vh;
  18. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  19. }
  20. .login-container {
  21. background: white;
  22. border-radius: 16px;
  23. padding: 40px;
  24. width: 100%;
  25. max-width: 400px;
  26. box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
  27. }
  28. .login-header {
  29. text-align: center;
  30. margin-bottom: 32px;
  31. }
  32. .login-header h1 {
  33. font-size: 28px;
  34. font-weight: 700;
  35. color: #1f2937;
  36. margin-bottom: 8px;
  37. }
  38. .login-header p {
  39. color: #6b7280;
  40. font-size: 14px;
  41. }
  42. .login-form {
  43. display: flex;
  44. flex-direction: column;
  45. gap: 20px;
  46. }
  47. .form-group {
  48. display: flex;
  49. flex-direction: column;
  50. gap: 8px;
  51. }
  52. .form-group label {
  53. font-size: 14px;
  54. font-weight: 500;
  55. color: #374151;
  56. }
  57. .form-group input,
  58. .form-group select {
  59. padding: 12px 16px;
  60. border: 1px solid #e5e7eb;
  61. border-radius: 8px;
  62. font-size: 14px;
  63. transition: all 0.2s;
  64. }
  65. .form-group input:focus,
  66. .form-group select:focus {
  67. outline: none;
  68. border-color: #667eea;
  69. box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
  70. }
  71. .form-hint {
  72. display: block;
  73. margin-top: 4px;
  74. font-size: 12px;
  75. color: #6b7280;
  76. }
  77. .login-btn {
  78. padding: 12px 24px;
  79. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  80. color: white;
  81. border: none;
  82. border-radius: 8px;
  83. font-size: 16px;
  84. font-weight: 600;
  85. cursor: pointer;
  86. transition: all 0.2s;
  87. margin-top: 8px;
  88. }
  89. .login-btn:hover {
  90. transform: translateY(-1px);
  91. box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
  92. }
  93. .error-message {
  94. color: #ef4444;
  95. font-size: 14px;
  96. text-align: center;
  97. padding: 8px;
  98. background: #fef2f2;
  99. border-radius: 6px;
  100. }
  101. /* 主界面 */
  102. .main-page {
  103. display: flex;
  104. min-height: 100vh;
  105. }
  106. /* 侧边栏 */
  107. .sidebar {
  108. width: 240px;
  109. background: white;
  110. border-right: 1px solid #e5e7eb;
  111. display: flex;
  112. flex-direction: column;
  113. position: fixed;
  114. height: 100vh;
  115. left: 0;
  116. top: 0;
  117. }
  118. .sidebar-header {
  119. padding: 20px;
  120. border-bottom: 1px solid #e5e7eb;
  121. }
  122. .sidebar-header h2 {
  123. font-size: 18px;
  124. font-weight: 700;
  125. color: #1f2937;
  126. }
  127. .sidebar-nav {
  128. flex: 1;
  129. padding: 12px 0;
  130. overflow-y: auto;
  131. }
  132. .nav-item {
  133. display: flex;
  134. align-items: center;
  135. gap: 12px;
  136. padding: 12px 20px;
  137. color: #6b7280;
  138. text-decoration: none;
  139. transition: all 0.2s;
  140. border-left: 3px solid transparent;
  141. }
  142. .nav-item:hover {
  143. background: #f9fafb;
  144. color: #667eea;
  145. }
  146. .nav-item.active {
  147. background: #f3f4f6;
  148. color: #667eea;
  149. border-left-color: #667eea;
  150. font-weight: 600;
  151. }
  152. .nav-item svg {
  153. width: 20px;
  154. height: 20px;
  155. }
  156. .sidebar-footer {
  157. padding: 16px 20px;
  158. border-top: 1px solid #e5e7eb;
  159. }
  160. .logout-btn {
  161. width: 100%;
  162. display: flex;
  163. align-items: center;
  164. justify-content: center;
  165. gap: 10px;
  166. padding: 12px 16px;
  167. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  168. color: white;
  169. border: none;
  170. border-radius: 10px;
  171. font-size: 14px;
  172. font-weight: 600;
  173. cursor: pointer;
  174. transition: all 0.3s ease;
  175. box-shadow: 0 2px 8px rgba(102, 126, 234, 0.2);
  176. position: relative;
  177. overflow: hidden;
  178. }
  179. .logout-btn::before {
  180. content: '';
  181. position: absolute;
  182. top: 0;
  183. left: -100%;
  184. width: 100%;
  185. height: 100%;
  186. background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
  187. transition: left 0.5s;
  188. }
  189. .logout-btn:hover::before {
  190. left: 100%;
  191. }
  192. .logout-btn:hover {
  193. transform: translateY(-2px);
  194. box-shadow: 0 4px 16px rgba(102, 126, 234, 0.4);
  195. background: linear-gradient(135deg, #5568d3 0%, #6a3d91 100%);
  196. }
  197. .logout-btn:active {
  198. transform: translateY(0);
  199. box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
  200. }
  201. .logout-btn svg {
  202. flex-shrink: 0;
  203. transition: transform 0.3s ease;
  204. }
  205. .logout-btn:hover svg {
  206. transform: translateX(2px);
  207. }
  208. /* 主内容区 */
  209. .main-content {
  210. flex: 1;
  211. margin-left: 240px;
  212. display: flex;
  213. flex-direction: column;
  214. }
  215. .main-header {
  216. background: white;
  217. padding: 20px 32px;
  218. border-bottom: 1px solid #e5e7eb;
  219. display: flex;
  220. align-items: center;
  221. justify-content: space-between;
  222. }
  223. .main-header h1 {
  224. font-size: 22px;
  225. font-weight: 700;
  226. color: #1f2937;
  227. }
  228. .header-actions {
  229. display: flex;
  230. align-items: center;
  231. gap: 16px;
  232. }
  233. .admin-name {
  234. color: #6b7280;
  235. font-size: 14px;
  236. }
  237. .content-area {
  238. flex: 1;
  239. padding: 0;
  240. overflow: hidden;
  241. position: relative;
  242. }
  243. .content-area iframe {
  244. width: 100%;
  245. height: 100%;
  246. border: none;
  247. display: block;
  248. }
  249. .page-content {
  250. display: none;
  251. }
  252. .page-content.active {
  253. display: block;
  254. }
  255. /* 页面头部 */
  256. .page-header {
  257. display: flex;
  258. align-items: center;
  259. justify-content: space-between;
  260. margin-bottom: 20px;
  261. }
  262. .page-header h2 {
  263. font-size: 18px;
  264. font-weight: 600;
  265. color: #1f2937;
  266. }
  267. .header-buttons {
  268. display: flex;
  269. gap: 12px;
  270. }
  271. /* 按钮 */
  272. .btn-primary {
  273. padding: 10px 20px;
  274. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  275. color: white;
  276. border: none;
  277. border-radius: 8px;
  278. font-size: 14px;
  279. font-weight: 600;
  280. cursor: pointer;
  281. transition: all 0.2s;
  282. }
  283. .btn-primary:hover {
  284. transform: translateY(-1px);
  285. box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
  286. }
  287. .btn-secondary {
  288. padding: 10px 20px;
  289. background: #f3f4f6;
  290. color: #374151;
  291. border: none;
  292. border-radius: 8px;
  293. font-size: 14px;
  294. font-weight: 600;
  295. cursor: pointer;
  296. transition: all 0.2s;
  297. }
  298. .btn-secondary:hover {
  299. background: #e5e7eb;
  300. }
  301. .btn-danger {
  302. padding: 6px 12px;
  303. background: #ef4444;
  304. color: white;
  305. border: none;
  306. border-radius: 6px;
  307. font-size: 12px;
  308. cursor: pointer;
  309. transition: all 0.2s;
  310. }
  311. .btn-danger:hover {
  312. background: #dc2626;
  313. }
  314. .btn-edit {
  315. padding: 6px 12px;
  316. background: #667eea;
  317. color: white;
  318. border: none;
  319. border-radius: 6px;
  320. font-size: 12px;
  321. cursor: pointer;
  322. transition: all 0.2s;
  323. }
  324. .btn-edit:hover {
  325. background: #5568d3;
  326. }
  327. /* 表格 */
  328. .table-container {
  329. background: white;
  330. border-radius: 12px;
  331. overflow: hidden;
  332. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
  333. }
  334. .data-table {
  335. width: 100%;
  336. border-collapse: collapse;
  337. }
  338. .data-table thead {
  339. background: #f9fafb;
  340. }
  341. .data-table th {
  342. padding: 14px 16px;
  343. text-align: left;
  344. font-size: 13px;
  345. font-weight: 600;
  346. color: #374151;
  347. border-bottom: 1px solid #e5e7eb;
  348. }
  349. .data-table td {
  350. padding: 14px 16px;
  351. font-size: 13px;
  352. color: #1f2937;
  353. border-bottom: 1px solid #f3f4f6;
  354. }
  355. .data-table tbody tr:hover {
  356. background: #f9fafb;
  357. }
  358. .data-table tbody tr:last-child td {
  359. border-bottom: none;
  360. }
  361. .loading-text {
  362. text-align: center;
  363. color: #6b7280;
  364. padding: 40px !important;
  365. }
  366. .action-buttons {
  367. display: flex;
  368. gap: 8px;
  369. }
  370. /* 弹窗 */
  371. .modal {
  372. position: fixed;
  373. top: 0;
  374. left: 0;
  375. right: 0;
  376. bottom: 0;
  377. background: rgba(0, 0, 0, 0.5);
  378. display: flex;
  379. align-items: center;
  380. justify-content: center;
  381. z-index: 1000;
  382. }
  383. .modal-content {
  384. background: white;
  385. border-radius: 12px;
  386. width: 90%;
  387. max-width: 500px;
  388. max-height: 90vh;
  389. overflow-y: auto;
  390. box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
  391. }
  392. .modal-header {
  393. display: flex;
  394. align-items: center;
  395. justify-content: space-between;
  396. padding: 20px 24px;
  397. border-bottom: 1px solid #e5e7eb;
  398. }
  399. .modal-header h3 {
  400. font-size: 18px;
  401. font-weight: 600;
  402. color: #1f2937;
  403. }
  404. .modal-close {
  405. background: none;
  406. border: none;
  407. font-size: 24px;
  408. color: #6b7280;
  409. cursor: pointer;
  410. padding: 0;
  411. width: 32px;
  412. height: 32px;
  413. display: flex;
  414. align-items: center;
  415. justify-content: center;
  416. border-radius: 6px;
  417. transition: all 0.2s;
  418. }
  419. .modal-close:hover {
  420. background: #f3f4f6;
  421. color: #1f2937;
  422. }
  423. .modal-form {
  424. padding: 24px;
  425. display: flex;
  426. flex-direction: column;
  427. gap: 20px;
  428. }
  429. .modal-actions {
  430. display: flex;
  431. gap: 12px;
  432. justify-content: flex-end;
  433. margin-top: 8px;
  434. }
  435. /* 素材管理页面(网盘形式) */
  436. .store-header {
  437. display: flex;
  438. justify-content: space-between;
  439. align-items: center;
  440. padding: 16px 24px;
  441. background: white;
  442. border-bottom: 1px solid #e5e5e5;
  443. flex-shrink: 0;
  444. }
  445. .store-breadcrumb {
  446. display: flex;
  447. align-items: center;
  448. flex: 1;
  449. overflow-x: auto;
  450. gap: 8px;
  451. }
  452. .store-breadcrumb .breadcrumb-item {
  453. display: inline-flex;
  454. align-items: center;
  455. padding: 6px 12px;
  456. color: #666;
  457. font-size: 14px;
  458. white-space: nowrap;
  459. cursor: pointer;
  460. border-radius: 4px;
  461. transition: all 0.2s;
  462. background: none;
  463. border: none;
  464. }
  465. .store-breadcrumb .breadcrumb-item:hover {
  466. background: #f0f0f0;
  467. color: #333;
  468. }
  469. .store-breadcrumb .breadcrumb-item.active {
  470. color: #333;
  471. font-weight: 500;
  472. background: #f0f0f0;
  473. }
  474. .store-breadcrumb .breadcrumb-separator {
  475. color: #999;
  476. margin: 0 4px;
  477. }
  478. .store-header-right {
  479. display: flex;
  480. align-items: center;
  481. gap: 12px;
  482. flex-shrink: 0;
  483. }
  484. .btn-new-folder {
  485. display: flex;
  486. align-items: center;
  487. gap: 6px;
  488. padding: 8px 16px;
  489. background: #10b981;
  490. color: white;
  491. border: none;
  492. border-radius: 8px;
  493. font-size: 14px;
  494. font-weight: 500;
  495. cursor: pointer;
  496. transition: all 0.2s ease;
  497. box-shadow: 0 2px 8px rgba(16, 185, 129, 0.3);
  498. }
  499. .btn-new-folder:hover {
  500. background: #059669;
  501. transform: translateY(-1px);
  502. box-shadow: 0 4px 12px rgba(16, 185, 129, 0.4);
  503. }
  504. .btn-new-folder:active {
  505. transform: translateY(0);
  506. }
  507. .btn-upload {
  508. display: flex;
  509. align-items: center;
  510. gap: 6px;
  511. padding: 8px 16px;
  512. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  513. color: white;
  514. border: none;
  515. border-radius: 8px;
  516. font-size: 14px;
  517. font-weight: 500;
  518. cursor: pointer;
  519. transition: all 0.2s ease;
  520. box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
  521. }
  522. .btn-upload:hover {
  523. transform: translateY(-1px);
  524. box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
  525. }
  526. .btn-upload:active {
  527. transform: translateY(0);
  528. }
  529. .btn-upload svg {
  530. flex-shrink: 0;
  531. }
  532. .search-box {
  533. display: flex;
  534. align-items: center;
  535. position: relative;
  536. background: #f5f5f5;
  537. border-radius: 20px;
  538. padding: 0 12px;
  539. transition: all 0.2s;
  540. }
  541. .search-box:focus-within {
  542. background: white;
  543. box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
  544. }
  545. .search-icon {
  546. color: #999;
  547. flex-shrink: 0;
  548. }
  549. .search-box input {
  550. width: 180px;
  551. padding: 8px 8px;
  552. border: none;
  553. background: transparent;
  554. font-size: 14px;
  555. outline: none;
  556. color: #333;
  557. }
  558. .search-box input::placeholder {
  559. color: #999;
  560. }
  561. .search-clear {
  562. display: flex;
  563. align-items: center;
  564. justify-content: center;
  565. background: none;
  566. border: none;
  567. color: #999;
  568. cursor: pointer;
  569. padding: 4px;
  570. flex-shrink: 0;
  571. }
  572. .search-clear:hover {
  573. color: #666;
  574. }
  575. .store-file-list-container {
  576. position: relative;
  577. flex: 1;
  578. overflow-y: auto;
  579. padding: 24px;
  580. background: white;
  581. }
  582. .file-list {
  583. display: flex;
  584. flex-wrap: wrap;
  585. gap: 16px;
  586. padding: 8px;
  587. }
  588. .file-item {
  589. display: flex;
  590. flex-direction: column;
  591. align-items: center;
  592. width: calc((100% - 32px) / 3);
  593. min-width: 120px;
  594. max-width: 180px;
  595. padding: 16px 8px;
  596. border-radius: 8px;
  597. cursor: pointer;
  598. transition: background 0.2s;
  599. user-select: none;
  600. position: relative;
  601. }
  602. .file-item:hover {
  603. background: #f5f5f5;
  604. }
  605. .file-icon {
  606. display: flex;
  607. justify-content: center;
  608. align-items: center;
  609. width: 100%;
  610. max-width: 140px;
  611. aspect-ratio: 1;
  612. margin: 0 auto 8px;
  613. }
  614. .file-icon svg {
  615. width: 60%;
  616. height: 60%;
  617. }
  618. .file-icon.folder-icon {
  619. color: #ffc107;
  620. }
  621. .file-thumbnail {
  622. display: flex;
  623. justify-content: center;
  624. align-items: center;
  625. width: 100%;
  626. max-width: 140px;
  627. aspect-ratio: 1;
  628. margin: 0 auto 8px;
  629. border-radius: 6px;
  630. overflow: hidden;
  631. background-color: #ffffff;
  632. background-image:
  633. linear-gradient(45deg, #e0e0e0 25%, transparent 25%),
  634. linear-gradient(-45deg, #e0e0e0 25%, transparent 25%),
  635. linear-gradient(45deg, transparent 75%, #e0e0e0 75%),
  636. linear-gradient(-45deg, transparent 75%, #e0e0e0 75%);
  637. background-size: 16px 16px;
  638. background-position: 0 0, 0 8px, 8px -8px, -8px 0px;
  639. border: 1px solid #e5e5e5;
  640. position: relative;
  641. }
  642. .file-thumbnail img {
  643. width: 100%;
  644. height: 100%;
  645. object-fit: contain;
  646. }
  647. .file-name {
  648. width: 100%;
  649. font-size: 13px;
  650. text-align: center;
  651. word-break: break-all;
  652. color: #333;
  653. line-height: 1.4;
  654. max-height: 2.8em;
  655. overflow: hidden;
  656. display: -webkit-box;
  657. -webkit-line-clamp: 2;
  658. line-clamp: 2;
  659. -webkit-box-orient: vertical;
  660. padding: 2px 4px;
  661. border-radius: 4px;
  662. cursor: text;
  663. }
  664. .file-name:hover {
  665. background: rgba(24, 144, 255, 0.1);
  666. }
  667. /* 重命名输入框 */
  668. .rename-input {
  669. width: 100%;
  670. font-size: 13px;
  671. text-align: center;
  672. padding: 2px 4px;
  673. border: 1px solid #1890ff;
  674. border-radius: 4px;
  675. outline: none;
  676. background: white;
  677. }
  678. .empty-state {
  679. display: none;
  680. flex-direction: column;
  681. justify-content: center;
  682. align-items: center;
  683. height: 100%;
  684. color: #999;
  685. position: absolute;
  686. top: 0;
  687. left: 0;
  688. right: 0;
  689. bottom: 0;
  690. }
  691. .empty-state.show {
  692. display: flex;
  693. }
  694. .empty-state svg {
  695. margin-bottom: 24px;
  696. }
  697. .empty-state p {
  698. font-size: 16px;
  699. margin-bottom: 8px;
  700. }
  701. .loading {
  702. display: none;
  703. flex-direction: column;
  704. justify-content: center;
  705. align-items: center;
  706. position: absolute;
  707. top: 0;
  708. left: 0;
  709. right: 0;
  710. bottom: 0;
  711. background: rgba(255, 255, 255, 0.9);
  712. z-index: 20;
  713. }
  714. .loading.show {
  715. display: flex;
  716. }
  717. .spinner {
  718. width: 40px;
  719. height: 40px;
  720. border: 3px solid #f3f3f3;
  721. border-top: 3px solid #1890ff;
  722. border-radius: 50%;
  723. animation: spin 1s linear infinite;
  724. }
  725. @keyframes spin {
  726. 0% { transform: rotate(0deg); }
  727. 100% { transform: rotate(360deg); }
  728. }
  729. .loading p {
  730. margin-top: 16px;
  731. color: #666;
  732. font-size: 14px;
  733. }
  734. .loading-text {
  735. text-align: center;
  736. color: #6b7280;
  737. padding: 40px;
  738. width: 100%;
  739. }
  740. /* 定价管理页面 */
  741. .pricing-grid {
  742. display: grid;
  743. grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  744. gap: 20px;
  745. padding: 8px;
  746. }
  747. .pricing-item {
  748. background: white;
  749. border-radius: 12px;
  750. padding: 16px;
  751. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
  752. transition: all 0.2s;
  753. }
  754. .pricing-item:hover {
  755. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  756. transform: translateY(-2px);
  757. }
  758. .pricing-preview {
  759. width: 100%;
  760. aspect-ratio: 1;
  761. border-radius: 8px;
  762. overflow: hidden;
  763. background-color: #ffffff;
  764. background-image:
  765. linear-gradient(45deg, #e0e0e0 25%, transparent 25%),
  766. linear-gradient(-45deg, #e0e0e0 25%, transparent 25%),
  767. linear-gradient(45deg, transparent 75%, #e0e0e0 75%),
  768. linear-gradient(-45deg, transparent 75%, #e0e0e0 75%);
  769. background-size: 16px 16px;
  770. background-position: 0 0, 0 8px, 8px -8px, -8px 0px;
  771. border: 1px solid #e5e5e5;
  772. margin-bottom: 12px;
  773. display: flex;
  774. align-items: center;
  775. justify-content: center;
  776. }
  777. .pricing-preview img {
  778. width: 100%;
  779. height: 100%;
  780. object-fit: contain;
  781. }
  782. .no-preview {
  783. color: #999;
  784. font-size: 14px;
  785. padding: 20px;
  786. }
  787. .pricing-info {
  788. display: flex;
  789. flex-direction: column;
  790. gap: 8px;
  791. }
  792. .pricing-name {
  793. font-size: 14px;
  794. font-weight: 600;
  795. color: #1f2937;
  796. text-align: center;
  797. }
  798. .pricing-category {
  799. font-size: 12px;
  800. color: #6b7280;
  801. text-align: center;
  802. }
  803. .pricing-price-input {
  804. display: flex;
  805. flex-direction: column;
  806. gap: 4px;
  807. margin-top: 8px;
  808. }
  809. .pricing-price-input label {
  810. font-size: 12px;
  811. color: #6b7280;
  812. font-weight: 500;
  813. }
  814. .price-input {
  815. width: 100%;
  816. padding: 8px 12px;
  817. border: 1px solid #e5e5e5;
  818. border-radius: 6px;
  819. font-size: 14px;
  820. transition: border-color 0.2s;
  821. }
  822. .price-input:focus {
  823. outline: none;
  824. border-color: #667eea;
  825. box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
  826. }
  827. /* 上传进度和预览 */
  828. .upload-progress-container {
  829. margin-top: 16px;
  830. padding: 16px;
  831. background: #f9fafb;
  832. border-radius: 8px;
  833. border: 1px solid #e5e5e5;
  834. }
  835. .upload-progress-header {
  836. display: flex;
  837. justify-content: space-between;
  838. align-items: center;
  839. margin-bottom: 12px;
  840. }
  841. .upload-progress-header span:first-child {
  842. font-size: 14px;
  843. font-weight: 600;
  844. color: #1f2937;
  845. }
  846. .upload-progress-header span:last-child {
  847. font-size: 14px;
  848. font-weight: 600;
  849. color: #667eea;
  850. }
  851. .upload-progress-bar {
  852. width: 100%;
  853. height: 8px;
  854. background: #e5e5e5;
  855. border-radius: 4px;
  856. overflow: hidden;
  857. margin-bottom: 8px;
  858. }
  859. .upload-progress-fill {
  860. height: 100%;
  861. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  862. transition: width 0.3s;
  863. border-radius: 4px;
  864. }
  865. .upload-progress-text {
  866. font-size: 12px;
  867. color: #6b7280;
  868. text-align: center;
  869. }
  870. .upload-success-preview {
  871. margin-top: 16px;
  872. padding: 16px;
  873. background: #f0fdf4;
  874. border-radius: 8px;
  875. border: 1px solid #86efac;
  876. }
  877. .preview-header {
  878. display: flex;
  879. align-items: center;
  880. gap: 8px;
  881. margin-bottom: 12px;
  882. font-size: 14px;
  883. font-weight: 600;
  884. color: #16a34a;
  885. }
  886. .preview-image-container {
  887. width: 100%;
  888. aspect-ratio: 1;
  889. border-radius: 8px;
  890. overflow: hidden;
  891. background: white;
  892. border: 1px solid #e5e5e5;
  893. display: flex;
  894. align-items: center;
  895. justify-content: center;
  896. position: relative;
  897. }
  898. .preview-image {
  899. width: 100%;
  900. height: 100%;
  901. object-fit: contain;
  902. display: none;
  903. }
  904. .preview-loading {
  905. color: #6b7280;
  906. font-size: 14px;
  907. }