cashier_admin_app/components/JeepayAreacodeSelect/JeepayAreacodeSelect.vue

137 lines
3.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
组件功能 省市县三级联动选择
@author terrfly
@site https://www.jeequan.com
@date 2022/11/30 13:25
-->
<template>
<uni-data-picker :localdata=" type=='mccAli'? mccAli : areaCodeData" v-model="vdata.selectedVal" @change="changeFunc">
<template #default="{data, error, options}">
<view v-if="error" class="error">
<text>{{error}}</text>
</view>
<view v-else-if="data.length" class="selected">
<text style="font-size: 32rpx;">{{data.map(v=>v.text).join('/')}}</text>
</view>
<view v-else>
<text :class="{'place-style':!vdata.selectedVal}" style="font-size: 32rpx;">请选择</text>
</view>
</template>
</uni-data-picker>
</template>
<script setup>
import { reactive, ref, onMounted, watch } from 'vue'
import dataKit from '@/commons/utils/dataKit.js'
import areaCodeData from "./areaCodeData.json" // 地址
import mccAli from "@/commons/JSON/mccAli.json"
// emit 父组件使用: v-model="val" 进行双向绑定。
const emit = defineEmits(['update:areacodeList'])
// 定义组件参数
const props = defineProps({
// 省市县, 三级 数组 支持双向绑定。
areacodeList: { type: Array, default: () => [] },
// json 类型
type:{type:String}
})
// 当前组件参数
const vdata = reactive({
selectedVal: '',
})
onMounted(() => {
if(props.areacodeList.length > 0 ){
vdata.selectedVal = props.areacodeList[2]
}
})
// 切换时
watch(() => props.areacodeList, (newVal, oldVal) => {
if(Array.isArray(newVal)){
vdata.selectedVal = newVal[newVal.length - 1]
}else if(typeof newVal =='string'){
vdata.selectedVal = [newVal]
}
})
function changeFunc(e){
let data = []
if(e.detail.value && e.detail.value.length > 0 ){
emit("update:areacodeList",e.detail.value.map(v=> v.value) )
}else{
emit("update:areacodeList", [] )
}
}
// 根据最后一位的(县级编码 搜索展开全部内容
function resetBySingleAreacode(areacode){
if(!areacode){
return
}
let p3 = dataKit.recursionTreeData(areaCodeData, (r => r.value == areacode))
if(!p3){
return false
}
let p2 = dataKit.recursionTreeData(areaCodeData, (r => r.value == p3[1].value))
if(!p2){
return false
}
let p1 = dataKit.recursionTreeData(areaCodeData, (r => r.value == p2[1].value))
if(!p1){
return false
}
emit("update:areacodeList", [p1[0].value, p2[0].value, p3[0].value])
}
/** 根据省市县areaCode 获取省市县名称数据 **/
function getNameListBySingleAreacode(areacode){
if(!areacode){
return
}
let p3 = dataKit.recursionTreeData(areaCodeData, (r => r.value == areacode))
if(!p3){
return false
}
let p2 = dataKit.recursionTreeData(areaCodeData, (r => r.value == p3[1].value))
if(!p2){
return false
}
let p1 = dataKit.recursionTreeData(areaCodeData, (r => r.value == p2[1].value))
if(!p1){
return false
}
return [p1[0].text, p2[0].text, p3[0].text]
}
defineExpose({resetBySingleAreacode, getNameListBySingleAreacode})
</script>
<style scoped lang="scss">
.place-style{
color: #b3b3b3;
}
</style>