From b176162c23294d8d1bfb9f09cf6bb759efb0124a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 15 七月 2026 14:10:26 +0800
Subject: [PATCH] 银川 1.库存现有量添加自定义出库入库功能 2.整理重复文件
---
src/views/erp/purchase/supplier/components/select-dialog.vue | 122 ++++++++++++++++++++++++----------------
1 files changed, 74 insertions(+), 48 deletions(-)
diff --git a/src/views/stocktaking/plan/components/select-dialog.vue b/src/views/erp/purchase/supplier/components/select-dialog.vue
similarity index 64%
rename from src/views/stocktaking/plan/components/select-dialog.vue
rename to src/views/erp/purchase/supplier/components/select-dialog.vue
index 9883491..0822d10 100644
--- a/src/views/stocktaking/plan/components/select-dialog.vue
+++ b/src/views/erp/purchase/supplier/components/select-dialog.vue
@@ -1,6 +1,6 @@
<script lang="ts" setup>
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
-import type { MesWmStockTakingPlanApi } from '#/api/mes/wm/stocktaking/plan';
+import type { ErpSupplierApi } from '#/api/erp/purchase/supplier';
import { nextTick, ref } from 'vue';
@@ -9,60 +9,53 @@
import { message, Modal } from 'ant-design-vue';
import { useVbenVxeGrid } from '#/adapter/vxe-table';
-import { getStockTakingPlanPage } from '#/api/mes/wm/stocktaking/plan';
+import { getSupplierPage } from '#/api/erp/purchase/supplier';
-import { useSelectGridColumns, useSelectGridFormSchema } from '../data';
+defineOptions({ name: 'ErpSupplierSelectDialog' });
const emit = defineEmits<{
- selected: [rows: MesWmStockTakingPlanApi.StockTakingPlan[]];
+ selected: [rows: ErpSupplierApi.Supplier[]];
}>();
-const open = ref(false); // 寮圭獥鏄惁鎵撳紑
-const multiple = ref(true); // 鏄惁澶氶��
-const selectedRows = ref<MesWmStockTakingPlanApi.StockTakingPlan[]>([]); // 宸查�夌洏鐐规柟妗�
-const preSelectedIds = ref<number[]>([]); // 棰勯�夌洏鐐规柟妗堢紪鍙�
+const open = ref(false);
+const multiple = ref(true);
+const selectedRows = ref<ErpSupplierApi.Supplier[]>([]);
+const preSelectedIds = ref<number[]>([]);
-/** 鑾峰彇澶氶�夎褰曪紝鍖呭惈 VXE reserve 璺ㄩ〉璁板綍 */
+function getTableRows() {
+ return gridApi.grid.getTableData().fullData as ErpSupplierApi.Supplier[];
+}
+
function getMultipleSelectedRows() {
- const selectedMap = new Map<
- number,
- MesWmStockTakingPlanApi.StockTakingPlan
- >();
+ const selectedMap = new Map<number, ErpSupplierApi.Supplier>();
const records = [
...(gridApi.grid.getCheckboxReserveRecords?.() ?? []),
...(gridApi.grid.getCheckboxRecords?.() ?? []),
- ] as MesWmStockTakingPlanApi.StockTakingPlan[];
+ ] as ErpSupplierApi.Supplier[];
records.forEach((row) => {
- if (row.id !== undefined && row.id !== null) {
- selectedMap.set(row.id, row);
+ const rowId = row.id;
+ if (rowId) {
+ selectedMap.set(rowId, row);
}
});
return [...selectedMap.values()];
}
-/** 澶勭悊鍕鹃�夊彉鍖� */
function handleCheckboxSelectChange() {
selectedRows.value = getMultipleSelectedRows();
}
-/** 澶勭悊鍗曢�夊彉鍖� */
-function handleRadioChange(row: MesWmStockTakingPlanApi.StockTakingPlan) {
+function handleRadioChange(row: ErpSupplierApi.Supplier) {
selectedRows.value = [row];
}
-/** 澶氶�夋ā寮忎笅鍒囨崲琛屽嬀閫� */
-async function toggleMultipleRow(row: MesWmStockTakingPlanApi.StockTakingPlan) {
+async function toggleMultipleRow(row: ErpSupplierApi.Supplier) {
const selected = gridApi.grid.isCheckedByCheckboxRow(row);
await gridApi.grid.setCheckboxRow(row, !selected);
selectedRows.value = getMultipleSelectedRows();
}
-/** 澶勭悊琛屽弻鍑伙細鍗曢�夌洿鎺ョ‘璁わ紱澶氶�夊垏鎹㈠嬀閫� */
-async function handleCellDblclick({
- row,
-}: {
- row: MesWmStockTakingPlanApi.StockTakingPlan;
-}) {
+async function handleCellDblclick({ row }: { row: ErpSupplierApi.Supplier }) {
if (multiple.value) {
await toggleMultipleRow(row);
return;
@@ -72,13 +65,11 @@
handleConfirm();
}
-/** 鍥炴樉棰勯�夌洏鐐规柟妗� */
async function applyPreSelection() {
if (preSelectedIds.value.length === 0) {
return;
}
- const rows =
- gridApi.grid.getData() as MesWmStockTakingPlanApi.StockTakingPlan[];
+ const rows = getTableRows();
for (const row of rows) {
if (
row.id === undefined ||
@@ -100,13 +91,56 @@
}
}
+function useSelectGridFormSchema() {
+ return [
+ {
+ fieldName: 'name',
+ label: '渚涘簲鍟嗗悕绉�',
+ component: 'Input',
+ componentProps: {
+ placeholder: '璇疯緭鍏ヤ緵搴斿晢鍚嶇О',
+ allowClear: true,
+ },
+ },
+ ];
+}
+
+function useSelectGridColumns(multiple = false): VxeTableGridOptions<ErpSupplierApi.Supplier>['columns'] {
+ return [
+ {
+ type: multiple ? 'checkbox' : 'radio',
+ width: 50,
+ },
+ {
+ field: 'name',
+ title: '渚涘簲鍟嗗悕绉�',
+ minWidth: 150,
+ },
+ {
+ field: 'contact',
+ title: '鑱旂郴浜�',
+ minWidth: 120,
+ },
+ {
+ field: 'mobile',
+ title: '鎵嬫満鍙风爜',
+ minWidth: 130,
+ },
+ {
+ field: 'telephone',
+ title: '鑱旂郴鐢佃瘽',
+ minWidth: 130,
+ },
+ ];
+}
+
const [Grid, gridApi] = useVbenVxeGrid({
formOptions: {
schema: useSelectGridFormSchema(),
},
gridOptions: {
columns: useSelectGridColumns(true),
- height: 480,
+ height: 520,
keepSource: true,
checkboxConfig: {
highlight: true,
@@ -120,11 +154,10 @@
proxyConfig: {
ajax: {
query: async ({ page }, formValues) => {
- return await getStockTakingPlanPage({
+ return await getSupplierPage({
pageNo: page.currentPage,
pageSize: page.pageSize,
...formValues,
- // 閫夋嫨鍣ㄥ彧灞曠ず鍚敤鐘舵�佺殑鏂规
status: CommonStatusEnum.ENABLE,
});
},
@@ -138,22 +171,17 @@
refresh: true,
search: true,
},
- } as VxeTableGridOptions<MesWmStockTakingPlanApi.StockTakingPlan>,
+ } as VxeTableGridOptions<ErpSupplierApi.Supplier>,
gridEvents: {
cellDblclick: handleCellDblclick,
checkboxAll: handleCheckboxSelectChange,
checkboxChange: handleCheckboxSelectChange,
- radioChange: ({
- row,
- }: {
- row: MesWmStockTakingPlanApi.StockTakingPlan;
- }) => {
+ radioChange: ({ row }: { row: ErpSupplierApi.Supplier }) => {
handleRadioChange(row);
},
},
});
-/** 閲嶇疆鏌ヨ鍜岄�夋嫨鐘舵�� */
async function resetQueryState() {
selectedRows.value = [];
await gridApi.grid.clearCheckboxRow();
@@ -162,7 +190,6 @@
await gridApi.formApi.resetForm();
}
-/** 鎵撳紑鐩樼偣鏂规閫夋嫨寮圭獥 */
async function openModal(
selectedIds?: number[],
options?: { multiple?: boolean },
@@ -180,12 +207,11 @@
await applyPreSelection();
}
-/** 鍏抽棴寮圭獥 */
-function closeModal() {
+async function closeModal() {
open.value = false;
+ await resetQueryState();
}
-/** 纭閫夋嫨 */
function handleConfirm() {
const rows = multiple.value ? getMultipleSelectedRows() : selectedRows.value;
if (rows.length === 0) {
@@ -202,12 +228,12 @@
<template>
<Modal
v-model:open="open"
- :destroy-on-close="true"
- title="鐩樼偣鏂规閫夋嫨"
+ title="渚涘簲鍟嗛�夋嫨"
width="70%"
- @cancel="closeModal"
+ :destroy-on-close="true"
@ok="handleConfirm"
+ @cancel="closeModal"
>
- <Grid table-title="鐩樼偣鏂规鍒楄〃" />
+ <Grid table-title="渚涘簲鍟嗗垪琛�" />
</Modal>
</template>
--
Gitblit v1.9.3