| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | 
							- <template>
 
- 	<uni-popup ref="searchPopup" type="top" :animation="false" :is-mask-click="true"
 
- 	 mask-background-color="rgba(0, 0, 0, 0.4)">
 
- 	   <view class="select-search-row">
 
- 		   <view class="select-search-body">
 
- 			  <view class="select-jt-box" @click="toggleMenu">
 
- 				<view class="selected-item">{{ selectedOption.label }}</view>
 
- 				<view class="arrow" :class="{ 'arrow-up': isMenuOpen, 'arrow-down': !isMenuOpen }"></view>
 
- 			  </view>
 
- 			  <view class="select-list-box" v-if="isMenuOpen">
 
- 				<view
 
- 				  v-for="(option, index) in options"
 
- 				  :key="option.value"
 
- 				  class="menu-item"
 
- 				  @click="selectOption(option)"
 
- 				>
 
- 				  {{ option.label }}
 
- 				</view>
 
- 			  </view>
 
- 			  <input type="text" class="search-input" v-model="searchInput" :placeholder="searchPlaceholder" />
 
- 			  <view class="search-icon" @click="handleSearch">
 
- 			  	<uni-icons type="search" size="24" color="#fff"></uni-icons>
 
- 			  </view>	
 
- 			</view>
 
- 		</view>
 
- 		<view class="search-clear-box" v-if="searchInput" @click="searchReset">
 
- 			<icon></icon>
 
- 			<text>清空搜索</text>
 
- 		</view>
 
-   </uni-popup>
 
- </template>
 
- <script setup>
 
- import { ref } from 'vue';
 
- const $emit = defineEmits(['search-btn','reset-search'])
 
- const searchPopup = ref(null); // 索引
 
- const options = ref([
 
- 	  { label: '全部', value: 1 },
 
- 	  { label: '姓名', value: 2 },
 
- 	  { label: '手机号', value: 3 }
 
- 	]);
 
- const searchPlaceholder= ref('请输入姓名、手机号等关键字');
 
- const searchInput= ref('');
 
- // 存储当前选中的选项对象
 
- const selectedOption = ref(options.value[0]);
 
-  
 
- // 存储菜单是否打开的状态
 
- const isMenuOpen = ref(false);
 
-  
 
- // 切换菜单打开/关闭状态的函数
 
- const toggleMenu = () => {
 
-   isMenuOpen.value = !isMenuOpen.value;
 
- };
 
-  
 
- // 选择选项的函数
 
- const selectOption = (option) => {
 
-   selectedOption.value = option;
 
-   searchInput.value = '';
 
-   if(option.label==="全部"){
 
- 	  searchPlaceholder.value = '请输入姓名、手机号等关键字';
 
-   }else{
 
- 	  searchPlaceholder.value = '请输入'+ option.label;
 
-   }
 
-   
 
-   isMenuOpen.value = false; // 选择后关闭菜单
 
- };
 
- function validatePhoneNumber(value){
 
- 	const phoneRegex = /^1[3-9]\d{9}$/;
 
- 	if (phoneRegex.test(value)) {
 
- 		return '手机号';
 
- 	} else {
 
- 		return '姓名';
 
- 	}
 
- }
 
- // 打开弹窗
 
- function handleShow() {
 
- 	searchPopup.value.open();
 
- }
 
- // 取消
 
- function handleClose() {
 
- 	searchInput.value = '';
 
- 	searchPopup.value.close();
 
- }
 
- // 确认
 
- function handleSearch(){
 
- 	let searchKey = '';
 
- 	if(selectedOption.value.label==="全部"){
 
- 		searchKey = validatePhoneNumber(searchInput.value)
 
- 	}else{
 
- 		searchKey = selectedOption.value.label;
 
- 	}
 
- 	// 搜索 key和 data
 
- 	$emit('search-btn',searchKey,searchInput);
 
- 	searchPopup.value.close();
 
- }
 
- // 清空搜索
 
- function searchReset(){
 
- 	searchInput.value = '';
 
- 	$emit('reset-search');
 
- }
 
- defineExpose({
 
- 	handleShow,
 
- 	handleClose
 
- })
 
- </script>
 
 
  |