no message

main
HUOJIN\霍先森 2025-04-20 18:04:32 +08:00
parent 8840675dc5
commit 4f93f73786
3 changed files with 140 additions and 58 deletions

View File

@ -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;
}

View File

@ -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