当前位置:网站首页>实例|APICloud AVM框架封装省市区级联选择弹框
实例|APICloud AVM框架封装省市区级联选择弹框
2022-07-19 11:57:00 【白又白888】
省市区级联选择框,也可用于其他多层级数据的选择,典型场景为省市区选择。
目前场景设定的是3级,可根据自己的实际需求改成2级或者4级或者更多级。
数据源就是典型的树形结构的JSON数组数据。实际代码中我封装了一个关于省市区三级数据的js插件,具体使用方法省市区三级行政区划数据JS插件 。今天介绍用APICloud AVM框架封装省市区级联选择弹框。
组件文件
area-cascader.stml
<template>
<view class="area-cascader_container">
<view class="area-cascader_box">
<view class="area-cascader_box-header">
<text class="area-cascader_box-header-label">请选择所在地区</text>
<text class="area-cascader_box-header-button" @click="closeCascader">×</text>
</view>
<view class="area-cascader_box-nav">
<view class="area-cascader_box-nav-item" v-for="(item,index) in result" data-index={index} @click="setSelect">
<text class='area-cascader_box-nav-item--selected' v-if="this.data.selectIndex==index && item.value">{item.text}</text>
<text class='area-cascader_box-nav-item--unselected' v-else-if="this.data.selectIndex==index && !item.value">请选择</text>
<text class='area-cascader_box-nav-item--result' v-else-if="this.data.selectIndex!=index && item.value">{{item.text}}</text>
</view>
</view>
<scroll-view class="area-cascader_pane" scroll-y="">
<view class="area-cascader_pane-option" v-for="(item,index) in selectArea" data-value={item.value} data-text={item.text} @click="setSelectItem">
<text>{item.text}</text>
</view>
</scroll-view>
</view>
</view>
</template>
<script>
export default {
name: 'area-cascader',
props:{
options:Array
},
install(){
this.data.result[0]={value:null,text:''};
},
installed(){
this.data.selectArea = this.props.options;
},
data() {
return{
result:[],
selectIndex:0,
selectArea:[]
}
},
methods: {
setSelectItem(e){
if(this.data.selectIndex<3){
this.data.result[this.data.selectIndex].value=e.currentTarget.dataset.value;
this.data.result[this.data.selectIndex].text=e.currentTarget.dataset.text;
//追加下一级
this.data.selectIndex+=1;
if(this.data.selectIndex<3){
this.data.result[this.data.selectIndex]={value:null,text:''};
var parentOption=this.data.selectArea.filter(item=>item.value==e.currentTarget.dataset.value);
this.data.selectArea = parentOption[0].children;
}
if(this.data.selectIndex==3){
this.fire('finish',this.data.result);
}
}
},
closeCascader(){
this.fire('close','');
},
setSelect(e){
this.data.selectIndex=e.currentTarget.dataset.index;
if(this.data.selectIndex==0){
this.data.selectArea = this.props.options;
}
else if(this.data.selectIndex==1){
var parentOption=this.props.options.filter(item=>item.value==this.data.result[0].value);
this.data.selectArea = parentOption[0].children;
}
}
}
}
</script>
<style>
.area-cascader_container {
position: absolute;
height: 100%;
width: 100%;
background-color: rgba(0,0,0,0.1);
}
.area-cascader_box{
align-items: center;
position: absolute;
bottom: 0;
width: 100%;
height: 70%;
background-color: #ffffff;
border-top-left-radius: 30px;
border-top-right-radius: 30px;
}
.area-cascader_box-header{
width: 100%;
flex-flow: row nowrap;
justify-content: space-between;
align-items: center;
padding: 10px 15px 0 15px;
}
.area-cascader_box-header-label{
font-size: 18px;
}
.area-cascader_box-header-button{
font-size: 40px;
color: #ccc;
}
.area-cascader_box-nav{
width: 100%;
flex-flow: row nowrap;
justify-content: flex-start;
align-items: center;
padding: 15px;
}
.area-cascader_box-nav-item{
box-sizing: border-box;
align-items: center;
/* background-color: #452334; */
margin-right: 20px;
justify-content: center;
}
.area-cascader_box-nav-item--selected{
font-size: 16px;
padding-bottom: 10px;
border-bottom: 3px solid #49c916;
}
.area-cascader_box-nav-item--unselected{
font-size: 16px;
padding-bottom: 10px;
border-bottom: 3px solid #49c916;
}
.area-cascader_box-nav-item--result{
font-size: 16px;
padding-bottom: 13px;
border-bottom: 0;
}
.area-cascader_pane{
padding-left: 15px;
padding-right: 10px;
width: 100%;
height: 80%;
}
.area-cascader_pane-option{
flex-flow: row nowrap;
align-items: flex-start;
justify-content: space-between;
padding: 5px 0;
}
</style>
组件使用
demo-area-cascader.stml
<template>
<view class="page">
<safe-area></safe-area>
<text style="padding:10px;font-size:20px;">地区级联选择</text>
<view class="box" @click="openCascader">
<text>地区</text>
<text>{selectArea}</text>
<image class="more" src={ico} mode="widthFix"></image>
</view>
<area-cascader
:options="areaValue"
onfinish="getArea"
onclose="closeCascader"
v-if="isShowCascader"
>
</area-cascader>
</view>
</template>
<script>
import '../../components/area-cascader.stml'
import {areaList,getTree,getArea,getProvince,getCity} from '../../utils/areaList.js'
export default {
name: 'demo-area-cascader',
apiready(){
this.data.areaValue = getTree();
// getCity('130000');
// getProvince();
// getArea('130200');
},
data() {
return{
selectArea:'',
areaValue:[],
isShowCascader:false,
ico:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAZRJREFUeF7t2z1KxEAYgOF3D2Old7AVsdlirS3sBEE9gB5gYQtLC3utxZPYeRgZ2CKEXSGT+X4nqUIgkPfJzBQZsqLzY9V5PwvAMgLsBDbAGjgHPoAHi0exnALvwM0g+hO41kawBNgCT6NgdQRLgAvg+8AbV0WwBCjtZR0o8398qCFYA5gjeAAwRfACYIbgCcAEwRuAOoJHAFUErwBqCJ4BVBC8A4gjRAAQRYgCIIYQCUAEIRpAc4SIAE0RogI0Q4gM0AQhOsBshAwAsxCyAFQjZAKoQsgGMBkhI8B/CK/A/fATdFaAYwi/wEnPAD/AWQ8AxzZcdsBjdoBJu03Z1oBJ8WUkZAKYHJ8JoCo+C0B1fAaAWfHRAWbHRwZoEh8VoFl8RICm8dEAmsdHAhCJjwIgFh8BQDTeO4B4vGcAlXivAGrxHgFU470BqMd7AjCJ9wJgFu8BwDTeGuAS+Bp+ot6fq/0rYA3wBtyOAFTjrQFegOcBgHq8NcDV/qepU6DE3x2YDuKXMu0LVGEtAFVsiW7qfgT8AYVYcEHJaD3BAAAAAElFTkSuQmCC',
}
},
methods: {
getArea(e){
// console.log(JSON.stringify(e));
this.data.selectArea = e.detail[0].text+'/'+e.detail[1].text+'/'+e.detail[2].text;
this.data.isShowCascader = false;
},
openCascader(e){
this.data.isShowCascader = true;
},
closeCascader(e){
this.data.isShowCascader = false;
}
}
}
</script>
<style>
.page {
height: 100%;
background-color: #ffffff;
}
.box{
flex-flow: row nowrap;
justify-content: space-between;
align-items: center;
margin: 10px;
border-radius: 5px;
background-color: #f0f0f0;
padding: 10px;
}
.more{
width: 20px;
}
</style>
边栏推荐
- CB Insights发布AI行业七大趋势:合成数据、多模态AI崛起
- 读写分离备机备份报错
- Paris:probabilistic alignment of relations, instances, and schema
- Meiker Studio - Huawei 14 day Hongmeng equipment development practical notes 5
- 【历史上的今天】7 月 3 日:人体工程学标准法案;消费电子领域先驱诞生;育碧发布 Uplay
- 浅析IM即时通讯开发中Bitmap到底占用多大内存?
- 容斥 [Jsoi2011]分特产
- Devops has been practiced for many years. What is the most painful thing?
- 省选专练之文艺计算姬
- CB insights released seven trends in the AI industry: synthetic data and the rise of multimodal AI
猜你喜欢
基于Xlinx的时序分析与约束(1)----什么是时序分析?什么是时序约束?什么又是时序收敛?
【历史上的今天】7 月 18 日:英特尔成立;万维网上传了第一张照片;eBay 分拆 PayPal
【历史上的今天】7 月 15 日:Mozilla 基金会正式成立;Enigma 密码机的首次工作;任天堂推出 FC 游戏机
容斥【玲珑杯】咸鱼值
CBC 模式和 ECB 模式解读
LINK : fatal error LNK1104: 无法打开文件“ucrtd.lib” 解决方法 Visual Studio
Interpretation of CBC mode and ECB mode
【历史上的今天】7 月 7 日:C# 发布;Chrome OS 问世;《仙剑奇侠传》发行
揭秘MAE的数据增强潜力,上交&华为基于MAE提出掩蔽重建数据增强
Week 5 Image Classification、Bag of Visual Words (Bag of Features) and Multi-Layer Neural Networks
随机推荐
容斥【BZOJ3622】已经没有什么好害怕的了
First knowledge of C language
剑指offer题库总结(三)之链表(C语言版本)
开始菜单没有数据库快捷工具图标
2022.7.10-----leetcode. seven hundred and forty-one
【历史上的今天】6 月 30 日:冯·诺依曼发表第一份草案;九十年代末的半导体大战;CBS 收购 CNET
【历史上的今天】7 月 13 日:数据库之父逝世;苹果公司购买 CUPS 代码;IBM 芯片联盟
Use masonry to realize width adaptation and height adaptation of controls (including uitableview) according to content
Was expecting double quote to start field name error
Conway's Law -- organization decides products, and domain drives design
【历史上的今天】7 月 8 日:PostgreSQL 发布;SUSE 收购 K8s 最大服务商;动视暴雪合并
Custom persistence layer framework myormframework (I) - JDBC analysis and solution ideas
推荐一款支持数据 + 代码生成的开发工具!yyds
【BZOJ2393】Cirno的完美算数教室
爱线段树的好孩子【九校2D1T3】优美序列
DevOps 实践多年,最痛的居然是?
Typescript foundation interface interface
容斥【玲珑杯】咸鱼值
自动化测试----selenium(一)
Interpretation of CBC mode and ECB mode