采购申请调整
This commit is contained in:
@@ -11,6 +11,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div v-loading="loading" style="padding-bottom: 20px;">
|
<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
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="dataForm"
|
:model="dataForm"
|
||||||
@@ -338,6 +343,65 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</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>:
|
||||||
|
当「是否特殊情况 = 否」「是否集采 = 否」且预算金额 < 5 万({{ BUDGET_DEPT_PURCHASE_THRESHOLD }} 元)时,系统判定为「部门自行采购」,否则为「学校统一采购」。
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>学校统一采购 - 采购形式默认值</strong>:
|
||||||
|
当预算金额 ≥ 100 万({{ BUDGET_GOV_PURCHASE_THRESHOLD }} 元)时默认「政府采购」;
|
||||||
|
当 5 万 ≤ 预算金额 < 100 万时,根据「是否集采」自动推荐「政府采购」或「学校自主采购」,
|
||||||
|
但申请人可以在界面上自行修改。
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>部门自行采购 - 自动网上商城</strong>:
|
||||||
|
在「部门自行采购」且为服务类特殊品目(满足服务类且为商城/项目服务)时,
|
||||||
|
若 5 万 ≤ 预算金额 < 40 万({{ BUDGET_PUBLIC_SELECT_THRESHOLD }} 元),系统会自动将采购方式推荐为「网上商城」,同时要求上传相应模板文件。
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<strong>学校统一采购 - 自动邀请/公开比选模板</strong>:
|
||||||
|
对服务类特殊品目:
|
||||||
|
当 5 万 ≤ 预算金额 < 40 万时,系统根据「是否有推荐供应商」在邀请比选 / 公开比选模板之间自动切换必填文件;
|
||||||
|
当 40 万 ≤ 预算金额 < 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">
|
<div v-if="isViewMode && (dataForm.implementType || viewImplementPurchaseFiles.length)" class="implement-info-block mb20">
|
||||||
<el-divider content-position="left">实施采购信息</el-divider>
|
<el-divider content-position="left">实施采购信息</el-divider>
|
||||||
@@ -416,7 +480,7 @@ import { getDicts } from '/@/api/admin/dict';
|
|||||||
import { useMessage } from '/@/hooks/message';
|
import { useMessage } from '/@/hooks/message';
|
||||||
import UploadFile from '/@/components/Upload/index.vue';
|
import UploadFile from '/@/components/Upload/index.vue';
|
||||||
import other from '/@/utils/other';
|
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 { fetchList as getBusinessDeptList } from '/@/api/purchase/purchasingBusinessDept';
|
||||||
import { getPage as getSchoolLeaderPage } from '/@/api/finance/purchasingschoolleader';
|
import { getPage as getSchoolLeaderPage } from '/@/api/finance/purchasingschoolleader';
|
||||||
import { Session } from '/@/utils/storage';
|
import { Session } from '/@/utils/storage';
|
||||||
@@ -557,6 +621,7 @@ const purchaseTypeUnionList = ref<any[]>([]);
|
|||||||
const businessDeptList = ref<any[]>([]);
|
const businessDeptList = ref<any[]>([]);
|
||||||
const schoolLeaderList = ref<any[]>([]);
|
const schoolLeaderList = ref<any[]>([]);
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
|
const helpDialogVisible = ref(false);
|
||||||
|
|
||||||
// 文件类型映射(对应数据库 file_type 字段)
|
// 文件类型映射(对应数据库 file_type 字段)
|
||||||
// 10:商务洽谈纪要 20:市场采购纪要 30:网上商城采购相关材料 40:可行性论证报告 50:会议记录 60:其他材料 70:单一来源专家论证表 90:进口产品专家论证表 100:政府采购意向表 110:履约验收单 120:采购需求表 130:采购文件
|
// 10:商务洽谈纪要 20:市场采购纪要 30:网上商城采购相关材料 40:可行性论证报告 50:会议记录 60:其他材料 70:单一来源专家论证表 90:进口产品专家论证表 100:政府采购意向表 110:履约验收单 120:采购需求表 130:采购文件
|
||||||
@@ -675,9 +740,20 @@ const schoolUnifiedPurchaseFormDefault = computed(() => {
|
|||||||
return null;
|
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;
|
||||||
|
});
|
||||||
|
|
||||||
// 特殊情况字典 value:0否 1紧急 2单一 3进口
|
// 特殊情况字典 value:0否 1紧急 2单一 3进口
|
||||||
const isUrgentSpecial = computed(() => dataForm.isSpecial === '1');
|
const isUrgentSpecial = computed(() => dataForm.isSpecial === '1');
|
||||||
|
|||||||
@@ -192,13 +192,21 @@ const handleUploadConfirm = async () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDownload = (row: any) => {
|
const handleDownload = async (row: any) => {
|
||||||
if (!row?.templateType) {
|
if (!row?.templateType) {
|
||||||
useMessage().error('缺少模板类型编码');
|
useMessage().error('缺少模板类型编码');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const url = getTemplateDownloadUrl(row.templateType);
|
const url = getTemplateDownloadUrl(row.templateType);
|
||||||
window.open(url, '_blank');
|
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) => {
|
const openEditDialog = (row: any) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user