feat: 更新采购计划和出入库管理功能

添加清除所有草稿功能
扩展采购计划和出入库接口类型定义
新增出入库统计和产品列表接口
重写计划详情页面数据展示逻辑
改进数据分析组件支持动态数据
优化库存管理页面查询和展示逻辑
完善详情信息组件展示和文件预览功能
This commit is contained in:
re-JZzzz
2025-09-28 20:04:30 +08:00
parent 11f9433ba7
commit 321c3fce49
12 changed files with 856 additions and 674 deletions

View File

@ -23,20 +23,20 @@
<el-input v-model="queryParams.danjvNumber" placeholder="请输入单据编号"
clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="设备类型" prop="shebeiType">
<!-- <el-form-item label="设备类型" prop="shebeiType">
<el-select v-model="queryParams.shebeiType" placeholder="请选择设备类型"
clearable>
<el-option v-for="dict in wz_device_type" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="审核状态" prop="auditStatus">
</el-form-item> -->
<!-- <el-form-item label="审核状态" prop="auditStatus">
<el-select v-model="queryParams.auditStatus" placeholder="请选择审核状态"
clearable>
<el-option v-for="dict in shenheStatus" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="开始日期" prop="startDate">
<el-date-picker v-model="queryParams.startDate" type="date"
placeholder="请选择开始日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@ -63,21 +63,17 @@
<el-table v-loading="loading" border :data="churukudanList"
style="width: 100%;margin-top: 15px;">
<el-table-column label="单据编号" align="center" prop="danjvNumber" />
<el-table-column label="设备类型" align="center" prop="shebeiType">
<template #default="scope">
<span>{{ getTagLabel(wz_device_type, scope.row.shebeiType) }}</span>
</template>
</el-table-column>
<el-table-column label="经手人" align="center" prop="jingshourenName" />
<el-table-column label="产品名称" align="center" prop="chanpinName"></el-table-column>
<el-table-column label="经手人" align="center" prop="jingshourenName" width="80px" />
<el-table-column label="操作时间" align="center" prop="updateTime" />
<el-table-column label="总数量" align="center" prop="zonNumber" width="80px" />
<el-table-column label="审核状态" align="center" prop="shenheStatus">
<!-- <el-table-column label="审核状态" align="center" prop="shenheStatus">
<template #default="scope">
<el-tag :type="getTagType(shenheStatus, scope.row.shenheStatus)" as="span">
{{ getTagLabel(shenheStatus, scope.row.shenheStatus) }}
</el-tag>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="单据类型" align="center" prop="danjvType">
<template #default="scope">
<el-tag :type="getTagType(danjvType, scope.row.danjvType)">
@ -87,8 +83,8 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button link type="primary" @click="handleUpdate(scope.row)"
v-hasPermi="['personnel:churukudan:edit']">修改</el-button>
<!-- <el-button link type="primary" @click="handleUpdate(scope.row)"
v-hasPermi="['personnel:churukudan:edit']">修改</el-button> -->
<el-button link type="primary" @click="handleDetail(scope.row)"
v-hasPermi="['personnel:churukudan:query']">详情</el-button>
<el-button link type="primary" @click="handleDelete(scope.row)"
@ -118,7 +114,7 @@
<div class="item-box">
<div class="title">数据分析</div>
<div class="content">
<DataAnalysis />
<DataAnalysis :lineData="lineData" :barData="barData" />
</div>
</div>
</el-card>
@ -136,11 +132,17 @@
<el-form-item label="单据编号" prop="danjvNumber">
<el-input v-model="form.danjvNumber" placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="设备类型" prop="shebeiType">
<!-- <el-form-item label="设备类型" prop="shebeiType">
<el-select v-model="form.shebeiType" placeholder="请选择设备类型">
<el-option v-for="dict in wz_device_type" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item> -->
<el-form-item label="产品名称" prop="chanpinName">
<el-select v-model="form.chanpinName" placeholder="请选择产品名称">
<el-option v-for="dict in chanpinName" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="经手人id" prop="jingshourenId">
<el-input v-model="form.jingshourenId" placeholder="请输入经手人id" />
@ -325,7 +327,7 @@ import SystemInfo from './components/SystemInfo.vue';
import DataAnalysis from './components/DataAnalysis.vue';
import { ref, computed } from 'vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
import { listChurukudan, getChurukudan, delChurukudan, addChurukudan, updateChurukudan, getChuRuKuCountBar } from '@/api/wuziguanli/churuku/index';
import { listChurukudan, getChurukudan, delChurukudan, addChurukudan, updateChurukudan, getChuRuKuCountLine, getChuRuKuDayCountBar, getChanpinLists } from '@/api/wuziguanli/churuku/index';
import { ChurukudanVO, ChurukudanQuery, ChurukudanForm } from '@/api/wuziguanli/churuku/types';
const { wz_device_type } = toRefs<any>(proxy?.useDict('wz_device_type'));
@ -427,6 +429,7 @@ const initFormData: ChurukudanForm = {
danjvType: undefined,
updateTime: undefined,
auditStatus: undefined,
chanpinName: undefined,
}
const data = reactive<PageData<ChurukudanForm, ChurukudanQuery>>({
form: { ...initFormData },
@ -440,6 +443,7 @@ const data = reactive<PageData<ChurukudanForm, ChurukudanQuery>>({
startDate: undefined,
endDate: undefined,
auditStatus: undefined,
chanpinName: undefined,
danjvType: '1', // 默认显示出库单
params: {
}
@ -464,6 +468,20 @@ const data = reactive<PageData<ChurukudanForm, ChurukudanQuery>>({
});
const { queryParams, form, rules } = toRefs(data);
// 查询产品名称列表
const chanpinList = ref<any[]>([]);
// 查询产品名称列表
const getChanpinList = async () => {
try {
const res = await getChanpinLists({ projectId: userStore.selectedProject.id });
chanpinList.value = res.rows || [];
console.log('chanpinList.value', chanpinList.value);
} catch (error) {
console.error('获取产品名称列表失败:', error);
proxy?.$modal.msgError("获取产品名称列表失败,请稍后重试");
chanpinList.value = [];
}
}
/** 查询运维-物资-出入库单管理列表 */
const getList = async () => {
@ -526,23 +544,23 @@ const handleAdd = () => {
}
/** 修改按钮操作 */
const handleUpdate = async (row?: ChurukudanVO) => {
reset();
const _id = row?.id || ids.value[0];
if (!_id) {
proxy?.$modal.msgWarning("请选择要修改的数据");
return;
}
try {
const res = await getChurukudan(_id);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = "修改运维-物资-出入库单管理";
} catch (error) {
console.error('获取出入库单详情失败:', error);
proxy?.$modal.msgError("获取数据失败,请稍后重试");
}
}
// const handleUpdate = async (row?: ChurukudanVO) => {
// reset();
// const _id = row?.id || ids.value[0];
// if (!_id) {
// proxy?.$modal.msgWarning("请选择要修改的数据");
// return;
// }
// try {
// const res = await getChurukudan(_id);
// Object.assign(form.value, res.data);
// dialog.visible = true;
// dialog.title = "修改运维-物资-出入库单管理";
// } catch (error) {
// console.error('获取出入库单详情失败:', error);
// proxy?.$modal.msgError("获取数据失败,请稍后重试");
// }
// }
/** 提交按钮 */
const submitForm = () => {
@ -607,7 +625,29 @@ const handleDelete = async (row?: ChurukudanVO) => {
}
}
// 折线图数据获取
const lineData = ref<any>();
const fetchChuRuKuCountLineData = async () => {
if (!queryParams.value.projectId) {
return;
}
let data = {
projectId: queryParams.value.projectId,
startDate: currentMonthDates[0].fullDate,
endDate: currentMonthDates[currentMonthDates.length - 1].fullDate,
}
try {
const res = await getChuRuKuCountLine(data);
if (res.code === 200) {
lineData.value = res.data;
}
// 这里可以添加数据处理和图表更新的逻辑
} catch (error) {
proxy?.$modal.msgError("获取统计数据失败");
}
}
// 柱状图数据获取
const barData = ref<any>();
const fetchChuRuKuCountBarData = async () => {
if (!queryParams.value.projectId) {
return;
@ -618,16 +658,15 @@ const fetchChuRuKuCountBarData = async () => {
endDate: currentMonthDates[currentMonthDates.length - 1].fullDate,
}
try {
const res = await getChuRuKuCountBar(data);
console.log(res);
const res = await getChuRuKuDayCountBar(data);
if (res.code === 200) {
barData.value = res.data;
}
// 这里可以添加数据处理和图表更新的逻辑
} catch (error) {
console.error('获取柱状图数据失败:', error);
// 可以选择是否显示错误提示根据UI需求决定
// proxy?.$modal.msgError("获取统计数据失败");
proxy?.$modal.msgError("获取统计数据失败");
}
}
// 监听用户选择的项目变化
watch(() => userStore.selectedProject, (newProject) => {
if (newProject && newProject.id) {
@ -638,12 +677,15 @@ watch(() => userStore.selectedProject, (newProject) => {
}
// 调用getList刷新数据
getList();
fetchChuRuKuCountBarData();
fetchChuRuKuCountLineData();
}
}, { immediate: true, deep: true });
onMounted(() => {
getList();
fetchChuRuKuCountLineData();
fetchChuRuKuCountBarData();
// 查询产品名称列表
getChanpinList();
});
// 组件卸载时清空projectId