App.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. <script>
  2. export default {
  3. onLaunch() {},
  4. onShow() {},
  5. onHide() {}
  6. }
  7. </script>
  8. <style>
  9. page {
  10. --primary: #a51f23;
  11. --primary-dark: #8a1a1d;
  12. --primary-soft: #f8ecec;
  13. --gold: #c9a227;
  14. --ink: #1f1f1f;
  15. --muted: #8a8a8a;
  16. --line: #ececec;
  17. --bg: #f4f4f4;
  18. --card: #ffffff;
  19. --radius: 24rpx;
  20. --shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.06);
  21. background: var(--bg);
  22. color: var(--ink);
  23. font-family: 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', system-ui, sans-serif;
  24. font-size: 28rpx;
  25. line-height: 1.5;
  26. }
  27. .card {
  28. background: var(--card);
  29. border-radius: var(--radius);
  30. box-shadow: var(--shadow);
  31. }
  32. .form-section {
  33. margin: 24rpx 28rpx 0;
  34. background: var(--card);
  35. border-radius: var(--radius);
  36. box-shadow: var(--shadow);
  37. overflow: hidden;
  38. }
  39. .form-section .sec-title {
  40. padding: 24rpx 28rpx 16rpx;
  41. font-size: 26rpx;
  42. font-weight: 600;
  43. color: var(--primary);
  44. display: flex;
  45. align-items: center;
  46. gap: 12rpx;
  47. }
  48. .form-section .sec-title::before {
  49. content: '';
  50. width: 6rpx;
  51. height: 24rpx;
  52. background: var(--primary);
  53. border-radius: 4rpx;
  54. flex-shrink: 0;
  55. }
  56. .field-row {
  57. display: flex;
  58. align-items: center;
  59. padding: 0 28rpx;
  60. min-height: 96rpx;
  61. border-top: 1rpx solid var(--line);
  62. gap: 24rpx;
  63. }
  64. .field-row.top {
  65. align-items: flex-start;
  66. padding-top: 24rpx;
  67. padding-bottom: 24rpx;
  68. }
  69. .field-row .label {
  70. width: 144rpx;
  71. flex-shrink: 0;
  72. font-size: 28rpx;
  73. color: #333;
  74. }
  75. .field-row .label .req {
  76. color: var(--primary);
  77. margin-right: 4rpx;
  78. }
  79. .field-row input,
  80. .field-row textarea {
  81. flex: 1;
  82. border: 0;
  83. outline: none;
  84. font-size: 28rpx;
  85. color: var(--ink);
  86. background: transparent;
  87. width: 100%;
  88. padding: 0;
  89. min-height: 40rpx;
  90. }
  91. .field-row textarea {
  92. min-height: 200rpx;
  93. line-height: 1.6;
  94. }
  95. .type-switch {
  96. display: flex;
  97. gap: 20rpx;
  98. flex: 1;
  99. }
  100. .type-switch .type {
  101. flex: 1;
  102. display: flex;
  103. align-items: center;
  104. justify-content: center;
  105. height: 72rpx;
  106. border-radius: 16rpx;
  107. border: 1rpx solid var(--line);
  108. font-size: 28rpx;
  109. background: #fafafa;
  110. color: #666;
  111. }
  112. .type-switch .type.on {
  113. border-color: var(--primary);
  114. background: var(--primary-soft);
  115. color: var(--primary);
  116. font-weight: 600;
  117. }
  118. .upload-area {
  119. padding: 24rpx 28rpx 32rpx;
  120. border-top: 1rpx solid var(--line);
  121. }
  122. .upload-hint {
  123. font-size: 24rpx;
  124. color: var(--muted);
  125. margin-bottom: 20rpx;
  126. }
  127. .upload-list {
  128. display: flex;
  129. flex-wrap: wrap;
  130. gap: 20rpx;
  131. }
  132. .upload-item,
  133. .upload-add {
  134. width: 144rpx;
  135. height: 144rpx;
  136. border-radius: 16rpx;
  137. position: relative;
  138. }
  139. .upload-add {
  140. border: 1rpx dashed #ccc;
  141. background: #fafafa;
  142. display: flex;
  143. flex-direction: column;
  144. align-items: center;
  145. justify-content: center;
  146. gap: 8rpx;
  147. color: #999;
  148. font-size: 22rpx;
  149. }
  150. .upload-add.disabled {
  151. opacity: 0.55;
  152. pointer-events: none;
  153. }
  154. .upload-add .plus {
  155. font-size: 56rpx;
  156. line-height: 1;
  157. color: #bbb;
  158. font-weight: 300;
  159. }
  160. .upload-item {
  161. background: #eee;
  162. overflow: hidden;
  163. }
  164. .upload-item image {
  165. width: 100%;
  166. height: 100%;
  167. }
  168. .upload-item .rm {
  169. position: absolute;
  170. top: 4rpx;
  171. right: 4rpx;
  172. width: 36rpx;
  173. height: 36rpx;
  174. border-radius: 50%;
  175. background: var(--primary);
  176. color: #fff;
  177. font-size: 22rpx;
  178. line-height: 36rpx;
  179. text-align: center;
  180. z-index: 2;
  181. }
  182. .upload-mask {
  183. position: absolute;
  184. inset: 0;
  185. background: rgba(0, 0, 0, 0.45);
  186. display: flex;
  187. align-items: center;
  188. justify-content: center;
  189. z-index: 3;
  190. }
  191. .upload-pct {
  192. color: #fff;
  193. font-size: 24rpx;
  194. font-weight: 600;
  195. }
  196. .submit-bar {
  197. padding: 32rpx 28rpx 16rpx;
  198. }
  199. .btn-primary {
  200. width: 100%;
  201. height: 92rpx;
  202. line-height: 92rpx;
  203. border: 0;
  204. border-radius: 46rpx;
  205. background: var(--primary);
  206. color: #fff;
  207. font-size: 32rpx;
  208. font-weight: 600;
  209. letter-spacing: 0.1em;
  210. text-align: center;
  211. }
  212. .btn-primary.disabled,
  213. .btn-primary[disabled] {
  214. background: #ccc;
  215. opacity: 1;
  216. }
  217. .btn-ghost {
  218. width: 100%;
  219. height: 88rpx;
  220. line-height: 88rpx;
  221. border: 1rpx solid var(--primary);
  222. border-radius: 44rpx;
  223. background: #fff;
  224. color: var(--primary);
  225. font-size: 30rpx;
  226. font-weight: 600;
  227. text-align: center;
  228. margin-top: 20rpx;
  229. box-sizing: border-box;
  230. }
  231. </style>