From 3972a27ebe534def8c231491913c1036af09ae31 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 16 七月 2026 16:16:10 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0

---
 src/views/mes/workbench/components/tabs/ReturnIssueTab.vue |  214 ++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 147 insertions(+), 67 deletions(-)

diff --git a/src/views/mes/workbench/components/tabs/ReturnIssueTab.vue b/src/views/mes/workbench/components/tabs/ReturnIssueTab.vue
index 50ca5ef..236020c 100644
--- a/src/views/mes/workbench/components/tabs/ReturnIssueTab.vue
+++ b/src/views/mes/workbench/components/tabs/ReturnIssueTab.vue
@@ -3,7 +3,7 @@
 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
 import type { MesWmReturnIssueApi } from '#/api/mes/wm/returnissue';
 
-import { h, markRaw, onBeforeUnmount, onMounted, ref, watch, nextTick } from 'vue';
+import { computed, h, markRaw, onBeforeUnmount, onMounted, ref, watch, nextTick } from 'vue';
 
 import {
   DICT_TYPE,
@@ -14,9 +14,10 @@
 import { IconifyIcon } from '@vben/icons';
 import { getDictOptions } from '@vben/hooks';
 
-import { Button, Divider, message, Popconfirm, Tag } from 'ant-design-vue';
+import { Button, Divider, Empty, message, Popconfirm, Tag } from 'ant-design-vue';
 
 import { useVbenForm } from '#/adapter/form';
+import { useVbenModal } from '@vben/common-ui';
 import { useVbenVxeGrid } from '#/adapter/vxe-table';
 import { generateAutoCode } from '#/api/mes/md/autocode/record';
 import {
@@ -29,7 +30,8 @@
 } from '#/api/mes/wm/returnissue';
 import { MdWorkstationSelect } from '#/views/mes/md/workstation/components';
 import { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';
-import { $t } from '#/locales';
+
+import ReturnIssueFormModal from './ReturnIssueFormModal.vue';
 
 defineOptions({ name: 'WorkbenchReturnIssueTab' });
 
@@ -38,6 +40,14 @@
   workstationId?: number;
   /** 褰撳墠宸ヤ綔绔欏悕绉� */
   workstationName?: string;
+  /** 褰撳墠閫変腑鐨勪换鍔� ID */
+  taskId?: number;
+  /** 褰撳墠閫変腑鐨勪换鍔$紪鐮� */
+  taskCode?: string;
+  /** 褰撳墠閫変腑鐨勪换鍔″悕绉� */
+  taskName?: string;
+  /** 褰撳墠閫変腑鐨勪换鍔″叧鑱斿伐鍗� ID */
+  workOrderId?: number;
 }>();
 
 // --- 琛ㄥ崟鐘舵�� ---
@@ -88,19 +98,29 @@
       rules: 'required',
     },
     {
+      fieldName: 'taskId',
+      label: '鐢熶骇浠诲姟',
+      component: 'Input',
+      componentProps: {
+        placeholder: '浠庨�変腑浠诲姟鑷姩甯﹀叆',
+        disabled: true,
+      },
+      rules: 'required',
+    },
+    {
       fieldName: 'workOrderId',
       label: '鐢熶骇璁㈠崟',
       component: markRaw(ProWorkOrderSelect),
       componentProps: {
         status: MesProWorkOrderStatusEnum.CONFIRMED,
+        disabled: true,
       },
-      rules: 'selectRequired',
     },
     {
       fieldName: 'workstationId',
       label: '宸ヤ綔绔�',
       component: markRaw(MdWorkstationSelect),
-      componentProps: { placeholder: '璇烽�夋嫨宸ヤ綔绔�' },
+      componentProps: { placeholder: '浠庨�変腑浠诲姟鑷姩甯﹀叆', disabled: true },
     },
     {
       fieldName: 'returnDate',
@@ -140,6 +160,13 @@
   isCreating.value = true;
   editingId.value = undefined;
   await formApi.resetForm();
+  // 棰勫~浠诲姟淇℃伅
+  if (props.taskId) {
+    await formApi.setFieldValue('taskId', props.taskId);
+  }
+  if (props.workOrderId) {
+    await formApi.setFieldValue('workOrderId', props.workOrderId);
+  }
   if (props.workstationId) {
     await formApi.setFieldValue('workstationId', props.workstationId);
   }
@@ -173,6 +200,11 @@
   isCreating.value = false;
   editingId.value = undefined;
   formApi.resetForm();
+}
+
+/** 缂栬緫閫�鏂欏崟锛氭墦寮�缂栬緫寮圭獥锛堜粎鑽夌鐘舵�佸彲缂栬緫锛� */
+function handleEditRow(row: MesWmReturnIssueApi.ReturnIssue) {
+  editFormModalApi.setData({ id: row.id }).open();
 }
 
 /** 鎻愪氦 */
@@ -209,6 +241,12 @@
       props: { type: DICT_TYPE.MES_WM_RETURN_ISSUE_TYPE },
     },
   },
+  {
+    field: 'taskCode',
+    title: '鐢熶骇浠诲姟',
+    minWidth: 130,
+    formatter: ({ row }) => row.taskCode || props.taskCode || '',
+  },
   { field: 'workOrderCode', title: '鐢熶骇璁㈠崟', minWidth: 130 },
   {
     field: 'returnDate',
@@ -225,7 +263,7 @@
       props: { type: DICT_TYPE.MES_WM_RETURN_ISSUE_STATUS },
     },
   },
-  { title: '鎿嶄綔', width: 200, fixed: 'right', slots: { default: 'actions' } },
+  { title: '鎿嶄綔', width: 260, fixed: 'right', slots: { default: 'actions' } },
 ];
 
 const gridHeight = ref(300);
@@ -243,7 +281,7 @@
           return await getReturnIssuePage({
             pageNo: page.currentPage,
             pageSize: page.pageSize,
-            workstationId: props.workstationId,
+            taskId: props.taskId,
             ...formValues,
           });
         },
@@ -280,78 +318,113 @@
   resizeObserver = null;
 });
 
-// 宸ヤ綔绔欏彉鍖栨椂鍒锋柊鍒楄〃
+// 浠诲姟鎴栧伐浣滅珯鍙樺寲鏃跺埛鏂板垪琛�
 watch(
-  () => props.workstationId,
+  () => [props.taskId, props.workstationId],
   () => gridApi.query(),
 );
+
+/** 鏄惁宸查�変腑宸ヤ綔绔欏拰浠诲姟锛屾湭閫変腑鏃朵笉灞曠ず琛ㄦ牸 */
+const isReady = computed(() => !!props.taskId && !!props.workstationId);
+
+/** 缂栬緫寮圭獥 */
+const [EditFormModal, editFormModalApi] = useVbenModal({
+  connectedComponent: ReturnIssueFormModal,
+  destroyOnClose: true,
+});
+
+/** 缂栬緫寮圭獥鎿嶄綔鎴愬姛鍚庡埛鏂板垪琛� */
+function onEditSuccess() {
+  gridApi.query();
+}
 </script>
 
 <template>
   <div class="issue-tab">
-    <!-- 椤堕儴锛氳〃鍗� / 鏂板缓鎸夐挳 -->
-    <div class="issue-tab__header">
-      <div class="issue-tab__header-left">
-        <IconifyIcon icon="lucide:rotate-ccw" class="issue-tab__icon" />
-        <span class="issue-tab__title">閫�鏂欏崟</span>
-        <Tag v-if="isCreating" color="orange">鏂板缓涓�</Tag>
+    <!-- 鏈�変腑宸ヤ綔绔欐垨浠诲姟鏃舵樉绀烘彁绀� -->
+    <div v-if="!isReady" class="issue-tab__empty">
+      <Empty
+        :image="Empty.PRESENTED_IMAGE_SIMPLE"
+        description="璇峰厛鍦ㄥ乏渚ч�夋嫨宸ヤ綔绔欏拰浠诲姟"
+      />
+    </div>
+    <template v-else>
+      <!-- 椤堕儴锛氳〃鍗� / 鏂板缓鎸夐挳 -->
+      <div class="issue-tab__header">
+        <div class="issue-tab__header-left">
+          <IconifyIcon icon="lucide:rotate-ccw" class="issue-tab__icon" />
+          <span class="issue-tab__title">閫�鏂欏崟</span>
+          <Tag v-if="isCreating" color="orange">鏂板缓涓�</Tag>
+        </div>
+        <div class="issue-tab__header-actions">
+          <template v-if="!isCreating">
+            <Button type="primary" size="small" @click="handleCreate">
+              <template #icon><IconifyIcon icon="lucide:plus" /></template>
+              鏂板缓閫�鏂欏崟
+            </Button>
+          </template>
+          <template v-else>
+            <Button type="primary" size="small" @click="handleSave">
+              <template #icon><IconifyIcon icon="lucide:save" /></template>
+              淇濆瓨
+            </Button>
+            <Button size="small" @click="handleCancelEdit">鍙栨秷</Button>
+          </template>
+        </div>
       </div>
-      <div class="issue-tab__header-actions">
-        <template v-if="!isCreating">
-          <Button type="primary" size="small" @click="handleCreate">
-            <template #icon><IconifyIcon icon="lucide:plus" /></template>
-            鏂板缓閫�鏂欏崟
-          </Button>
-        </template>
-        <template v-else>
-          <Button type="primary" size="small" @click="handleSave">
-            <template #icon><IconifyIcon icon="lucide:save" /></template>
-            淇濆瓨
-          </Button>
-          <Button size="small" @click="handleCancelEdit">鍙栨秷</Button>
-        </template>
+
+      <!-- 琛ㄥ崟鍖哄煙锛堜粎鏂板缓鏃跺睍绀猴級 -->
+      <div v-if="isCreating" class="issue-tab__form">
+        <Form />
       </div>
-    </div>
 
-    <!-- 琛ㄥ崟鍖哄煙锛堜粎鏂板缓鏃跺睍绀猴級 -->
-    <div v-if="isCreating" class="issue-tab__form">
-      <Form />
-    </div>
+      <Divider style="margin: 12px 0" />
 
-    <Divider style="margin: 12px 0" />
+      <!-- 搴曢儴锛氶��鏂欒褰曞垪琛� -->
+      <div ref="listRef" class="issue-tab__list">
+        <Grid table-title="閫�鏂欒褰�">
+          <template #actions="{ row }">
+            <Button
+              v-if="row.status === MesWmReturnIssueStatusEnum.PREPARE"
+              type="link"
+              size="small"
+              @click="handleEditRow(row)"
+            >
+              缂栬緫
+            </Button>
+            <Popconfirm
+              v-if="row.status === MesWmReturnIssueStatusEnum.PREPARE"
+              title="纭鎻愪氦锛熸彁浜ゅ悗涓嶈兘淇敼"
+              @confirm="handleSubmitRow(row)"
+            >
+              <Button type="link" size="small">鎻愪氦</Button>
+            </Popconfirm>
+            <Popconfirm
+              v-if="row.status === MesWmReturnIssueStatusEnum.PREPARE"
+              :title="`纭鍒犻櫎 ${row.code}锛焋"
+              @confirm="handleDeleteRow(row)"
+            >
+              <Button type="link" size="small" danger>鍒犻櫎</Button>
+            </Popconfirm>
+            <Popconfirm
+              v-if="
+                row.status === MesWmReturnIssueStatusEnum.CONFIRMED ||
+                row.status === MesWmReturnIssueStatusEnum.APPROVING ||
+                row.status === MesWmReturnIssueStatusEnum.APPROVED
+              "
+              title="纭鍙栨秷锛熷彇娑堝悗涓嶅彲鎭㈠"
+              @confirm="handleCancelRow(row)"
+            >
+              <Button type="link" size="small" danger>鍙栨秷</Button>
+            </Popconfirm>
+          </template>
+        </Grid>
+      </div>
 
-    <!-- 搴曢儴锛氶��鏂欒褰曞垪琛� -->
-    <div ref="listRef" class="issue-tab__list">
-      <Grid table-title="閫�鏂欒褰�">
-        <template #actions="{ row }">
-          <Popconfirm
-            v-if="row.status === MesWmReturnIssueStatusEnum.PREPARE"
-            title="纭鎻愪氦锛熸彁浜ゅ悗涓嶈兘淇敼"
-            @confirm="handleSubmitRow(row)"
-          >
-            <Button type="link" size="small">鎻愪氦</Button>
-          </Popconfirm>
-          <Popconfirm
-            v-if="row.status === MesWmReturnIssueStatusEnum.PREPARE"
-            :title="`纭鍒犻櫎 ${row.code}锛焋"
-            @confirm="handleDeleteRow(row)"
-          >
-            <Button type="link" size="small" danger>鍒犻櫎</Button>
-          </Popconfirm>
-          <Popconfirm
-            v-if="
-              row.status === MesWmReturnIssueStatusEnum.CONFIRMED ||
-              row.status === MesWmReturnIssueStatusEnum.APPROVING ||
-              row.status === MesWmReturnIssueStatusEnum.APPROVED
-            "
-            title="纭鍙栨秷锛熷彇娑堝悗涓嶅彲鎭㈠"
-            @confirm="handleCancelRow(row)"
-          >
-            <Button type="link" size="small" danger>鍙栨秷</Button>
-          </Popconfirm>
-        </template>
-      </Grid>
-    </div>
+    </template>
+
+    <!-- 缂栬緫寮圭獥 -->
+    <EditFormModal @success="onEditSuccess" />
   </div>
 </template>
 
@@ -406,4 +479,11 @@
   min-height: 0;
   overflow: hidden;
 }
+
+.issue-tab__empty {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
 </style>

--
Gitblit v1.9.3