group-chat-summary.component.scss 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. // 群聊信息汇总组件样式
  2. .group-chat-summary {
  3. background: white;
  4. border-radius: 12px;
  5. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
  6. margin-bottom: 16px;
  7. overflow: hidden;
  8. // 折叠头部
  9. .summary-header {
  10. padding: 16px;
  11. display: flex;
  12. align-items: center;
  13. justify-content: space-between;
  14. cursor: pointer;
  15. transition: background 0.2s;
  16. &:hover {
  17. background: rgba(102, 126, 234, 0.05);
  18. }
  19. &:active {
  20. background: rgba(102, 126, 234, 0.1);
  21. }
  22. .header-left {
  23. display: flex;
  24. align-items: center;
  25. gap: 12px;
  26. flex: 1;
  27. > .icon {
  28. width: 24px;
  29. height: 24px;
  30. fill: #667eea;
  31. flex-shrink: 0;
  32. }
  33. .header-info {
  34. display: flex;
  35. flex-direction: column;
  36. gap: 4px;
  37. .header-title {
  38. font-size: 16px;
  39. font-weight: 600;
  40. color: #222428;
  41. }
  42. .header-meta {
  43. font-size: 13px;
  44. color: #92949c;
  45. }
  46. }
  47. }
  48. .header-right {
  49. display: flex;
  50. align-items: center;
  51. gap: 8px;
  52. .unread-badge {
  53. background: linear-gradient(135deg, #eb445a 0%, #ef4444 100%);
  54. color: white;
  55. font-size: 12px;
  56. font-weight: 700;
  57. padding: 4px 8px;
  58. border-radius: 12px;
  59. min-width: 24px;
  60. text-align: center;
  61. animation: pulse 2s ease-in-out infinite;
  62. }
  63. @keyframes pulse {
  64. 0%, 100% {
  65. transform: scale(1);
  66. }
  67. 50% {
  68. transform: scale(1.1);
  69. }
  70. }
  71. .icon.chevron {
  72. width: 20px;
  73. height: 20px;
  74. stroke: #92949c;
  75. transition: transform 0.3s;
  76. &.collapsed {
  77. transform: rotate(-90deg);
  78. }
  79. }
  80. }
  81. }
  82. // 展开内容
  83. .summary-content {
  84. padding: 0 16px 16px;
  85. border-top: 1px solid #f4f5f8;
  86. animation: slideDown 0.3s ease-out;
  87. }
  88. @keyframes slideDown {
  89. from {
  90. opacity: 0;
  91. max-height: 0;
  92. }
  93. to {
  94. opacity: 1;
  95. max-height: 1000px;
  96. }
  97. }
  98. // 群介绍部分
  99. .intro-section {
  100. padding: 16px 0;
  101. border-bottom: 1px solid #f4f5f8;
  102. .intro-header {
  103. display: flex;
  104. align-items: center;
  105. gap: 8px;
  106. margin-bottom: 12px;
  107. .icon {
  108. width: 18px;
  109. height: 18px;
  110. fill: #3dc2ff;
  111. }
  112. span {
  113. font-size: 14px;
  114. font-weight: 600;
  115. color: #222428;
  116. }
  117. }
  118. .intro-sent {
  119. display: flex;
  120. align-items: center;
  121. gap: 8px;
  122. padding: 12px;
  123. background: rgba(45, 211, 111, 0.1);
  124. border-radius: 8px;
  125. .success-icon {
  126. width: 20px;
  127. height: 20px;
  128. stroke: #2dd36f;
  129. }
  130. span {
  131. font-size: 14px;
  132. color: #2dd36f;
  133. font-weight: 500;
  134. }
  135. }
  136. .btn-intro {
  137. width: 100%;
  138. padding: 12px;
  139. background: linear-gradient(135deg, #3dc2ff 0%, #0ea5e9 100%);
  140. color: white;
  141. border: none;
  142. border-radius: 8px;
  143. font-size: 14px;
  144. font-weight: 600;
  145. display: flex;
  146. align-items: center;
  147. justify-content: center;
  148. gap: 8px;
  149. cursor: pointer;
  150. transition: all 0.3s;
  151. .icon {
  152. width: 18px;
  153. height: 18px;
  154. fill: white;
  155. }
  156. &:hover {
  157. transform: translateY(-2px);
  158. box-shadow: 0 4px 12px rgba(61, 194, 255, 0.4);
  159. }
  160. &:active {
  161. transform: translateY(0);
  162. }
  163. }
  164. }
  165. // 筛选栏
  166. .filter-bar {
  167. display: flex;
  168. gap: 8px;
  169. padding: 16px 0;
  170. overflow-x: auto;
  171. &::-webkit-scrollbar {
  172. display: none;
  173. }
  174. .filter-btn {
  175. flex-shrink: 0;
  176. padding: 8px 16px;
  177. background: #f4f5f8;
  178. border: none;
  179. border-radius: 20px;
  180. font-size: 13px;
  181. font-weight: 500;
  182. color: #666;
  183. display: flex;
  184. align-items: center;
  185. gap: 6px;
  186. cursor: pointer;
  187. transition: all 0.3s;
  188. .icon {
  189. width: 16px;
  190. height: 16px;
  191. stroke: currentColor;
  192. fill: currentColor;
  193. }
  194. &:hover {
  195. background: #e8e9ed;
  196. }
  197. &.active {
  198. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  199. color: white;
  200. box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
  201. }
  202. &.alert {
  203. animation: shake 0.5s ease-in-out;
  204. }
  205. @keyframes shake {
  206. 0%, 100% {
  207. transform: translateX(0);
  208. }
  209. 25% {
  210. transform: translateX(-4px);
  211. }
  212. 75% {
  213. transform: translateX(4px);
  214. }
  215. }
  216. }
  217. }
  218. // 消息列表
  219. .message-list {
  220. max-height: 400px;
  221. overflow-y: auto;
  222. border-radius: 8px;
  223. background: #fafafa;
  224. padding: 8px;
  225. &::-webkit-scrollbar {
  226. width: 6px;
  227. }
  228. &::-webkit-scrollbar-track {
  229. background: transparent;
  230. }
  231. &::-webkit-scrollbar-thumb {
  232. background: #d1d5db;
  233. border-radius: 3px;
  234. &:hover {
  235. background: #9ca3af;
  236. }
  237. }
  238. .loading-state,
  239. .empty-state {
  240. display: flex;
  241. flex-direction: column;
  242. align-items: center;
  243. justify-content: center;
  244. padding: 40px 20px;
  245. color: #92949c;
  246. .icon {
  247. width: 48px;
  248. height: 48px;
  249. margin-bottom: 12px;
  250. fill: #d1d5db;
  251. }
  252. .spinner {
  253. width: 40px;
  254. height: 40px;
  255. border: 4px solid #f4f5f8;
  256. border-top-color: #667eea;
  257. border-radius: 50%;
  258. animation: spin 1s linear infinite;
  259. margin-bottom: 12px;
  260. }
  261. @keyframes spin {
  262. to {
  263. transform: rotate(360deg);
  264. }
  265. }
  266. span {
  267. font-size: 14px;
  268. }
  269. }
  270. .message-item {
  271. background: white;
  272. border-radius: 8px;
  273. padding: 12px;
  274. margin-bottom: 8px;
  275. transition: all 0.3s;
  276. &:last-child {
  277. margin-bottom: 0;
  278. }
  279. &.customer {
  280. border-left: 3px solid #3dc2ff;
  281. }
  282. &.needs-reply {
  283. border-left: 3px solid #ffc409;
  284. background: rgba(255, 196, 9, 0.05);
  285. }
  286. &:hover {
  287. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
  288. }
  289. .message-header {
  290. display: flex;
  291. align-items: center;
  292. justify-content: space-between;
  293. margin-bottom: 8px;
  294. .sender-info {
  295. display: flex;
  296. align-items: center;
  297. gap: 8px;
  298. .sender-name {
  299. font-size: 14px;
  300. font-weight: 600;
  301. color: #222428;
  302. }
  303. .customer-badge {
  304. background: rgba(61, 194, 255, 0.1);
  305. color: #3dc2ff;
  306. font-size: 11px;
  307. font-weight: 600;
  308. padding: 2px 8px;
  309. border-radius: 12px;
  310. }
  311. }
  312. .message-time {
  313. font-size: 12px;
  314. color: #92949c;
  315. }
  316. }
  317. .message-content {
  318. font-size: 14px;
  319. color: #4b5563;
  320. line-height: 1.6;
  321. word-break: break-word;
  322. }
  323. .reply-warning {
  324. display: flex;
  325. align-items: center;
  326. gap: 6px;
  327. margin-top: 8px;
  328. padding: 6px 10px;
  329. background: rgba(255, 196, 9, 0.1);
  330. border-radius: 6px;
  331. .icon {
  332. width: 16px;
  333. height: 16px;
  334. flex-shrink: 0;
  335. &.warning {
  336. fill: #ffc409;
  337. }
  338. &.danger {
  339. fill: #eb445a;
  340. }
  341. }
  342. span {
  343. font-size: 12px;
  344. color: #d97706;
  345. font-weight: 500;
  346. }
  347. }
  348. }
  349. }
  350. // 快捷操作
  351. .quick-actions {
  352. display: flex;
  353. gap: 8px;
  354. margin-top: 16px;
  355. .action-btn {
  356. flex: 1;
  357. padding: 10px 16px;
  358. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  359. color: white;
  360. border: none;
  361. border-radius: 8px;
  362. font-size: 14px;
  363. font-weight: 600;
  364. display: flex;
  365. align-items: center;
  366. justify-content: center;
  367. gap: 8px;
  368. cursor: pointer;
  369. transition: all 0.3s;
  370. .icon {
  371. width: 18px;
  372. height: 18px;
  373. fill: white;
  374. stroke: white;
  375. }
  376. &:hover {
  377. transform: translateY(-2px);
  378. box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
  379. }
  380. &:active {
  381. transform: translateY(0);
  382. }
  383. &.secondary {
  384. background: #f4f5f8;
  385. color: #222428;
  386. .icon {
  387. fill: #222428;
  388. stroke: #222428;
  389. }
  390. &:hover {
  391. background: #e8e9ed;
  392. box-shadow: none;
  393. }
  394. }
  395. }
  396. }
  397. // 响应式
  398. @media (max-width: 768px) {
  399. .summary-header {
  400. padding: 12px;
  401. .header-left {
  402. > .icon {
  403. width: 20px;
  404. height: 20px;
  405. }
  406. .header-info {
  407. .header-title {
  408. font-size: 14px;
  409. }
  410. .header-meta {
  411. font-size: 12px;
  412. }
  413. }
  414. }
  415. }
  416. .summary-content {
  417. padding: 0 12px 12px;
  418. }
  419. .message-list {
  420. max-height: 300px;
  421. }
  422. .quick-actions {
  423. flex-direction: column;
  424. .action-btn {
  425. width: 100%;
  426. }
  427. }
  428. }
  429. }