feat: 🚀 查询条件关联关系处理

This commit is contained in:
2025-11-07 17:43:03 +08:00
parent 107bd1a933
commit 1e80affb50
9 changed files with 463 additions and 136 deletions

View File

@@ -76,13 +76,14 @@
/>
</el-select>
</template>
<!-- 多选不带输入 -->
<template v-if="item.type === 'selectMultiples'">
<el-select
v-model="_searchResult[`${item.prop}`]"
:placeholder="item.placeholder"
clearable
multiple
:disabled="item.disabled"
style="max-height: 150px; overflow-y: auto"
>
<el-option
v-for="option in item.options"
@@ -152,10 +153,30 @@
></el-option>
</el-select>
</template>
<!-- 单选带模糊搜索 -->
<template v-if="item.type === 'selectMultipleD'">
<el-select
v-model="_searchResult[`${item.prop}`]"
filterable
:reserve-keyword="false"
:disabled="item.disabled"
:placeholder="item.placeholder"
clearable
@clear="handleSelectMultipleDClear(item)"
>
<!-- 循环渲染选项label 为显示文本value 为实际提交值 -->
<el-option
v-for="option in item.options"
:key="option.value"
:label="option.label"
:value="option.value"
></el-option>
</el-select>
</template>
<!-- 客户也是多选带模糊搜搜 -->
<template
v-if="item.type === 'selectMultipleRemoteCustomersNames' || item.type === 'selectProductLinesRemote'"
>
<!-- // filterable -->
<el-select
v-model="_searchResult[`${item.prop}`]"
:placeholder="item.placeholder"
@@ -200,6 +221,7 @@ const props = defineProps<{
selectMultipleRemoveTag?: () => void;
selectMultipleRemoteTag1?: () => void;
setRuleFormValue?: () => void;
selectMultipleDClear?: () => void;
}>();
let _searchResult = computed(() => {
@@ -212,6 +234,7 @@ const emits = defineEmits<{
(e: "setRuleFormValue", result: Record<string, any>): void;
(e: "selectMultipleRemoveTag", result: Record<string, any>): void;
(e: "selectMultipleRemoteTag1", result: Record<string, any>): void;
(e: "selectMultipleDClear", result: Record<string, any>): void;
}>();
const handleRomoveTag = (item: any) => {
@@ -222,6 +245,7 @@ const handleTagRemove1 = (item: any) => {
item.options = [];
}
};
//客戶
const getCustomers = async (keywords: any, item: any) => {
let org_number = _searchResult.value.org_number.join(",");
@@ -285,6 +309,10 @@ const getUsers = async (keywords: any, item: any) => {
}
};
const handleSelectMultipleDClear = (item: any) => {
emits("selectMultipleDClear", { item });
};
//远程搜索多选
const handleSelectMultipleRemote = (query: any, item: any) => {
if (!query) {

View File

@@ -86,8 +86,15 @@
/>
</el-select>
</template>
<!-- getProductLinesApi -->
<template v-if="item.type === 'selectMultipleRemote' || item.type === 'selectProductLinesRemote'">
<template
v-if="
item.type === 'selectMultipleRemote' ||
item.type === 'selectProductLinesRemote' ||
item.type === 'selectRemoteKD' ||
item.type === 'selectRemoteKDSubwarehouse'
"
>
<el-select
v-model.trim="_searchParams[`${item.prop}`]"
:placeholder="item.placeholder"
@@ -96,7 +103,6 @@
filterable
:reserve-keyword="false"
@remove-tag="handleTagRemove(item)"
@clear="handleClear(item)"
:loading="loading"
class="m-2 select"
remote-show-suffix
@@ -178,6 +184,7 @@
<script setup lang="ts" name="SearchForm">
import { verificationInput } from "./components/utils/verificationInput";
import { getSupplierApi, getCustomersApi, getProductLinesApi } from "@/api/modules/global";
import { getSetWarehouseKingdeeListApi, getSetWarehouseSubwarehousesListApi } from "@/api/modules/setWarehouse";
const props = defineProps<{
formData: any[];
searchParams: Record<string, any>;
@@ -259,10 +266,57 @@ const getProductLines = async (keywords: any, item: any) => {
}
}
};
//金蝶仓库
const getSetWarehouseKingdeeList = async (keywords: any, item: any) => {
item.options = [];
let use_org_number = "";
if (Array.isArray(_searchParams.value.use_org_number) ** _searchParams.value.use_org_number.length) {
use_org_number = _searchParams.value.use_org_number.join(",");
}
const result = await getSetWarehouseKingdeeListApi({
keywords: keywords,
use_org_number
});
if (result?.code === 0) {
let options: any = [];
result?.data?.forEach((it: any) => {
options.push({
label: it.warehouse_name,
value: it.warehouse_number,
use_org_number: it.use_org_number
});
});
item.options = options;
}
};
//获取金蝶子仓库
const getSetWarehouseSubwarehousesList = async (keywords: any, item: any) => {
//先清空一下
item.options = [];
let kd_warehouse_number = "";
if (Array.isArray(_searchParams.value.kd_warehouse_number) ** _searchParams.value.kd_warehouse_number.length) {
kd_warehouse_number = _searchParams.value.kd_warehouse_number.join(",");
}
const result = await getSetWarehouseSubwarehousesListApi({
keywords,
warehouse_number: kd_warehouse_number
});
if (result?.code === 0) {
let options: any = [];
result?.data?.forEach((it: any) => {
options.push({
label: it.sub_warehouse_name,
value: it.sub_warehouse_number,
warehouse_number: it.warehouse_number
});
});
item.options = options;
}
};
//多选远程搜索
const handleSelectMultipleRemote = async (query: any, item: any) => {
console.log(remoteRef.value, "==========remoteRef=========");
loading.value = true;
if (!query) {
loading.value = false;
@@ -281,8 +335,11 @@ const handleSelectMultipleRemote = async (query: any, item: any) => {
getCustomers(valClone, item);
} else if (item.type === "selectProductLinesRemote") {
//品线
getProductLines(valClone, item);
} else if (item.type === "selectRemoteKD") {
getSetWarehouseKingdeeList(valClone, item);
} else if (item.type === "selectRemoteKDSubwarehouse") {
getSetWarehouseSubwarehousesList(valClone, item);
}
loading.value = false;
};
@@ -290,9 +347,15 @@ const handleTagRemove = (item: any) => {
if (!_searchParams.value[item.prop].length) {
item.options = [];
}
const { prop } = item;
if (prop === "kd_warehouse_number" || prop === "kd_subwarehouse") {
emits("selectMultipleRemoveTag", { item, org_number: _searchParams.value[prop] });
}
};
const handleTagRemove1 = (item: any) => {
emits("selectMultipleRemoveTag", { item, org_number: _searchParams.value.org_number });
const { prop } = item;
console.log(prop);
emits("selectMultipleRemoveTag", { item, org_number: _searchParams.value[prop] });
};
//单选远程搜索(供应商)
const remoteMethod = async (query: any, item: any) => {