|
|
|
|
@ -85,26 +85,26 @@ const validateForm = () => { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 验证需求概述字数 |
|
|
|
|
if (form.demand_overview.length > 800) { |
|
|
|
|
showToast('需求概述不能超过800字') |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 验证联系电话格式 |
|
|
|
|
// const phoneRegex = /^1[3-9]\d{9}$/ |
|
|
|
|
// if (!phoneRegex.test(form.contact_phone)) { |
|
|
|
|
// showToast('请输入正确的联系电话') |
|
|
|
|
// return false |
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 验证企业意向资金额为数字 |
|
|
|
|
// if (isNaN(Number(form.enterprise_intended_fund)) || Number(form.enterprise_intended_fund) < 0) { |
|
|
|
|
// showToast('请输入正确的企业意向资金额') |
|
|
|
|
// return false |
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -114,13 +114,13 @@ const submitForm = async () => { |
|
|
|
|
try { |
|
|
|
|
// 显示加载提示 |
|
|
|
|
showLoadingToast({ message: '提交中...', forbidClick: true, duration: 0 }) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用API提交数据 |
|
|
|
|
const response = await createDemand(form) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 关闭加载提示 |
|
|
|
|
closeToast() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理响应 |
|
|
|
|
if (response.code === 1) { |
|
|
|
|
showSuccessToast('需求提交成功') |
|
|
|
|
@ -136,7 +136,7 @@ const submitForm = async () => { |
|
|
|
|
} catch (error) { |
|
|
|
|
// 关闭加载提示 |
|
|
|
|
closeToast() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理错误 |
|
|
|
|
showToast('网络错误,请检查网络连接后重试') |
|
|
|
|
console.error('表单提交失败:', error) |
|
|
|
|
@ -154,14 +154,14 @@ const resetForm = async () => { |
|
|
|
|
confirmButtonText: '确定', |
|
|
|
|
cancelButtonText: '取消' |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 用户点击确认后执行重置操作 |
|
|
|
|
for (const key in form) { |
|
|
|
|
if (Object.hasOwnProperty.call(form, key)) { |
|
|
|
|
form[key] = '' |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 显示重置成功提示 |
|
|
|
|
showToast('表单已重置') |
|
|
|
|
} catch (error) { |
|
|
|
|
@ -179,109 +179,58 @@ const resetForm = async () => { |
|
|
|
|
<div v-if="loading" class="loading-container"> |
|
|
|
|
<van-skeleton title :row="12" animated /> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div v-else> |
|
|
|
|
|
|
|
|
|
<div v-else class="field-wrapper"> |
|
|
|
|
<!-- 项目名称 --> |
|
|
|
|
<van-field |
|
|
|
|
v-model="form.project_name" |
|
|
|
|
label="项目名称" |
|
|
|
|
placeholder="请输入项目名称" |
|
|
|
|
required |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<van-field v-model="form.project_name" label="项目名称" placeholder="请输入项目名称" required /> |
|
|
|
|
|
|
|
|
|
<!-- 所属领域 --> |
|
|
|
|
<van-field |
|
|
|
|
v-model="form.field" |
|
|
|
|
label="所属领域" |
|
|
|
|
placeholder="请选择所属领域" |
|
|
|
|
required |
|
|
|
|
@click="showFieldPicker = true" |
|
|
|
|
> |
|
|
|
|
<van-field v-model="form.field" label="所属领域" placeholder="请选择所属领域" required @click="showFieldPicker = true"> |
|
|
|
|
<template #right-icon> |
|
|
|
|
<van-icon name="arrow-down" size="16" color="#999" /> |
|
|
|
|
</template> |
|
|
|
|
</van-field> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 技术成熟度 --> |
|
|
|
|
<van-field |
|
|
|
|
v-model="form.tech_maturity" |
|
|
|
|
label="技术成熟度" |
|
|
|
|
placeholder="请选择技术成熟度" |
|
|
|
|
required |
|
|
|
|
@click="showMaturityPicker = true" |
|
|
|
|
> |
|
|
|
|
<van-field v-model="form.tech_maturity" label="技术成熟度" placeholder="请选择技术成熟度" required |
|
|
|
|
@click="showMaturityPicker = true"> |
|
|
|
|
<template #right-icon> |
|
|
|
|
<van-icon name="arrow-down" size="16" color="#999" /> |
|
|
|
|
</template> |
|
|
|
|
</van-field> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 预期技术目标(指标) --> |
|
|
|
|
<van-field |
|
|
|
|
v-model="form.expected_tech_target" |
|
|
|
|
label="预期技术目标(指标)" |
|
|
|
|
placeholder="请输入预期技术目标(指标)" |
|
|
|
|
required |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<van-field v-model="form.expected_tech_target" label="预期技术目标" placeholder="请输入预期技术目标(指标)" required /> |
|
|
|
|
|
|
|
|
|
<!-- 知识产权情况 --> |
|
|
|
|
<van-field |
|
|
|
|
v-model="form.intellectual_property" |
|
|
|
|
label="知识产权情况" |
|
|
|
|
placeholder="请选择知识产权情况" |
|
|
|
|
required |
|
|
|
|
@click="showIpPicker = true" |
|
|
|
|
> |
|
|
|
|
<van-field v-model="form.intellectual_property" label="知识产权情况" placeholder="请选择知识产权情况" required |
|
|
|
|
@click="showIpPicker = true"> |
|
|
|
|
<template #right-icon> |
|
|
|
|
<van-icon name="arrow-down" size="16" color="#999" /> |
|
|
|
|
</template> |
|
|
|
|
</van-field> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 企业意向资金额(万元) --> |
|
|
|
|
<van-field |
|
|
|
|
v-model="form.enterprise_intended_fund" |
|
|
|
|
label="企业意向资金额(万元)" |
|
|
|
|
placeholder="请输入企业意向资金额" |
|
|
|
|
required |
|
|
|
|
type="number" |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<van-field v-model="form.enterprise_intended_fund" label="企业意向资金" placeholder="请输入企业意向资金" required |
|
|
|
|
type="number"> |
|
|
|
|
<template #right-icon> |
|
|
|
|
<van-text>万元</van-text> |
|
|
|
|
</template> |
|
|
|
|
</van-field> |
|
|
|
|
|
|
|
|
|
<!-- 填报企业 --> |
|
|
|
|
<van-field |
|
|
|
|
v-model="form.filling_enterprise" |
|
|
|
|
label="填报企业" |
|
|
|
|
placeholder="请输入填报企业" |
|
|
|
|
required |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<van-field v-model="form.filling_enterprise" label="填报企业" placeholder="请输入填报企业" required /> |
|
|
|
|
|
|
|
|
|
<!-- 联系人 --> |
|
|
|
|
<van-field |
|
|
|
|
v-model="form.contact_person" |
|
|
|
|
label="联系人" |
|
|
|
|
placeholder="请输入联系人" |
|
|
|
|
required |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<van-field v-model="form.contact_person" label="联系人" placeholder="请输入联系人" required /> |
|
|
|
|
|
|
|
|
|
<!-- 联系电话 --> |
|
|
|
|
<van-field |
|
|
|
|
v-model="form.contact_phone" |
|
|
|
|
label="联系电话" |
|
|
|
|
placeholder="请输入联系电话" |
|
|
|
|
required |
|
|
|
|
type="tel" |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<van-field v-model="form.contact_phone" label="联系电话" placeholder="请输入联系电话" required type="tel" /> |
|
|
|
|
|
|
|
|
|
<!-- 需求概述 --> |
|
|
|
|
<van-field |
|
|
|
|
v-model="form.demand_overview" |
|
|
|
|
label="需求概述" |
|
|
|
|
placeholder="请输入需求概述(800字以内)" |
|
|
|
|
type="textarea" |
|
|
|
|
rows="5" |
|
|
|
|
maxlength="800" |
|
|
|
|
show-word-limit |
|
|
|
|
required |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
<van-field v-model="form.demand_overview" label="需求概述" placeholder="请输入需求概述(800字以内)" type="textarea" rows="5" |
|
|
|
|
maxlength="800" show-word-limit required /> |
|
|
|
|
|
|
|
|
|
<!-- 提交按钮 --> |
|
|
|
|
<div class="submit-btn-container"> |
|
|
|
|
<van-button type="default" round size="large" @click="resetForm"> |
|
|
|
|
@ -293,45 +242,30 @@ const resetForm = async () => { |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 选择器 --> |
|
|
|
|
<!-- 所属领域选择器 --> |
|
|
|
|
<van-popup v-model:show="showFieldPicker" position="bottom"> |
|
|
|
|
<van-picker |
|
|
|
|
:columns="enumData.domain" |
|
|
|
|
@confirm="(value) => { |
|
|
|
|
form.field = value.selectedValues[0]; |
|
|
|
|
showFieldPicker = false |
|
|
|
|
}" |
|
|
|
|
@cancel="showFieldPicker = false" |
|
|
|
|
title="选择所属领域" |
|
|
|
|
/> |
|
|
|
|
<van-picker :columns="enumData.domain" @confirm="(value) => { |
|
|
|
|
form.field = value.selectedValues[0]; |
|
|
|
|
showFieldPicker = false |
|
|
|
|
}" @cancel="showFieldPicker = false" title="选择所属领域" /> |
|
|
|
|
</van-popup> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 技术成熟度选择器 --> |
|
|
|
|
<van-popup v-model:show="showMaturityPicker" position="bottom"> |
|
|
|
|
<van-picker |
|
|
|
|
:columns="enumData.trl" |
|
|
|
|
@confirm="(value) => { |
|
|
|
|
form.tech_maturity = value.selectedValues[0]; |
|
|
|
|
showMaturityPicker = false |
|
|
|
|
}" |
|
|
|
|
@cancel="showMaturityPicker = false" |
|
|
|
|
title="选择技术成熟度" |
|
|
|
|
/> |
|
|
|
|
<van-picker :columns="enumData.trl" @confirm="(value) => { |
|
|
|
|
form.tech_maturity = value.selectedValues[0]; |
|
|
|
|
showMaturityPicker = false |
|
|
|
|
}" @cancel="showMaturityPicker = false" title="选择技术成熟度" /> |
|
|
|
|
</van-popup> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 知识产权情况选择器 --> |
|
|
|
|
<van-popup v-model:show="showIpPicker" position="bottom"> |
|
|
|
|
<van-picker |
|
|
|
|
:columns="enumData.propertyRights" |
|
|
|
|
@confirm="(value) => { |
|
|
|
|
form.intellectual_property = value.selectedValues[0]; |
|
|
|
|
showIpPicker = false |
|
|
|
|
}" |
|
|
|
|
@cancel="showIpPicker = false" |
|
|
|
|
title="选择知识产权情况" |
|
|
|
|
/> |
|
|
|
|
<van-picker :columns="enumData.propertyRights" @confirm="(value) => { |
|
|
|
|
form.intellectual_property = value.selectedValues[0]; |
|
|
|
|
showIpPicker = false |
|
|
|
|
}" @cancel="showIpPicker = false" title="选择知识产权情况" /> |
|
|
|
|
</van-popup> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
@ -349,9 +283,10 @@ const resetForm = async () => { |
|
|
|
|
border-bottom: 1px solid #f5f5f5; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.van-field__label { |
|
|
|
|
.field-wrapper :deep(.van-field__label) { |
|
|
|
|
font-weight: 500; |
|
|
|
|
color: #666; |
|
|
|
|
min-width: 100px; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.van-field__control { |
|
|
|
|
@ -360,7 +295,7 @@ const resetForm = async () => { |
|
|
|
|
|
|
|
|
|
/* 必填项星号颜色 */ |
|
|
|
|
.van-field__required { |
|
|
|
|
color: #f44336; |
|
|
|
|
color: #f77015; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* 提交按钮容器 */ |
|
|
|
|
@ -376,12 +311,12 @@ const resetForm = async () => { |
|
|
|
|
.form-container { |
|
|
|
|
padding: 8px 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.van-field { |
|
|
|
|
padding: 8px 12px; |
|
|
|
|
font-size: 13px; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.submit-btn-container { |
|
|
|
|
padding: 0 12px; |
|
|
|
|
margin-top: 15px; |
|
|
|
|
|