tijiao
This commit is contained in:
@@ -21,12 +21,13 @@
|
||||
ref="formRef"
|
||||
:model="dataForm"
|
||||
:rules="dataRules"
|
||||
label-width="140px">
|
||||
label-width="120px"
|
||||
class="compact-form">
|
||||
|
||||
<!-- 第一步:基本信息 -->
|
||||
<div v-show="currentStep === 0">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="采购项目名称" prop="projectName">
|
||||
<el-input
|
||||
v-model="dataForm.projectName"
|
||||
@@ -34,7 +35,7 @@
|
||||
clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="填报日期" prop="applyDate">
|
||||
<el-date-picker
|
||||
v-model="dataForm.applyDate"
|
||||
@@ -46,8 +47,8 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="资金来源" prop="fundSource">
|
||||
<el-select
|
||||
v-model="dataForm.fundSource"
|
||||
@@ -62,19 +63,31 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item label="预算金额(元)" prop="budget">
|
||||
<el-input-number
|
||||
v-model="dataForm.budget"
|
||||
:min="0.01"
|
||||
:precision="2"
|
||||
placeholder="请输入预算金额"
|
||||
style="width: 100%" />
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="预算金额" prop="budget">
|
||||
<div class="budget-input-group">
|
||||
<el-input-number
|
||||
v-model="budgetInputValue"
|
||||
:min="0.01"
|
||||
:precision="2"
|
||||
:placeholder="getBudgetPlaceholder()"
|
||||
:controls="false"
|
||||
class="budget-input"
|
||||
@change="handleBudgetChange" />
|
||||
<el-select
|
||||
v-model="budgetUnit"
|
||||
class="budget-unit-select"
|
||||
@change="handleBudgetUnitChange">
|
||||
<el-option label="元" value="yuan" />
|
||||
<el-option label="千元" value="thousand" />
|
||||
<el-option label="万元" value="wan" />
|
||||
</el-select>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="是否集采" prop="isCentralized">
|
||||
<el-select
|
||||
v-model="dataForm.isCentralized"
|
||||
@@ -89,7 +102,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="是否特殊情况" prop="isSpecial">
|
||||
<el-select
|
||||
v-model="dataForm.isSpecial"
|
||||
@@ -105,8 +118,8 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="24" class="mb20">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24" class="mb16">
|
||||
<el-form-item label="品目编码" prop="categoryCode">
|
||||
<el-cascader
|
||||
v-model="categoryCodePath"
|
||||
@@ -126,19 +139,19 @@
|
||||
<!-- 第二步:采购详情 -->
|
||||
<div v-show="currentStep === 1">
|
||||
<!-- 分支一:部门自行采购 -->
|
||||
<div class="mb20" v-if="isDeptPurchase">
|
||||
<div class="step-title mb20">部门自行采购</div>
|
||||
<el-form-item label="采购内容" prop="projectContent" class="mb20">
|
||||
<div class="mb20" v-if="isDeptPurchase">
|
||||
<div class="step-title mb16">部门自行采购</div>
|
||||
<el-form-item label="采购内容" prop="projectContent" class="mb16">
|
||||
<el-input
|
||||
v-model="dataForm.projectContent"
|
||||
type="textarea"
|
||||
:rows="4"
|
||||
:rows="3"
|
||||
:maxlength="1000"
|
||||
show-word-limit
|
||||
placeholder="请输入采购内容(限制1000字)"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="采购方式" prop="purchaseType" class="mb20">
|
||||
<el-form-item label="采购方式" prop="purchaseType" class="mb16">
|
||||
<el-select
|
||||
v-model="dataForm.purchaseType"
|
||||
placeholder="请选择采购方式"
|
||||
@@ -158,7 +171,7 @@
|
||||
v-if="isPurchaseType(PURCHASE_TYPE_IDS.BUSINESS_NEGOTIATION)"
|
||||
label="商务洽谈表"
|
||||
prop="businessNegotiationTable"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@@ -180,7 +193,7 @@
|
||||
v-if="isPurchaseType(PURCHASE_TYPE_IDS.MARKET_PURCHASE)"
|
||||
label="市场采购纪要"
|
||||
prop="marketPurchaseMinutes"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@@ -202,7 +215,7 @@
|
||||
v-if="isPurchaseType(PURCHASE_TYPE_IDS.ONLINE_MALL)"
|
||||
label="网上商城采购相关材料"
|
||||
prop="onlineMallMaterials"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<upload-file
|
||||
v-model="dataForm.onlineMallMaterials"
|
||||
:limit="1"
|
||||
@@ -216,7 +229,7 @@
|
||||
v-if="isInquiryPurchaseType"
|
||||
label="询价模板"
|
||||
prop="inquiryTemplate"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@@ -235,7 +248,7 @@
|
||||
|
||||
<!-- 委托采购中心 -->
|
||||
<template v-if="isPurchaseType(PURCHASE_TYPE_IDS.ENTRUST_CENTER)">
|
||||
<el-form-item label="委托采购中心方式" prop="entrustCenterType" class="mb20">
|
||||
<el-form-item label="委托采购中心方式" prop="entrustCenterType" class="mb16">
|
||||
<!-- 由系统根据品目末级节点标记自动判断,不允许用户手动选择 -->
|
||||
<el-radio-group v-model="dataForm.entrustCenterType" disabled>
|
||||
<el-radio label="service_online">服务类网上商城</el-radio>
|
||||
@@ -245,7 +258,7 @@
|
||||
|
||||
<!-- 服务类网上商城:判断品目编码的第一个值是否为C -->
|
||||
<template v-if="dataForm.entrustCenterType === 'service_online' && categoryCodePath && categoryCodePath.length > 0 && categoryCodePath[0] === 'C'">
|
||||
<el-form-item label="是否有供应商" prop="hasSupplier" class="mb20">
|
||||
<el-form-item label="是否有供应商" prop="hasSupplier" class="mb16">
|
||||
<el-radio-group v-model="dataForm.hasSupplier">
|
||||
<el-radio label="1">有</el-radio>
|
||||
<el-radio label="0">无</el-radio>
|
||||
@@ -256,11 +269,11 @@
|
||||
<el-form-item
|
||||
label="供应商名称"
|
||||
prop="suppliers"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<el-input
|
||||
v-model="dataForm.suppliers"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
:rows="2"
|
||||
placeholder="请输入供应商名称,多个供应商请用逗号或分号分隔"
|
||||
maxlength="500"
|
||||
show-word-limit />
|
||||
@@ -271,7 +284,7 @@
|
||||
<el-form-item
|
||||
label="服务商城项目需求模板(直选)"
|
||||
prop="serviceDirectSelect"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@@ -292,7 +305,7 @@
|
||||
v-if="dataForm.hasSupplier === 'no'"
|
||||
label="服务商城项目需求模板(邀请比选)"
|
||||
prop="serviceInviteSelect"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@@ -315,7 +328,7 @@
|
||||
v-if="dataForm.entrustCenterType === 'other' && categoryCodePath && categoryCodePath[0] === 'A'"
|
||||
label="采购需求填报模板"
|
||||
prop="purchaseRequirementTemplate"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@@ -335,18 +348,18 @@
|
||||
|
||||
<!-- 特殊规则:5万<=金额<40万,服务类目,自动使用邀请比选模版 -->
|
||||
<template v-if="showAutoInviteSelect">
|
||||
<el-form-item label="是否有推荐供应商" prop="hasRecommendedSupplier" class="mb20">
|
||||
<el-form-item label="是否有推荐供应商" prop="hasRecommendedSupplier" class="mb16">
|
||||
<el-radio-group v-model="dataForm.hasRecommendedSupplier">
|
||||
<el-radio label="yes">有</el-radio>
|
||||
<el-radio label="no">无</el-radio>
|
||||
<el-radio label="1">有</el-radio>
|
||||
<el-radio label="0">无</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<!-- 有推荐供应商:显示推荐供应商输入框和邀请比选模板 -->
|
||||
<template v-if="dataForm.hasRecommendedSupplier === 'yes'">
|
||||
<template v-if="dataForm.hasRecommendedSupplier === '1'">
|
||||
<el-form-item
|
||||
label="推荐供应商"
|
||||
prop="recommendedSuppliers"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<el-input
|
||||
v-model="dataForm.recommendedSuppliers"
|
||||
placeholder="请输入三家供应商名称,用逗号分隔"
|
||||
@@ -358,7 +371,7 @@
|
||||
<el-form-item
|
||||
label="服务商城项目需求模板(邀请比选)"
|
||||
prop="serviceInviteSelect"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@@ -380,7 +393,7 @@
|
||||
v-if="dataForm.hasRecommendedSupplier === 'no'"
|
||||
label="服务商城项目需求模板(公开比选)"
|
||||
prop="servicePublicSelectAuto"
|
||||
class="mb20">
|
||||
class="mb16">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@@ -399,7 +412,7 @@
|
||||
</template>
|
||||
|
||||
<!-- 其他材料(zip压缩包) -->
|
||||
<el-form-item label="其他材料" prop="otherMaterials" class="mb20">
|
||||
<el-form-item label="其他材料" prop="otherMaterials" class="mb16">
|
||||
<upload-file
|
||||
v-model="dataForm.otherMaterials"
|
||||
:limit="5"
|
||||
@@ -411,203 +424,244 @@
|
||||
</div>
|
||||
|
||||
<!-- 分支二:学校统一采购 -->
|
||||
<div class="mb20" v-else >
|
||||
<div class="step-title mb20">学校统一采购</div>
|
||||
<el-form-item label="采购形式" prop="purchaseMode" class="mb20">
|
||||
<el-select
|
||||
v-model="dataForm.purchaseMode"
|
||||
placeholder="请选择采购形式"
|
||||
clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in purchaseModeSchoolList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="采购方式" prop="purchaseTypeUnion" class="mb20">
|
||||
<el-select
|
||||
v-model="dataForm.purchaseTypeUnion"
|
||||
placeholder="请选择采购方式"
|
||||
clearable
|
||||
:disabled="isAutoSelectPurchaseTypeUnion"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in purchaseTypeUnionList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<div class="mb20" v-else>
|
||||
<div class="step-title mb16">学校统一采购</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="采购形式" prop="purchaseMode">
|
||||
<el-radio-group v-model="dataForm.purchaseMode">
|
||||
<el-radio
|
||||
v-for="item in purchaseModeSchoolList"
|
||||
:key="item.value"
|
||||
:label="item.value">
|
||||
{{ item.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="采购方式" prop="purchaseTypeUnion">
|
||||
<el-select
|
||||
v-model="dataForm.purchaseTypeUnion"
|
||||
placeholder="请选择采购方式"
|
||||
clearable
|
||||
:disabled="isAutoSelectPurchaseTypeUnion"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in purchaseTypeUnionList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 业务分管处室 -->
|
||||
<el-form-item label="业务分管处室" prop="deptClassifyId" class="mb20">
|
||||
<el-select
|
||||
v-model="dataForm.deptClassifyId"
|
||||
placeholder="请选择业务分管处室"
|
||||
clearable
|
||||
filterable
|
||||
@change="handleBusinessDeptChange"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in businessDeptList"
|
||||
:key="item.id"
|
||||
:label="item.deptName"
|
||||
:value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-row :gutter="20">
|
||||
<!-- 业务分管处室 -->
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="业务分管处室" prop="deptClassifyId">
|
||||
<el-select
|
||||
v-model="dataForm.deptClassifyId"
|
||||
placeholder="请选择业务分管处室"
|
||||
clearable
|
||||
filterable
|
||||
@change="handleBusinessDeptChange"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in businessDeptList"
|
||||
:key="item.id"
|
||||
:label="item.deptName"
|
||||
:value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- 分管校领导 -->
|
||||
<el-form-item label="分管校领导" prop="schoolLeaderUserId" class="mb20">
|
||||
<el-select
|
||||
v-model="dataForm.schoolLeaderUserId"
|
||||
placeholder="请选择分管校领导"
|
||||
clearable
|
||||
filterable
|
||||
@change="handleSchoolLeaderChange"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in schoolLeaderList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.userId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 分管校领导 -->
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="分管校领导" prop="schoolLeaderUserId">
|
||||
<el-select
|
||||
v-model="dataForm.schoolLeaderUserId"
|
||||
placeholder="请选择分管校领导"
|
||||
clearable
|
||||
filterable
|
||||
@change="handleSchoolLeaderChange"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in schoolLeaderList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.userId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 金额>=30万,显示可行性论证报告和会议纪要 -->
|
||||
<template v-if="dataForm.budget && dataForm.budget >= 300000">
|
||||
<el-form-item
|
||||
label="项目可行性论证报告"
|
||||
prop="feasibilityReport"
|
||||
class="mb20">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="Download"
|
||||
@click="downloadTemplate('feasibility_report')"
|
||||
class="mb10">
|
||||
下载《项目可行性论证报告模板.doc》
|
||||
</el-button>
|
||||
<upload-file
|
||||
v-model="dataForm.feasibilityReport"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.feasibilityReport }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
<el-form-item label="会议纪要" prop="meetingMinutes" class="mb20">
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutes"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutes }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item
|
||||
label="项目可行性论证报告"
|
||||
prop="feasibilityReport">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="Download"
|
||||
@click="downloadTemplate('feasibility_report')"
|
||||
class="mb10">
|
||||
下载《项目可行性论证报告模板.doc》
|
||||
</el-button>
|
||||
<upload-file
|
||||
v-model="dataForm.feasibilityReport"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.feasibilityReport }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- 通用会议纪要:只有在没有选择特殊情况时才显示 -->
|
||||
<el-col
|
||||
v-if="!isUrgentSpecial && !isSpecialType('2') && !isSpecialType('3')"
|
||||
:span="12"
|
||||
class="mb16">
|
||||
<el-form-item
|
||||
label="会议纪要"
|
||||
prop="meetingMinutes">
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutes"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutes }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<!-- 特殊情况:紧急 -->
|
||||
<template v-if="isUrgentSpecial">
|
||||
<el-form-item label="会议纪要" prop="meetingMinutesUrgent" class="mb20">
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutesUrgent"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesUrgent }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="会议纪要" prop="meetingMinutesUrgent">
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutesUrgent"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesUrgent }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<!-- 特殊情况:单一来源 -->
|
||||
<template v-if="isSpecialType('2')">
|
||||
<el-form-item
|
||||
label="单一来源论专家证附件"
|
||||
prop="singleSourceProof"
|
||||
class="mb20">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="Download"
|
||||
@click="downloadTemplate('single_source')"
|
||||
class="mb10">
|
||||
下载《单一来源论专家证附件.docx》
|
||||
</el-button>
|
||||
<upload-file
|
||||
v-model="dataForm.singleSourceProof"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.singleSourceProof }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
<el-form-item label="会议纪要" prop="meetingMinutesSingle" class="mb20">
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutesSingle"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesSingle }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item
|
||||
label="单一来源论专家证附件"
|
||||
prop="singleSourceProof">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="Download"
|
||||
@click="downloadTemplate('single_source')"
|
||||
class="mb10">
|
||||
下载《单一来源论专家证附件.docx》
|
||||
</el-button>
|
||||
<upload-file
|
||||
v-model="dataForm.singleSourceProof"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.singleSourceProof }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="会议纪要" prop="meetingMinutesSingle">
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutesSingle"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesSingle }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<!-- 特殊情况:进口 -->
|
||||
<template v-if="isSpecialType('3')">
|
||||
<el-form-item
|
||||
label="进口产品申请及专家论证意见表"
|
||||
prop="importApplication"
|
||||
class="mb20">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="Download"
|
||||
@click="downloadTemplate('import_application')"
|
||||
class="mb10">
|
||||
下载《进口产品申请及专家论证意见表.doc》
|
||||
</el-button>
|
||||
<upload-file
|
||||
v-model="dataForm.importApplication"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.importApplication }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
<el-form-item label="会议纪要" prop="meetingMinutesImport" class="mb20">
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutesImport"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesImport }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item
|
||||
label="进口产品申请及专家论证意见表"
|
||||
prop="importApplication">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="Download"
|
||||
@click="downloadTemplate('import_application')"
|
||||
class="mb10">
|
||||
下载《进口产品申请及专家论证意见表.doc》
|
||||
</el-button>
|
||||
<upload-file
|
||||
v-model="dataForm.importApplication"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.importApplication }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="会议纪要" prop="meetingMinutesImport">
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutesImport"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesImport }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<!-- 特殊规则:5万<=金额<40万,服务类目(isMallService=1、isProjectService=1),自动使用邀请比选模版 -->
|
||||
<template v-if="showAutoInviteSelectSchool">
|
||||
<el-form-item label="是否有推荐供应商" prop="hasRecommendedSupplierSchool" class="mb20">
|
||||
<el-radio-group v-model="dataForm.hasRecommendedSupplierSchool">
|
||||
<el-radio label="yes">有</el-radio>
|
||||
<el-radio label="no">无</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<!-- 有推荐供应商:显示推荐供应商输入框 -->
|
||||
<el-form-item
|
||||
v-if="dataForm.hasRecommendedSupplierSchool === 'yes'"
|
||||
label="推荐供应商"
|
||||
prop="recommendedSuppliersSchool"
|
||||
class="mb20">
|
||||
<el-input
|
||||
v-model="dataForm.recommendedSuppliersSchool"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
placeholder="请输入三家供应商名称,用逗号或分号分隔"
|
||||
clearable />
|
||||
<div class="template-note mt5">
|
||||
<el-text type="info" size="small">请输入三家供应商名称,用逗号或分号分隔</el-text>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="是否有推荐供应商" prop="hasRecommendedSupplierSchool">
|
||||
<el-radio-group v-model="dataForm.hasRecommendedSupplierSchool">
|
||||
<el-radio label="yes">有</el-radio>
|
||||
<el-radio label="no">无</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- 有推荐供应商:显示推荐供应商输入框 -->
|
||||
<el-col
|
||||
v-if="dataForm.hasRecommendedSupplierSchool === 'yes'"
|
||||
:span="12"
|
||||
class="mb16">
|
||||
<el-form-item
|
||||
label="推荐供应商"
|
||||
prop="recommendedSuppliersSchool">
|
||||
<el-input
|
||||
v-model="dataForm.recommendedSuppliersSchool"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
placeholder="请输入三家供应商名称,用逗号或分号分隔"
|
||||
clearable />
|
||||
<div class="template-note mt5">
|
||||
<el-text type="info" size="small">请输入三家供应商名称,用逗号或分号分隔</el-text>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<!-- 需求文件 -->
|
||||
<el-form-item label="需求文件" :prop="getRequirementFileProp()" class="mb20">
|
||||
<el-form-item label="需求文件" :prop="getRequirementFileProp()" class="mb16">
|
||||
<!-- 特殊规则:5万<=金额<40万,服务类目(isMallService=1、isProjectService=1),自动使用邀请比选模版 -->
|
||||
<template v-if="showAutoInviteSelectSchool">
|
||||
<!-- 有推荐供应商:显示邀请比选模板 -->
|
||||
@@ -691,38 +745,45 @@
|
||||
</template>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 金额>=100万,政府采购意向表 -->
|
||||
<el-form-item
|
||||
v-if="dataForm.budget && dataForm.budget >= 1000000"
|
||||
label="政府采购意向申请表"
|
||||
prop="governmentPurchaseIntent"
|
||||
class="mb20">
|
||||
<upload-file
|
||||
v-model="dataForm.governmentPurchaseIntent"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.governmentPurchaseIntent }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
<el-row :gutter="20">
|
||||
<!-- 金额>=100万,政府采购意向表 -->
|
||||
<el-col
|
||||
v-if="dataForm.budget && dataForm.budget >= 1000000"
|
||||
:span="12"
|
||||
class="mb16">
|
||||
<el-form-item
|
||||
label="政府采购意向申请表"
|
||||
prop="governmentPurchaseIntent">
|
||||
<upload-file
|
||||
v-model="dataForm.governmentPurchaseIntent"
|
||||
:limit="5"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.governmentPurchaseIntent }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- 其他材料(zip压缩包) -->
|
||||
<el-form-item label="其他材料" prop="otherMaterials" class="mb20">
|
||||
<upload-file
|
||||
v-model="dataForm.otherMaterials"
|
||||
:limit="5"
|
||||
:file-type="['zip']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.otherMaterials }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
<div class="template-note">支持上传zip格式的压缩包文件</div>
|
||||
</el-form-item>
|
||||
<!-- 其他材料(zip压缩包) -->
|
||||
<el-col :span="12" class="mb16">
|
||||
<el-form-item label="其他材料" prop="otherMaterials">
|
||||
<upload-file
|
||||
v-model="dataForm.otherMaterials"
|
||||
:limit="5"
|
||||
:file-type="['zip']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.otherMaterials }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload" />
|
||||
<div class="template-note">支持上传zip格式的压缩包文件</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-form-item label="备注" prop="remark" v-if="currentStep === 1">
|
||||
<el-form-item label="备注" prop="remark" v-if="currentStep === 1" class="mb16">
|
||||
<el-input
|
||||
v-model="dataForm.remark"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
:rows="2"
|
||||
placeholder="请输入备注"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
@@ -846,6 +907,10 @@ const businessDeptList = ref<any[]>([]);
|
||||
const schoolLeaderList = ref<any[]>([]);
|
||||
const loading = ref(false);
|
||||
|
||||
// 预算金额输入相关
|
||||
const budgetUnit = ref<'yuan' | 'thousand' | 'wan'>('yuan');
|
||||
const budgetInputValue = ref<number | null>(null);
|
||||
|
||||
// 采购方式ID常量
|
||||
const PURCHASE_TYPE_IDS = {
|
||||
BUSINESS_NEGOTIATION: '77b429c146fc9e12ba4c5573da19ad70', // 商务洽谈
|
||||
@@ -1635,7 +1700,11 @@ const handleSubmit = async () => {
|
||||
router.push('/finance/purchasingrequisition');
|
||||
}
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg || '提交失败');
|
||||
// 全局拦截器已经显示了错误提示,这里不需要再次显示
|
||||
// 只有当错误没有 msg 时才显示默认错误提示
|
||||
if (!err?.msg) {
|
||||
useMessage().error('提交失败');
|
||||
}
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
@@ -1698,7 +1767,11 @@ const handleTempStore = async () => {
|
||||
router.push('/finance/purchasingrequisition');
|
||||
}
|
||||
} catch (err: any) {
|
||||
useMessage().error(err.msg || '暂存失败');
|
||||
// 全局拦截器已经显示了错误提示,这里不需要再次显示
|
||||
// 只有当错误没有 msg 时才显示默认错误提示
|
||||
if (!err?.msg) {
|
||||
useMessage().error('暂存失败');
|
||||
}
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
@@ -1718,6 +1791,83 @@ const setCategoryCodePath = () => {
|
||||
}
|
||||
};
|
||||
|
||||
// 预算金额单位转换
|
||||
const handleBudgetChange = (value: number | null) => {
|
||||
if (value === null || value === undefined) {
|
||||
dataForm.budget = null;
|
||||
return;
|
||||
}
|
||||
|
||||
// 根据单位转换为元
|
||||
switch (budgetUnit.value) {
|
||||
case 'yuan':
|
||||
dataForm.budget = value;
|
||||
break;
|
||||
case 'thousand':
|
||||
dataForm.budget = value * 1000;
|
||||
break;
|
||||
case 'wan':
|
||||
dataForm.budget = value * 10000;
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
// 预算金额单位变化处理
|
||||
const handleBudgetUnitChange = (unit: 'yuan' | 'thousand' | 'wan') => {
|
||||
if (!dataForm.budget) {
|
||||
budgetInputValue.value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
// 根据新单位转换显示值
|
||||
switch (unit) {
|
||||
case 'yuan':
|
||||
budgetInputValue.value = dataForm.budget;
|
||||
break;
|
||||
case 'thousand':
|
||||
budgetInputValue.value = dataForm.budget / 1000;
|
||||
break;
|
||||
case 'wan':
|
||||
budgetInputValue.value = dataForm.budget / 10000;
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
// 获取预算金额输入框的 placeholder
|
||||
const getBudgetPlaceholder = (): string => {
|
||||
switch (budgetUnit.value) {
|
||||
case 'yuan':
|
||||
return '请输入金额';
|
||||
case 'thousand':
|
||||
return '请输入金额(千元)';
|
||||
case 'wan':
|
||||
return '请输入金额(万元)';
|
||||
default:
|
||||
return '请输入金额';
|
||||
}
|
||||
};
|
||||
|
||||
// 监听 dataForm.budget 变化,同步到 budgetInputValue
|
||||
watch(() => dataForm.budget, (newVal) => {
|
||||
if (newVal === null || newVal === undefined) {
|
||||
budgetInputValue.value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
// 根据当前单位转换显示值
|
||||
switch (budgetUnit.value) {
|
||||
case 'yuan':
|
||||
budgetInputValue.value = newVal;
|
||||
break;
|
||||
case 'thousand':
|
||||
budgetInputValue.value = newVal / 1000;
|
||||
break;
|
||||
case 'wan':
|
||||
budgetInputValue.value = newVal / 10000;
|
||||
break;
|
||||
}
|
||||
}, { immediate: true });
|
||||
|
||||
// 监听 categoryTreeData 变化,设置回显路径
|
||||
watch(() => categoryTreeData.value, () => {
|
||||
if (dataForm.categoryCode) {
|
||||
@@ -1780,6 +1930,11 @@ onMounted(async () => {
|
||||
dataForm.isSpecial = '0';
|
||||
}
|
||||
|
||||
// 初始化预算金额显示值
|
||||
if (dataForm.budget) {
|
||||
budgetInputValue.value = dataForm.budget;
|
||||
}
|
||||
|
||||
// 如果有 categoryCode,设置回显路径
|
||||
if (dataForm.categoryCode) {
|
||||
setCategoryCodePath();
|
||||
@@ -1793,6 +1948,9 @@ onMounted(async () => {
|
||||
.mb20 {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.mb16 {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.mb10 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
@@ -1805,18 +1963,94 @@ onMounted(async () => {
|
||||
color: var(--el-text-color-primary);
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 1px solid var(--el-border-color-light);
|
||||
margin-bottom: 20px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
/* 紧凑表单样式 */
|
||||
.compact-form {
|
||||
:deep(.el-form-item) {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
:deep(.el-form-item__label) {
|
||||
padding-right: 12px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
:deep(.el-input__inner),
|
||||
:deep(.el-textarea__inner) {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.template-note {
|
||||
margin-top: 5px;
|
||||
color: var(--el-text-color-secondary);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
/* 预算金额输入组样式 - 并排显示,无缝连接 */
|
||||
.budget-input-group {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
width: 100%;
|
||||
transition: all 0.2s ease;
|
||||
|
||||
.budget-input {
|
||||
flex: 1;
|
||||
|
||||
:deep(.el-input__wrapper) {
|
||||
border-radius: 4px 0 0 4px;
|
||||
border-right: none;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
:deep(.el-input__wrapper:hover) {
|
||||
z-index: 1;
|
||||
border-color: var(--el-color-primary);
|
||||
box-shadow: 0 0 0 1px var(--el-color-primary-light-7);
|
||||
}
|
||||
|
||||
:deep(.el-input__wrapper.is-focus) {
|
||||
z-index: 1;
|
||||
border-color: var(--el-color-primary);
|
||||
box-shadow: 0 0 0 1px var(--el-color-primary-light-7);
|
||||
}
|
||||
}
|
||||
|
||||
.budget-unit-select {
|
||||
width: 100px;
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
|
||||
:deep(.el-input__wrapper) {
|
||||
border-radius: 0 4px 4px 0;
|
||||
border-left: 1px solid var(--el-border-color);
|
||||
margin-left: -1px;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
:deep(.el-input__wrapper:hover) {
|
||||
z-index: 1;
|
||||
border-color: var(--el-color-primary);
|
||||
box-shadow: 0 0 0 1px var(--el-color-primary-light-7);
|
||||
}
|
||||
|
||||
:deep(.el-input__wrapper.is-focus) {
|
||||
z-index: 1;
|
||||
border-color: var(--el-color-primary);
|
||||
box-shadow: 0 0 0 1px var(--el-color-primary-light-7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 10px;
|
||||
padding-top: 20px;
|
||||
padding-top: 16px;
|
||||
border-top: 1px solid var(--el-border-color-light);
|
||||
margin-top: 16px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user