@@ -18,65 +18,73 @@ import Link from 'next/link';
1818
1919import Avatar from '@/components/Avatar' ;
2020import { ArrowRightLineIcon } from '@/components/Icons' ;
21- import Image from '@/components/Image' ;
2221import { fromNow } from '@/utils/date' ;
2322
24- import { useConfig } from '#/state/application/hooks' ;
25-
2623import StatusBadge from './StatusBadge' ;
2724
25+ // import { useConfig } from '#/state/application/hooks';
26+
27+
2828function BountyItem ( { data } ) {
29- const config = useConfig ( ) ;
30- const filters = config ?. find ( f => f . config_id === 1 ) ?. config_value [ 'bounty' ] ;
31- const ecosystem = filters ?. find ( f => f . name === 'Ecosystem' ) ?. labels . find ( f => f . id === data . ecosystem ) ;
29+ // const config = useConfig();
30+ // const filters = config?.find(f => f.config_id === 1)?.config_value['bounty'];
31+ // const ecosystem = filters?.find(f => f.name === 'Ecosystem')?.labels.find(f => f.id === data.ecosystem);
32+
33+ // 根据状态确定顶部边框颜色
34+ const getBorderColor = status => {
35+ if ( status === 3 ) return 'border-t-[#17C489]' ; // Recruiting - 绿色
36+ if ( status > 6 && status < 24 ) return 'border-t-[#D672EF]' ; // Building - 紫色
37+ if ( status === 30 || status === 24 || status === 20 ) return 'border-t-[#82ADD8]' ; // Completed/Closed - 蓝色
38+ return 'border-t-[#D1D5DB]' ;
39+ } ;
3240
3341 return (
3442 < Link
3543 href = { `/bounties/${ data . id } ` }
3644 className = { `
37- group flex flex-col relative cursor-pointer overflow-hidden rounded-2xl
38- bg-gradient-to-b ${ data . status === 3 ? 'from -[#E5E5FE] to-[#FFFFFF]' : 'bg-white' }
39- py-4 transition-all duration-300 ease-in-out hover:shadow-lg hover:-translate-y-2 [&>div]:px-4
45+ group flex flex-col relative cursor-pointer overflow-hidden rounded-xl
46+ bg-white border border -[#E5E7EB] border-t-[3px] ${ getBorderColor ( data . status ) }
47+ transition-all duration-300 ease-in-out hover:shadow-xl hover:-translate-y-1
4048 ` }
4149 >
42- < div >
43- < Image className = "mb-4 bg-neutral-300 rounded-full object-cover" width = { 80 } height = { 80 } src = { ecosystem ?. img } alt = { ecosystem ?. name } />
44- < h5 className = "mb-2 text-lg line-clamp-2" >
45- < span className = "relative top-[2px]" > { data . title } </ span >
46- </ h5 >
47- </ div >
48- < div className = "flex-1" >
49- < div className = "mb-4 max-h-10 text-sm opacity-80 line-clamp-2" >
50- < p > { data . summary } </ p >
51- </ div >
52- < div className = "flex items-center gap-2" >
53- < div className = "flex items-center" >
54- < StatusBadge status = { data . status } />
55- </ div >
50+ { /* 顶部状态标签区域 */ }
51+ < div className = "px-6 pt-5 pb-4" >
52+ < div className = "flex items-center gap-2 flex-wrap" >
53+ < StatusBadge status = { data . status } />
54+ { /* 这里可以添加其他标签,如 Front-end, Part-time 等 */ }
5655 </ div >
5756 </ div >
58- < hr className = "mt-6 mb-4 border-gray-400" />
59- < div className = "flex items-center justify-between" >
60- < p className = "text-sm" > Reward</ p >
61- < div className = "text-right" >
62- < div className = "flex items-center justify-end text-sm" >
63- < strong className = "text-lg" > ${ data . amount / 100 } </ strong >
64- </ div >
57+
58+ { /* 标题和描述 */ }
59+ < div className = "px-6 pb-4 flex-1 min-h-[162px]" >
60+ < h3 className = "mb-2 text-[24px] font-extrabold line-clamp-2 leading-[26px]" >
61+ { data . title }
62+ </ h3 >
63+ < p className = "text-[16px] font-normal line-clamp-2 leading-[20px] opacity-80" >
64+ { data . summary }
65+ </ p >
66+ </ div >
67+
68+ { /* Bounty Amount */ }
69+ < div className = "px-6 py-6 border-t border-[#1a1a1a0f]" >
70+ < div className = "flex items-center justify-between" >
71+ < span className = "text-[14px] font-bold leading-[24px]" > Bounty Amount</ span >
72+ < span className = "text-[20px] font-extrabold text-[#111827] leading-[24px]" > ${ data . amount / 100 } </ span >
6573 </ div >
6674 </ div >
67- < hr className = "my-4 border-gray-400" />
68- < div className = "flex items-center" >
69- < div className = "flex flex-1 items-center truncate" >
70- < Avatar className = "mr-4" size = { 48 } user = { data ?. employer_user } />
71- < div className = "text-xs text-gray-50" >
72- < p className = "truncate" >
73- { fromNow ( data . created_at * 1000 ) } by{ ' ' }
74- < a href = { `/u/${ data . employer_user ?. user_handle } ` } className = "truncate font-bold text-gray underline" > { data . employer_user ?. user_nick_name } </ a >
75- </ p >
75+
76+ { /* 底部发布者信息 */ }
77+ < div className = "p-6 border-t border-[#1a1a1a0f]" >
78+ < div className = "flex items-center justify-between" >
79+ < div className = "flex items-center gap-2 flex-1 min-w-0" >
80+ < Avatar size = { 24 } user = { data ?. employer_user } />
81+ < div className = "text-[14px] leading-[24px] truncate text-[#00000066]" >
82+ < span className = "text-gray" > By { data . employer_user ?. user_nick_name } </ span >
83+ < span className = "mx-1" > ·</ span >
84+ < span > { fromNow ( data . created_at * 1000 ) } </ span >
85+ </ div >
7686 </ div >
77- </ div >
78- < div >
79- < ArrowRightLineIcon className = "h-6 w-6" />
87+ < ArrowRightLineIcon className = "h-5 w-5 flex-shrink-0 -rotate-45" />
8088 </ div >
8189 </ div >
8290 </ Link >
0 commit comments