1
This commit is contained in:
@@ -172,7 +172,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { reactive, watch } from 'vue';
|
||||
import { reactive, watch, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { FolderOpened, OfficeBuilding } from '@element-plus/icons-vue';
|
||||
import { investmentProjectsPlanGetById, investmentProjectsPlanPage } from '/@/api/investment/investmentManagement';
|
||||
@@ -205,6 +205,7 @@ const defaultForm: ProjectTask = {
|
||||
executor: '',
|
||||
taskStartDate: new Date().toISOString().substring(0, 10),
|
||||
taskEndDate: new Date().toISOString().substring(0, 10),
|
||||
deptId: ''
|
||||
};
|
||||
|
||||
const formData = reactive<ProjectTask>({ ...defaultForm, ...props.modelValue });
|
||||
|
||||
@@ -452,8 +452,8 @@
|
||||
</div>
|
||||
<el-table :data="formData.investmentProjects" border style="width: 100%" class="annual-investment-table">
|
||||
<el-table-column width="60" align="center">
|
||||
<template>
|
||||
<el-radio v-model="selectedAnnualInvestmentIndex" />
|
||||
<template #default="{ $index }">
|
||||
<el-radio v-model="selectedAnnualInvestmentIndex" :value="$index" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.index')" width="60" align="center">
|
||||
@@ -488,9 +488,9 @@
|
||||
'(万元)' }}</span>
|
||||
</template>
|
||||
<template #default="{ row }">
|
||||
<el-input-number :precision="2" :controls="false" :min="0" :value-on-clear="null"
|
||||
v-model="row.plannedPaymentAmount" :placeholder="t('planApply.placeholder.input')"
|
||||
:class="{ 'is-error': row.plannedPaymentAmount === null }" />
|
||||
<el-input-number :precision="2" :controls="false" readonly
|
||||
:model-value="calculateRowPaymentLimit(row)"
|
||||
:placeholder="t('planApply.placeholder.input')" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.fundingSources')" align="center">
|
||||
@@ -659,7 +659,8 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<ProjectNameList :visible="visible" @emit:cancel="visible = false" @emit:confirm="projectNameFn" />
|
||||
<ProjectNameList :visible="visible" :isSelect="false" :selectedId="''" @emit:cancel="visible = false"
|
||||
@emit:confirm="projectNameFn" />
|
||||
<LibrarySelect v-model="librarySelectVisible" @select="handleLibrarySelect" />
|
||||
</div>
|
||||
</template>
|
||||
@@ -903,6 +904,18 @@ const safeParseFloat = (value: string | number | null): number => {
|
||||
const parsed = typeof value === 'string' ? parseFloat(value) : value;
|
||||
return isNaN(parsed) ? 0 : parsed;
|
||||
};
|
||||
|
||||
// 计算表格每行的计划支付额度 = 自有资金 + 对外募集资金 + 财政资金 + 其他资金
|
||||
const calculateRowPaymentLimit = (row: InvestmentProjects): number => {
|
||||
const selfFunding = safeParseFloat(row.selfFunding);
|
||||
const externalFunding = safeParseFloat(row.externalFunding);
|
||||
const fiscalFunding = safeParseFloat(row.fiscalFunding);
|
||||
const otherFunding = safeParseFloat(row.otherFunding);
|
||||
const total = selfFunding + externalFunding + fiscalFunding + otherFunding;
|
||||
// 同步更新 row.plannedPaymentAmount 以便后续计算汇总
|
||||
row.plannedPaymentAmount = total;
|
||||
return total;
|
||||
};
|
||||
// 监听投资计划数据变化
|
||||
watch(() => formData.value.investmentProjects, (newValue) => {
|
||||
if (!year.value) return;
|
||||
@@ -1048,7 +1061,46 @@ const validateForm = async () => {
|
||||
return Promise.resolve(true);
|
||||
};
|
||||
const projectNameFn = (row: any) => {
|
||||
Object.assign(formData.value.entity, row);
|
||||
// 映射 API 返回的字段名到表单字段名
|
||||
const mappedData = {
|
||||
...row,
|
||||
// 资金相关字段映射
|
||||
ownedFunds: row.enterpriseOwnFunds ?? row.ownedFunds ?? '',
|
||||
financialFunds: row.governmentInvestmentFunds ?? row.financialFunds ?? '',
|
||||
externalRaisedCapital: row.externalRaisedFunds ?? row.externalRaisedCapital ?? '',
|
||||
otherFunds: row.otherFunds ?? '',
|
||||
// 计划投资年度信息映射
|
||||
planInvestmentYear: row.planInvestmentYear ?? '',
|
||||
planImageQuota: row.planImageQuota ?? '',
|
||||
planPaymentLimit: row.planPaymentLimit ?? '',
|
||||
governmentFundSourceDesc: row.governmentFundSourceDesc ?? '',
|
||||
otherFundSourceDesc: row.otherFundSourceDesc ?? '',
|
||||
// 主业相关字段映射
|
||||
isMainBusiness: row.isMainBusiness ?? '',
|
||||
mainBusinessTypes: row.mainBusinessTypes ?? '',
|
||||
mainBusinessCode: row.mainBusinessCode ?? '',
|
||||
// 项目信息字段映射
|
||||
projectInvestmentDirection: row.projectInvestmentDirection ?? '',
|
||||
investmentDirectionSegmentation: row.investmentDirectionSegmentation ?? '',
|
||||
isStrategicEmergingIndustries: row.isStrategicEmergingIndustries ?? '',
|
||||
urbanStrategy: row.urbanStrategy ?? '',
|
||||
isManufacturingIndustry: row.isManufacturingIndustry ?? '',
|
||||
majorInvestmentProjects: row.majorInvestmentProjects ?? '',
|
||||
// 决策信息字段映射
|
||||
decisionType: row.decisionType ?? '',
|
||||
isProjectApprovalCompleted: row.isProjectApprovalCompleted ?? '',
|
||||
projectApprovalFileNo: row.projectApprovalFileNo ?? '',
|
||||
projectApprovalFileInfo: row.projectApprovalFileInfo ?? '',
|
||||
isDecisionProcedureCompleted: row.isDecisionProcedureCompleted ?? '',
|
||||
decisionProcedureFileNo: row.decisionProcedureFileNo ?? '',
|
||||
decisionFileInfo: row.decisionFileInfo ?? '',
|
||||
// 其他字段映射
|
||||
projectDesc: row.projectDesc ?? '',
|
||||
progressDesc: row.progressDesc ?? '',
|
||||
shareholdingRatio: row.shareholdingRatio ?? '',
|
||||
isControllingStake: row.isControllingStake ?? '',
|
||||
};
|
||||
Object.assign(formData.value.entity, mappedData);
|
||||
visible.value = false;
|
||||
};
|
||||
const handleLibrarySelect = (row: any) => {
|
||||
|
||||
@@ -1,189 +1,231 @@
|
||||
<template>
|
||||
<div class="project-plan-apply-form border-r border-[#e5e7eb]">
|
||||
<FlowFormView :process-instance-id="processInstanceId"/>
|
||||
<FlowFormView :process-instance-id="processInstanceId" />
|
||||
<div style="display: flex;justify-content: space-between;align-items: center">
|
||||
<div class="form-section-title">
|
||||
{{ t('planApply.applySection.title') }}
|
||||
</div>
|
||||
<div class="page-title">{{ title ? title : '' }}</div>
|
||||
<div class="page-unit">
|
||||
{{ t('planApply.detail.unitLabel') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-section-title">
|
||||
{{ t('planApply.applySection.title') }}
|
||||
</div>
|
||||
<div class="page-title">{{ title ? title : '' }}</div>
|
||||
<div class="page-unit">
|
||||
{{ t('planApply.detail.unitLabel') }}
|
||||
</div>
|
||||
</div>
|
||||
<el-form :model="formData" label-width="165px" class="plan-form" :rules="rules" ref="useForm">
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('planApply.applySection.projectName')" required prop="entity.projectName">
|
||||
<template #label>
|
||||
<span style="color: var(--el-text-color-regular)">{{t('planApply.applySection.projectName')}}</span>
|
||||
</template>
|
||||
<span>{{formData.entity.projectName}}</span>
|
||||
<template #label>
|
||||
<span
|
||||
style="color: var(--el-text-color-regular)">{{ t('planApply.applySection.projectName') }}</span>
|
||||
</template>
|
||||
<span>{{ formData.entity.projectName }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.groupName')" required prop="entity.groupCompany">
|
||||
<template #label>
|
||||
<span style="color: var(--el-text-color-regular)">{{t('planApply.applySection.groupName')}}</span>
|
||||
</template>
|
||||
<span>{{formData.entity.groupCompany}}</span>
|
||||
<template #label>
|
||||
<span
|
||||
style="color: var(--el-text-color-regular)">{{ t('planApply.applySection.groupName') }}</span>
|
||||
</template>
|
||||
<span>{{ formData.entity.groupCompany }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.projectNature')">
|
||||
<span>{{projectNatureOptions.find((item:Enums) => item.value === formData.entity.projectNature)?.label}}</span>
|
||||
<span>{{projectNatureOptions.find((item: Enums) => item.value ===
|
||||
formData.entity.projectNature)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.projectMainUnit')" required prop="entity.projectMainEntity">
|
||||
<span>{{formData.entity.projectMainEntity}}</span>
|
||||
<el-form-item :label="t('planApply.applySection.projectMainUnit')" required
|
||||
prop="entity.projectMainEntity">
|
||||
<span>{{ formData.entity.projectMainEntity }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.projectOwnerUnit')">
|
||||
<span>{{formData.entity.projectOwnerUnit}}</span>
|
||||
<span>{{ formData.entity.projectOwnerUnit }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.investmentCategory')" required prop="entity.investmentCategory">
|
||||
<template #label>
|
||||
<span style="color: var(--el-text-color-regular)">{{t('planApply.applySection.investmentCategory')}}</span>
|
||||
</template>
|
||||
<span>{{investmentCategoryOptions.find((item:Enums) => item.value === formData.entity.investmentCategory)?.label}}</span>
|
||||
<el-form-item :label="t('planApply.applySection.investmentCategory')" required
|
||||
prop="entity.investmentCategory">
|
||||
<template #label>
|
||||
<span
|
||||
style="color: var(--el-text-color-regular)">{{ t('planApply.applySection.investmentCategory') }}</span>
|
||||
</template>
|
||||
<span>{{investmentCategoryOptions.find((item: Enums) => item.value ===
|
||||
formData.entity.investmentCategory)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.investmentType')" required prop="entity.investmentArea">
|
||||
<template #label>
|
||||
<span style="color: var(--el-text-color-regular)">{{t('planApply.applySection.investmentType')}}</span>
|
||||
</template>
|
||||
<span>{{investmentAreaOptions.find((item:Enums) => item.value ===formData.entity.investmentArea)?.label}}</span>
|
||||
<el-form-item :label="t('planApply.applySection.investmentType')" required
|
||||
prop="entity.investmentArea">
|
||||
<template #label>
|
||||
<span
|
||||
style="color: var(--el-text-color-regular)">{{ t('planApply.applySection.investmentType') }}</span>
|
||||
</template>
|
||||
<span>{{investmentAreaOptions.find((item: Enums) => item.value
|
||||
=== formData.entity.investmentArea)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.projectAddress')" required prop="entity.projectAddress">
|
||||
<template #label>
|
||||
<span style="color: var(--el-text-color-regular)">{{t('planApply.applySection.projectAddress')}}</span>
|
||||
</template>
|
||||
<span>{{formData.entity.projectAddress}}</span>
|
||||
<el-form-item :label="t('planApply.applySection.projectAddress')" required
|
||||
prop="entity.projectAddress">
|
||||
<template #label>
|
||||
<span
|
||||
style="color: var(--el-text-color-regular)">{{ t('planApply.applySection.projectAddress') }}</span>
|
||||
</template>
|
||||
<span>{{ formData.entity.projectAddress }}</span>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.projectDetailAddress')" required prop="entity.projectAddressDetail">
|
||||
<template #label>
|
||||
<span style="color: var(--el-text-color-regular)">{{t('planApply.applySection.projectDetailAddress')}}</span>
|
||||
</template>
|
||||
<span>{{formData.entity.projectAddressDetail}}</span>
|
||||
<el-form-item :label="t('planApply.applySection.projectDetailAddress')" required
|
||||
prop="entity.projectAddressDetail">
|
||||
<template #label>
|
||||
<span
|
||||
style="color: var(--el-text-color-regular)">{{ t('planApply.applySection.projectDetailAddress') }}</span>
|
||||
</template>
|
||||
<span>{{ formData.entity.projectAddressDetail }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.projectDirection')" required prop="entity.projectInvestmentDirection">
|
||||
<span>{{formData.entity.projectInvestmentDirection}}</span>
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.projectDirection')" required
|
||||
prop="entity.projectInvestmentDirection">
|
||||
<span>{{ formData.entity.projectInvestmentDirection }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.directionSubdivision')" required prop="entity.investmentDirectionSegmentation">
|
||||
<template #label>
|
||||
<span style="color: var(--el-text-color-regular)">{{t('reserveRegistration.basicInfo.directionSubdivision')}}</span>
|
||||
</template>
|
||||
<span>{{projectDirectionDetailsOptions.find((item:Enums) => item.value ===formData.entity.investmentDirectionSegmentation)?.label}}</span>
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.directionSubdivision')" required
|
||||
prop="entity.investmentDirectionSegmentation">
|
||||
<template #label>
|
||||
<span
|
||||
style="color: var(--el-text-color-regular)">{{ t('reserveRegistration.basicInfo.directionSubdivision') }}</span>
|
||||
</template>
|
||||
<span>{{projectDirectionDetailsOptions.find((item: Enums) => item.value
|
||||
=== formData.entity.investmentDirectionSegmentation)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.projectSource')" required prop="entity.projectSource">
|
||||
<template #label>
|
||||
<span style="color: var(--el-text-color-regular)">{{t('reserveRegistration.basicInfo.projectSource')}}</span>
|
||||
</template>
|
||||
<span>{{projectSourceOptions.find((item:Enums) => item.value === formData.entity.projectSource)?.label}}</span>
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.projectSource')" required
|
||||
prop="entity.projectSource">
|
||||
<template #label>
|
||||
<span
|
||||
style="color: var(--el-text-color-regular)">{{ t('reserveRegistration.basicInfo.projectSource') }}</span>
|
||||
</template>
|
||||
<span>{{projectSourceOptions.find((item: Enums) => item.value ===
|
||||
formData.entity.projectSource)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.constructionNature')" required prop="entity.constructionNature">
|
||||
<template #label>
|
||||
<span style="color: var(--el-text-color-regular)">{{t('planApply.applySection.constructionNature')}}</span>
|
||||
</template>
|
||||
<span>{{constructionNatureOptions.find((item:Enums) => item.value === formData.entity.constructionNature)?.label}}</span>
|
||||
<el-form-item :label="t('planApply.applySection.constructionNature')" required
|
||||
prop="entity.constructionNature">
|
||||
<template #label>
|
||||
<span
|
||||
style="color: var(--el-text-color-regular)">{{ t('planApply.applySection.constructionNature') }}</span>
|
||||
</template>
|
||||
<span>{{constructionNatureOptions.find((item: Enums) => item.value ===
|
||||
formData.entity.constructionNature)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.majorInvestmentProject')" required prop="entity.majorInvestmentProjects">
|
||||
<span>{{formData.entity.majorInvestmentProjects}}</span>
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.majorInvestmentProject')" required
|
||||
prop="entity.majorInvestmentProjects">
|
||||
<span>{{ formData.entity.majorInvestmentProjects }}</span>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.keyProject')" required prop="entity.keyProject">
|
||||
<span>{{projectImportantOptions.find((item:Enums) => item.value === formData.entity.keyProject)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span=" 12">
|
||||
<el-form-item :label="t('planApply.applySection.isWithinMainBusiness')" required prop="entity.isMainBusiness">
|
||||
<span>{{formData.entity.isMainBusiness == t('planApply.common.yes') ? t('planApply.common.yes') : t('planApply.common.no')}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.mainBusinessType')" :required="formData.entity.isMainBusiness === t('planApply.common.yes')" prop="entity.mainBusinessTypes">
|
||||
<span>{{mainBusinessOptions.find((item:Enums) => item.value === formData.entity.mainBusinessTypes)?.label}}</span>
|
||||
<span>{{projectImportantOptions.find((item: Enums) => item.value ===
|
||||
formData.entity.keyProject)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.mainBusinessCode')" required prop="entity.mainBusinessCode">
|
||||
<span>{{formData.entity.mainBusinessTypes}}</span>
|
||||
<el-form-item :label="t('planApply.applySection.isWithinMainBusiness')" required
|
||||
prop="entity.isMainBusiness">
|
||||
<span>{{ formData.entity.isMainBusiness == t('planApply.common.yes') ? t('planApply.common.yes')
|
||||
:
|
||||
t('planApply.common.no')}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.isManufacturing')" required prop="entity.isManufacturingIndustry">
|
||||
<span>{{formData.entity.isManufacturingIndustry == t('planApply.common.yes') ? t('planApply.common.yes') : t('planApply.common.no')}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.strategicEmergingIndustry')" required prop="entity.isStrategicEmergingIndustries">
|
||||
<span>{{strategicIndustryOptions.find((item:Enums) => item.value === formData.entity.isStrategicEmergingIndustries)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.cityStrategy')" required prop="entity.urbanStrategy">
|
||||
<span>{{cityStrategyOptions.find((item:Enums) => item.value === formData.entity.urbanStrategy)?.label}}</span>
|
||||
<el-form-item :label="t('planApply.applySection.mainBusinessType')"
|
||||
:required="formData.entity.isMainBusiness === t('planApply.common.yes')"
|
||||
prop="entity.mainBusinessTypes">
|
||||
<span>{{mainBusinessOptions.find((item: Enums) => item.value ===
|
||||
formData.entity.mainBusinessTypes)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.projectImplementationStart')" required prop="entity.projectStartTime">
|
||||
<span>{{formData.entity.projectStartTime}}</span>
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.mainBusinessCode')" required
|
||||
prop="entity.mainBusinessCode">
|
||||
<span>{{ formData.entity.mainBusinessTypes }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.projectImplementationEnd')" required prop="entity.projectEndTime">
|
||||
<span>{{formData.entity.projectEndTime}}</span>
|
||||
<el-form-item :label="t('planApply.applySection.isManufacturing')" required
|
||||
prop="entity.isManufacturingIndustry">
|
||||
<span>{{ formData.entity.isManufacturingIndustry == t('planApply.common.yes') ?
|
||||
t('planApply.common.yes') :
|
||||
t('planApply.common.no')}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.strategicEmergingIndustry')" required
|
||||
prop="entity.isStrategicEmergingIndustries">
|
||||
<span>{{strategicIndustryOptions.find((item: Enums) => item.value ===
|
||||
formData.entity.isStrategicEmergingIndustries)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.cityStrategy')" required
|
||||
prop="entity.urbanStrategy">
|
||||
<span>{{cityStrategyOptions.find((item: Enums) => item.value ===
|
||||
formData.entity.urbanStrategy)?.label}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.projectImplementationStart')" required
|
||||
prop="entity.projectStartTime">
|
||||
<span>{{ formData.entity.projectStartTime }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.applySection.projectImplementationEnd')" required
|
||||
prop="entity.projectEndTime">
|
||||
<span>{{ formData.entity.projectEndTime }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -194,15 +236,17 @@
|
||||
<div class="panel-title">{{ t('planApply.planInvestment.currentYearTotalTitle') }}</div>
|
||||
<div style="flex: 1;">
|
||||
<el-form-item style="height: 82px;" :label="t('planApply.planInvestment.planYear')">
|
||||
<span>{{formData.entity.planInvestmentYear}}</span>
|
||||
<span>{{ formData.entity.planInvestmentYear }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item style="height: 82px;" :label="t('planApply.planInvestment.plannedImageQuota')"
|
||||
required prop="entity.planImageQuota">
|
||||
<span>{{formData.entity.planImageQuota}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<span>{{ formData.entity.planImageQuota }}{{ t('planApply.investmentEstimate.unitSuffix')
|
||||
}}</span>
|
||||
</el-form-item>
|
||||
<el-form-item style="height: 82px;" :label="t('planApply.planInvestment.annualPlanPayment')"
|
||||
required prop="entity.planPaymentLimit">
|
||||
<span>{{formData.entity.planPaymentLimit}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<span>{{ formData.entity.planPaymentLimit }}{{
|
||||
t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
@@ -211,24 +255,33 @@
|
||||
<div class="plan-investment-panel right-panel">
|
||||
<div class="panel-title">{{ t('planApply.planInvestment.currentYearFundingTitle') }}</div>
|
||||
<div style="flex: 1;">
|
||||
<el-form-item :label="t('planApply.investmentEstimate.capitalFunding')" required prop="entity.ownedFunds">
|
||||
<span>{{formData.entity.ownedFunds}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<el-form-item :label="t('planApply.investmentEstimate.capitalFunding')" required
|
||||
prop="entity.ownedFunds">
|
||||
<span>{{ formData.entity.ownedFunds }}{{ t('planApply.investmentEstimate.unitSuffix')
|
||||
}}</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('planApply.investmentEstimate.financialFunding')" required prop="entity.financialFunds">
|
||||
<span>{{formData.entity.financialFunds}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<el-form-item :label="t('planApply.investmentEstimate.financialFunding')" required
|
||||
prop="entity.financialFunds">
|
||||
<span>{{ formData.entity.financialFunds }}{{ t('planApply.investmentEstimate.unitSuffix')
|
||||
}}</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('planApply.investmentEstimate.externalRaisedFunds')" required prop="entity.externalRaisedCapital">
|
||||
<el-form-item :label="t('planApply.investmentEstimate.externalRaisedFunds')" required
|
||||
prop="entity.externalRaisedCapital">
|
||||
|
||||
<span>{{formData.entity.externalRaisedCapital}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<span>{{ formData.entity.externalRaisedCapital }}{{
|
||||
t('planApply.investmentEstimate.unitSuffix')
|
||||
}}</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('planApply.investmentEstimate.otherFunding')" required prop="entity.otherFunds">
|
||||
<span>{{formData.entity.otherFunds}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<el-form-item :label="t('planApply.investmentEstimate.otherFunding')" required
|
||||
prop="entity.otherFunds">
|
||||
<span>{{ formData.entity.otherFunds }}{{ t('planApply.investmentEstimate.unitSuffix')
|
||||
}}</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('planApply.investmentEstimate.financialFundingDescription')">
|
||||
<span>{{formData.entity.governmentFundSourceDesc}}</span>
|
||||
<span>{{ formData.entity.governmentFundSourceDesc }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('planApply.investmentEstimate.otherFundingDescription')">
|
||||
<span>{{formData.entity.otherFundSourceDesc}}</span>
|
||||
<span>{{ formData.entity.otherFundSourceDesc }}</span>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
@@ -237,8 +290,9 @@
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('planApply.applySection.projectOverview')" required prop="entity.projectDesc">
|
||||
<span>{{formData.entity.projectDesc}}</span>
|
||||
<el-form-item :label="t('planApply.applySection.projectOverview')" required
|
||||
prop="entity.projectDesc">
|
||||
<span>{{ formData.entity.projectDesc }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -246,18 +300,19 @@
|
||||
<el-row class="form-row">
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('planApply.applySection.projectInitialPlan')">
|
||||
<span>{{formData.entity.projectPreliminaryPlan}}</span>
|
||||
<span>{{ formData.entity.projectPreliminaryPlan }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('planApply.headerForm.attachments')">
|
||||
<UploadFile :modelValue="formData.entity.projectPreliminaryPlanAttachment" :fileSize="20"
|
||||
type="simple" :limit="10" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('planApply.headerForm.attachments')">
|
||||
<UploadFile :modelValue="formData.entity.projectPreliminaryPlanAttachment" :fileSize="20" type="simple" :limit="10"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row class="form-row">
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('planApply.applySection.remark')">
|
||||
<span>{{formData.entity.remark}}</span>
|
||||
<span>{{ formData.entity.remark }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -266,28 +321,35 @@
|
||||
<div class="form-section-title">{{ t('planApply.investmentStatus.title') }}</div>
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.investmentStatus.totalInvestmentAmount')" required prop="entity.projectTotalAmount">
|
||||
<span>{{formData.entity.projectTotalAmount}}{{t('planApply.investmentEstimate.unitSuffix')}}</span>
|
||||
<el-form-item :label="t('planApply.investmentStatus.totalInvestmentAmount')" required
|
||||
prop="entity.projectTotalAmount">
|
||||
<span>{{ formData.entity.projectTotalAmount }}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.investmentStatus.cumulativeInvestmentLastYear')" required prop="entity.lastYearCompleted">
|
||||
<span>{{formData.entity.lastYearCompleted}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<el-form-item :label="t('planApply.investmentStatus.cumulativeInvestmentLastYear')" required
|
||||
prop="entity.lastYearCompleted">
|
||||
<span>{{ formData.entity.lastYearCompleted }}{{ t('planApply.investmentEstimate.unitSuffix')
|
||||
}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.investmentStatus.ourTotalInvestmentAmount')" required prop="entity.ourInvestmentTotalAmount">
|
||||
<el-form-item :label="t('planApply.investmentStatus.ourTotalInvestmentAmount')" required
|
||||
prop="entity.ourInvestmentTotalAmount">
|
||||
|
||||
<span>{{formData.entity.ourInvestmentTotalAmount}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<span>{{ formData.entity.ourInvestmentTotalAmount }}{{
|
||||
t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.investmentStatus.ourCumulativeInvestmentLastYear')" required prop="entity.ourLastYearCompleted">
|
||||
<el-form-item :label="t('planApply.investmentStatus.ourCumulativeInvestmentLastYear')" required
|
||||
prop="entity.ourLastYearCompleted">
|
||||
|
||||
<span>{{formData.entity.ourLastYearCompleted}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<span>{{ formData.entity.ourLastYearCompleted }}{{ t('planApply.investmentEstimate.unitSuffix')
|
||||
}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -320,53 +382,53 @@
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.planYear')" min-width="140">
|
||||
<template #default="{ row }">
|
||||
<span>{{row.plannedInvestmentYear}}</span>
|
||||
<span>{{ row.plannedInvestmentYear }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.plannedImageQuota')" min-width="160">
|
||||
<template #default="{ row }">
|
||||
<span>{{row.plannedImageAmount}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<span>{{ row.plannedImageAmount }}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.annualPlanPayment')" min-width="160">
|
||||
<template #default="{ row }">
|
||||
<span>{{row.plannedPaymentAmount}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<span>{{ row.plannedPaymentAmount }}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.fundingSources')" align="center">
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.capitalFunding')" min-width="140">
|
||||
<template #default="{ row }">
|
||||
<span>{{row.selfFunding}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<span>{{ row.selfFunding }}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.externalRaisedFunds')"
|
||||
min-width="150">
|
||||
<template #default="{ row }">
|
||||
<span>{{row.fiscalFunding}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<span>{{ row.fiscalFunding }}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.financialFunding')"
|
||||
min-width="140">
|
||||
<template #default="{ row }">
|
||||
<span>{{row.fiscalFunding}}{{ t('planApply.investmentEstimate.unitSuffix') }} </span>
|
||||
<span>{{ row.fiscalFunding }}{{ t('planApply.investmentEstimate.unitSuffix') }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.otherFunding')" min-width="140">
|
||||
<template #default="{ row }">
|
||||
<span>{{row.otherFunding}}{{ t('planApply.investmentEstimate.unitSuffix') }} </span>
|
||||
<span>{{ row.otherFunding }}{{ t('planApply.investmentEstimate.unitSuffix') }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.financialFundingDescription')"
|
||||
min-width="200">
|
||||
<template #default="{ row }">
|
||||
<span>{{row.fiscalFundingSource}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
<span>{{ row.fiscalFundingSource }}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('planApply.annualInvestmentInfo.table.otherFundingDescription')"
|
||||
min-width="200">
|
||||
<template #default="{ row }">
|
||||
<span>{{row.otherFundingSource}}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
</template>
|
||||
<span>{{ row.otherFundingSource }}{{ t('planApply.investmentEstimate.unitSuffix') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -374,13 +436,14 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.decisionInfo.decisionType')">
|
||||
<span>{{formData.entity.decisionType}}</span>
|
||||
<span>{{ formData.entity.decisionType }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.decisionInfo.isCompleteEstablishmentProcedures')" required prop="entity.isProjectApprovalCompleted">
|
||||
<el-form-item :label="t('planApply.decisionInfo.isCompleteEstablishmentProcedures')" required
|
||||
prop="entity.isProjectApprovalCompleted">
|
||||
|
||||
<span>{{formData.entity.isProjectApprovalCompleted}}</span>
|
||||
<span>{{ formData.entity.isProjectApprovalCompleted }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -388,25 +451,26 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.decisionInfo.establishmentDocumentNumber')">
|
||||
<span>{{formData.entity.projectApprovalFileNo}}</span>
|
||||
<span>{{ formData.entity.projectApprovalFileNo }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.decisionInfo.establishmentDocumentInfo')">
|
||||
<span>{{formData.entity.projectApprovalFileInfo}}</span>
|
||||
<span>{{ formData.entity.projectApprovalFileInfo }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.decisionInfo.isCompleteDecisionProcedures')" required prop="entity.isDecisionProcedureCompleted">
|
||||
<span>{{formData.entity.isDecisionProcedureCompleted}}</span>
|
||||
<el-form-item :label="t('planApply.decisionInfo.isCompleteDecisionProcedures')" required
|
||||
prop="entity.isDecisionProcedureCompleted">
|
||||
<span>{{ formData.entity.isDecisionProcedureCompleted }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('planApply.decisionInfo.decisionProgramDocumentNumber')">
|
||||
<span>{{formData.entity.decisionProcedureFileNo}}</span>
|
||||
<span>{{ formData.entity.decisionProcedureFileNo }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -414,7 +478,7 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('planApply.decisionInfo.decisionDocumentInfo')">
|
||||
<span>{{formData.entity.decisionFileInfo}}</span>
|
||||
<span>{{ formData.entity.decisionFileInfo }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -425,32 +489,33 @@
|
||||
<script lang="ts" setup>
|
||||
import { ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { InvestmentProjects,ProjectPlanApplyFormData } from "../interface/types";
|
||||
import {projectNatureOptions,
|
||||
investmentAreaOptions,
|
||||
investmentCategoryOptions,
|
||||
projectDirectionDetailsOptions,
|
||||
projectSourceOptions,
|
||||
constructionNatureOptions,
|
||||
projectImportantOptions,
|
||||
mainBusinessOptions,
|
||||
strategicIndustryOptions,
|
||||
cityStrategyOptions, Enums
|
||||
import type { InvestmentProjects, ProjectPlanApplyFormData } from "../interface/types";
|
||||
import {
|
||||
projectNatureOptions,
|
||||
investmentAreaOptions,
|
||||
investmentCategoryOptions,
|
||||
projectDirectionDetailsOptions,
|
||||
projectSourceOptions,
|
||||
constructionNatureOptions,
|
||||
projectImportantOptions,
|
||||
mainBusinessOptions,
|
||||
strategicIndustryOptions,
|
||||
cityStrategyOptions, Enums
|
||||
} from "/@/hooks/enums"
|
||||
import type { FormInstance, FormRules } from 'element-plus';
|
||||
import FlowFormView from '/@/components/workbench/common/FlowFormView.vue'
|
||||
const { t } = useI18n();
|
||||
const useForm = ref<FormInstance | undefined>();
|
||||
const props = withDefaults(defineProps<{
|
||||
modelValue?: ProjectPlanApplyFormData;
|
||||
rules?: FormRules;
|
||||
isEdit: boolean;
|
||||
title:string;
|
||||
processInstanceId: string;
|
||||
modelValue?: ProjectPlanApplyFormData;
|
||||
rules?: FormRules;
|
||||
isEdit?: boolean;
|
||||
title?: string;
|
||||
processInstanceId?: string;
|
||||
}>(), {
|
||||
isEdit: true,
|
||||
title:'',
|
||||
processInstanceId:''
|
||||
isEdit: true,
|
||||
title: '',
|
||||
processInstanceId: ''
|
||||
});
|
||||
|
||||
const emit = defineEmits<{
|
||||
@@ -458,85 +523,88 @@ const emit = defineEmits<{
|
||||
}>();
|
||||
|
||||
const defaultForm: ProjectPlanApplyFormData = {
|
||||
entity:{
|
||||
id:null,
|
||||
projectName: '',
|
||||
projectNature: '',
|
||||
groupCompany: '',
|
||||
projectOwnerUnit: '',
|
||||
projectMainEntity: '',
|
||||
projectDepartment: '',
|
||||
investmentCategory: '',
|
||||
investmentArea: '',
|
||||
projectAddress: '',
|
||||
projectAddressDetail: '',
|
||||
projectInvestmentDirection: '',
|
||||
totalInvestment: '',
|
||||
investmentDirectionSegmentation: '',
|
||||
projectBackground: '',
|
||||
constructionNature: '',
|
||||
constructionStage: '',
|
||||
keyProject: '',
|
||||
isMainBusiness: '',
|
||||
mainBusinessTypes: '',
|
||||
mainBusinessCode: '',
|
||||
isManufacturingIndustry: '',
|
||||
isStuckIndustry: '',
|
||||
urbanStrategy: '',
|
||||
projectSource: '',
|
||||
majorInvestmentProjects: '',
|
||||
isStrategicEmergingIndustries: '',
|
||||
projectStartTime: '',
|
||||
projectEndTime: '',
|
||||
projectConstructionContent: '',
|
||||
planInvestmentYear: '',
|
||||
annualPlanTotal: '',
|
||||
annualPlanInvestment: '',
|
||||
planPaymentLimit: '',
|
||||
plannedImageAmount: '',
|
||||
ownedFunds: '',
|
||||
financialFunds: '',
|
||||
externalFunding: '',
|
||||
externalRaisedCapital: '',
|
||||
otherFunds: '',
|
||||
governmentFundSourceDesc: '',
|
||||
otherFundSourceDesc: '',
|
||||
projectTotalAmount: '',
|
||||
lastYearCompleted: '',
|
||||
ourInvestmentTotalAmount: '',
|
||||
ourLastYearCompleted: '',
|
||||
projectDesc: '',
|
||||
promotionPlan: '',
|
||||
projectPreliminaryPlan: '',
|
||||
projectPreliminaryPlanAttachment: '',
|
||||
attachments: [],
|
||||
remark: '',
|
||||
decisionType: '',
|
||||
isProjectApprovalCompleted: '',
|
||||
isDecisionProcedureCompleted: '',
|
||||
projectApprovalFileNo: '',
|
||||
projectApprovalFileInfo: '',
|
||||
decisionProcedureFileNo: '',
|
||||
decisionFileInfo: '',
|
||||
submitUnitOpinion: '',
|
||||
groupInvestmentDeptOpinion: '',
|
||||
submitUnitLeadershipOpinion: '',
|
||||
submitUnitMainLeadershipOpinion: '',
|
||||
planImageQuota:'',
|
||||
},
|
||||
investmentProjects: [
|
||||
{
|
||||
plannedInvestmentYear: '',
|
||||
plannedImageAmount: '',
|
||||
plannedPaymentAmount: '',
|
||||
selfFunding: '',
|
||||
externalFunding: '',
|
||||
fiscalFunding: '',
|
||||
otherFunding: '',
|
||||
fiscalFundingSource: '',
|
||||
otherFundingSource: '',
|
||||
},
|
||||
],
|
||||
entity: {
|
||||
id: null,
|
||||
projectName: '',
|
||||
projectNature: '',
|
||||
groupCompany: '',
|
||||
projectOwnerUnit: '',
|
||||
projectMainEntity: '',
|
||||
projectDepartment: '',
|
||||
investmentCategory: '',
|
||||
investmentArea: '',
|
||||
projectAddress: '',
|
||||
projectAddressDetail: '',
|
||||
projectInvestmentDirection: '',
|
||||
totalInvestment: '',
|
||||
investmentDirectionSegmentation: '',
|
||||
projectBackground: '',
|
||||
constructionNature: '',
|
||||
constructionStage: '',
|
||||
keyProject: '',
|
||||
isMainBusiness: '',
|
||||
mainBusinessTypes: '',
|
||||
mainBusinessCode: '',
|
||||
isManufacturingIndustry: '',
|
||||
isStuckIndustry: '',
|
||||
urbanStrategy: '',
|
||||
projectSource: '',
|
||||
majorInvestmentProjects: '',
|
||||
isStrategicEmergingIndustries: '',
|
||||
projectStartTime: '',
|
||||
projectEndTime: '',
|
||||
projectConstructionContent: '',
|
||||
planInvestmentYear: '',
|
||||
annualPlanTotal: '',
|
||||
annualPlanInvestment: '',
|
||||
planPaymentLimit: '',
|
||||
plannedImageAmount: '',
|
||||
ownedFunds: '',
|
||||
financialFunds: '',
|
||||
externalFunding: '',
|
||||
externalRaisedCapital: '',
|
||||
otherFunds: '',
|
||||
governmentFundSourceDesc: '',
|
||||
otherFundSourceDesc: '',
|
||||
projectTotalAmount: '',
|
||||
lastYearCompleted: '',
|
||||
ourInvestmentTotalAmount: '',
|
||||
ourLastYearCompleted: '',
|
||||
projectDesc: '',
|
||||
promotionPlan: '',
|
||||
projectPreliminaryPlan: '',
|
||||
projectPreliminaryPlanAttachment: '',
|
||||
attachments: [],
|
||||
remark: '',
|
||||
decisionType: '',
|
||||
isProjectApprovalCompleted: '',
|
||||
isDecisionProcedureCompleted: '',
|
||||
projectApprovalFileNo: '',
|
||||
projectApprovalFileInfo: '',
|
||||
decisionProcedureFileNo: '',
|
||||
decisionFileInfo: '',
|
||||
submitUnitOpinion: '',
|
||||
groupInvestmentDeptOpinion: '',
|
||||
submitUnitLeadershipOpinion: '',
|
||||
submitUnitMainLeadershipOpinion: '',
|
||||
planImageQuota: '',
|
||||
processInstanceId: '',
|
||||
status: 0,
|
||||
deptId: 0
|
||||
},
|
||||
investmentProjects: [
|
||||
{
|
||||
plannedInvestmentYear: '',
|
||||
plannedImageAmount: '',
|
||||
plannedPaymentAmount: '',
|
||||
selfFunding: '',
|
||||
externalFunding: '',
|
||||
fiscalFunding: '',
|
||||
otherFunding: '',
|
||||
fiscalFundingSource: '',
|
||||
otherFundingSource: '',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const formData = ref<ProjectPlanApplyFormData>({ ...defaultForm });
|
||||
@@ -584,7 +652,7 @@ watch(
|
||||
() => props.modelValue,
|
||||
newVal => {
|
||||
Object.assign(formData.value, newVal || {});
|
||||
formData.value.entity.planInvestmentYear = String(newVal?.entity?.planInvestmentYear);
|
||||
formData.value.entity.planInvestmentYear = String(newVal?.entity?.planInvestmentYear);
|
||||
// 如果有数据且没有选中,默认选中第一行
|
||||
if (formData.value.investmentProjects.length > 0 && selectedAnnualInvestmentIndex.value === -1) {
|
||||
selectedAnnualInvestmentIndex.value = 0;
|
||||
@@ -594,7 +662,7 @@ watch(
|
||||
);
|
||||
|
||||
watch(
|
||||
()=> formData.value,
|
||||
() => formData.value,
|
||||
() => {
|
||||
emit('update:modelValue', { ...formData.value });
|
||||
},
|
||||
@@ -604,7 +672,7 @@ const validateForm = () => {
|
||||
return useForm.value?.validate();
|
||||
}
|
||||
defineExpose({
|
||||
validateForm: validateForm
|
||||
validateForm: validateForm
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<template>
|
||||
<el-row class="page-title-row mb10">
|
||||
<div class="page-title">{{ t('progressReport.form.title') }}</div>
|
||||
<div class="page-report-time">{{ t('progressReport.form.reportTime') }}: {{formData.createTime || reportTime }}</div>
|
||||
<div class="page-report-time">{{ t('progressReport.form.reportTime') }}: {{ formData.createTime || reportTime }}
|
||||
</div>
|
||||
<div class="page-unit">{{ t('progressReport.form.unit') }}</div>
|
||||
</el-row>
|
||||
<div class="project-progress-report-form">
|
||||
@@ -11,26 +12,14 @@
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('progressReport.form.projectName')" required prop="projectName">
|
||||
<el-select v-model="formData.projectId"
|
||||
:placeholder="t('progressReport.form.selectPlaceholder')"
|
||||
@change="handelSelectChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in projectNameData"
|
||||
:key="item.id"
|
||||
:label="item.projectName || ''"
|
||||
:value="item.id"
|
||||
/>
|
||||
:placeholder="t('progressReport.form.selectPlaceholder')" @change="handelSelectChange">
|
||||
<el-option v-for="item in projectNameData" :key="item.id" :label="item.projectName || ''"
|
||||
:value="item.id" />
|
||||
<template #footer>
|
||||
<el-pagination
|
||||
background
|
||||
layout="sizes, prev, pager, next, jumper, total"
|
||||
:total="total"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
v-model:page-size="queryForm.size"
|
||||
v-model:current-page="queryForm.page"
|
||||
@size-change="handlePageSizeChange"
|
||||
@current-change="handlePageChange"
|
||||
/>
|
||||
<el-pagination background layout="sizes, prev, pager, next, jumper, total"
|
||||
:total="total" :page-sizes="[10, 20, 50, 100]" v-model:page-size="queryForm.size"
|
||||
v-model:current-page="queryForm.page" @size-change="handlePageSizeChange"
|
||||
@current-change="handlePageChange" />
|
||||
</template>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -40,24 +29,18 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('progressReport.form.projectStatus')" required prop="projectStatus">
|
||||
<el-select v-model="formData.projectStatus"
|
||||
:placeholder="t('progressReport.form.inputPlaceholder')"
|
||||
clearable>
|
||||
<el-option
|
||||
v-for="item in projectStatusOptions" :key="item.value"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
</el-select>
|
||||
:placeholder="t('progressReport.form.inputPlaceholder')" clearable>
|
||||
<el-option v-for="item in projectStatusOptions" :key="item.value" :value="item.value"
|
||||
:label="item.label" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('progressReport.form.constructionStage')">
|
||||
<el-select v-model="formData.constructionStage"
|
||||
:placeholder="t('progressReport.form.selectPlaceholder')" clearable>
|
||||
<el-option v-for="item in constructionStageOptions" :key="item.value"
|
||||
:value="item.value"
|
||||
:label="item.label"
|
||||
/>
|
||||
<el-option v-for="item in constructionStageOptions" :key="item.value" :value="item.value"
|
||||
:label="item.label" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -70,7 +53,8 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('progressReport.form.totalInvestmentAmount')" required prop="projectTotalAmount">
|
||||
<el-form-item :label="t('progressReport.form.totalInvestmentAmount')" required
|
||||
prop="projectTotalAmount">
|
||||
<el-input v-model="formData.projectTotalAmount"
|
||||
:placeholder="t('progressReport.form.inputPlaceholder')">
|
||||
<template #append>{{ t('progressReport.form.unitSuffix') }}</template>
|
||||
@@ -80,7 +64,8 @@
|
||||
</el-row>
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('progressReport.form.cumulativeInvestmentToMonthEnd')" required prop="cumulativeInvestmentToDate">
|
||||
<el-form-item :label="t('progressReport.form.cumulativeInvestmentToMonthEnd')" required
|
||||
prop="cumulativeInvestmentToDate">
|
||||
<el-input v-model="formData.cumulativeInvestmentToDate"
|
||||
:placeholder="t('progressReport.form.inputPlaceholder')">
|
||||
<template #append>{{ t('progressReport.form.unitSuffix') }}</template>
|
||||
@@ -125,14 +110,16 @@
|
||||
:placeholder="t('progressReport.form.selectYearPlaceholder')" style="width: 100%" />
|
||||
</el-form-item>
|
||||
<el-form-item style="height: 82px;"
|
||||
:label="t('progressReport.form.currentYearPlannedInvestment')" required prop="annualPlannedInvestment">
|
||||
:label="t('progressReport.form.currentYearPlannedInvestment')" required
|
||||
prop="annualPlannedInvestment">
|
||||
<el-input v-model="formData.annualPlannedInvestment"
|
||||
:placeholder="t('progressReport.form.inputPlaceholder')">
|
||||
<template #append>{{ t('progressReport.form.unitSuffix') }}</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item style="height: 82px;"
|
||||
:label="t('progressReport.form.enterpriseCumulativeInvestmentToMonthEnd')" required prop="ytdRemainingInvestment">
|
||||
:label="t('progressReport.form.enterpriseCumulativeInvestmentToMonthEnd')" required
|
||||
prop="ytdRemainingInvestment">
|
||||
<el-input v-model="formData.ytdRemainingInvestment"
|
||||
:placeholder="t('progressReport.form.inputPlaceholder')">
|
||||
<template #append>{{ t('progressReport.form.unitSuffix') }}</template>
|
||||
@@ -210,8 +197,8 @@
|
||||
<el-input v-model="formData.supportingDocuments"
|
||||
:placeholder="t('progressReport.form.selectAttachmentPlaceholder')" readonly>
|
||||
<template #append>
|
||||
<UploadFile :modelValue="formData.supportingDocuments" @change="uploadChange" :fileSize="20"
|
||||
type="simple" :limit="10" :isShowTip="false" />
|
||||
<UploadFile :modelValue="formData.supportingDocuments" @change="uploadChange"
|
||||
:fileSize="20" type="simple" :limit="10" :isShowTip="false" />
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
@@ -284,7 +271,7 @@ export interface ProjectProgressReportFormData {
|
||||
|
||||
const props = defineProps<{
|
||||
modelValue?: InvestmentProjectProgress;
|
||||
rules?:FormRules;
|
||||
rules?: FormRules;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
@@ -292,37 +279,38 @@ const emit = defineEmits<{
|
||||
}>();
|
||||
const useForm = ref<FormInstance | undefined>()
|
||||
const defaultForm = reactive<InvestmentProjectProgress>({
|
||||
id: undefined,
|
||||
projectName: '',
|
||||
projectId: undefined,
|
||||
projectStatus: '',
|
||||
constructionStage: '',
|
||||
implementingBody: '',
|
||||
projectTotalAmount: undefined,
|
||||
cumulativeInvestmentToDate: undefined,
|
||||
completionRate: undefined,
|
||||
cumulativePaymentToDate: undefined,
|
||||
paymentCompletionRate: undefined,
|
||||
annualReport: undefined,
|
||||
annualPlannedInvestment: undefined,
|
||||
ytdRemainingInvestment: undefined,
|
||||
investmentCompletionRate: undefined,
|
||||
plannedPayment: undefined,
|
||||
actualPayment: undefined,
|
||||
investmentPlanCompletionRate: undefined,
|
||||
achievements: '',
|
||||
coordinationIssues: '',
|
||||
nextWorkPlan: '',
|
||||
supportingDocuments: '',
|
||||
remarks: '',
|
||||
isFinalApplication: undefined,
|
||||
createBy: '',
|
||||
createTime: '',
|
||||
updateBy: '',
|
||||
updateTime: '',
|
||||
delFlag: '',
|
||||
processInstanceId: '',
|
||||
status: '',
|
||||
id: undefined,
|
||||
projectName: '',
|
||||
projectId: undefined,
|
||||
projectStatus: '',
|
||||
constructionStage: '',
|
||||
implementingBody: '',
|
||||
projectTotalAmount: undefined,
|
||||
cumulativeInvestmentToDate: undefined,
|
||||
completionRate: undefined,
|
||||
cumulativePaymentToDate: undefined,
|
||||
paymentCompletionRate: undefined,
|
||||
annualReport: undefined,
|
||||
annualPlannedInvestment: undefined,
|
||||
ytdRemainingInvestment: undefined,
|
||||
investmentCompletionRate: undefined,
|
||||
plannedPayment: undefined,
|
||||
actualPayment: undefined,
|
||||
investmentPlanCompletionRate: undefined,
|
||||
achievements: '',
|
||||
coordinationIssues: '',
|
||||
nextWorkPlan: '',
|
||||
supportingDocuments: '',
|
||||
remarks: '',
|
||||
isFinalApplication: undefined,
|
||||
createBy: '',
|
||||
createTime: '',
|
||||
updateBy: '',
|
||||
updateTime: '',
|
||||
delFlag: '',
|
||||
processInstanceId: '',
|
||||
status: '',
|
||||
deptId: ''
|
||||
})
|
||||
const formData = reactive<InvestmentProjectProgress>({ ...defaultForm, ...props.modelValue });
|
||||
const projectNameData = ref<ProjectPlanApplyFormItem[]>([]);
|
||||
@@ -340,14 +328,14 @@ const queryForm = reactive<investmentProjectsPlanList>({
|
||||
size: 10,
|
||||
});
|
||||
const getProjectNameList = async () => {
|
||||
try {
|
||||
const res = await investmentProjectsPlanPage(queryForm);
|
||||
projectNameData.value = res.data?.records || [];
|
||||
total.value = res.data?.total || 0;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
projectNameData.value = []; // 出错时设置为空数组
|
||||
}
|
||||
try {
|
||||
const res = await investmentProjectsPlanPage(queryForm);
|
||||
projectNameData.value = res.data?.records || [];
|
||||
total.value = res.data?.total || 0;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
projectNameData.value = []; // 出错时设置为空数组
|
||||
}
|
||||
}
|
||||
getProjectNameList();
|
||||
/**
|
||||
@@ -355,39 +343,39 @@ getProjectNameList();
|
||||
* @param {string | number} value - 选中的项目ID
|
||||
*/
|
||||
const handelSelectChange = (value: string | number) => {
|
||||
// 根据选中的项目ID查找对应的项目信息
|
||||
const selectedProject = projectNameData.value.find(item =>
|
||||
item.id == value
|
||||
);
|
||||
// 如果找到了对应的项目,则更新实施单位字段
|
||||
if (selectedProject) {
|
||||
formData.implementingBody = selectedProject.projectMainEntity || selectedProject.projectOwnerUnit || '';
|
||||
formData.projectName = selectedProject.projectName || '';
|
||||
formData.deptId = selectedProject.deptId;
|
||||
}
|
||||
// 根据选中的项目ID查找对应的项目信息
|
||||
const selectedProject = projectNameData.value.find(item =>
|
||||
item.id == value
|
||||
);
|
||||
// 如果找到了对应的项目,则更新实施单位字段
|
||||
if (selectedProject) {
|
||||
formData.implementingBody = selectedProject.projectMainEntity || selectedProject.projectOwnerUnit || '';
|
||||
formData.projectName = selectedProject.projectName || '';
|
||||
formData.deptId = String(selectedProject.deptId);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 页码大小改变
|
||||
* @param {number} pageSize - 新的页码大小
|
||||
* */
|
||||
const handlePageSizeChange = (pageSize: number) => {
|
||||
queryForm.size = pageSize;
|
||||
getProjectNameList();
|
||||
queryForm.size = pageSize;
|
||||
getProjectNameList();
|
||||
}
|
||||
/**
|
||||
* 页码改变
|
||||
* @param {number} page - 新的页码
|
||||
* */
|
||||
const handlePageChange = (page: number) => {
|
||||
queryForm.page = page;
|
||||
getProjectNameList();
|
||||
queryForm.page = page;
|
||||
getProjectNameList();
|
||||
}
|
||||
|
||||
// 监听 formData 变化,同步到父组件
|
||||
watch(
|
||||
formData,
|
||||
(newVal) => {
|
||||
console.log(newVal);
|
||||
console.log(newVal);
|
||||
emit('update:modelValue', { ...newVal });
|
||||
},
|
||||
{ deep: true }
|
||||
@@ -398,30 +386,30 @@ watch(
|
||||
() => props.modelValue,
|
||||
(newVal) => {
|
||||
if (newVal) {
|
||||
if (typeof newVal.annualReport === 'number') newVal.annualReport = newVal.annualReport.toString()
|
||||
if (typeof newVal.annualReport === 'number') newVal.annualReport = newVal.annualReport.toString()
|
||||
Object.assign(formData, defaultForm, newVal);
|
||||
}
|
||||
},
|
||||
{ immediate: true, deep: true }
|
||||
);
|
||||
const uploadChange = (_:any,data:any[]) =>{
|
||||
if (!data || Object.prototype.toString.call(data) !== '[object Array]' || data.length === 0){
|
||||
formData.supportingDocuments = [];
|
||||
return;
|
||||
}
|
||||
formData.supportingDocuments = data.map((item:any) => {
|
||||
return {
|
||||
name: item.name,
|
||||
url: item.url
|
||||
}
|
||||
})
|
||||
const uploadChange = (_: any, data: any[]) => {
|
||||
if (!data || Object.prototype.toString.call(data) !== '[object Array]' || data.length === 0) {
|
||||
formData.supportingDocuments = [];
|
||||
return;
|
||||
}
|
||||
formData.supportingDocuments = data.map((item: any) => {
|
||||
return {
|
||||
name: item.name,
|
||||
url: item.url
|
||||
}
|
||||
})
|
||||
}
|
||||
defineExpose({
|
||||
validate: async () => {
|
||||
const isValid = await useForm.value?.validate();
|
||||
if (!isValid) return false
|
||||
return formData
|
||||
},
|
||||
validate: async () => {
|
||||
const isValid = await useForm.value?.validate();
|
||||
if (!isValid) return false
|
||||
return formData
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('progressReport.form.currentStageEvidenceMaterials')">
|
||||
<uploadFile :modelValue="JSON.parse(formData.supportingDocuments || '[]') || []"
|
||||
<uploadFile :modelValue="parseSupportingDocuments(formData.supportingDocuments)"
|
||||
@change="uploadChange" :fileSize="20" type="simple" :limit="10" :isShowTip="false" disabled>
|
||||
</uploadFile>
|
||||
</el-form-item>
|
||||
@@ -161,7 +161,7 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('progressReport.form.isLastDeclaration')">
|
||||
<span>{{ formData.isFinalApplication == '1' ? t('progressReport.form.yes') :
|
||||
<span>{{ formData.isFinalApplication === 1 ? t('progressReport.form.yes') :
|
||||
t('progressReport.form.no') }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -252,6 +252,7 @@ const defaultForm = reactive<InvestmentProjectProgress>({
|
||||
delFlag: '',
|
||||
processInstanceId: '',
|
||||
status: '',
|
||||
deptId: '',
|
||||
})
|
||||
const formData = reactive<InvestmentProjectProgress>({ ...defaultForm, ...props.modelValue });
|
||||
const projectNameData = ref<ProjectPlanApplyFormItem[]>([]);
|
||||
@@ -279,20 +280,33 @@ const getProjectNameList = async () => {
|
||||
}
|
||||
}
|
||||
getProjectNameList();
|
||||
|
||||
/**
|
||||
* 解析 supportingDocuments,处理可能是字符串或数组的情况
|
||||
*/
|
||||
const parseSupportingDocuments = (value: string | { name: string; url: string }[] | undefined): { name: string; url: string }[] => {
|
||||
if (!value) return [];
|
||||
if (Array.isArray(value)) return value;
|
||||
try {
|
||||
return JSON.parse(value) || [];
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 初始化图片
|
||||
* */
|
||||
const uploadChange = (_: any, data: any[]) => {
|
||||
if (!data || Object.prototype.toString.call(data) !== '[object Array]' || data.length === 0) {
|
||||
formData.supportingDocuments = [];
|
||||
formData.supportingDocuments = '[]';
|
||||
return;
|
||||
}
|
||||
formData.supportingDocuments = data.map((item: any) => {
|
||||
formData.supportingDocuments = JSON.stringify(data.map((item: any) => {
|
||||
return {
|
||||
name: item.name,
|
||||
url: item.url
|
||||
}
|
||||
})
|
||||
}));
|
||||
}
|
||||
// 监听 formData 变化,同步到父组件
|
||||
watch(
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
<el-row :gutter="20" class="instruction-grid">
|
||||
<el-col v-for="field in instructionFields" :key="field.key" :span="field.span || 8">
|
||||
<el-form-item :label="field.label" label-width="80px">
|
||||
<el-input maxlength="255" v-model="instructionForm[field.key]" :placeholder="t('mixedRegister.placeholder.input')" />
|
||||
<el-input maxlength="255" v-model="instructionForm[field.key]"
|
||||
:placeholder="t('mixedRegister.placeholder.input')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -24,26 +25,14 @@
|
||||
<el-col v-for="field in basicInfoFields" :key="field.key" :span="field.span || 12" class="mb-4">
|
||||
<el-form-item :label="field.label">
|
||||
<!-- 日期时间选择器 -->
|
||||
<el-date-picker
|
||||
v-if="field.type && ['date', 'datetime'].includes(field.type)"
|
||||
v-model="basicInfoForm[field.key]"
|
||||
:type="field.type"
|
||||
:placeholder="t('mixedRegister.placeholder.select')"
|
||||
v-bind="field.fieldProps"
|
||||
/>
|
||||
<el-date-picker v-if="field.type && ['date', 'datetime', 'year'].includes(field.type)"
|
||||
v-model="basicInfoForm[field.key]" :type="field.type"
|
||||
:placeholder="t('mixedRegister.placeholder.select')" v-bind="field.fieldProps" />
|
||||
<!-- 选择器 -->
|
||||
<el-select
|
||||
v-else-if="field.type === 'select'"
|
||||
v-model="basicInfoForm[field.key]"
|
||||
:placeholder="t('mixedRegister.placeholder.select')"
|
||||
v-bind="field.fieldProps"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of field.fieldProps?.options"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
<el-select v-else-if="field.type === 'select'" v-model="basicInfoForm[field.key]"
|
||||
:placeholder="t('mixedRegister.placeholder.select')" v-bind="field.fieldProps">
|
||||
<el-option v-for="item of field.fieldProps?.options" :key="item.value"
|
||||
:label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
<div class="partner-name-cell w-full" v-else-if="isUpdate && field.key === 'projectName'">
|
||||
<el-input v-model="basicInfoForm.projectName" maxlength="255"
|
||||
@@ -52,11 +41,12 @@
|
||||
<LibrarySelect v-model="librarySelectVisible" @select="handleLibrarySelect" />
|
||||
</div>
|
||||
<!-- 输入框 -->
|
||||
<template v-else>
|
||||
<el-input-number v-if="field.type === 'number'" :length="field.length" v-model="basicInfoForm[field.key]"
|
||||
:controls="false" :min="0"/>
|
||||
<el-input v-else maxlength="255" v-model="basicInfoForm[field.key]" :placeholder="t('mixedRegister.placeholder.input')" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-input-number v-if="field.type === 'number'" :length="field.length"
|
||||
v-model="basicInfoForm[field.key]" :controls="false" :min="0" />
|
||||
<el-input v-else maxlength="255" v-model="basicInfoForm[field.key]"
|
||||
:placeholder="t('mixedRegister.placeholder.input')" />
|
||||
</template>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -101,7 +91,7 @@ const handleLibrarySelect = (row: any) => {
|
||||
librarySelectVisible.value = false
|
||||
}
|
||||
|
||||
const formRef = ref<FormInstance|null>(null)
|
||||
const formRef = ref<FormInstance | null>(null)
|
||||
const validate = async () => {
|
||||
const isValid = await formRef.value?.validate()
|
||||
if (isValid) {
|
||||
|
||||
Reference in New Issue
Block a user