app列表页(无筛选 有搜索)
Posted ThisCall
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了app列表页(无筛选 有搜索)相关的知识,希望对你有一定的参考价值。
<template> <div class="wh main bxs"> <div class="header bxs w"> <van-row> <van-col @click="backFn" span="8" class="f18 corm pl10" ><van-icon name="arrow-left" class="corm" />返回</van-col > <van-col span="8" class="tc f20">用户管理</van-col> <van-col span="8" class="tr f16 pr10 corm"> <span @click="addFn">新增</span> </van-col> </van-row> </div> <div class="wh bxs content"> <div class="contentSea bxs w"> <van-search v-model="bizTitle" placeholder="输入用户名/登录账号/身份证号搜索" @search="onSearch" /> </div> <!-- main.js 引入注册 --> <scroller :on-infinite="infinite" :noDataText="noDataText" class="bxs p10 h" ref="myscroller" > <div class="contentList bxs w ptnew"> <van-swipe-cell v-for="(item, i) of tableData" :key="i"> <div class="w p10 list bxs mb10" @click="detailFn(item)"> <div class="list-item"> <div class="f16 titleInfo flex"> <span class="text_1"> item.nickName </span> </div> <div class="f12 mt5"> item.userName </div> <div class="list-item-lf bxs p10 bgcm"> <div class="wh flexca"> <van-icon name="manager" size="25" /> </div> </div> <div class="list-item-rt bxs p10 bgf f12"> <div class="h flexca" style="color: #2e7cf9"> <span> <i class="iconfont icon-ticket_renlianshibie"> </i> 信息登记</span > <span class="ml10 f13" ><van-icon name="more-o" class="f16" /> 操作</span > </div> </div> </div> </div> <template #right> <van-button square style="margin-left: 1px" type="info" text="删除" class="delete-button" @click="deleteFn(item)" /> </template> </van-swipe-cell> </div> </scroller> </div> </div> </template> <script> import getUserQueryList, delByUserIds, from "@/api/mine_userManage"; import getDictTypeList, from "@/api/sys"; // 状态关联关键词* export default data () return bizTitle: "",//搜索参数 tableData: [],//列表初始化数据 page: index: 0, size: 10, total: null, , ; , created () this.employeeId = JSON.parse(localStorage.getItem("employeeId")); this.departmentId = localStorage.getItem("departmentId"); , // 页面销毁生命周期方法 beforeDestroy () this.$toast.clear(); , methods: // 删除 async deleteFn (item) const res = await delByUserIds(item.userId); if (res.code == 200) this.$toast.success("刪除成功"); this.page.index = 0; this.tableData = []; this.getData(); , // 详情跳转 detailFn (item) this.$router .push( name: "userManageDetail", params: userId: item.userId, item: item, , ) .then((res) => console.log(res); ) .catch((error) => console.log(error); ); //把error 抛出来; , // 新增 addFn () this.$router .push( name: "userMessAdd" ) .then((res) => console.log(res); ) .catch((error) => console.log(error); ); //把error 抛出来; , // 搜索 onSearch () this.page = index: 0, size: 10, total: null, ; console.log(this.page); this.$refs.myscroller.finishInfinite(false); this.tableData = []; , infinite (done) setTimeout(() => this.page.index++; this.getData(done); , 500); , // 初始化数据 async getData (done) let datVal = keyword: this.bizTitle, ...this.formSearch, pageNum: this.page.index, pageSize: this.page.size, ; console.log(this.page.index, "index"); const result = await getUserQueryList(datVal); if (this.$refs.myscroller) this.$refs.myscroller.finishInfinite(true); if (result.data.length < 10) this.noDataText = this.noDataTextEnd; if (result.data && result.data.length > 0) if (typeof done == "function") done(); this.tableData = this.tableData.concat(result.data); console.log(this.tableData, result.data); if (result.pageNum) this.page.index = result.pageNum; this.page.total = result.total; , backFn () this.$router.back(); , , ; </script> <style lang="scss" scoped> .contentList.ptnew padding-top: 105px; .search_condition position: absolute; top: 15px; right: 15px; display: inline-block; padding: 3px 8px; background-color: #fff; border-radius: 5px; z-index: 999; .main position: relative; .header height: 50px; line-height: 50px; position: fixed; background: #fff; top: 0; left: 0; z-index: 100; .content background: #f5f8f8; padding-top: 105px; .contentSea position: fixed; top: 50px; left: 0; background: #fff; z-index: 100; .contentList .list background: #fff; position: relative; border-radius: 4px; .list-item width: 100%; box-sizing: border-box; position: relative; padding-left: 50px; .list-item-lf position: absolute; left: 0; top: 0; width: 40px; height: 40px; border-radius: 50%; .list-item-rt position: absolute; right: 0; top: 0; // div:nth-child(1) // width: 80%; // // .flotDiv // position: absolute; // top: 10px; // right: 0; // background: #cc0000; // color: #fff; // .delete-button height: 100%; .filter-btm-btn width: 100%; position: absolute; bottom: 0; left: 0; background-color: #fff; box-sizing: border-box; padding-top: 10px; .btn display: inline-block; width: 40%; height: 40px; line-height: 40px; background-color: #8a8a8a; color: #fff; text-align: center; .btn_l border-radius: 20px 0 0 20px; .btn_r border-radius: 0 20px 20px 0; background-color: #2e7cf9; </style>
JS实现输入拼音搜索中文列表
参考技术A 最近工作中接到了一个需求:一个项目列表,项目名称可能有中文可能有英文,如果是中文的话,需要实现用户输入项目的拼音即可筛选到对应项目的功能。完成了之后觉得可以在公众号里给大家分享一下,给有需要的人一个参考吧。
项目框架用的是react,所以先creat-react-app
比如create-react-app pinyin
渲染选择框的组件用的是antd的Select组件,所以需要先引入antd,具体引入的方法参照antd官方文档,已经写得很清楚了
以上准备工作做好后,目前的目录结构应该如下图所示:
├── README.md
├── package.json
├── package-lock.json
├── config-overrides.js
├── public
│ ├── favicon.ico
│ ├──index.html
└── manifest.json
├── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├──logo.svg
│ └── registerServiceWorker.js
现在在src文件夹下新建一个components文件夹,components文件夹中新建一个SelectPinYin文件夹,SelectPinYin文件夹下新建一个index.js和PinYin.js
PinYin.js文件中主要放置拼音和各个拼音对应的中文字符串,方便组件调用
export const SimplePinYin =
py: [
[ 'a','阿啊呵腌吖锕啊呵嗄啊呵啊呵阿啊呵' ],
[ 'ai','哀挨埃唉哎捱锿呆挨癌皑捱矮哎蔼霭嗳爱碍艾唉哎隘暧嗳瑷嗌嫒砹' ],
[ 'an','安谙鞍氨庵桉鹌厂俺铵揞埯案按暗岸黯胺犴' ],
[ 'ang','肮昂盎' ],
[ 'ao','熬凹熬敖嚣嗷鏖鳌翱獒聱螯廒遨袄拗媪奥澳傲懊坳拗骜岙鏊' ],
[ 'ba','八吧巴叭芭扒疤笆粑岜捌八拔跋茇菝魃把靶钯把爸罢霸坝耙灞鲅吧罢' ],
[ 'bai','掰白百摆伯柏佰捭败拜呗稗' ],
[ 'ban','般班搬斑颁扳瘢癍版板阪坂钣舨办半伴扮瓣拌绊' ],
[ 'bang','帮邦浜梆膀榜绑棒膀傍磅谤镑蚌蒡' ],
[ 'bao','包胞炮剥褒苞孢煲龅薄雹保宝饱堡葆褓鸨报暴抱爆鲍曝刨瀑豹趵' ],
[ 'bei','背悲杯碑卑陂埤萆鹎北被备背辈倍贝蓓惫悖狈焙邶钡孛碚褙鐾鞴臂呗' ],
...
]
内容太多,只能复制这样一小部分,其余部分可以参考下面这条链接,然后改成上面那种格式就可以了。
http://www.cnblogs.com/meteoric_cry/p/5954547.html
接下来开始写组件
要做到拼音搜索匹配到中文,所以调用this.selectPinYin函数,下面开始写selectPinYin函数
当input为中文时:
return option.props.children.toLowerCase().indexOf( input.toLowerCase() ) >= 0;
当input为字母时:
const value = option.props.children.toLowerCase().split( '' );
const newValue = value.map( item => this.chineseChangePY( item ) ).join( '' );
return newValue.indexOf( input.toLowerCase() ) >= 0;
思路:
① 将列表中的每项内容,即option.props.children转成小写(万一不全是中文),然后进行分割,split('')把字符串转成数组
② 遍历得到的数组,并把每一个元素传递给chineseChangePY函数
③ chineseChangePY函数的作用:如果元素不是中文,直接返回;如果是中文,遍历PinYin.js中的数组,与每个子数组的第二个元素即中文字符串对比,如果元素在这个中文字符串里,返回中文字符串所在数组的第一个元素,即所需要的拼音
④ 将处理过的数组转成字符串
⑤ 和input进行对比,存在返回true,不存在返回false
bug说明: 比如遇到生僻字的时候,PinYin.js中没有收录进这个中文,就无法匹配。比如遇到多音字的时候,“藏”:既可以cang也可以zang,cang排在zang前面,当遍历匹配的时候遇到cang就已经返回了,所以如果有用户输入zang就匹配不到藏字。
如果有更好的方法,欢迎讨论交流。
以上是关于app列表页(无筛选 有搜索)的主要内容,如果未能解决你的问题,请参考以下文章