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