PickerSelect (选择列表) 
t-select的另一个版本,适用于移动端,t-select一般适用于PC端
支持平台 
| 安卓 | ios | 鸿蒙 | web | 微信小程序 | 
|---|---|---|---|---|
| √ | √ | √ | √ | √ | 
示例代码 
html
<template>
	<t-page main-class="p-30">
		<t-card title="PickerSelect 选择列表" main-class="mb-30"
			sub-title="t-select的另一个版本,适用于移动端,t-select一般适用于PC端"></t-card>
		<t-section title="弹窗-远程搜索示例" main-class="mb-30"></t-section>
		<t-picker-select v-model="val5" valueKey="value" labelKey="label" :remote-method="search" title="请选择菜单"
			:remote="true" main-class="tdr tdb mb-30" size="large">
		</t-picker-select>
		<t-text main-class="tdr tdb tdp mb-30">值:{{val5}}</t-text>
		<t-button type="primary" @click="test5">双向绑定测试</t-button>
		<t-picker-select v-model="val4" valueKey="value" labelKey="label" :remote-method="search" title="请选择菜单"
			:remote="true" main-class="tdr tdb mb-30" size="large">
		</t-picker-select>
		<t-text main-class="tdr tdb tdp mb-30">值:{{val4.join('-')}}</t-text>
		<t-button type="primary" @click="test3">双向绑定测试</t-button>
		<t-col main-class="tdr tdb tdp mb-30">
			<t-text main-class="slh-70">values:{{pickerSelectChange.getArray('values')?.join(',')}}</t-text>
			<t-text main-class="slh-70">labels:{{pickerSelectChange.getArray('labels')?.join(',')}}</t-text>
		</t-col>
		<t-section main-class="mb-30" title="嵌入式-多选(v-model为数组则为多选)"></t-section>
		<t-picker-select v-model="val3" :list="list" :embeddable="true" valueKey="value" labelKey="label"
			main-class="tdr tdb mb-30" size="large">
		</t-picker-select>
		<t-text main-class="tdr tdb tdp mb-30">值:{{val3.join('-')}}</t-text>
		<t-button type="primary" @click="test">双向绑定测试</t-button>
		<t-section main-class="mb-30" title="嵌入式-单选(v-model为字符串则为单选)"></t-section>
		<t-picker-select v-model="val2" :list="list" :embeddable="true" valueKey="value" labelKey="label"
			main-class="tdr tdb mb-30" size="large">
		</t-picker-select>
		<t-text main-class="tdr tdb tdp mb-30">值:{{val2}}</t-text>
		<t-button type="primary" @click="test2">双向绑定测试</t-button>
	</t-page>
</template>
<script setup>
	const val1 = ref<string>('food3');
	const val2 = ref<string>('food1');
	const val5 = ref<string>('food3');
	const val3 = ref<string[]>(['food4', 'food5']);
	const val4 = ref<string[]>(['food4', 'food5']);
	const pickerSelectChange = ref<UTSJSONObject>({});
	const list = ref<UTSJSONObject[]>([
		{ value: 'food1', label: '披萨', disabled: true },
		{ value: 'food2', label: '寿司', disabled: true },
		{ value: 'food3', label: '汉堡' },
		{ value: 'food4', label: '拉面' },
		{ value: 'food5', label: '饺子' },
		{ value: 'food11', label: '馄饨' },
		{ value: 'food6', label: '蛋糕' },
		{ value: 'food7', label: '冰淇淋' },
		{ value: 'food8', label: '巧克力' },
		{ value: 'food9', label: '薯条' },
		{ value: 'food10', label: '蛋挞' }
	]);
	const search = (e : string) : Promise<UTSJSONObject[]> => {
		return new Promise((
			resolve : (res : UTSJSONObject[]) => void
		) => {
			// 这里模拟uni.showLoading
			console.log('搜索中');
			setTimeout(() => {
				if (e === '') {
					// 这里模拟uni.hideLoading
					resolve(list.value);
				} else {
					const filteredList = list.value.filter((item : UTSJSONObject) => {
						return (item.getString('label') as string).toLocaleLowerCase().includes(e);
					});
					// 这里模拟uni.hideLoading
					resolve(filteredList);
				}
			}, 500);
		});
	};
	function test5() {
		val5.value = 'food6'
	}
	function test() {
		// val3.value = ['food3', 'food4']
		val3.value.push('food3')
	}
	function test3() {
		// val4.value = ['food6', 'food7']
		val4.value.push('food6')
	}
	function test2() {
		val2.value = 'food3'
	}
	const checkChange = (e : UTSJSONObject) => {
		console.log(e)
		pickerSelectChange.value = e;
	};
	const radioChange = (e : UTSJSONObject) => {
		console.log(JSON.stringify(e))
		pickerSelectChange.value = e;
	};
</script>属性 
| 名称 | 类型 | 默认值 | 说明 | 可选值 | 
|---|---|---|---|---|
| size | String | mini | 组件尺寸 | large(大尺寸), medium(中尺寸), small(小尺寸), mini(迷你) | 
| type | String | "" | 组件类型 | info(信息), primary(正常), error(错误), warning(警告), success(成功) | 
| disabled | Boolean | false | 组件是否禁用 | false, true | 
| stop | Boolean | false | 是否阻止事件冒泡(Tui统一写法处理事件冒泡) | false, true | 
| hover | Boolean | true | 是否有点击效果 | false, true | 
| path | String | "" | 点击组件后跳转的页面路径,如果为空则响应点击事件,如果不为空则跳转页面不会响应单击事件。 | - | 
| mainClass | String | "" | 组件根节点的样式 | - | 
| nativeClass | String | "" | 组件根节点原生样式 | - | 
| effect | String | "normal" | 组件显示主题 | normal(正常), dark(深色), light(浅色), plain(镂空) | 
| modelValue | any | `` | 双向绑定的值 | |
| type | String | p | 主题类型 | |
| valueKey | String | value | value字段的key | |
| labelKey | String | label | 标签字段的key | |
| embeddable | Boolean | false | 是否嵌入页面 | |
| list | UTSJSONObject[] | [] | 数据源 | |
| remote | Boolean | false | 是否远程搜索 | |
| contentClass | String | `` | 内容样式 | |
| remoteMethod | any | `(_ : string) : Promise<UTSJSONObject[]> => { | 
				return Promise.resolve([] as UTSJSONObject[])
			}` | 远程搜索自定义函数 |  |
事件 
| 名称 | 返回参数 | 说明 | 
|---|---|---|
| change | (e:UTSJSONObject) | 值发生变化时触发 | 
| confirm | (e:UTSJSONObject) | 点确认时触发 | 
| cancel | - | 点击取消时候触发 | 
方法 
| 名称 | 参数 | 返回值 | 说明 | 
|---|---|---|---|
| show | - | - | 打开、关闭窗口 | 
插槽 
| 名称 | 返回值 | 说明 | 
|---|---|---|
| default | - | 
