|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- <template>
- <view class="popup-layout-wrap " :class="popuplayoutClass" >
- <view class="popup-layout-content" :class="popupContentClass" :style="[{height:height}]">
- <view class="link-address-wrap">
- <view class="link-adress-content">
- <view class="head-wrap">
- <text class="cancel" @click="btn_cancel">取消</text>
- <text class="confirm" @click="btn_confirm">确认</text>
- </view>
- <view class="head-selected">
- <text class="selected-txt">已选择:{{selected_address}}</text>
- </view>
- <view class="operation-wrap">
- <view class="operation-container">
- <view class="operation-content" v-for="(base_items,base_index) of linkAddress_area">
- <scroll-view
- scroll-y="true"
- class="province"
- show-scrollbar="false">
- <view
- @click="choosefun(base_items.clickfun,items.id)"
- v-model="items.id"
- v-for="(items , index) of base_items.info"
- :class="[index==base_items.current ? 'province-txt-click' : 'province-txt']"
- >
- {{items.name}}
- <view class="pic" v-show="index===base_items.current">
- <image src="../../static/xuan-linkAddress/yes.png"></image>
- </view>
- </view>
- </scroll-view>
- </view>
- </view>
- </view>
- </view>
- </view>
- </view>
- <view v-if="maskShow" class="popup-layout-mask" @tap="close(maskClick)"></view>
- </view>
- </template>
-
- <script>
- import linkAddress_p from '../../static/xuan-linkAddress/get_linkAddress_p.js'
- export default{
- data(){
- return{
- newActive:"",
- newTransition:true,
- //省0市1区2
- linkAddress_area:[
- {
- current:null,
- info: [],
- clickfun:'province_txt_click'
- },
- {
- current:null,
- info: [],
- clickfun:'city_txt_click'
- },
- {
- current:null,
- info: [],
- clickfun:'district_txt_click'
- }
- ],
- /*请求提交的*/
- submission:{
- province:'',//省
- city:'',//市
- county:'',//区
- town:''//镇
- },
- /*用户选择的地址*/
- user_address:{
- province:'',//省
- city:'',//市
- district:''//区
- },
- selected_address:''
- };
- },
- props:{
- /*底部弹窗的属性*/
- active:{
- type:Boolean,
- default:false
- },
- height:{
- type:[String],
- default:"100%"
- },
- //遮盖层显示
- maskShow:{
- type:Boolean,
- default:true
- },
- //遮盖层点击
- maskClick:{
- type:Boolean,
- default:true
- },
- //回掉
- callback:{
- type:Function,
- default:function () {
-
- }
- },
- },
- computed:{
- popuplayoutClass:function(){
- let _class="";
- if(this.newActive){
- _class+="popup-layout-active";
- }
- _class+=" popup-layout-bottom";
- return _class;
- },
- popupContentClass:function () {
- let _class = "";
- if (this.newTransition&&this.transition!=='none') {
- _class+="popup-layout-transition-slider"
- }
- return _class;
- }
- },
- methods: {
- //显示弹窗
- show:function () {
- //提交的数据置为空
- this.submission={
- province:'',
- city:'',
- county:'',
- town:''
- },
- //请求市数据
- linkAddress_p.get_linkAddress(this,"province",this.submission,(revert)=>{
- this.submission.province='1';
- });
-
- this.newActive = true;
- let _this = this;
- setTimeout(function () {
- _this.newTransition = false;
- },50)
- },
-
- //关闭弹窗
- close:function (v) {
- let close = v || true;
- if (close) {
- this.newTransition = true;
- let _this=this;
- setTimeout(function () {
- _this.newActive = false;
-
- },300)
- }
-
- },
- //选择点击事件
- choosefun(targetfun,targetid){
- this[targetfun](targetid);
- },
- //省点击选择
- province_txt_click(target){
- //区数据置为空
- this.linkAddress_area[2].info= [];
- //市、区的选择计数置为null
- this.linkAddress_area[1].current=null;
- this.linkAddress_area[2].current=null;
- let province;
- //得到点击的数据,改变样式
- for (let i = 0; i < this.linkAddress_area[0].info.length; i++) {
- if (this.linkAddress_area[0].info[i].id === target) {
- this.linkAddress_area[0].current = i;
- province=this.linkAddress_area[0].info[i].name;
- break;
- }
- }
- //用户选择
- this.user_address={
- province:province,
- city:'',
- district:''
- }
- //请求提交的数据先置为空
- this.submission={
- province:'',
- city:'',
- county:'',
- town:''
- };
- //再赋值
- this.submission.province=target;
- this.selected_address=this.user_address.province;
- //请求市数据
- linkAddress_p.get_linkAddress(this,"city",this.submission,(revert)=>{
-
- });
- },
-
- //市点击选择
- city_txt_click(target){
- //区的选择计数置为null
- this.linkAddress_area[2].current=null;
- let city;
- //得到点击的数据,改变样式
- for (let i = 0; i < this.linkAddress_area[1].info.length; i++) {
- if (this.linkAddress_area[1].info[i].id === target) {
- this.linkAddress_area[1].current = i;
- city=this.linkAddress_area[1].info[i].name;
- break;
- }
- }
- //得到市
- this.user_address.city=city;
- //把区的信息置为空
- this.user_address.district='';
-
- this.submission.city=target;
-
- this.selected_address=this.user_address.province+"-"+this.user_address.city;
- //请求区数据
- linkAddress_p.get_linkAddress(this,"district",this.submission,(revert)=>{
-
- });
- },
- //区点击选择
- district_txt_click(target){
- let district;
- //得到点击的数据,改变样式
- for (let i = 0; i < this.linkAddress_area[2].info.length; i++) {
- if (this.linkAddress_area[2].info[i].id === target) {
- // this.district_current = i;
- this.linkAddress_area[2].current = i;
- district=this.linkAddress_area[2].info[i].name;
- break;
- }
- }
- //得到区信息
- this.user_address.district=district;
- this.selected_address=this.user_address.province+"-"+this.user_address.city+"-"+this.user_address.district;
- },
-
- //取消按钮
- btn_cancel:function(){
- this.close();
-
- //全部置为空
- this.submission={
- province:'',
- city:'',
- county:'',
- town:''
- }
- this.linkAddress_area[1].info= [];
- this.linkAddress_area[2].info= [];
- this.linkAddress_area[0].current=null;
- this.linkAddress_area[1].current=null;
- this.linkAddress_area[2].current=null;
- this.selected_address='';
- },
- //确定按钮
- btn_confirm:function(){
- this.close();
- console.log(this.user_address)
- //可以使用vuex传值
- this.$store.commit('commit_address',this.user_address);
- this.$emit('confirmCallback');
- }
- },
- }
- </script>
-
- <style lang="scss" scoped>
- popup-layout-wrap{
- position: absolute;
- }
- .popup-layout-wrap{
- position: fixed;
- z-index: 998;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- height: 100%;
- width: 100%;
- display: flex;
- flex-flow: row nowrap;
- justify-content: center;
- align-items: center;
- display: none;
- &.popup-layout-active{
- display: flex;
- }
- &.popup-layout-bottom{
- align-items: flex-end;
- .popup-layout-transition-slider{
- transform: translate3d(0,100%,0);
- }
- }
- .popup-layout-content{
- background-color: #fff;
- z-index: 2;
- height: 100%;
- width: 100%;
- display: flex;
- flex-flow: row nowrap;
- justify-content: center;
- align-items: center;
- transform: translate3d(0,0,0) scale(1);
- opacity: 1;
- transition: transform .3s ease-in-out,opacity .3s ease-in-out;
- &.popup-layout-transition-fade{
- transform: translate3d(0,0,0) scale(0.3);
- opacity: 0;
- }
- }
- .popup-layout-mask{
- position: absolute;
- transition:all 1s ;
- z-index: 1;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- height: 100%;
- width: 100%;
- background-color: rgba(#000, 0.6);
- }
- }
- /***省市区选择器***/
- .link-address-wrap{
- height: 100%;
- width: 100%;
- background: #fff;
- }
- .link-address-wrap .link-adress-content{
- margin:8px 10px 10px 10px;
- .head-wrap{
- padding-bottom: 5px;
- display: flex;
- flex-direction: row;
- position: relative;
- .cancel{
- color: #999;
- }
- .confirm{
- position: absolute;
- right: 0px;
- }
- }
- .head-selected{
- text-align: center;
- color: #ccc;
- font-size: 17px;
- }
- .operation-wrap{
- .operation-container{
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
- .operation-content{
- display: flex;
- flex-direction: column;
- width: 33.333%;
- .province{
- //scroll-view区域的固定高度
- height: 420rpx;
- font-size: 17px;
- .province-txt{
- margin: 18px 12px;
- overflow: hidden;
- text-overflow:ellipsis;
- white-space: nowrap;
- }
- .province-txt-click{
- margin: 18px 12px;
- overflow: hidden;
- text-overflow:ellipsis;
- white-space: nowrap;
- color: red;
- font-size: 20px;
- display: flex;
- flex-direction: row;
- .pic{
- padding-left: 15rpx;
- width: 30rpx;
- height: 30rpx;
- display: flex;
- justify-content: center;
- text-align: center;
- margin: auto 0;
- image{
- width: 100%;
- height: auto;
- }
- }
- }
- }
- }
- }
- }
- }
- </style>
|