修改实施采购途径

This commit is contained in:
吴红兵
2026-03-10 21:41:40 +08:00
parent ddbdbecba6
commit 3710ca2fd5

View File

@@ -26,120 +26,113 @@
<el-divider content-position="left">
<span class="section-title">基础信息</span>
</el-divider>
<el-text v-if="!isEditMode && !isViewMode" type="info" size="small" class="mb12" style="display: block">
暂存时基础信息必填
</el-text>
<el-text v-if="!isEditMode && !isViewMode" type="info" size="small" class="mb12" style="display: block"> 暂存时基础信息必填 </el-text>
<el-row :gutter="16">
<el-col :span="8" class="mb12">
<el-form-item label="采购项目名称" prop="projectName">
<el-input
v-model="dataForm.projectName"
placeholder="请输入采购项目名称"
clearable
:disabled="flowFieldDisabled('projectName')"
<el-col :span="8" class="mb12">
<el-form-item label="采购项目名称" prop="projectName">
<el-input v-model="dataForm.projectName" placeholder="请输入采购项目名称" clearable :disabled="flowFieldDisabled('projectName')" />
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="填报日期" prop="applyDate">
<el-date-picker
v-model="dataForm.applyDate"
type="date"
placeholder="请选择填报日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
style="width: 100%"
:disabled="flowFieldDisabled('applyDate')"
/>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="资金来源" prop="fundSource">
<el-select
v-model="dataForm.fundSource"
placeholder="请选择资金来源"
clearable
style="width: 100%"
:disabled="flowFieldDisabled('fundSource')"
>
<el-option v-for="item in fundSourceList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="预算金额" prop="budget">
<div class="budget-yuan-wrap">
<el-input-number
v-model="dataForm.budget"
:min="0.01"
:precision="2"
placeholder="请输入金额"
:controls="false"
style="width: 100%"
:disabled="flowFieldDisabled('budget')"
/>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="填报日期" prop="applyDate">
<el-date-picker
v-model="dataForm.applyDate"
type="date"
placeholder="请选择填报日期"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
style="width: 100%"
:disabled="flowFieldDisabled('applyDate')"
/>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="资金来源" prop="fundSource">
<el-select
v-model="dataForm.fundSource"
placeholder="请选择资金来源"
clearable
style="width: 100%"
:disabled="flowFieldDisabled('fundSource')"
>
<el-option v-for="item in fundSourceList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="预算金额" prop="budget">
<div class="budget-yuan-wrap">
<el-input-number
v-model="dataForm.budget"
:min="0.01"
:precision="2"
placeholder="请输入金额"
:controls="false"
style="width: 100%"
:disabled="flowFieldDisabled('budget')"
/>
<span class="budget-unit"></span>
</div>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="是否集采" prop="isCentralized">
<el-select
v-model="dataForm.isCentralized"
placeholder="请选择是否集采"
clearable
style="width: 100%"
:disabled="flowFieldDisabled('isCentralized')"
>
<el-option v-for="item in isCentralizedList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="是否特殊情况" prop="isSpecial">
<el-select
v-model="dataForm.isSpecial"
placeholder="请选择是否特殊情况"
clearable
style="width: 100%"
:disabled="flowFieldDisabled('isSpecial')"
>
<el-option v-for="item in isSpecialList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="是否有资产" prop="hasAssets">
<el-radio-group v-model="dataForm.hasAssets" :disabled="flowFieldDisabled('hasAssets')">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24" class="mb12">
<el-form-item label="品目编码" prop="categoryCode">
<el-cascader
v-model="categoryCodePath"
:options="categoryTreeData"
:props="{ value: 'code', label: 'name', children: 'children', checkStrictly: false }"
placeholder="请选择品目编码(仅最后一级)"
clearable
filterable
:show-all-levels="true"
style="width: 100%"
:disabled="flowFieldDisabled('categoryCode')"
@change="handleCategoryChange"
/>
<!-- 显示品目编码层级关系 -->
<el-text v-if="categoryCodeHierarchy" type="info" size="small" style="margin-top: 4px; display: block">
品目编码层级{{ categoryCodeHierarchy }}
</el-text>
<el-text v-if="isSpecialServiceCategory && dataForm.categoryCode" type="warning" size="small" style="margin-top: 4px">
当前选择品目为服务商城品目
</el-text>
</el-form-item>
</el-col>
</el-row>
<span class="budget-unit"></span>
</div>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="是否集采" prop="isCentralized">
<el-select
v-model="dataForm.isCentralized"
placeholder="请选择是否集采"
clearable
style="width: 100%"
:disabled="flowFieldDisabled('isCentralized')"
>
<el-option v-for="item in isCentralizedList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="是否特殊情况" prop="isSpecial">
<el-select
v-model="dataForm.isSpecial"
placeholder="请选择是否特殊情况"
clearable
style="width: 100%"
:disabled="flowFieldDisabled('isSpecial')"
>
<el-option v-for="item in isSpecialList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" class="mb12">
<el-form-item label="是否有资产" prop="hasAssets">
<el-radio-group v-model="dataForm.hasAssets" :disabled="flowFieldDisabled('hasAssets')">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24" class="mb12">
<el-form-item label="品目编码" prop="categoryCode">
<el-cascader
v-model="categoryCodePath"
:options="categoryTreeData"
:props="{ value: 'code', label: 'name', children: 'children', checkStrictly: false }"
placeholder="请选择品目编码(仅最后一级)"
clearable
filterable
:show-all-levels="true"
style="width: 100%"
:disabled="flowFieldDisabled('categoryCode')"
@change="handleCategoryChange"
/>
<!-- 显示品目编码层级关系 -->
<el-text v-if="categoryCodeHierarchy" type="info" size="small" style="margin-top: 4px; display: block">
品目编码层级{{ categoryCodeHierarchy }}
</el-text>
<el-text v-if="isSpecialServiceCategory && dataForm.categoryCode" type="warning" size="small" style="margin-top: 4px">
当前选择品目为服务商城品目
</el-text>
</el-form-item>
</el-col>
</el-row>
<!-- 采购详情新增时需先填是否特殊情况是否集采预算金额后才显示 -->
<div>
@@ -203,7 +196,13 @@
:disabled="isPurchaseTypeDisabled"
style="width: 100%"
>
<el-option v-for="item in purchaseTypeDeptOptions" :key="item.value" :label="item.label" :value="item.value" :disabled="item.disabled" />
<el-option
v-for="item in purchaseTypeDeptOptions"
:key="item.value"
:label="item.label"
:value="item.value"
:disabled="item.disabled"
/>
</el-select>
</el-form-item>
</el-col>
@@ -399,16 +398,16 @@
</el-row>
<el-row :gutter="16">
<el-col :span="8" class="mb12">
<el-form-item label="实施采购途径" prop="implementChannel" :required="isImplementChannelRequired">
<el-form-item label="实施采购途径" prop="implementType" :required="isImplementTypeRequired">
<el-select
v-model="dataForm.implementChannel"
v-model="dataForm.implementType"
placeholder="请选择实施采购途径"
clearable
:disabled="schoolUnifiedPurchaseFormDisabled"
@change="handleImplementChannelChange"
@change="handleImplementTypeChange"
style="width: 100%"
>
<el-option v-for="item in implementChannelList" :key="item.value" :label="item.label" :value="item.value" />
<el-option v-for="item in implementTypeList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
@@ -987,7 +986,6 @@ const dataForm = reactive({
isSpecial: '',
hasAssets: '0',
purchaseMode: '',
implementChannel: '', // 实施采购途径:框架协议、网上商城
purchaseType: '',
purchaseTypeUnion: '',
purchaseChannel: '',
@@ -1058,8 +1056,10 @@ const isSpecialList = ref<any[]>([]);
const purchaseTypeDeptList = ref<any[]>([]);
/** 部门采购方式字典(委托采购中心采购时使用) */
const purchaseTypeDeptDelegationList = ref<any[]>([]);
/** 实施采购途径选项:框架协议网上商城 */
const implementChannelList = ref<any[]>([
/** 实施采购途径选项:1:自行组织采购 2:委托代理采购 5:框架协议 8:网上商城 */
const implementTypeList = ref<any[]>([
{ value: '1', label: '自行组织采购' },
{ value: '2', label: '委托代理采购' },
{ value: '5', label: '框架协议' },
{ value: '8', label: '网上商城' },
]);
@@ -1229,7 +1229,7 @@ const isPurchaseTypeUnionRequired = computed(() => {
});
// 学校统一采购 - 实施采购途径是否必填
const isImplementChannelRequired = computed(() => {
const isImplementTypeRequired = computed(() => {
// 审核阶段:采购中心必填
if (isFlowEmbed.value && isPurchaseCenter.value) {
return true;
@@ -1407,19 +1407,24 @@ const calcEntrustCenterType = (): 'service_online' | 'other' | '' => {
return 'other';
};
// 实施采购途径变化时,自动设置采购方式
// 框架协议 → 采购方式自动选择"框架协议"
// 网上商城 → 采购方式自动选择"网上商城"
const handleImplementChannelChange = (value: string) => {
// 实施采购途径变化时,根据选择自动设置采购方式
// 5:框架协议 → 采购方式自动选择"框架协议"
// 8:网上商城 → 采购方式自动选择"网上商城"
// 1:自行组织采购、2:委托代理采购 → 清空采购方式,由用户手动选择
const handleImplementTypeChange = (value: string) => {
if (!value) {
// 清空实施采购途径时,清空采购方式
dataForm.purchaseType = '';
return;
}
// 根据实施采购途径自动设置采购方式
// value 与 PurchaseTypeEnum 编码一致5=框架协议8=网上商城
dataForm.purchaseType = value;
// 仅当选择框架协议(5)或网上商城(8)时,自动设置采购方式
if (value === '5' || value === '8') {
dataForm.purchaseType = value;
} else {
// 其他选项清空采购方式,由用户手动选择
dataForm.purchaseType = '';
}
};
// 监听采购途径变化清理所有与采购方式相关的材料字段同时如果已选择品目则重新计算entrustCenterType
@@ -1769,7 +1774,7 @@ const dataRules = reactive({
},
],
// 学校统一采购 + 采购中心审核:实施采购途径必填
implementChannel: [
implementType: [
{
validator: (_rule: any, value: string, callback: (e?: Error) => void) => {
if (!isDeptPurchase.value && isFlowEmbed.value && isPurchaseCenter.value) {
@@ -1900,8 +1905,7 @@ async function loadDetail(applyId: string | number) {
budget: detail.budget != null ? Number(detail.budget) : null,
isCentralized: detail.isCentralized != null ? String(detail.isCentralized) : '',
isSpecial: detail.isSpecial != null ? String(detail.isSpecial) : '',
purchaseMode: detail.purchaseMode != null ? String(detail.purchaseMode) : '',
implementChannel: detail.implementChannel != null ? String(detail.implementChannel) : '',
purchaseMode: detail.purchaseMode != null ? String(detail.purchaseMode) : '',
purchaseType:
detail.purchaseType === DEPT_PURCHASE_TYPE.ENTRUST_CENTER
? ''