@@ -133,8 +133,7 @@ function resetFilters() {
< / template >
< / AdminPageHeader >
<!-- 筛选 -- >
< el-card shadow = "never" class = "filter-card" >
< section class = "filter-panel" >
< div class = "filter-grid" >
< el-select v-model = "status" placeholder="状态" clearable >
< el-option v-for = "opt in adminTaskStatusOptions" :key="opt.value" :label="opt.label" :value="opt.value" / >
@@ -145,21 +144,17 @@ function resetFilters() {
< el-input v-model = "skuCode" placeholder="商品 SKU" clearable @keyup.enter="loadTasks(1)" / >
< el-date-picker v-model = "dateFrom" type="date" placeholder="开始日期" value-format="YYYY-MM-DD" / >
< el-date-picker v-model = "dateTo" type="date" placeholder="结束日期" value-format="YYYY-MM-DD" / >
< / div >
< div class = "filter-actions" >
< span class = "filter-hint" > 桌面端已改为自适应卡片列表 , 不再出现横向滚动 。 < / span >
< div class = "filter-buttons" >
< el-button round @click ="resetFilters" > 重置 < / el -button >
< el-button round type = "primary" @click ="loadTasks(1)" > 查询 < / el -button >
< / div >
< / div >
< / el-card >
< / section >
< el-alert v-if = "errorMessage" :title="errorMessage" type="error" show-icon :closable="false" style="margin-top: 16px" / >
< el-alert v-if = "lastClaimUrl" :title="`最近生成的领取链接:${lastClaimUrl}`" type="info" show-icon :closable="false" style="margin-top: 16px" / >
<!-- 列表 -- >
< el-card shadow = "never" class = "table-card" v-loading = "loading" element-loading-text="任务列表加载中" >
< section class = "tasks-section" v-loading = "loading" element-loading-text="任务列表加载中" >
< template v-if = "items.length === 0 && !loading" >
< el -empty description = "当前筛选条件下暂无任务" :image-size = "60" / >
< / template >
@@ -235,7 +230,7 @@ function resetFilters() {
< / div >
< / section >
< section class = "task-section" >
< section class = "task-section task-section--actions " >
< span class = "section-label" > 异常 / 操作 < / span >
< div class = "task-end" >
< span class = "cell-error" : title = "item.lastError || '-'" > { { item . lastError || '当前无异常' } } < / span >
@@ -290,7 +285,7 @@ function resetFilters() {
@ current -change = " loadTasks "
/ >
< / template >
< / el-card >
< / section >
< / div >
< / template >
@@ -310,26 +305,25 @@ function resetFilters() {
align - items : center ;
}
. filter - card { margin - top : var ( -- space - 4 ) ; }
. filter - panel { margin - top : var ( -- space - 4 ) ; }
. filter - grid {
display : grid ;
grid - template - columns : repeat ( 4 , minmax ( 0 , 1 fr ) ) ;
grid - template - columns : minmax ( 150 px , 0.75 fr ) minmax ( 220 px , 1 fr ) minmax ( 220 px , 1 fr ) minmax ( 210 px , 0.95 fr ) ;
gap : var ( -- space - 3 ) ;
}
. filter - actions {
display : flex ;
align - items : center ;
justify - content : space - between ;
gap : var ( -- space - 3 ) ;
margin - top : var ( -- space - 3 ) ;
}
. filter - hint { color : var ( -- text - secondary ) ; font - size : var ( -- text - xs ) ; }
. filter - buttons { display : flex ; gap : 10 px ; flex - shrink : 0 ; }
. filter - grid : deep ( . el - date - editor ) { width : 100 % ; }
. table - card { margin - top : var ( -- space - 4 ) ; overflow : visible ; }
. filter - buttons {
display : flex ;
gap : 10 px ;
justify - content : flex - end ;
min - width : 156 px ;
}
. tasks - section { margin - top : var ( -- space - 4 ) ; overflow : visible ; }
. tasks - toolbar { margin - bottom : var ( -- space - 3 ) ; }
. tasks - toolbar strong { display : block ; color : var ( -- text - primary ) ; font - size : var ( -- text - base ) ; }
@@ -341,9 +335,16 @@ function resetFilters() {
display : grid ;
gap : 14 px ;
padding : 14 px ;
border - radius : var ( -- radius - lg ) ;
background : linear - gradient ( 180 deg , rgba ( 248 , 251 , 255 , 0.98 ) 0 % , # ffffff 100 % ) ;
border - radius : var ( -- radius - md ) ;
background : rgba ( 247 , 250 , 255 , 0.42 ) ;
border : 1 px solid var ( -- border - default ) ;
transition : border - color 0.16 s ease , background 0.16 s ease , box - shadow 0.16 s ease ;
}
. task - card : hover {
border - color : var ( -- border - hover ) ;
background : rgba ( 247 , 250 , 255 , 0.68 ) ;
box - shadow : 0 1 px 4 px rgba ( 30 , 49 , 78 , 0.04 ) ;
}
. task - card - top {
@@ -389,19 +390,24 @@ function resetFilters() {
. task - grid {
display : grid ;
grid - template - columns : repeat ( 5 , minmax ( 0 , 1 fr ) ) ;
grid - template - columns : minmax ( 0 , 1.2 fr ) minmax ( 0 , 1.35 fr ) minmax ( 0 , 1 fr ) minmax ( 0 , 1.15 fr ) ;
gap : var ( -- space - 3 ) ;
min - width : 0 ;
}
. task - section {
display : grid ;
gap : var ( -- space - 2 ) ;
gap : 6 px ;
min - width : 0 ;
padding : var ( -- space - 3 ) ;
border - radius : 14 px ;
background : rgba ( 255 , 255 , 255 , 0.78 ) ;
border : 1 px solid var ( -- border - default ) ;
padding - top : 10 px ;
border - top : 1 px solid rgba ( 86 , 108 , 138 , 0.1 ) ;
}
. task - section -- actions {
grid - column : 1 / - 1 ;
grid - template - columns : 112 px minmax ( 0 , 1 fr ) ;
align - items : center ;
gap : var ( -- space - 3 ) ;
}
. section - label {
@@ -412,8 +418,18 @@ function resetFilters() {
text - transform : uppercase ;
}
. progress - cell { display : grid ; gap : var ( -- space - 2 ) ; }
. progress - row { display : flex ; align - items : flex - start ; gap : var ( -- space - 2 ) ; min - width : 0 ; }
. progress - cell { display : grid ; gap : var ( -- space - 2 ) ; min - width : 0 ; }
. progress - row { display : flex ; align - items : center ; gap : var ( -- space - 2 ) ; min - width : 0 ; }
. progress - row : deep ( . el - tag ) {
min - width : 0 ;
max - width : calc ( 100 % - 42 px ) ;
}
. progress - row : deep ( . el - tag _ _content ) {
display : block ;
overflow : hidden ;
text - overflow : ellipsis ;
white - space : nowrap ;
}
. progress - label {
display : inline - flex ;
align - items : center ;
@@ -438,17 +454,41 @@ function resetFilters() {
. cell - error { display : block ; min - width : 0 ; line - height : 1.55 ; color : # 475467 ; word - break : break - word ; font - size : var ( -- text - xs ) ; }
. task - end { display : grid ; gap : var ( -- space - 3 ) ; min - width : 0 ; }
. action - cell { display : flex ; flex - wrap : wrap ; gap : var ( -- space - 2 ) ; align - items : flex - start ; }
. task - end {
display : grid ;
grid - template - columns : minmax ( 0 , 1 fr ) auto ;
gap : var ( -- space - 3 ) ;
align - items : center ;
min - width : 0 ;
}
. action - cell {
display : flex ;
flex - wrap : wrap ;
gap : var ( -- space - 2 ) ;
align - items : center ;
justify - content : flex - end ;
max - width : 360 px ;
}
. action - cell : deep ( . el - button ) {
flex : 0 0 auto ;
margin - left : 0 ;
}
@ media ( max - width : 1200 px ) {
. task - grid { grid - template - columns : repeat ( 3 , minmax ( 0 , 1 fr ) ) ; }
. task - section -- actions {
grid - template - columns : 1 fr ;
align - items : start ;
}
. task - end { grid - template - columns : 1 fr ; }
. action - cell { justify - content : flex - start ; max - width : none ; }
. filter - grid { grid - template - columns : repeat ( 3 , minmax ( 0 , 1 fr ) ) ; }
. filter - buttons { justify - content : flex - start ; }
}
@ media ( max - width : 900 px ) {
. task - grid { grid - template - columns : repeat ( 2 , minmax ( 0 , 1 fr ) ) ; }
. filter - grid { grid - template - columns : repeat ( 2 , minmax ( 0 , 1 fr ) ) ; }
. filter - actions { flex - direction : column ; align - items : flex - start ; }
. filter - buttons { justify - content : flex - start ; }
}
@ media ( max - width : 640 px ) {
. task - grid ,