layui/docs/src/components/LaySearch.vue

103 lines
2.3 KiB
Vue
Raw Normal View History

2021-10-06 15:22:30 +00:00
<template>
<select :name="name" lay-verify="required"></select>
<div
class="layui-unselect layui-form-select"
@click="open"
:class="[openState ? 'layui-form-selected' : '']"
>
<div class="layui-select-title">
<input
type="text"
2021-10-09 17:07:37 +00:00
placeholder="Search"
2021-10-06 15:22:30 +00:00
class="layui-input layui-unselect"
@input="change"
2021-10-09 08:15:02 +00:00
:value="name"
2021-10-06 15:22:30 +00:00
style="
background: rgba(255, 255, 255, 0.05);
border: none;
color: whitesmoke;
"
/><i class="layui-edge"></i>
</div>
<dl class="layui-anim layui-anim-upbit" style="">
2021-10-09 08:15:02 +00:00
<dd v-if="menus.length <= 0" class="layui-select-tips">无内容</dd>
2021-10-06 15:22:30 +00:00
<dd
2021-10-09 08:15:02 +00:00
v-else
v-for="data in menus"
:value = "name"
2021-10-06 15:22:30 +00:00
@click="jump(data)"
:key="data"
class="layui-select-tips"
>
{{ data.title }}
</dd>
</dl>
</div>
</template>
<script setup name="LaySelect" lang="ts">
import { defineProps, Ref, ref } from 'vue'
import { useRouter, useRoute } from 'vue-router'
const props =
defineProps<{
datas?: object[]
}>()
const route = useRoute()
const router = useRouter()
const openState = ref(false)
2021-10-09 08:15:02 +00:00
const menus = ref(props.datas)
2021-10-06 15:22:30 +00:00
const name = ref('')
const open = function () {
openState.value = !openState.value
}
const jump = function (data: any) {
name.value = data.title
2021-10-09 08:15:02 +00:00
router.push(data.path)
}
const change = function(e: any) {
name.value = e.target.value
if(e.target.value === ""){
menus.value = props.datas
}else{
menus.value = searchList(e.target.value, props.datas);
}
}
const searchList = function (str: String, container: any) {
var newList = []
var startChar = str.charAt(0)
var strLen = str.length
for (var i = 0; i < container.length; i++) {
var obj = container[i]
var isMatch = false
for (var p in obj) {
if (typeof obj[p] == 'function') {
obj[p]()
} else {
var curItem = ''
if (obj[p] != null) {
curItem = obj[p]
}
for (var j = 0; j < curItem.length; j++) {
if (curItem.charAt(j) == startChar) {
if (curItem.substring(j).substring(0, strLen) == str) {
isMatch = true
break
}
}
}
}
}
if (isMatch) {
newList.push(obj)
}
}
return newList
2021-10-06 15:22:30 +00:00
}
</script>