| <template> | 
|   <ProFieldCustom> | 
|     <div class="address-select"> | 
|       <el-cascader | 
|         v-bind="areaByCascaderProps" | 
|         v-model="areaList" | 
|         :placeholder="placeholder" | 
|         clearable | 
|         :value-on-clear="() => []" | 
|       ></el-cascader> | 
|     </div> | 
|   </ProFieldCustom> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
| import { ProFieldCustom } from '@bole-core/components'; | 
| import { CascaderProps } from 'element-plus'; | 
| import * as enterpriseWalletServices from '@/services/api/enterpriseWallet'; | 
| import { useQueryClient } from '@tanstack/vue-query'; | 
|   | 
| defineOptions({ | 
|   name: 'WeChatPayWalletBankBranchAreaCascader', | 
| }); | 
|   | 
| type Props = { | 
|   placeholder?: string; | 
| }; | 
|   | 
| const props = withDefaults(defineProps<Props>(), {}); | 
|   | 
| const areaList = defineModel<number[]>('areaList'); | 
|   | 
| const queryClient = useQueryClient(); | 
|   | 
| function getEnterpriseWeChatPayWalletBankProvinces() { | 
|   return queryClient.fetchQuery({ | 
|     queryKey: ['enterpriseWalletServices/getEnterpriseWeChatPayWalletBankProvinces'], | 
|     queryFn: async () => { | 
|       let res = await enterpriseWalletServices.getEnterpriseWeChatPayWalletBankProvinces( | 
|         {}, | 
|         { showLoading: false } | 
|       ); | 
|       return res.map((x) => ({ | 
|         areaName: x.province_name, | 
|         areaCode: x.province_code, | 
|       })); | 
|     }, | 
|     staleTime: Infinity, | 
|   }); | 
| } | 
|   | 
| function getEnterpriseWeChatPayWalletBankCities(provinceCode: number) { | 
|   return queryClient.fetchQuery({ | 
|     queryKey: ['enterpriseWalletServices/getEnterpriseWeChatPayWalletBankCities', provinceCode], | 
|     queryFn: async () => { | 
|       let res = await enterpriseWalletServices.getEnterpriseWeChatPayWalletBankCities( | 
|         { | 
|           provinceCode: provinceCode, | 
|         }, | 
|         { showLoading: false } | 
|       ); | 
|       return res.map((x) => ({ | 
|         areaName: x.city_name, | 
|         areaCode: x.city_code, | 
|       })); | 
|     }, | 
|     staleTime: Infinity, | 
|   }); | 
| } | 
|   | 
| const areaByCascaderProps = { | 
|   props: { | 
|     label: 'areaName', | 
|     value: 'areaCode', | 
|     lazy: true, | 
|     async lazyLoad(node, resolve) { | 
|       const { level, data, value } = node; | 
|       console.log('value: ', value); | 
|       const areas = | 
|         level === 0 | 
|           ? await getEnterpriseWeChatPayWalletBankProvinces() | 
|           : await getEnterpriseWeChatPayWalletBankCities(value as any); | 
|   | 
|       return resolve( | 
|         areas.map((x) => ({ | 
|           ...x, | 
|           leaf: level >= 1, | 
|         })) | 
|       ); | 
|     }, | 
|   } as CascaderProps, | 
| }; | 
| </script> |