no message
							parent
							
								
									8840675dc5
								
							
						
					
					
						commit
						4f93f73786
					
				| 
						 | 
				
			
			@ -1,39 +0,0 @@
 | 
			
		|||
/**
 | 
			
		||||
 * 收货单位-定义TS类型
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//查询类型定义
 | 
			
		||||
export interface AddressQueryForm {
 | 
			
		||||
    addressId?: number;
 | 
			
		||||
    pageNum: number;
 | 
			
		||||
    pageSize: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//表格数据类型定义
 | 
			
		||||
export interface AddressTableDate {
 | 
			
		||||
    addressId: number;
 | 
			
		||||
    name: string;
 | 
			
		||||
    person: string;
 | 
			
		||||
    telephone: string;
 | 
			
		||||
    address: string;
 | 
			
		||||
    createTime: Date;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//新增或修改表单类型定义
 | 
			
		||||
export interface AddressAddOrUpdateForm {
 | 
			
		||||
    addressId?: number;
 | 
			
		||||
    name?: string;
 | 
			
		||||
    person?: string;
 | 
			
		||||
    telephone?: string;
 | 
			
		||||
    address?: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//下拉查询
 | 
			
		||||
interface AddressSelect {
 | 
			
		||||
    addressId: number;
 | 
			
		||||
    name: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -7,13 +7,13 @@
 | 
			
		|||
  <a-select
 | 
			
		||||
      v-model:value="selectValue"
 | 
			
		||||
      :style="`width: ${width}`"
 | 
			
		||||
      :placeholder="props.placeholder"
 | 
			
		||||
      :placeholder="placeholder"
 | 
			
		||||
      :showSearch="true"
 | 
			
		||||
      :allowClear="true"
 | 
			
		||||
      :size="size"
 | 
			
		||||
      @change="handleChange"
 | 
			
		||||
      :disabled="disabled"
 | 
			
		||||
      :mode="multiple ? 'multiple' : ''"
 | 
			
		||||
      :mode="multiple ? 'multiple' : undefined"
 | 
			
		||||
      optionFilterProp="label"
 | 
			
		||||
  >
 | 
			
		||||
    <a-select-option v-for="address in addressList" :key="address.addressId" :label="address.name">
 | 
			
		||||
| 
						 | 
				
			
			@ -25,11 +25,18 @@
 | 
			
		|||
<script setup lang="ts">
 | 
			
		||||
import {onMounted, ref, watch} from 'vue';
 | 
			
		||||
import {addressApi} from "/@/api/business/wms/base/address/address-api";
 | 
			
		||||
import {AddressSelect} from "/@/api/business/wms/base/address/address";
 | 
			
		||||
import {smartSentry} from '/@/lib/smart-sentry';
 | 
			
		||||
 | 
			
		||||
interface AddressItem {
 | 
			
		||||
  addressId: number;
 | 
			
		||||
  name: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const props = defineProps({
 | 
			
		||||
  value: [Number, String, Object, Array],
 | 
			
		||||
  modelValue: {
 | 
			
		||||
    type: [Number, String, Object, Array],
 | 
			
		||||
    default: undefined
 | 
			
		||||
  },
 | 
			
		||||
  width: {
 | 
			
		||||
    type: String,
 | 
			
		||||
    default: '200px',
 | 
			
		||||
| 
						 | 
				
			
			@ -52,40 +59,43 @@ const props = defineProps({
 | 
			
		|||
  },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const addressList = ref<AddressSelect[]>([]);
 | 
			
		||||
const selectValue = ref(props.value);
 | 
			
		||||
const addressList = ref<AddressItem[]>([]);
 | 
			
		||||
const selectValue = ref(props.modelValue);
 | 
			
		||||
 | 
			
		||||
async function queryData() {
 | 
			
		||||
  let res = await addressApi.queryAddress({});
 | 
			
		||||
  addressList.value = res.data;
 | 
			
		||||
  try {
 | 
			
		||||
    const res = await addressApi.queryAddress({});
 | 
			
		||||
    addressList.value = res.data;
 | 
			
		||||
  } catch (e) {
 | 
			
		||||
    smartSentry.captureError(e);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const emit = defineEmits(['update:value', 'change']);
 | 
			
		||||
const emit = defineEmits(['update:modelValue', 'change']);
 | 
			
		||||
 | 
			
		||||
// 箭头value变化
 | 
			
		||||
// 监听modelValue变化
 | 
			
		||||
watch(
 | 
			
		||||
    () => props.value,
 | 
			
		||||
    () => props.modelValue,
 | 
			
		||||
    (newValue) => {
 | 
			
		||||
      selectValue.value = newValue;
 | 
			
		||||
    }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
function getSelectedAddress(value: number | number[] | undefined): AddressSelect | AddressSelect[] | undefined {
 | 
			
		||||
function querySelectedAddress(value: any) {
 | 
			
		||||
  if (Array.isArray(value)) {
 | 
			
		||||
    return value
 | 
			
		||||
        .map(id => addressList.value.find(item => item.addressId === id))
 | 
			
		||||
        .filter((item): item is AddressSelect => Boolean(item));
 | 
			
		||||
    // 多选情况
 | 
			
		||||
    return value.map((id) => addressList.value.find(item => item.addressId === id)).filter(Boolean);
 | 
			
		||||
  } else {
 | 
			
		||||
    // 单选情况
 | 
			
		||||
    return addressList.value.find(item => item.addressId === value);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function handleChange(value: number | number[] | undefined) {
 | 
			
		||||
  const selectedAddress = getSelectedAddress(value);
 | 
			
		||||
  emit('update:value', value);
 | 
			
		||||
function handleChange(value: any) {
 | 
			
		||||
  const selectedAddress = querySelectedAddress(value);
 | 
			
		||||
  emit('update:modelValue', value);
 | 
			
		||||
  emit('change', selectedAddress);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
onMounted(queryData);
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Loading…
	
		Reference in New Issue