修改采购途径

This commit is contained in:
吴红兵
2026-03-10 21:02:11 +08:00
parent d92cb8634b
commit 63034bd182
3 changed files with 53 additions and 47 deletions

View File

@@ -115,9 +115,9 @@ export function revokeAgent(applyId: number | string) {
} }
/** /**
* 保存实施采购方式(分步骤实施采购-第一步) * 保存实施采购途径(分步骤实施采购-第一步)
* @param id 采购申请ID * @param id 采购申请ID
* @param implementType 实施采购方式1-自行组织采购2-委托代理采购 * @param implementType 实施采购途径1-自行组织采购2-委托代理采购
*/ */
export function saveImplementType(id: number | string, implementType: string) { export function saveImplementType(id: number | string, implementType: string) {
return request({ return request({
@@ -179,7 +179,7 @@ export function getContracts(params?: any) {
* 实施采购:上传招标文件并关联到申请单(可同时保存采购代表人方式与人员) * 实施采购:上传招标文件并关联到申请单(可同时保存采购代表人方式与人员)
* @param id 采购申请ID * @param id 采购申请ID
* @param fileIds 已上传的招标文件ID列表fileType=130 * @param fileIds 已上传的招标文件ID列表fileType=130
* @param implementType 实施采购方式 1:自行组织采购 2:委托代理采购 * @param implementType 实施采购途径 1:自行组织采购 2:委托代理采购
* @param representorTeacherNo 需求部门初审-指定采购代表人(单人) * @param representorTeacherNo 需求部门初审-指定采购代表人(单人)
* @param representors 需求部门初审-部门多人逗号分隔 * @param representors 需求部门初审-部门多人逗号分隔
*/ */

View File

@@ -395,12 +395,17 @@
</el-row> </el-row>
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="8" class="mb12"> <el-col :span="8" class="mb12">
<el-form-item label="组织采购形式" prop="purchaseSchool" :required="isPurchaseSchoolRequired"> <el-form-item label="实施采购途径" prop="implementChannel" :required="isImplementChannelRequired">
<el-radio-group v-model="dataForm.purchaseSchool" :disabled="schoolUnifiedPurchaseFormDisabled"> <el-select
<el-radio v-for="item in purchaseModeSchoolList" :key="item.value" :label="item.value"> v-model="dataForm.implementChannel"
{{ item.label }} placeholder="请选择实施采购途径"
</el-radio> clearable
</el-radio-group> :disabled="schoolUnifiedPurchaseFormDisabled"
@change="handleImplementChannelChange"
style="width: 100%"
>
<el-option v-for="item in implementChannelList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8" class="mb12"> <el-col :span="8" class="mb12">
@@ -810,7 +815,7 @@
<el-divider content-position="left">实施采购信息</el-divider> <el-divider content-position="left">实施采购信息</el-divider>
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="8" class="mb12" v-if="dataForm.implementType"> <el-col :span="8" class="mb12" v-if="dataForm.implementType">
<div class="view-label">实施采购方式</div> <div class="view-label">实施采购途径</div>
<div class="view-value"> <div class="view-value">
{{ {{
dataForm.implementType === '1' dataForm.implementType === '1'
@@ -978,7 +983,7 @@ const dataForm = reactive({
isSpecial: '', isSpecial: '',
hasAssets: '0', hasAssets: '0',
purchaseMode: '', purchaseMode: '',
purchaseSchool: '', implementChannel: '', // 实施采购途径:框架协议、网上商城
purchaseType: '', purchaseType: '',
purchaseTypeUnion: '', purchaseTypeUnion: '',
purchaseChannel: '', purchaseChannel: '',
@@ -1049,7 +1054,11 @@ const isSpecialList = ref<any[]>([]);
const purchaseTypeDeptList = ref<any[]>([]); const purchaseTypeDeptList = ref<any[]>([]);
/** 部门采购方式字典(委托采购中心采购时使用) */ /** 部门采购方式字典(委托采购中心采购时使用) */
const purchaseTypeDeptDelegationList = ref<any[]>([]); const purchaseTypeDeptDelegationList = ref<any[]>([]);
const purchaseModeSchoolList = ref<any[]>([]); /** 实施采购途径选项:框架协议、网上商城 */
const implementChannelList = ref<any[]>([
{ value: '5', label: '框架协议' },
{ value: '8', label: '网上商城' },
]);
const purchaseTypeUnionList = ref<any[]>([]); const purchaseTypeUnionList = ref<any[]>([]);
const businessDeptList = ref<any[]>([]); const businessDeptList = ref<any[]>([]);
const schoolLeaderList = ref<any[]>([]); const schoolLeaderList = ref<any[]>([]);
@@ -1215,8 +1224,8 @@ const isPurchaseTypeUnionRequired = computed(() => {
return false; return false;
}); });
// 学校统一采购 - 组织采购形式是否必填 // 学校统一采购 - 实施采购途径是否必填
const isPurchaseSchoolRequired = computed(() => { const isImplementChannelRequired = computed(() => {
// 审核阶段:采购中心必填 // 审核阶段:采购中心必填
if (isFlowEmbed.value && isPurchaseCenter.value) { if (isFlowEmbed.value && isPurchaseCenter.value) {
return true; return true;
@@ -1386,6 +1395,21 @@ const calcEntrustCenterType = (): 'service_online' | 'other' | '' => {
return 'other'; return 'other';
}; };
// 实施采购途径变化时,自动设置采购方式
// 框架协议 → 采购方式自动选择"框架协议"
// 网上商城 → 采购方式自动选择"网上商城"
const handleImplementChannelChange = (value: string) => {
if (!value) {
// 清空实施采购途径时,清空采购方式
dataForm.purchaseType = '';
return;
}
// 根据实施采购途径自动设置采购方式
// value 与 PurchaseTypeEnum 编码一致5=框架协议8=网上商城
dataForm.purchaseType = value;
};
// 监听采购途径变化清理所有与采购方式相关的材料字段同时如果已选择品目则重新计算entrustCenterType // 监听采购途径变化清理所有与采购方式相关的材料字段同时如果已选择品目则重新计算entrustCenterType
watch( watch(
() => dataForm.purchaseChannel, () => dataForm.purchaseChannel,
@@ -1732,13 +1756,13 @@ const dataRules = reactive({
trigger: 'change', trigger: 'change',
}, },
], ],
// 学校统一采购 + 采购中心审核:采购形式必填 // 学校统一采购 + 采购中心审核:实施采购途径必填
purchaseSchool: [ implementChannel: [
{ {
validator: (_rule: any, value: string, callback: (e?: Error) => void) => { validator: (_rule: any, value: string, callback: (e?: Error) => void) => {
if (!isDeptPurchase.value && isFlowEmbed.value && isPurchaseCenter.value) { if (!isDeptPurchase.value && isFlowEmbed.value && isPurchaseCenter.value) {
if (!value || String(value).trim() === '') { if (!value || String(value).trim() === '') {
callback(new Error('请选择组织采购形式')); callback(new Error('请选择实施采购途径'));
return; return;
} }
} }
@@ -1865,7 +1889,7 @@ async function loadDetail(applyId: string | number) {
isCentralized: detail.isCentralized != null ? String(detail.isCentralized) : '', isCentralized: detail.isCentralized != null ? String(detail.isCentralized) : '',
isSpecial: detail.isSpecial != null ? String(detail.isSpecial) : '', isSpecial: detail.isSpecial != null ? String(detail.isSpecial) : '',
purchaseMode: detail.purchaseMode != null ? String(detail.purchaseMode) : '', purchaseMode: detail.purchaseMode != null ? String(detail.purchaseMode) : '',
purchaseSchool: detail.purchaseSchool != null ? String(detail.purchaseSchool) : '', implementChannel: detail.implementChannel != null ? String(detail.implementChannel) : '',
purchaseType: purchaseType:
detail.purchaseType === DEPT_PURCHASE_TYPE.ENTRUST_CENTER detail.purchaseType === DEPT_PURCHASE_TYPE.ENTRUST_CENTER
? '' ? ''
@@ -2220,23 +2244,6 @@ const purchaseTypeDeptOptions = computed(() => {
})); }));
}); });
// 获取学校采购形式字典
const getPurchaseModeSchoolDict = async () => {
try {
const res = await getDicts('PURCHASE_MODE_SCHOOL');
purchaseModeSchoolList.value =
res.data && Array.isArray(res.data)
? res.data.map((item: any) => ({
id: item.id,
label: item.label || item.dictLabel || item.name,
value: item.value || item.dictValue || item.code,
}))
: [];
} catch (err) {
purchaseModeSchoolList.value = [];
}
};
// 获取学校统一采购方式字典 // 获取学校统一采购方式字典
const getPurchaseTypeUnionDict = async () => { const getPurchaseTypeUnionDict = async () => {
try { try {
@@ -2808,7 +2815,6 @@ onMounted(async () => {
getIsSpecialDict(), getIsSpecialDict(),
getPurchaseTypeDeptDict(), getPurchaseTypeDeptDict(),
getPurchaseTypeDeptDelegationDict(), getPurchaseTypeDeptDelegationDict(),
getPurchaseModeSchoolDict(),
getPurchaseTypeUnionDict(), getPurchaseTypeUnionDict(),
getBusinessDeptListData(), getBusinessDeptListData(),
getSchoolLeaderListData(), getSchoolLeaderListData(),

View File

@@ -1,15 +1,15 @@
<template> <template>
<div class="implement-page"> <div class="implement-page">
<div class="implement-form"> <div class="implement-form">
<!-- 步骤一选择实施采购方式 --> <!-- 步骤一选择实施采购途径 -->
<div class="step-section"> <div class="step-section">
<div class="step-header"> <div class="step-header">
<span class="step-number" :class="{ completed: step1Completed && !isEditingStep1 }">1</span> <span class="step-number" :class="{ completed: step1Completed && !isEditingStep1 }">1</span>
<span class="step-title">选择实施采购方式</span> <span class="step-title">选择实施采购途径</span>
<el-tag v-if="step1Completed && !isEditingStep1" type="success" size="small">已完成</el-tag> <el-tag v-if="step1Completed && !isEditingStep1" type="success" size="small">已完成</el-tag>
</div> </div>
<div class="step-content"> <div class="step-content">
<el-form-item label="实施采购方式" required> <el-form-item label="实施采购途径" required>
<el-radio-group v-model="implementType" :disabled="step1Completed && !isEditingStep1"> <el-radio-group v-model="implementType" :disabled="step1Completed && !isEditingStep1">
<el-radio :label="IMPLEMENT_TYPE.SELF_ORGANIZED">自行组织采购</el-radio> <el-radio :label="IMPLEMENT_TYPE.SELF_ORGANIZED">自行组织采购</el-radio>
<el-radio :label="IMPLEMENT_TYPE.ENTRUST_AGENT">委托代理采购</el-radio> <el-radio :label="IMPLEMENT_TYPE.ENTRUST_AGENT">委托代理采购</el-radio>
@@ -97,7 +97,7 @@ import { Session } from '/@/utils/storage';
// ==================== 常量定义(与后端枚举保持一致) ==================== // ==================== 常量定义(与后端枚举保持一致) ====================
/** 实施采购方式(与后端 ImplementTypeEnum 一致) */ /** 实施采购途径(与后端 ImplementTypeEnum 一致) */
const IMPLEMENT_TYPE = { const IMPLEMENT_TYPE = {
/** 自行组织采购 */ /** 自行组织采购 */
SELF_ORGANIZED: '1', SELF_ORGANIZED: '1',
@@ -328,7 +328,7 @@ const handleRevokeAgent = async () => {
} }
}; };
/** 步骤一:保存实施采购方式 */ /** 步骤一:保存实施采购途径 */
const handleSaveImplementType = async () => { const handleSaveImplementType = async () => {
const id = applyRow.value?.id ?? applyId.value; const id = applyRow.value?.id ?? applyId.value;
@@ -337,7 +337,7 @@ const handleSaveImplementType = async () => {
return; return;
} }
if (!implementType.value) { if (!implementType.value) {
useMessage().warning('请选择实施采购方式'); useMessage().warning('请选择实施采购途径');
return; return;
} }
saveTypeSubmitting.value = true; saveTypeSubmitting.value = true;
@@ -370,7 +370,7 @@ const cancelEditStep1 = () => {
isEditingStep1.value = false; isEditingStep1.value = false;
}; };
/** 重新保存实施采购方式(修改后确认) */ /** 重新保存实施采购途径(修改后确认) */
const handleReSaveImplementType = async () => { const handleReSaveImplementType = async () => {
const id = applyRow.value?.id ?? applyId.value; const id = applyRow.value?.id ?? applyId.value;
if (!id) { if (!id) {
@@ -378,7 +378,7 @@ const handleReSaveImplementType = async () => {
return; return;
} }
if (!implementType.value) { if (!implementType.value) {
useMessage().warning('请选择实施采购方式'); useMessage().warning('请选择实施采购途径');
return; return;
} }
saveTypeSubmitting.value = true; saveTypeSubmitting.value = true;
@@ -466,7 +466,7 @@ const handleConfirm = async () => {
// 步骤一未完成时,先保存步骤一 // 步骤一未完成时,先保存步骤一
if (!step1Completed.value) { if (!step1Completed.value) {
if (!implementType.value) { if (!implementType.value) {
useMessage().warning('请选择实施采购方式'); useMessage().warning('请选择实施采购途径');
return; return;
} }
saveTypeSubmitting.value = true; saveTypeSubmitting.value = true;
@@ -475,7 +475,7 @@ const handleConfirm = async () => {
step1Completed.value = true; step1Completed.value = true;
emit('saved'); emit('saved');
} catch (e: any) { } catch (e: any) {
useMessage().error(e?.msg || '保存实施采购方式失败'); useMessage().error(e?.msg || '保存实施采购途径失败');
return; return;
} finally { } finally {
saveTypeSubmitting.value = false; saveTypeSubmitting.value = false;