进入uniapp

This commit is contained in:
2023-12-01 23:57:44 +08:00
parent a78893ea1f
commit d61f5e6c92
524 changed files with 88081 additions and 12 deletions

View File

@@ -0,0 +1,568 @@
<template name="zy-search">
<view class="good-search-page" :class="Theme">
<view class="good-search-head">
<input :class="{'clearvalue':clearValuebtn}" :maxlength="maxLength" :style="{'line-height': inputHeight+'px','height': inputHeight+'px'}" :focus="isFocus" type="text" confirm-type="search" @confirm="searchStart()" :placeholder="inputPlaceholder" :confirm-hold="true" v-model="searchText" />
<!-- <view v-if="searchText.length>0&&clearValuebtn" class="good-search-icon clearvalue-icon iconfont iconshanchu1" @click="clearvalue()"></view> -->
<view class="good-search-icon search-icon2" @click="goback()">取消</view>
<view class="good-search-icon search-icon iconfont iconsousuo-copy" @click="searchStart()"></view>
<scroll-view class="autocomplay" :style="{'top': inputHeight+5+'px'}" v-if="autocomplaystate" scroll-y>
<view class="autocomplay-item" v-for="(item,index) in autocomplayarr" :key="index" @click="tagsClick(item.value)">
<rich-text :nodes="item.richtxt"></rich-text>
</view>
<view style="color: #999;text-align: center;justify-content: center; line-height: 70rpx;" v-if="autocomplayarr.length<1">没有相关信息</view>
</scroll-view>
</view>
<view class="good-search-body">
<view class="search-history" v-if="hList.length > 0">
<view class="header">
<text>历史记录</text>
<view class="good-search-icon delete-icon iconfont iconshanchu" @click="delhistory()"></view>
</view>
<view class="list">
<view v-for="(item,index) in hList" :key="index" @click="tagsClick(item)">{{item}}</view>
</view>
</view>
<view class="search-showhot" v-if="hotList.length>0">
<view class="header">
<text>猜你想搜的</text>
</view>
<view class="list">
<view v-for="(item,index) in hotList" :key="index" @click="tagsClick(item)">{{item}}</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
props: {
clearValuebtn: { //是否显示清空按钮
type: Boolean,
default: true
},
isFocus: { //是否自动获取焦点
type: Boolean,
default: false
},
Theme: { //选择主题class
type: String,
default: 'good-search-circle'
},
maxLength: { //字符最大长度
type: [String, Number],
default: '140'
},
inputHeight: { //搜索框高度单位px
type: [String, Number],
default: '35'
},
inputPlaceholder: { //搜索框默认提示
type: String,
default: '请输入关键词搜索'
},
autoComplaylist: { //自动联想数据
type: Array,
default () {
return []
}
},
historyNum: { //历史记录保存数量
type: Number,
default: 6
},
hotList: { //推荐列表数据
type: Array,
default () {
return []
}
},
speechEngine: { //语音引擎=>讯飞:iFly,百度:'baidu'
type: String,
default: 'iFly'
},
Punctuation: { //是否开启语音识别标点符号
type: Boolean,
default: false
},
callbackTime: { //input回调缓冲时间(不返回500毫秒以内输入的数据防止每输入一个值就会触发一次)
type: Number,
default: 500
},
},
data() {
return {
speechengine: this.speechEngine,
punctuation: this.Punctuation,
historynum: this.historyNum,
callbacktime: this.callbackTime,
autocomplaylist: this.getcomplaylist(this.autoComplaylist),
autocomplayarr: [],
autocomplaystate: false,
searchText: '',
hList: uni.getStorageSync('search_cache'),
};
},
watch: {
historyNum: function(val) {
this.historynum = val;
},
speechEngine: function(val) {
this.engine = val;
},
hotList: function(val) {
this.hotList = val;
},
autoComplaylist: function(val) {
this.autocomplaylist = this.getcomplaylist(val);
if (!this.searchText || this.searchText == '') {
this.autocomplaystate = false
return
}
this.autocomplayarr = this.replacekeyword(this.autocomplaylist, this.searchText)
this.autocomplaystate = this.autocomplayarr.length > 0 ? true : false;
},
searchText: function(val) {
let _this = this;
var searchWords = val.replace(/^ +| +$/g, '');
if (!searchWords || searchWords == '') {
this.autocomplaystate = false
return
}
if (this.calbacktime) {
clearTimeout(_this.calbacktime)
}
this.calbacktime = setTimeout(function() {
_this.inputChange(searchWords)
}, _this.callbackTime);
this.autocomplayarr = this.replacekeyword(this.autocomplaylist, searchWords)
this.autocomplaystate = this.autocomplayarr.length > 0 ? true : false;
},
},
methods: {
goback(){
uni.navigateBack({
delta:1
})
},
clearvalue() { //删除input值
let _this = this;
setTimeout(function() { //增加延时解决键盘收回时导致的@input事件
_this.searchText = ''
}, 20);
this.searchText = ''
},
getcomplaylist(arr) { //初始化自动联想数组
var data = []
for (var i = 0; i < arr.length; i++) {
data.push({
richtxt: arr[i],
value: arr[i]
})
}
return data
},
replacekeyword(arr, searchWords) { //返回符合关键词的高亮数组
var data = []
for (var i = 0; i < arr.length; i++) {
if (arr[i].richtxt.search(searchWords) != -1) {
data.push({
richtxt: arr[i].richtxt.replace(searchWords, "<span style='color: #333;font-weight:bold'>" + searchWords +
"</span>"),
value: arr[i].value
})
}
}
return data
},
tagsClick(item) { //标签点击事件
let _this = this;
setTimeout(function() { //增加延时解决键盘收回时导致的@input事件
_this.searchText = item
_this.searchStart()
}, 20);
this.$emit('tagsClick', item)
},
inputChange(e) { //input回调
this.$emit('inputChange', e)
},
notSupport() { //不支持提醒
uni.showToast({
title: '该平台暂不支持',
icon: 'none',
duration: 1000
});
},
searchStart() { //触发搜索
let _this = this;
if (_this.searchText == '') {
uni.showToast({
title: '请输入关键字',
icon: 'none',
duration: 1000
});
return false;
}
// else {
// if(this.autocomplayarr.length<1){
// this.autocomplaystate=true
// return
// }
// uni.getStorage({
// key: 'search_cache',
// success(res) {
// let list = res.data;
// if (list.length >= _this.historynum) {
// for (let item of list) {
// if (item == _this.searchText) {
// return false;
// }
// }
// list.pop();
// list.unshift(_this.searchText);
// } else {
// for (let item of list) {
// if (item == _this.searchText) {
// return false;
// }
// }
// list.unshift(_this.searchText);
// }
// _this.hList = list;
// uni.setStorage({
// key: 'search_cache',
// data: _this.hList
// });
// },
// fail() {
// _this.hList = [];
// _this.hList.push(_this.searchText);
// uni.setStorage({
// key: 'search_cache',
// data: _this.hList
// });
// }
// })
// }
this.$emit('clickSearch', _this.searchText)
},
delhistory() { //清空历史记录
this.hList = [];
uni.setStorage({
key: 'search_cache',
data: []
});
this.$emit('delhHistory')
},
startRecognize() { //语音输入
let _this = this;
let options = {};
options.engine = _this.speechengine;
options.punctuation = _this.punctuation; // 是否需要标点符号
options.timeout = 1000;
plus.speech.startRecognize(options, function(s) {
_this.searchText = _this.searchText + s;
});
}
}
}
</script>
<style scoped>
@font-face {
font-family: 'iconfont';
src: url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAARsAAsAAAAACTAAAAQeAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDMgqFOIR/ATYCJAMUCwwABCAFhG0HXhshCBEVnP3IfiTGtg+yYk9cckRpaoLn+Ty/c9976WTSnw8NxB3gNgOIO3pXjJjRVmgD9Ab4PpuONYw5YTol8dSz/I/7dt/vpPE4jVIIiZD8//ctbT0e2HotiyTD+1qXxepTJ4rjgALadwoja4DGBsTHZGxxVg7MnJ/5HAI4FKQ80rBxy47YGGidADJs8MDe2B0bZoEj2MbAxFGDrMLCVovVA2Bl8fPyhapig8LS0Na2Axr1o66P31LPSsyiW0ZDfjgPYJ0CDZQHDMiYSd8wdJUrj8YJfs9QF3CwUSgfP9sv7bdMJCBU3ZDBkT5QN/OPp0ECkC4J7Lp5Az6JCAr8bBEE/NKyZX1L2NA60zI4Byq8AakDdnGd+mjadOnkCgUCQZe2JBWQrrOPLDlENBrCKQ7NOhx0lx6dfcRxJB73ZLxDIpGOsVjY60kZ8igzOXw9LgUBGelc6m3cuuVAZsRx5GvKIpG66zZnkSW0fl+aqQyrs2/PC4MqGm3k3o57OnjwGM/GYh13Xl76sMCgA5cKaldtu1A8yVt6VE6qgY0tiXyypWtSP/W45FhtsVi3dUuywx3Tq47MzuWFN8w+ujQr5G1cenhWZsfQenHrt0Nual5cNWf/2RnJgwa45BXXcaVvHjDIwtCj5mC0pbqoUevXj0rVykS01XygQmPGhkWi1q5CD1V4zJiwAgLTK6ixKmnjng+VFzQ3pz5/PqlPaRCoT+KaU6ZLu+LnFx6adKNhoZbr9a1bap1EeNbrdQ2mn6ZhlWmvN9uLq2TsP7U4b5W8FB5bv7F076IbRQtPLDExo9Ibadiy2+o5q1t1pdHrcsP37+hG3bvu21zld1OnSNq6uuWtV79fm/JtF9YYl+plfM3wiugNm1M99VW1huenTU6hsK5/2fz9ay5L1EmqairU5E15Nq0kzL1F8ywu6YspBjsP5znMJAAS1011/YKXvq7rYabb2/VcX9P+QgCB5CWns3um1PxmBw0AT9ymU0Q0kYEv+0/oCeR/Hjmzz4RKslvG701kftwixF9Dp4KSAyQQSufFYQxZ7EYQbLIaUOSgAGhsitMNuzxYBKkOAWzqgEM5PdXpIBlYa8TkBMryFiCk8gFFMpdBk8qXbtg/sMjmDwFSZQ0O4WVcGaSktKcGFplHCXyGVtCklNOfyuYb1mFgtq0suC+0rk1Ckeb9YoUT2kPscLEuvVegLI1wFa/hMBBoSx0Knzbe60uWqakPpYLGxYkGLMR4SAK4GdASyERlo73T4Ps3qBYMGLtAGYi/IMtpJwcKUnIGvdJNLMpLme1EtRLPU/oqxSIj4AoPGmSOAHp6UQcJXkqzQ0a7kGmDFFeXnt4wvsdjgAPNtkSJFiOWBEi7b3fydkLpGqZRkJ7PYym4QEmj2U8UJtGEQ+EtFgsAAA==') format('woff2');
}
.iconfont {
font-family: 'iconfont' !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.iconcombinedshapecopy:before {
content: "\e616";
}
.iconsousuo-copy:before {
content: "\e600";
}
.iconshanchu:before {
content: "\e64c";
}
.iconshanchu1:before {
content: "\e628";
}
page {
display: flex;
flex-direction: column;
box-sizing: border-box;
background-color: #F5F5F5;
}
view {
display: flex;
font-size: 28upx;
line-height: inherit
}
.good-search-page {
box-sizing: border-box;
width: 750rpx;
padding: 30rpx;
display: flex;
flex-direction: column;
}
.good-search-head {
position: relative;
}
.good-search-head input {
box-sizing: border-box;
width: 100%;
background-color: #F7F7F7;
font-size: 28rpx;
border-radius: 50rpx;
padding: 0 73rpx;
padding-left: 34rpx;
padding-right: 160rpx;
}
.good-search-head input.clearvalue{
}
.good-search-icon {
color: #888;
justify-content: center;
align-items: center;
font-size: 38rpx;
}
.good-search-head .good-search-icon {
width: 73rpx;
height: 100%;
position: absolute;
z-index: 2;
top: 0rpx;
}
.good-search-head .voice-icon {
left: 0;
}
.good-search-head .search-icon {
width: 63rpx;
right: 97rpx;
}
.good-search-head .search-icon2 {
font-size: 28rpx;
right: 0;
width: 73rpx;
padding-right: 24rpx;
}
.good-search-head .clearvalue-icon {
width: auto;
right: 146rpx;
color: #ccc;
}
.good-search-head .autocomplay {
left: 0;
top: 80rpx;
border-radius: 20rpx;
height: 70vh;
background: #f7f7f7;
position: absolute;
z-index: 9;
}
.good-search-head .autocomplay .autocomplay-item {
padding: 0 24rpx;
line-height: 70rpx;
height: 70rpx;
border-bottom: 1px #eee solid;
color: #999;
}
.good-search-body {
display: flex;
flex-direction: column;
}
.good-search-page .search-history {
display: flex;
flex-direction: column;
}
.good-search-page .search-showhot {
display: flex;
flex-direction: column;
}
/* 主题1 */
.good-search-rect {}
.good-search-rect .good-search-head input {
border-radius: 0;
}
.good-search-rect .good-search-head input.clearvalue{
}
.good-search-rect .good-search-head .voice-icon {}
.good-search-rect .good-search-head .search-icon {}
.good-search-rect .good-search-head .clearvalue-icon {}
.good-search-rect .header {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
margin: 24rpx 0;
padding: 0 12rpx;
}
.good-search-rect .header text {
color: #666;
font-weight: bold;
font-size: 32rpx;
margin-right: auto;
}
.good-search-rect .list {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.good-search-rect .list view {
display: block;
width: 49%;
color: #8A8A8A;
font-size: 28rpx;
box-sizing: border-box;
text-align: center;
padding: 20rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
background-color: #F7F7F7;
margin: 0.5%;
}
.good-search-rect .search-showhot {}
/* 主题2 */
.good-search-circle {}
.good-search-circle .good-search-head input {
border-radius: 50rpx;
}
.good-search-circle .good-search-head input.clearvalue{
}
.good-search-circle .good-search-head .voice-icon {}
.good-search-circle .good-search-head .search-icon {}
.good-search-circle .good-search-head .clearvalue-icon {}
.good-search-circle .header {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
margin: 24rpx 0;
padding: 0 12rpx;
}
.good-search-circle .header text {
color: #666;
font-weight: bold;
font-size: 32rpx;
margin-right: auto;
}
.good-search-circle .list {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.good-search-circle .list view {
display: block;
padding: 8rpx 18rpx;
margin: 12rpx;
margin-top: 0;
font-size: 28rpx;
color: #8A8A8A;
background-color: #F7F7F7;
box-sizing: border-box;
text-align: center;
border-radius: 20rpx;
}
.good-search-circle .search-showhot {}
/* 主题3 */
.good-search-tb {}
.good-search-tb .good-search-head input {
border-radius: 0;
}
.good-search-tb .good-search-head input.clearvalue{
padding-right: 133rpx;
}
.good-search-tb .good-search-head .voice-icon {}
.good-search-tb .good-search-head .search-icon {
background: #FF9A33;
color: #fff;
}
.good-search-tb .good-search-head .clearvalue-icon {
width: 60rpx;
}
.good-search-tb .header {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
margin: 24rpx 0;
padding: 0 12rpx;
}
.good-search-tb .header text {
color: #666;
font-weight: bold;
font-size: 32rpx;
margin-right: auto;
}
.good-search-tb .list {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.good-search-tb .list view {
display: block;
padding: 8rpx 30rpx;
margin: 12rpx;
margin-top: 0;
font-size: 28rpx;
color: #8A8A8A;
background-color: #F7F7F7;
box-sizing: border-box;
text-align: center;
border-radius: 20rpx;
}
.good-search-tb .search-showhot {}
</style>