feat: 移动端列表页支持搜索+分页(25条/页);历史移至请假后

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-13 00:49:43 +08:00
parent 3059f0e7e4
commit 72d869bafb
6 changed files with 104 additions and 11 deletions
+21 -2
View File
@@ -6,17 +6,28 @@ import api from '@/api/index'
const router = useRouter()
const loading = ref(false)
const searchText = ref('')
const page = ref(1)
const pageSize = ref(25)
const total = ref(0)
const items = ref<any[]>([])
onMounted(loadItems)
async function loadItems() {
loading.value = true
try { const res = await api.get('/work-plans/'); items.value = Array.isArray(res.data) ? res.data : (res.data.items || []) }
catch (_) {}
try {
const params: any = { page: page.value, page_size: pageSize.value }
if (searchText.value) params.search = searchText.value
const res = await api.get('/work-plans/', { params })
const raw = Array.isArray(res.data) ? res.data : (res.data.items || [])
items.value = raw; total.value = res.data.total || raw.length
} catch (_) {}
finally { loading.value = false }
}
function onSearch() { page.value = 1; loadItems() }
async function handleDelete(id: string) {
try {
await ElMessageBox.confirm('确定删除?', '确认', { type: 'warning' })
@@ -39,6 +50,11 @@ async function handleDelete(id: string) {
<button class="new-btn" @click="router.push('/m/work-plan/new')">+ 新建计划</button>
<div style="margin-bottom:12px;display:flex;gap:8px">
<el-input v-model="searchText" placeholder="搜索..." size="small" clearable @keyup.enter="onSearch" @clear="onSearch" />
<el-button size="small" @click="onSearch">搜索</el-button>
</div>
<div class="cards">
<div v-if="items.length === 0 && !loading" class="empty-state"><div class="empty-glyph">—</div><p class="empty-text">暂无工作计划</p></div>
<article v-for="item in items" :key="item.id" class="card" @click="router.push(`/m/work-plan/${item.id}/edit`)">
@@ -54,7 +70,10 @@ async function handleDelete(id: string) {
</div>
</div>
</article>
<div v-if="total > pageSize" style="display:flex;justify-content:center;margin-top:14px">
<el-pagination v-model:current-page="page" :page-size="pageSize" :total="total" layout="prev, pager, next" small @current-change="loadItems" />
</div>
</div>
</div>
</template>