|
|
@@ -3,13 +3,19 @@
|
|
|
<div class="safety-platform-container__header">
|
|
|
<div class="bread">
|
|
|
<BreadcrumbBack />
|
|
|
- <div class="breadcrumb-title">{{ planName || '物资采购申领详情' }}</div>
|
|
|
+ <div class="breadcrumb-title">{{ supplyRequestInfo?.planName || '物资采购申领详情' }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="safety-platform-container__main">
|
|
|
<div class="detail-container">
|
|
|
<header class="detail-header">
|
|
|
- <el-button type="primary" :icon="Plus" @click="handleAddMaterial">添加需求物资</el-button>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ :icon="Plus"
|
|
|
+ @click="handleAddMaterial"
|
|
|
+ v-if="supplyRequestInfo?.status === SUPPLY_REQUEST_STATUS.APPLYING && supplyRequestManagePermission"
|
|
|
+ >添加需求物资</el-button
|
|
|
+ >
|
|
|
<el-button type="primary" :icon="Download" @click="handleDownloadRecord">下载采购记录</el-button>
|
|
|
</header>
|
|
|
<div class="table-container">
|
|
|
@@ -27,7 +33,7 @@
|
|
|
<span>{{ getStatusText(scope.row.status) }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="claim" label="领用" width="100" align="center">
|
|
|
+ <el-table-column prop="claim" label="领用" width="100" align="center" v-if="supplyRequestManagePermission">
|
|
|
<template #default="scope">
|
|
|
<el-link
|
|
|
v-if="scope.row.status === SUPPLY_REQUEST_STATUS.PURCHASING && !scope.row.isClaimed"
|
|
|
@@ -39,7 +45,14 @@
|
|
|
<span v-else>-</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="action" label="物资操作" width="150" align="center" fixed="right">
|
|
|
+ <el-table-column
|
|
|
+ prop="action"
|
|
|
+ label="物资操作"
|
|
|
+ width="150"
|
|
|
+ align="center"
|
|
|
+ fixed="right"
|
|
|
+ v-if="supplyRequestManagePermission"
|
|
|
+ >
|
|
|
<template #default="scope">
|
|
|
<div class="action-container">
|
|
|
<el-link
|
|
|
@@ -65,6 +78,8 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <!-- 领用弹窗 -->
|
|
|
+ <ReceiveSupplyDialog ref="receiveSupplyDialogRef" @success="handleClaimSuccess" />
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -75,7 +90,20 @@
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
|
|
import BreadcrumbBack from '@/components/BreadcrumbBack.vue';
|
|
|
import { SUPPLY_REQUEST_STATUS, SUPPLY_REQUEST_STATUS_MAP } from './src/constant';
|
|
|
- import { getSupplyRequestDetail, deleteSupplyRequestDetail } from '@/api/emergency-supplier';
|
|
|
+ import {
|
|
|
+ getSupplyRequestInfoById,
|
|
|
+ getSupplyRequestDetail,
|
|
|
+ deleteSupplyRequestDetail,
|
|
|
+ exportSupplyRequestRecord,
|
|
|
+ } from '@/api/emergency-supplier';
|
|
|
+ import { SupplyRequestListItem } from '@/types/emergency-supplier';
|
|
|
+ import { downloadFile } from '@/views/disaster/utils/download';
|
|
|
+ import ReceiveSupplyDialog from './src/components/ReceiveSupplyDialog.vue';
|
|
|
+ import { useUserInfoHook } from '@/hooks/useUserInfoHook';
|
|
|
+ import { EMERGENCY_PERMISSIONS } from '@/views/emergency/src/constant';
|
|
|
+
|
|
|
+ const { permissions } = useUserInfoHook();
|
|
|
+ const supplyRequestManagePermission = ref<Boolean>(false);
|
|
|
|
|
|
// 表格行数据类型
|
|
|
interface TableRowData {
|
|
|
@@ -96,10 +124,14 @@
|
|
|
const route = useRoute();
|
|
|
const id = Number(route.params.id);
|
|
|
|
|
|
+ const supplyRequestInfo = ref<SupplyRequestListItem>();
|
|
|
+
|
|
|
const loading = ref(false);
|
|
|
- const planName = ref('');
|
|
|
const tableData = ref<TableRowData[]>([]);
|
|
|
|
|
|
+ // 领用弹窗相关
|
|
|
+ const receiveSupplyDialogRef = ref<InstanceType<typeof ReceiveSupplyDialog>>();
|
|
|
+
|
|
|
// 获取状态文本
|
|
|
const getStatusText = (status: number) => {
|
|
|
return SUPPLY_REQUEST_STATUS_MAP[status] || '';
|
|
|
@@ -143,11 +175,6 @@
|
|
|
const flatData: TableRowData[] = [];
|
|
|
|
|
|
res.forEach((item) => {
|
|
|
- // 设置计划名称(使用第一个 item 的 planName)
|
|
|
- if (!planName.value && item.info.planName) {
|
|
|
- planName.value = item.info.planName;
|
|
|
- }
|
|
|
-
|
|
|
// 将每个 detailList 项与 info 合并成一行
|
|
|
item.detailList.forEach((detail) => {
|
|
|
flatData.push({
|
|
|
@@ -183,32 +210,28 @@
|
|
|
};
|
|
|
|
|
|
// 下载采购记录
|
|
|
- const handleDownloadRecord = () => {
|
|
|
- // TODO: 实现下载采购记录功能
|
|
|
- ElMessage.info('下载采购记录功能待实现');
|
|
|
- };
|
|
|
-
|
|
|
- // 领用
|
|
|
- const handleClaim = async (row: TableRowData) => {
|
|
|
+ const handleDownloadRecord = async () => {
|
|
|
try {
|
|
|
- await ElMessageBox.confirm('确定要领用该物资吗?', '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning',
|
|
|
- });
|
|
|
- // TODO: 调用领用接口
|
|
|
- // await claimMaterial(row.id);
|
|
|
- console.log('领用物资:', row);
|
|
|
- ElMessage.success('领用成功');
|
|
|
- await getDetailData();
|
|
|
+ const res = await exportSupplyRequestRecord(id);
|
|
|
+ if (res.size === 0) return;
|
|
|
+ const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
|
|
|
+ const url = window.URL.createObjectURL(blob);
|
|
|
+ downloadFile(url, '采购申领记录.xlsx');
|
|
|
} catch (error) {
|
|
|
- if (error !== 'cancel') {
|
|
|
- console.error('领用失败:', error);
|
|
|
- ElMessage.error('领用失败');
|
|
|
- }
|
|
|
+ ElMessage.error('下载失败');
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ // 领用
|
|
|
+ const handleClaim = (row: TableRowData) => {
|
|
|
+ receiveSupplyDialogRef.value?.openDialog(row.materialName, row.quantity, row.id, id);
|
|
|
+ };
|
|
|
+
|
|
|
+ // 领用成功回调
|
|
|
+ const handleClaimSuccess = async () => {
|
|
|
+ await getDetailData();
|
|
|
+ };
|
|
|
+
|
|
|
// 编辑
|
|
|
const handleEdit = (row: TableRowData) => {
|
|
|
// TODO: 打开编辑对话框,需要传递 requestId 和 detailId
|
|
|
@@ -232,8 +255,12 @@
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- onMounted(() => {
|
|
|
+ onMounted(async () => {
|
|
|
getDetailData();
|
|
|
+ supplyRequestInfo.value = await getSupplyRequestInfoById(id);
|
|
|
+ supplyRequestManagePermission.value = Boolean(
|
|
|
+ permissions.find((item: { code: string }) => item.code === EMERGENCY_PERMISSIONS.SUPPLY_REQUEST_MANAGE),
|
|
|
+ );
|
|
|
});
|
|
|
</script>
|
|
|
|