采购申请调整

This commit is contained in:
吴红兵
2026-02-26 17:18:06 +08:00
parent 1d1aeffdf8
commit c631afcf4f
2 changed files with 90 additions and 6 deletions

View File

@@ -11,6 +11,11 @@
</div>
</template>
<div v-loading="loading" style="padding-bottom: 20px;">
<div class="form-toolbar mb12" style="text-align: right;">
<el-button type="primary" link icon="QuestionFilled" @click="helpDialogVisible = true">
帮助
</el-button>
</div>
<el-form
ref="formRef"
:model="dataForm"
@@ -338,6 +343,65 @@
</el-row>
</div>
<!-- 帮助弹窗展示金额与规则说明 -->
<el-dialog
v-model="helpDialogVisible"
title="帮助 - 采购规则说明"
width="620px"
destroy-on-close
>
<el-alert
type="info"
:closable="false"
show-icon
class="mb12"
>
以下规则仅作为自动推荐与必填校验依据实际录入时可在允许范围内调整
</el-alert>
<el-scrollbar max-height="360px">
<ul class="help-rules-list">
<li>
<strong>部门自行采购 / 学校统一采购划分</strong>
是否特殊情况 = 是否集采 = 且预算金额 &lt; 5 {{ BUDGET_DEPT_PURCHASE_THRESHOLD }} 系统判定为部门自行采购否则为学校统一采购
</li>
<li>
<strong>学校统一采购 - 采购形式默认值</strong>
当预算金额 100 {{ BUDGET_GOV_PURCHASE_THRESHOLD }} 时默认政府采购
5 预算金额 &lt; 100 万时根据是否集采自动推荐政府采购学校自主采购
但申请人可以在界面上自行修改
</li>
<li>
<strong>部门自行采购 - 自动网上商城</strong>
部门自行采购且为服务类特殊品目满足服务类且为商城/项目服务
5 预算金额 &lt; 40 {{ BUDGET_PUBLIC_SELECT_THRESHOLD }} 系统会自动将采购方式推荐为网上商城同时要求上传相应模板文件
</li>
<li>
<strong>学校统一采购 - 自动邀请/公开比选模板</strong>
对服务类特殊品目
5 预算金额 &lt; 40 万时系统根据是否有推荐供应商在邀请比选 / 公开比选模板之间自动切换必填文件
40 预算金额 &lt; 100 万时系统默认要求使用公开比选模板
</li>
<li>
<strong>可行性论证与会议纪要学校统一采购</strong>
当预算金额 30 {{ BUDGET_FEASIBILITY_THRESHOLD }} 且不是紧急/单一/进口等特殊情况时
需要上传项目可行性论证报告会议纪要紧急单一来源进口等特殊情况对应有单独的证明材料与会议纪要要求
</li>
<li>
<strong>政府采购意向表</strong>
当预算金额 100 {{ BUDGET_GOV_PURCHASE_THRESHOLD }} 且为学校统一采购时需要填写政府采购意向表并上传对应模板文件
</li>
<li>
<strong>委托采购中心采购</strong>
部门自行采购中选择委托采购中心采购作为采购途径时申请阶段隐藏采购方式由采购中心在审核环节选择
对服务类特殊品目且金额在 5 ~ 40 万区间时采购中心会优先推荐网上商城服务网上商城方式
</li>
</ul>
</el-scrollbar>
<template #footer>
<el-button type="primary" @click="helpDialogVisible = false">我知道了</el-button>
</template>
</el-dialog>
<!-- 查看时实施采购信息 -->
<div v-if="isViewMode && (dataForm.implementType || viewImplementPurchaseFiles.length)" class="implement-info-block mb20">
<el-divider content-position="left">实施采购信息</el-divider>
@@ -416,7 +480,7 @@ import { getDicts } from '/@/api/admin/dict';
import { useMessage } from '/@/hooks/message';
import UploadFile from '/@/components/Upload/index.vue';
import other from '/@/utils/other';
import { Document, Download } from '@element-plus/icons-vue';
import { Document, Download, QuestionFilled } from '@element-plus/icons-vue';
import { fetchList as getBusinessDeptList } from '/@/api/purchase/purchasingBusinessDept';
import { getPage as getSchoolLeaderPage } from '/@/api/finance/purchasingschoolleader';
import { Session } from '/@/utils/storage';
@@ -557,6 +621,7 @@ const purchaseTypeUnionList = ref<any[]>([]);
const businessDeptList = ref<any[]>([]);
const schoolLeaderList = ref<any[]>([]);
const loading = ref(false);
const helpDialogVisible = ref(false);
// 文件类型映射(对应数据库 file_type 字段)
// 10:商务洽谈纪要 20:市场采购纪要 30:网上商城采购相关材料 40:可行性论证报告 50:会议记录 60:其他材料 70:单一来源专家论证表 90:进口产品专家论证表 100:政府采购意向表 110:履约验收单 120:采购需求表 130:采购文件
@@ -675,9 +740,20 @@ const schoolUnifiedPurchaseFormDefault = computed(() => {
return null;
});
// 学校统一采购时采购形式是否禁用(采购中心审核时放开;否则由规则自动选择时禁用)
const schoolUnifiedPurchaseFormDisabled = computed(() =>
(isFlowEmbed.value && isPurchaseCenter.value) ? false : (flowFieldDisabled('purchaseMode') || (schoolUnifiedPurchaseFormDefault.value != null)));
// 学校统一采购时采购形式是否禁用
// 申请阶段:始终可选(根据默认值自动选中后,允许用户自行修改)
// 流程嵌入:采购中心节点可编辑,其他节点只读
const schoolUnifiedPurchaseFormDisabled = computed(() => {
if (!isFlowEmbed.value) {
return false;
}
// 流程嵌入且为采购中心:放开编辑
if (isPurchaseCenter.value) {
return false;
}
// 其他流程节点只读
return true;
});
// 特殊情况字典 value0否 1紧急 2单一 3进口
const isUrgentSpecial = computed(() => dataForm.isSpecial === '1');

View File

@@ -192,13 +192,21 @@ const handleUploadConfirm = async () => {
}
};
const handleDownload = (row: any) => {
const handleDownload = async (row: any) => {
if (!row?.templateType) {
useMessage().error('缺少模板类型编码');
return;
}
const url = getTemplateDownloadUrl(row.templateType);
const fileName = row.templateName || row.templateTitle || row.templateType;
try {
await (window as any).other?.downBlobFile?.(url, {}, fileName) ||
// 兼容直接使用工具函数
(await import('/@/utils/other')).default.downBlobFile(url, {}, fileName);
} catch (e) {
// 如果工具函数不可用,则退回 window.open
window.open(url, '_blank');
}
};
const openEditDialog = (row: any) => {