Retired/pages/home/search.vue

187 lines
4.5 KiB
Vue

<template>
<!-- 首页/搜索页 -->
<view class="search wrap-card">
<!-- 小程序导航栏 -->
<!-- #ifdef MP-WEIXIN -->
<u-navbar placeholder autoBack>
<view slot="center" class="nav-center">
<u-search placeholder="请输入内容" @click="search()" disabled></u-search>
</view>
</u-navbar>
<!-- #endif -->
<template v-if="list.length === 0">
<view class="flex items-center">
<text class="text-30">搜索历史</text>
<u--text v-if="records.length > 0" prefixIcon="trash" align="right" iconStyle="font-size: 19px"
text="清空" @click="delRecord('all')"></u--text>
</view>
<view class="flex flex-wrap mt-20">
<view class="mr-20 my-10 p-10 border rounded text-24 text-gray-500 relative"
v-for="(item,index) in records" :key="index" @longpress="editState(index)">
<text>{{item.name}}</text>
<u-icon v-if="item.edit" class="close-tag" name="close-circle" @click="delRecord('single',index)">
</u-icon>
</view>
</view>
</template>
<!-- 资讯列表 -->
<template v-if="type === 'info'">
<info-list :item="item" v-for="(item,index) in list" :key="index">
</info-list>
</template>
<!-- 话题列表 -->
<template v-else-if="type === 'topic'">
<topic-list :item="item" v-for="(item,index) in list" :key="index">
</topic-list>
</template>
<!-- 用户列表 -->
<template v-else-if="type === 'user'">
<friend-list :item="item" v-for="(item,index) in list" :key="index">
</friend-list>
</template>
<u-toast ref="uToast"></u-toast>
</view>
</template>
<script>
import {
searchList,
newsList,
friendList,
topicList
} from "@/utils/data/data.js"
import InfoList from "@/pages/home/cpns/info-list.vue"
import TopicList from "@/pages/news/cpns/topic-list.vue"
import FriendList from "@/pages/paper/cpns/friend-list.vue"
export default {
components: {
InfoList,
TopicList,
FriendList
},
data() {
return {
type: '', // user:用户 news:动态 topic:话题
keyword: '',
records: searchList,
list: [],
}
},
// 监听原生标题栏按钮点击事件
onNavigationBarButtonTap(e) {
if (e.index == 0) {
this.search()
}
},
// 监听原生标题栏搜索输入框输入内容变化事件
onNavigationBarSearchInputChanged(e) {
this.keyword = e.text
},
// 监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发
onNavigationBarSearchInputConfirmed() {
this.search()
},
onLoad(e) {
this.type = e.type
// #ifdef APP-PLUS
this.editNavPlaceholder()
// #endif
},
methods: {
// 搜索
search() {
// 数据校验
if (this.keyword === '') {
return this.$refs.uToast.show({
type: 'error',
message: '请输入搜索内容'
})
}
// 收起键盘
uni.hideKeyboard()
// 加载中
uni.showLoading({
title: '加载中',
})
setTimeout(() => {
uni.hideLoading()
switch (this.type) {
case 'user':
this.list = friendList[0].list
break
case 'info':
this.list = newsList[0].list
break
case 'topic':
this.list = topicList[0].list
break
}
}, 1000)
},
// 删除记录
delRecord(type, index = 0) {
if (type === 'all') return this.records = []
else return this.records.splice(index, 1)
},
// 编辑状态
editState(index) {
this.records[index].edit = this.records[index].edit ? !this.records[index].edit : true
},
// 修改导航栏输入框占位符
editNavPlaceholder() {
// 修改原生导航栏:搜索框占位符
let pageTitle = '请输入内容'
switch (this.type) {
case 'user':
pageTitle = '请输入昵称'
break
case 'info':
pageTitle = '请输入新鲜事'
break
case 'topic':
pageTitle = '请输入话题'
break
}
const currentWebview = this.$mp.page.$getAppWebview() // 获取当前窗口对象实例
const tn = currentWebview.getStyle().titleNView // 获取原生导航栏
tn.searchInput.placeholder = pageTitle // 设置占位符
currentWebview.setStyle({
titleNView: tn
})
}
}
}
</script>
<style lang="scss" scoped>
page {
background-color: #fff;
}
.search {
// 小程序导航栏
/* #ifdef MP-WEIXIN */
/deep/ .u-navbar {
.u-navbar__content {
margin-right: 180rpx !important; // 胶囊按钮
}
.nav-center {
width: 100%;
margin-left: 80rpx; // 返回按钮
}
}
/* #endif */
.close-tag {
position: absolute;
top: -15rpx;
right: -5px;
}
}
</style>