From f10cf167372f2d8c4c0e14f42f361d7ab96d8347 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期五, 03 七月 2026 13:59:00 +0800
Subject: [PATCH] Merge branch 'dev_pro2.0' of http://114.132.189.42:9002/r/mom-pro2-before into dev_pro2.0

---
 src/views/mes/process-design/template/modules/parameter-select-dialog.vue |  207 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 207 insertions(+), 0 deletions(-)

diff --git a/src/views/mes/process-design/template/modules/parameter-select-dialog.vue b/src/views/mes/process-design/template/modules/parameter-select-dialog.vue
new file mode 100644
index 0000000..b4f87c6
--- /dev/null
+++ b/src/views/mes/process-design/template/modules/parameter-select-dialog.vue
@@ -0,0 +1,207 @@
+<script lang="ts" setup>
+import type { VxeTableGridOptions } from '#/adapter/vxe-table';
+import type { MesPdParameterApi } from '#/api/mes/pro/processdesign/parameter';
+
+import { nextTick, ref } from 'vue';
+
+import { DICT_TYPE } from '../../../../../packages/constants/src';
+
+import { Button, message, Modal } from 'ant-design-vue';
+
+import { useVbenVxeGrid } from '#/adapter/vxe-table';
+import { getParameterPage } from '#/api/mes/pro/processdesign/parameter';
+
+defineOptions({ name: 'PdParameterSelectDialog' });
+
+const emit = defineEmits<{
+  selected: [rows: MesPdParameterApi.Parameter[]];
+}>();
+
+const open = ref(false);
+const selectedRows = ref<MesPdParameterApi.Parameter[]>([]);
+const preSelectedIds = ref<number[]>([]);
+
+/** 鑾峰彇澶氶�夎褰曪紝鍖呭惈 VXE reserve 璺ㄩ〉璁板綍 */
+function getMultipleSelectedRows() {
+  const selectedMap = new Map<number, MesPdParameterApi.Parameter>();
+  const records = [
+    ...(gridApi.grid.getCheckboxReserveRecords?.() ?? []),
+    ...(gridApi.grid.getCheckboxRecords?.() ?? []),
+  ] as MesPdParameterApi.Parameter[];
+  records.forEach((row) => {
+    if (row.id) {
+      selectedMap.set(row.id, row);
+    }
+  });
+  return [...selectedMap.values()];
+}
+
+/** 澶勭悊鍕鹃�夊彉鍖� */
+function handleCheckboxSelectChange() {
+  selectedRows.value = getMultipleSelectedRows();
+}
+
+/** 澶氶�夋ā寮忎笅鍒囨崲琛屽嬀閫� */
+async function toggleMultipleRow(row: MesPdParameterApi.Parameter) {
+  const selected = gridApi.grid.isCheckedByCheckboxRow(row);
+  await gridApi.grid.setCheckboxRow(row, !selected);
+  selectedRows.value = getMultipleSelectedRows();
+}
+
+/** 澶勭悊琛屽弻鍑� */
+async function handleCellDblclick({ row }: { row: MesPdParameterApi.Parameter }) {
+  await toggleMultipleRow(row);
+}
+
+const [Grid, gridApi] = useVbenVxeGrid({
+  formOptions: {
+    schema: [
+      {
+        fieldName: 'code',
+        label: '鍙傛暟缂栫爜',
+        component: 'Input',
+        componentProps: {
+          allowClear: true,
+          placeholder: '璇疯緭鍏ュ弬鏁扮紪鐮�',
+        },
+      },
+      {
+        fieldName: 'name',
+        label: '鍙傛暟鍚嶇О',
+        component: 'Input',
+        componentProps: {
+          allowClear: true,
+          placeholder: '璇疯緭鍏ュ弬鏁板悕绉�',
+        },
+      },
+    ],
+  },
+  gridOptions: {
+    columns: [
+      { type: 'checkbox', width: 50 },
+      { field: 'code', title: '鍙傛暟缂栫爜', minWidth: 150 },
+      { field: 'name', title: '鍙傛暟鍚嶇О', minWidth: 180 },
+      {
+        field: 'type',
+        title: '鍙傛暟绫诲瀷',
+        width: 120,
+        cellRender: {
+          name: 'CellDict',
+          props: { type: DICT_TYPE.MES_PD_PARAM_TYPE },
+        },
+      },
+      { field: 'unit', title: '鍗曚綅', width: 80 },
+      {
+        field: 'requiredFlag',
+        title: '鏄惁蹇呭~',
+        width: 90,
+        cellRender: {
+          name: 'CellDict',
+          props: { type: DICT_TYPE.INFRA_BOOLEAN_STRING },
+        },
+      },
+    ],
+    height: 520,
+    keepSource: true,
+    checkboxConfig: {
+      highlight: true,
+      range: true,
+      reserve: true,
+    },
+    proxyConfig: {
+      ajax: {
+        query: async ({ page }, formValues) => {
+          return await getParameterPage({
+            pageNo: page.currentPage,
+            pageSize: page.pageSize,
+            ...formValues,
+          });
+        },
+      },
+    },
+    rowConfig: {
+      keyField: 'id',
+      isHover: true,
+    },
+    toolbarConfig: {
+      refresh: true,
+      search: true,
+    },
+  } as VxeTableGridOptions<MesPdParameterApi.Parameter>,
+  gridEvents: {
+    cellDblclick: handleCellDblclick,
+    checkboxAll: handleCheckboxSelectChange,
+    checkboxChange: handleCheckboxSelectChange,
+  },
+});
+
+/** 鍥炴樉棰勯�夊弬鏁� */
+async function applyPreSelection() {
+  if (preSelectedIds.value.length === 0) {
+    return;
+  }
+  const rows = gridApi.grid.getTableData().fullData as MesPdParameterApi.Parameter[];
+  for (const row of rows) {
+    if (row.id === undefined || row.id === null || !preSelectedIds.value.includes(row.id)) {
+      continue;
+    }
+    await gridApi.grid.setCheckboxRow(row, true);
+  }
+  selectedRows.value = getMultipleSelectedRows();
+}
+
+/** 閲嶇疆鏌ヨ鍜岄�夋嫨鐘舵�� */
+async function resetQueryState() {
+  selectedRows.value = [];
+  await gridApi.grid.clearCheckboxRow();
+  await gridApi.grid.clearCheckboxReserve();
+  await gridApi.formApi.resetForm();
+}
+
+/** 鎵撳紑鍙傛暟閫夋嫨寮圭獥 */
+async function openModal(selectedIds?: number[]) {
+  open.value = true;
+  preSelectedIds.value = selectedIds || [];
+  await nextTick();
+  await resetQueryState();
+  await gridApi.query();
+  await nextTick();
+  await applyPreSelection();
+}
+
+/** 鍏抽棴鍙傛暟閫夋嫨寮圭獥 */
+async function closeModal() {
+  open.value = false;
+  await resetQueryState();
+}
+
+/** 纭閫夋嫨鍙傛暟 */
+function handleConfirm() {
+  const rows = getMultipleSelectedRows();
+  if (rows.length === 0) {
+    message.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
+    return;
+  }
+  emit('selected', rows);
+  open.value = false;
+}
+
+defineExpose({ open: openModal });
+</script>
+
+<template>
+  <Modal
+    v-model:open="open"
+    title="宸ヨ壓鍙傛暟閫夋嫨"
+    width="70%"
+    :destroy-on-close="true"
+    @ok="handleConfirm"
+    @cancel="closeModal"
+  >
+    <Grid table-title="宸ヨ壓鍙傛暟鍒楄〃" />
+    <template #footer>
+      <Button @click="closeModal"> 鍙栨秷 </Button>
+      <Button type="primary" @click="handleConfirm"> 纭畾 </Button>
+    </template>
+  </Modal>
+</template>

--
Gitblit v1.9.3