Sortable 拖拽排序
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/sortable-lane-schedule。
技能介绍
要解决什么问题
意向池、线索池或待办列表里,用户希望拖一下就能改优先级;看板或多阶段流程里,卡片要在不同泳道之间移动,同时列内顺序也要对。若只改 DOM、不同步数组,Vue 重渲染或刷新后顺序会乱;若在拖拽过程中频繁打 API,交互会卡;整卡可拖还会和按钮、链接抢点击。
技能如何工作
本技能围绕 SortableJS(常见依赖 sortablejs)约定两类场景:
- 意向池优先级:单列表纵向拖拽,更新
priority/sort(语义需在项目内统一,例如数值越小越靠前)。 - 看板泳道排程:每条泳道一个容器,共享同一
group(如kanban)才能跨列互拖;跨列时更新laneId与源列、目标列内的sort/order。
推荐在 onEnd 里用索引精确改同一份 board 状态(如 moveCard + persist()),避免「读 DOM 猜顺序」。复杂卡片用 .drag-handle 配合 filter / handle;组件卸载前对实例调用 sortable.destroy(),多泳道可用 Map 统一管理。
适用边界与注意点
| 维度 | 意向池 | 看板泳道 |
|------|--------|----------|
| 容器 | 1 | 每泳道 1 个,group 必须一致 |
| 写入字段 | priority / sort | laneId + 列内顺序 |
硬约束:数据源是真相,拖完必须落库或可撤销,禁止静默只改本地;空泳道需 min-height 与 emptyInsertThreshold 等配置。更多选项与 Vue 模板见技能附带的 reference.md 与 templates/vue-pool-and-board.md。
使用场景
- CRM 意向池列表里,销售用纵向拖拽调整线索跟进优先级,松手后把新的 sort 写回接口
- 多阶段看板上,把卡片从「待处理」泳道拖到「进行中」,同时更新 laneId 与两列内顺序
- 待办/线索池单列表场景,用拖拽改 priority,且刷新页面后顺序与数据库一致
- Vue 3 页面里多条泳道并排,卡片跨列互拖排程,空列也要能接住拖入的卡片
适合人员
- 做 CRM/线索系统的前端,要在意向池实现「拖一下改优先级」且不能只做 DOM 排序
- 负责项目看板或迭代流程页的工程师,需要跨泳道拖卡片并同步 laneId 与列内 order
- 用 Vue 3 维护复杂卡片(按钮、链接多)的开发者,想用 drag-handle 避免拖拽抢点击
- 接入 SortableJS 后遇到刷新乱序或重复绑定的维护者,需要对齐 onEnd 落库与 destroy 生命周期