From 0af5e35af8338cc8a2e38c19ab79efbb9eff0b2c Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期三, 16 九月 2026 17:02:52 +0800
Subject: [PATCH] feat(crm): 信用评级评定人改为下拉选择并默认当前账号
---
src/views/wls/stocktaking/task/index.vue | 128 ++++++++++++++++++++++++++++++++++++++++--
1 files changed, 121 insertions(+), 7 deletions(-)
diff --git a/src/views/wls/stocktaking/task/index.vue b/src/views/wls/stocktaking/task/index.vue
index 4ffefe8..30c46cc 100644
--- a/src/views/wls/stocktaking/task/index.vue
+++ b/src/views/wls/stocktaking/task/index.vue
@@ -2,6 +2,9 @@
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { MesWmStockTakingTaskApi } from '#/api/mes/wm/stocktaking/task';
+import { ref } from 'vue';
+import { useRouter } from 'vue-router';
+
import { Page, useVbenModal } from '@vben/common-ui';
import { MesWmStockTakingTaskStatusEnum } from '@vben/constants';
import { downloadFileFromBlobPart } from '@vben/utils';
@@ -13,15 +16,29 @@
cancelStockTaking,
deleteStockTaking,
exportStockTaking,
+ getStockTakingApproveProcessList,
getStockTakingPage,
+ submitStockTakingApproval,
} from '#/api/mes/wm/stocktaking/task';
+import {
+ importStockTakingQuantity,
+ importStockTakingQuantityTemplate,
+} from '#/api/wls/stocktaking/task/line';
import { $t } from '#/locales';
+import ProcessSelectModal from '#/views/wls/components/process-select-modal.vue';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
+const router = useRouter();
+
const [FormModal, formModalApi] = useVbenModal({
connectedComponent: Form,
+ destroyOnClose: true,
+});
+
+const [ProcessModal, processModalApi] = useVbenModal({
+ connectedComponent: ProcessSelectModal,
destroyOnClose: true,
});
@@ -45,14 +62,46 @@
formModalApi.setData({ formType: 'update', id: row.id }).open();
}
-/** 鎻愪氦鐩樼偣浠诲姟 */
+/** 寮�濮嬬洏鐐� */
function handleSubmit(row: MesWmStockTakingTaskApi.StockTakingTask) {
formModalApi.setData({ formType: 'submit', id: row.id }).open();
}
-/** 鎵ц鐩樼偣 */
-function handleExecute(row: MesWmStockTakingTaskApi.StockTakingTask) {
- formModalApi.setData({ formType: 'execute', id: row.id }).open();
+/** 鎻愪氦缁撴灉瀹℃壒 - 鍏堣幏鍙栨祦绋嬪垪琛� */
+async function handleSubmitApproval(row: MesWmStockTakingTaskApi.StockTakingTask) {
+ const hideLoading = message.loading({
+ content: '鑾峰彇瀹℃壒娴佺▼...',
+ duration: 0,
+ });
+ try {
+ const processList = await getStockTakingApproveProcessList();
+ hideLoading();
+ if (!processList || processList.length === 0) {
+ message.warning('鏆傛棤鍙敤瀹℃壒娴佺▼锛岃鍏堥厤缃� BPM 娴佺▼');
+ return;
+ }
+ processModalApi
+ .setData({
+ id: row.id,
+ processList,
+ submitFn: submitStockTakingApproval,
+ })
+ .open();
+ } catch {
+ hideLoading();
+ }
+}
+
+/** 鏌ョ湅瀹℃壒璇︽儏 */
+function handleProcessDetail(row: MesWmStockTakingTaskApi.StockTakingTask) {
+ if (!row.processInstanceId) {
+ message.warning('璇ヤ换鍔″皻鏈彁浜ょ粨鏋滃鎵�');
+ return;
+ }
+ router.push({
+ name: 'BpmProcessInstanceDetail',
+ query: { id: row.processInstanceId },
+ });
}
/** 鍙栨秷鐩樼偣浠诲姟 */
@@ -81,6 +130,41 @@
async function handleExport() {
const data = await exportStockTaking(await gridApi.formApi.getValues());
downloadFileFromBlobPart({ fileName: '鐩樼偣浠诲姟.xls', source: data });
+}
+
+/** 涓嬭浇鐩樼偣瀵煎叆妯℃澘 */
+async function handleImportTemplate() {
+ const data = await importStockTakingQuantityTemplate();
+ downloadFileFromBlobPart({ fileName: '鐩樼偣瀹炵洏鏁板鍏ユā鏉�.xls', source: data });
+}
+
+const importFileRef = ref<HTMLInputElement>();
+const importTaskId = ref<number>();
+
+/** 瑙﹀彂瀵煎叆鏂囦欢閫夋嫨 */
+function handleImport(row: MesWmStockTakingTaskApi.StockTakingTask) {
+ importTaskId.value = row.id!;
+ importFileRef.value?.click();
+}
+
+/** 瀵煎叆瀹炵洏鏁版枃浠堕�夋嫨鍚庝笂浼� */
+async function handleImportFileChange(event: Event) {
+ const file = (event.target as HTMLInputElement).files?.[0];
+ if (!file || !importTaskId.value) {
+ return;
+ }
+ const hideLoading = message.loading({ content: '姝e湪瀵煎叆瀹炵洏鏁�...', duration: 0 });
+ try {
+ const result = await importStockTakingQuantity(importTaskId.value, file);
+ message.success(`瀵煎叆瀹屾垚锛氭垚鍔� ${result.successCount ?? 0} 鏉★紝澶辫触 ${result.failureCount ?? 0} 鏉);
+ if (result.failureMessages?.length) {
+ message.warning(result.failureMessages.slice(0, 5).join('锛�'));
+ }
+ handleRefresh();
+ } finally {
+ (event.target as HTMLInputElement).value = '';
+ hideLoading();
+ }
}
const [Grid, gridApi] = useVbenVxeGrid({
@@ -118,6 +202,7 @@
<template>
<Page auto-content-height><FormModal @success="handleRefresh" />
+ <ProcessModal @success="handleRefresh" />
<Grid table-title="鐩樼偣浠诲姟鍒楄〃">
<template #toolbar-tools>
@@ -136,6 +221,13 @@
icon: ACTION_ICON.DOWNLOAD,
auth: ['mes:wm-stock-taking-task:export'],
onClick: handleExport,
+ },
+ {
+ label: '瀵煎叆妯℃澘',
+ type: 'primary',
+ icon: ACTION_ICON.DOWNLOAD,
+ auth: ['mes:wm-stock-taking-task:query'],
+ onClick: handleImportTemplate,
},
]"
/>
@@ -157,7 +249,7 @@
onClick: handleEdit.bind(null, row),
},
{
- label: '鎻愪氦',
+ label: '寮�濮嬬洏鐐�',
type: 'link',
auth: ['mes:wm-stock-taking-task:update'],
ifShow: row.status === StatusEnum.PREPARE,
@@ -176,11 +268,26 @@
},
},
{
- label: '鎵ц鐩樼偣',
+ label: '瀵煎叆瀹炵洏鏁�',
+ type: 'link',
+ icon: ACTION_ICON.UPLOAD,
+ auth: ['mes:wm-stock-taking-task:update'],
+ ifShow: row.status === StatusEnum.APPROVING,
+ onClick: handleImport.bind(null, row),
+ },
+ {
+ label: '鎻愪氦缁撴灉瀹℃壒',
type: 'link',
auth: ['mes:wm-stock-taking-task:update'],
ifShow: row.status === StatusEnum.APPROVING,
- onClick: handleExecute.bind(null, row),
+ onClick: handleSubmitApproval.bind(null, row),
+ },
+ {
+ label: '鏌ョ湅瀹℃壒',
+ type: 'link',
+ auth: ['mes:wm-stock-taking-task:query'],
+ ifShow: row.status === StatusEnum.APPROVING,
+ onClick: handleProcessDetail.bind(null, row),
},
{
label: '鍙栨秷',
@@ -197,5 +304,12 @@
/>
</template>
</Grid>
+ <input
+ ref="importFileRef"
+ class="hidden"
+ type="file"
+ accept=".xls,.xlsx"
+ @change="handleImportFileChange"
+ />
</Page>
</template>
--
Gitblit v1.9.3