修改采购途径
This commit is contained in:
@@ -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 需求部门初审-部门多人逗号分隔
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1864,8 +1888,8 @@ async function loadDetail(applyId: string | number) {
|
|||||||
budget: detail.budget != null ? Number(detail.budget) : null,
|
budget: detail.budget != null ? Number(detail.budget) : null,
|
||||||
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(),
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user