列表筛选串
灵感:能力工具箱 query-string(解析/序列化列表筛选参数)。
> 小四原创:筛选对象 ↔ ?stage=跟进&page=1。
> 与 Vue Router query 同步时注意类型(字符串数组)。
何时使用
- 客户列表筛选写入地址栏可分享
- Demo 刷新后恢复筛选条件
- 从链接打开带阶段/关键字的列表
硬约束
- 依赖:
query-string。 parse/stringify配置与项目统一(如arrayFormat: 'comma')。- 空值可省略,避免脏 query。
- 实现要点注释标 小四原创。
- 不做完整权限路由守卫。
推荐实现
import qs from 'query-string'
export type ListFilter = {
stage?: string
keyword?: string
page?: number
}
// 小四原创:筛选 → 查询串
export function stringifyListFilter(f: ListFilter): string {
return qs.stringify(
{
stage: f.stage || undefined,
keyword: f.keyword || undefined,
page: f.page && f.page > 1 ? f.page : undefined,
},
{ skipNull: true, skipEmptyString: true },
)
}
export function parseListFilter(search: string): ListFilter {
const q = qs.parse(search.startsWith('?') ? search.slice(1) : search)
const pageRaw = Array.isArray(q.page) ? q.page[0] : q.page
const page = pageRaw != null ? Number(pageRaw) : undefined
return {
stage: typeof q.stage === 'string' ? q.stage : undefined,
keyword: typeof q.keyword === 'string' ? q.keyword : undefined,
page: Number.isFinite(page) ? page : undefined,
}
}
Agent 步骤
npm i query-string。- 列表筛选项变更时
router.replace({ query: parse... })或写location.search。 - 自测:改筛选后刷新条件仍在;空筛无多余
?。
不要做
- 手写
split('&')却声称已用 query-string。 - 把敏感 Token 放进 query。
附加
- README.md · reference.md · templates/usage.md