UviewUI之piker选择器三级分类联动,后台获取数据自动单列、双列、三列显示代码示例

知识技术 2023-05-11 22:32 717
转载请务必注明: 来源:《建站管家》https://www.df81.com/news/512.html

此文原创,转载请注明:来源:建站管家 https://df81.com

效果图:


template模板:

<template>
	<view class="content bg-white rounded">
		<view class="p-15" style="margin-top: 300rpx;">
			<u-form :model="news">
				<!-- 分类 -->
				<u-form-item
						label="分类"
						labelWidth="80"
						borderBottom
						@click="sortShow = true"
				>
					<u--input
							disabled
							disabledColor="#ffffff"
							border="none"
							v-model="sortTitle"
					></u--input>
					<u-icon
							slot="right"
							name="arrow-right"
					></u-icon>
				</u-form-item>
				<view class="mt-50">
					<u-button @click="submit" type="error" color="#ff500b" text="提交"></u-button>
				</view>
				<!-- 分类 -->
				<u-picker
					@change="sortChange"
					@confirm="sortConfirm"
					@close="sortShow = false"
					@cancel="sortShow = false"
					:show="sortShow"
					:columns="sortSelect"
					title="请选择分类"
					keyName="title"
					ref="sortPicker"
					closeOnClickOverlay
					></u-picker>
			</u-form>
		</view>
	</view>
</template>


javascript代码:

<script>
	export default {
		data(){
			return {
				/* 分类 开始 */
				sortShow:false,
				sortTitle:'请选择分类',
				sortData:[],
				sortSelect:[],
				/* 分类 结束 */
				// 要提交的数据
				news:{
					sortid:'',
				}
			}
		},
		onShow(e) {
			// 选择分类
			this.getSort()
		},
		methods:{
			/* 分类 开始 */
			// 获取分类数据
			getSort(){
				let me = this, apiUrl = this.apiUrl;
				me.http({
					url: apiUrl + '/api.php/sort/index',
					data:{from:'select',tabledir:'product',parentid:0,num:100,config:'允许投稿'},
					success: (res) => {
						me.sortData = res.data;
						// 初始化数据
						let second = res.data.second.filter(item => item.parentid === res.data.first[0].id);
						let third = res.data.third.filter(item => item.parentid === second[0].id);
						me.sortSelect.push(res.data.first);
						if(res.data.level > 0){
							me.sortSelect.push(second);
						}
						if(res.data.level >1){
							me.sortSelect.push(third);
						}
					}
				});
			},
			// 分类选择
			sortChange(e) {
				let me = this;
				let {
					columnIndex, //列id
					value,
					values, // values为当前变化列的数组内容
					index,
					// 微信小程序无法将picker实例传出来,只能通过ref操作
					picker = this.$refs.sortPicker
				} = e
				let parentid = value[columnIndex].id
				// 当第一列值发生变化时,变化第二列(后一列)对应的选项
				if (columnIndex === 0 && me.sortData.level > 0) {
					let second = me.sortData.second.filter(item => item.parentid === parentid)
					let third = me.sortData.third.filter(item => item.parentid === second[0].id)
					// picker为选择器this实例,变化第二列对应的选项
					picker.setColumnValues(1, second)
					if(me.sortData.level > 1){
						picker.setColumnValues(2, third)
					}
				} else if (columnIndex === 1 && me.sortData.level > 1) {
					let third = me.sortData.third.filter(item => item.parentid === parentid)
					picker.setColumnValues(2, third)
				}
			},
			// 分类选择回调
			sortConfirm(e) {
				let arr = [], sortid = '', me = this;
				for (let i = 0; i < e.value.length; i++) {
					if(e.value[i]){
						arr.push(e.value[i].title)
						sortid = e.value[i].id
					}
				}
				me.sortTitle = arr.join('/');
				me.news.sortid = sortid
				me.sortShow = false
			},
			/* 分类 结束 */
			// 提交表单
			submit(){
				let me = this;
				console.log(me.news.sortid)
			}
		}
	}
</script>


后台thinkphp参考代码:

$where[] = ['lang','=',$this->lang]; $where[] = ['tabledir','=',$tabledir]; $where[] = ['signid','=',1];
                    $sortList = Db::name('sort')->where($where); $first = $second = $third = array();
                    if(!empty($config)){
                        $sortList = $sortList->where('find_in_set(\''.$config.'\',config)');
                    }
                    $level = $sortList->max('level');
                    $sortList = $sortList->field($field)->order($order)->limit($num)->select();
                    
                    // 把三级数据取出来
                    foreach ($sortList as $key=>$rs){
                        switch ($rs['level']){
                            case 0:
                                $first[] = array('id'=>$rs['id'],'parentid'=>$rs['parentid'],'title'=>$rs['title']);
                                break;
                            case 1:
                                $second[] = array('id'=>$rs['id'],'parentid'=>$rs['parentid'],'title'=>$rs['title']);
                                break;
                            case 2:
                                $third[] = array('id'=>$rs['id'],'parentid'=>$rs['parentid'],'title'=>$rs['title']);
                                break;
                        }
                    }
                    
                    $list = array('first'=>$first,'second'=>$second,'third'=>$third,'level'=>$level);
                    
return json($this->msg($list,lang('c_success'),200));

点赞 (0)

收藏 (0)

本站部分信息来源网络,如有侵权,请联系QQ:1062129401删除。

上一篇: 《建站管家》二次开发文档

下一篇: UviewUI表单验证示例-通过校验后清除错误提示

请先登录后,再发表评论 ~ ~
发表评论
发表评论
发表帖子
广告位招租( ¥5 / 天 )
点击咨询
相关帖子

如果要判断文件是否存在,用函数 is_file(),如果要判断目录是否存在,用函数 is_dir()
用宝塔安装TP程序后,网站前台可以访问,后台无法访问,不是程序问题,而是web服务器环境配置问题(PHP配置),出现这种问题,一般是windows主机安装宝塔造成的,linux安装宝塔不会出现此错误
广告位招租( ¥3 / 天 )
点击咨询
广告位招租( ¥2 / 天 )
点击咨询
广告位招租( ¥1 / 天 )
点击咨询
最新帖子

小朋友,你爸爸是谁啊?这很单纯的,就像我们碰到别人会问:你吃过饭了吗?类似;许多人初次相识,经常会问:你是做什么的啊?你做什么,好像决定你收入的高低,你,资产的范围
1、升级框架到ThinkPHP8.0.3【要求PHP8.1+环境,推荐PHP8.1】 2、启用/禁用调试模式等小细节改进
后台点击生成站点地图 一直转圈圈没有反应,
在线客服