From 91c82965b2d987452ca276e3a03b48c8dcda2ae9 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 19 八月 2026 11:47:26 +0800
Subject: [PATCH] config(env): 更新生产环境配置和公司名称
---
src/views/mes/md/item/components/select.vue | 120 ++++++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 80 insertions(+), 40 deletions(-)
diff --git a/src/views/mes/md/item/components/select.vue b/src/views/mes/md/item/components/select.vue
index ff7b56b..3213a01 100644
--- a/src/views/mes/md/item/components/select.vue
+++ b/src/views/mes/md/item/components/select.vue
@@ -3,7 +3,7 @@
import { computed, ref, useAttrs, watch } from 'vue';
-import { IconifyIcon } from '..\..\..\..\..\packages\icons\src';
+import { IconifyIcon } from '@vben/icons';
import { Input, Tooltip } from 'ant-design-vue';
@@ -17,62 +17,82 @@
defineProps<{
allowClear?: boolean;
disabled?: boolean;
- modelValue?: number;
+ modelValue?: number | number[];
+ multiple?: boolean;
placeholder?: string;
+ productIds?: number[];
}>(),
{
allowClear: true,
disabled: false,
modelValue: undefined,
- placeholder: '璇烽�夋嫨浜у搧鐗╂枡',
+ multiple: false,
+ placeholder: '璇烽�夋嫨浜у搧鍝佺',
+ productIds: () => [],
},
);
const emit = defineEmits<{
- change: [item: MesMdItemApi.Item | undefined];
- 'update:modelValue': [value: number | undefined];
+ change: [items: MesMdItemApi.Item | MesMdItemApi.Item[] | undefined];
+ 'update:modelValue': [value: number | number[] | undefined];
}>();
-const attrs = useAttrs(); // 閫忎紶灞炴��
-const dialogRef = ref<InstanceType<typeof MdItemSelectDialog>>(); // 鐗╂枡閫夋嫨寮圭獥
-const hovering = ref(false); // 鏄惁鎮仠
-const selectedItem = ref<MesMdItemApi.Item>(); // 褰撳墠閫変腑鐗╂枡
+const attrs = useAttrs();
+const dialogRef = ref<InstanceType<typeof MdItemSelectDialog>>();
+const hovering = ref(false);
+const selectedItems = ref<MesMdItemApi.Item[]>([]);
-const displayLabel = computed(() => selectedItem.value?.name ?? ''); // 閫夋嫨鍣ㄥ睍绀哄悕绉�
+const displayLabel = computed(() => {
+ if (selectedItems.value.length === 0) return '';
+ return selectedItems.value.map(item => item.name ?? '').join('銆�');
+});
const showClear = computed(
() =>
props.allowClear &&
!props.disabled &&
hovering.value &&
- props.modelValue !== null,
+ (props.multiple
+ ? Array.isArray(props.modelValue) && props.modelValue.length > 0
+ : props.modelValue != null),
);
-/** 鏍规嵁鐗╂枡缂栧彿鍥炴樉閫夋嫨鍣� */
-async function resolveItemById(id: number | undefined) {
- if (!id) {
- selectedItem.value = undefined;
+/** 鏍规嵁鍝佺缂栧彿鍥炴樉閫夋嫨鍣� */
+async function resolveItemsById(values: number | number[] | undefined) {
+ if (values == null || (Array.isArray(values) && values.length === 0)) {
+ selectedItems.value = [];
return;
}
- if (selectedItem.value?.id === id) {
+ const ids = Array.isArray(values) ? values : [values];
+ // 宸插叏閮ㄥ洖鏄惧垯璺宠繃
+ if (
+ ids.length === selectedItems.value.length &&
+ ids.every((id, i) => selectedItems.value[i]?.id === id)
+ ) {
return;
}
- selectedItem.value = await getItem(id);
+ const items = await Promise.all(ids.map(id => getItem(id)));
+ selectedItems.value = items.filter(Boolean) as MesMdItemApi.Item[];
}
watch(
() => props.modelValue,
(value) => {
- resolveItemById(value);
+ resolveItemsById(value);
},
{ immediate: true },
);
-/** 娓呯┖宸查�夌墿鏂� */
+/** 娓呯┖宸查�夊搧绉� */
function clearSelected() {
- selectedItem.value = undefined;
- emit('update:modelValue', undefined);
- emit('change', undefined);
+ selectedItems.value = [];
+ if (props.multiple) {
+ emit('update:modelValue', []);
+ emit('change', []);
+ } else {
+ emit('update:modelValue', undefined);
+ emit('change', undefined);
+ }
}
-/** 鎵撳紑鐗╂枡閫夋嫨寮圭獥 */
+/** 鎵撳紑鍝佺閫夋嫨寮圭獥 */
function handleClick(event: MouseEvent) {
if (props.disabled) {
return;
@@ -83,21 +103,33 @@
clearSelected();
return;
}
- const selectedIds = (
- props.modelValue === null ? [] : [props.modelValue]
- ) as number[];
- dialogRef.value?.open(selectedIds, { multiple: false });
+ const selectedIds: number[] = props.multiple
+ ? (props.modelValue as number[] | undefined) ?? []
+ : props.modelValue != null
+ ? [props.modelValue as number]
+ : [];
+ dialogRef.value?.open(selectedIds, {
+ multiple: props.multiple,
+ productIds: props.productIds,
+ });
}
-/** 鍥炲~閫変腑鐨勭墿鏂� */
+/** 鍥炲~閫変腑鐨勫搧绉� */
function handleSelected(rows: MesMdItemApi.Item[]) {
- const item = rows[0];
- if (!item) {
- return;
+ if (props.multiple) {
+ selectedItems.value = rows;
+ const ids = rows.map(r => r.id).filter(Boolean) as number[];
+ emit('update:modelValue', ids);
+ emit('change', rows);
+ } else {
+ const item = rows[0];
+ if (!item) {
+ return;
+ }
+ selectedItems.value = [item];
+ emit('update:modelValue', item.id);
+ emit('change', item);
}
- selectedItem.value = item;
- emit('update:modelValue', item.id);
- emit('change', item);
}
</script>
@@ -110,13 +142,21 @@
@mouseenter="hovering = true"
@mouseleave="hovering = false"
>
- <Tooltip :mouse-enter-delay="0.5" :open="selectedItem ? undefined : false">
+ <Tooltip :mouse-enter-delay="0.5" :open="selectedItems.length > 0 ? undefined : false">
<template #title>
- <div v-if="selectedItem" class="leading-6">
- <div>缂栫爜锛歿{ selectedItem.code || '-' }}</div>
- <div>鍚嶇О锛歿{ selectedItem.name || '-' }}</div>
- <div>瑙勬牸锛歿{ selectedItem.specification || '-' }}</div>
- <div>鍗曚綅锛歿{ selectedItem.unitMeasureName || '-' }}</div>
+ <div v-if="selectedItems.length === 1" class="leading-6">
+ <div>缂栫爜锛歿{ selectedItems[0].code || '-' }}</div>
+ <div>鍚嶇О锛歿{ selectedItems[0].name || '-' }}</div>
+ <div>瑙勬牸锛歿{ selectedItems[0].specification || '-' }}</div>
+ <div>鍗曚綅锛歿{ selectedItems[0].unitMeasureName || '-' }}</div>
+ </div>
+ <div v-else-if="selectedItems.length > 1" class="leading-6">
+ <div v-for="item in selectedItems" :key="item.id" class="mb-2 border-b border-gray-100 pb-1 last:border-b-0 last:pb-0">
+ <div>缂栫爜锛歿{ item.code || '-' }}</div>
+ <div>鍚嶇О锛歿{ item.name || '-' }}</div>
+ <div>瑙勬牸锛歿{ item.specification || '-' }}</div>
+ <div>鍗曚綅锛歿{ item.unitMeasureName || '-' }}</div>
+ </div>
</div>
</template>
<Input
--
Gitblit v1.9.3