因为门店系统里很多地方录单的时候需要选择员工,而当门店员工比较多的时候,想要快速的找到某个员工就比较困难。虽然目前加上了姓名搜索,但是同事反馈效率还是太慢了,于是就提出了按员工姓名进行拼音首字母搜索的功能。比如:张三,直接输入 zs 就可以检索出来。
目前门店的员工数据是调后端接口直接全部返回的,没有分页。所以进行拼音搜索的话,直接在前端实现即可。具体的步骤如下:
pnpm add pinyin-pro
如果你使用了 typescript,那么还需要安装对应的类型库 @types/pinyin-pro
。因为类型库只在开发时使用,所以加上 -D ,将其安装在 devDependencies 里即可。
pnpm add -D @types/pinyin-pro
以下代码只贴出核心部分,没啥难度,注释已经写得比较详细了。
// 导入 pinyin 方法
import { pinyin } from 'pinyin-pro'
// 从后台接口拿到的员工数据
const staffs = [
{ user_id: 0, user_name: '张三' },
{ user_id: 1, user_name: '李四' },
{ user_id: 2, user_name: '王五' },
{ user_id: 3, user_name: '赵六' },
{ user_id: 4, user_name: '小七' },
{ user_id: 5, user_name: '老八' }
]
// 对员工数据时行处理,分别给它们加上拼音码
const staffsPinYin = staffs.map(x => {
return {
...x,
pinyin: pinyin(x.user_name, { pattern: 'first', toneType: 'none', separator:'' }).toLocaleUpperCase()
}
})
// 处理完之后的数据将会是下面这样
// const staffsPinYin = [
// { user_id: 0, user_name: '张三', pinyin: 'ZS' },
// { user_id: 1, user_name: '李四', pinyin: 'LS' },
// { user_id: 2, user_name: '王五', pinyin: 'WW' },
// { user_id: 3, user_name: '赵六', pinyin: 'ZL' },
// { user_id: 4, user_name: '小七', pinyin: 'XQ' },
// { user_id: 5, user_name: '老八', pinyin: 'LB' }
// ]
// 搜索员工
const searchStaff = (keyword) => {
if (keyword) {
if (/^[a-zA-Z]$/.test(keyword)) { // 如果用户输入的 keyword 是纯字母,则筛选 pinyin
return staffsPinYin.filter(x => x.pinyin.includes(keyword.toLocaleUpperCase()))
} else { // 如果不是纯字母,则筛选 user_name
return staffsPinYin.filter(x => x.user_name.includes(keyword))
}
} else {
return staffsPinYin
}
}
关于 pinyin(x.user_name, { pattern: 'first', toneType: 'none', separator: '' })
方法的参数讲解。
1- pattern: 'first' 表示只获取首字母
2- toneType: 'none' 表示获取的拼音不带声调
3- separator: '' 表示获取的拼音之间分隔符为空
更多的用法和参数,可以访问 pinyin-pro 的官网进行了解,官网地址:https://pinyin-pro.cn/use/pinyin.html