明树Git Lab

Commit ecb5c026 authored by zhanghan's avatar zhanghan

必选处理

parent 4e292e8c
Pipeline #111754 passed with stage
in 18 seconds
...@@ -20,10 +20,10 @@ ...@@ -20,10 +20,10 @@
<div class="project-tab-content"> <div class="project-tab-content">
<el-tabs v-model="lxTabActiveName"> <el-tabs v-model="lxTabActiveName">
<el-tab-pane label="基本信息" name="基本信息"> <el-tab-pane label="基本信息" name="基本信息">
<LixiangBasicInfo /> <LixiangBasicInfo ref="lxBasicInfoRef" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="立项批复" name="立项批复"> <el-tab-pane label="立项批复" name="立项批复">
<LixiangApproval /> <LixiangApproval ref="lxApprovalRef" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
...@@ -36,16 +36,16 @@ ...@@ -36,16 +36,16 @@
> >
<el-tabs v-model="jcTabActiveName"> <el-tabs v-model="jcTabActiveName">
<el-tab-pane label="基本信息" name="基本信息"> <el-tab-pane label="基本信息" name="基本信息">
<JueceBasicInfo /> <JueceBasicInfo ref="jcBasicInfoRef" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="财务评价" name="财务评价"> <el-tab-pane label="财务评价" name="财务评价">
<JueceFinance /> <JueceFinance />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="决策批复" name="决策批复"> <el-tab-pane label="决策批复" name="决策批复">
<JueceApproval /> <JueceApproval ref="jcApprovalRef" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="申请报告" name="申请报告"> <el-tab-pane label="申请报告" name="申请报告">
<JueceReport /> <JueceReport ref="jcReportRef" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-tab-pane> </el-tab-pane>
...@@ -233,6 +233,12 @@ const flowType = computed(() => { ...@@ -233,6 +233,12 @@ const flowType = computed(() => {
return "complex"; return "complex";
}); });
const lxBasicInfoRef = ref();
const lxApprovalRef = ref();
const jcBasicInfoRef = ref();
const jcApprovalRef = ref();
const jcReportRef = ref();
// tab相关 // tab相关
const pageActiveName = ref("立项填报"); const pageActiveName = ref("立项填报");
const lxTabActiveName = ref("基本信息"); const lxTabActiveName = ref("基本信息");
...@@ -572,7 +578,34 @@ const backClick = () => { ...@@ -572,7 +578,34 @@ const backClick = () => {
}; };
// 保存数据 // 保存数据
const saveClick = (type) => { const saveClick = async (type) => {
if (type === "submit") {
const allErrors = [];
const isJuece =
formData.projectLzType && Number(formData.projectLzType) > 4;
const refs = isJuece
? [jcBasicInfoRef, jcApprovalRef, jcReportRef]
: [lxBasicInfoRef, lxApprovalRef];
for (const r of refs) {
try {
await r.value?.validate();
} catch (fields) {
const msgs = Object.values(fields || {})
.flat()
.map((e) => e.message)
.filter(Boolean);
allErrors.push(...msgs);
}
}
if (allErrors.length) {
ElMessageBox.alert(
allErrors.map((msg) => `• ${msg}`).join("<br/>"),
"以下必填项未填写",
{ dangerouslyUseHTMLString: true, type: "warning" },
);
return;
}
}
if (!formData.projectLzType || Number(formData.projectLzType) <= 4) { if (!formData.projectLzType || Number(formData.projectLzType) <= 4) {
let url = formData.id let url = formData.id
? type === "submit" ? type === "submit"
......
<template> <template>
<div class="tab-content"> <div class="tab-content">
<div class="tab-content"> <div class="tab-content">
<el-form :model="jcFormData" :label-width="150" :disabled="isPreview"> <el-form ref="jcApprovalFormRef" :model="jcFormData" :rules="formRules" :validate-on-rule-change="false" :label-width="150" :disabled="isPreview">
<el-collapse v-model="activeCollapse"> <el-collapse v-model="activeCollapse">
<el-collapse-item <el-collapse-item
title="项目投资总额(全口径)" title="项目投资总额(全口径)"
...@@ -529,7 +529,7 @@ ...@@ -529,7 +529,7 @@
</el-table> </el-table>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="其他会议审议情况"> <el-form-item label="其他会议审议情况" prop="jcqthysyqk">
<el-input <el-input
v-model="jcFormData.jcqthysyqk" v-model="jcFormData.jcqthysyqk"
type="textarea" type="textarea"
...@@ -542,7 +542,7 @@ ...@@ -542,7 +542,7 @@
<el-collapse-item title="项目批复信息" name="项目批复信息"> <el-collapse-item title="项目批复信息" name="项目批复信息">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="6"> <el-col :span="6">
<el-form-item label="最终审批意见" label-width="160"> <el-form-item label="最终审批意见" label-width="160" prop="jczzpfyj">
<CommonSelector <CommonSelector
v-model="jcFormData.jczzpfyj" v-model="jcFormData.jczzpfyj"
dictName="spyj" dictName="spyj"
...@@ -550,7 +550,7 @@ ...@@ -550,7 +550,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="项目批复时间"> <el-form-item label="项目批复时间" prop="jcxmpfsj">
<el-date-picker <el-date-picker
v-model="jcFormData.jcxmpfsj" v-model="jcFormData.jcxmpfsj"
type="date" type="date"
...@@ -559,17 +559,17 @@ ...@@ -559,17 +559,17 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="项目批复文号"> <el-form-item label="项目批复文号" prop="jcxmpfwh">
<el-input v-model="jcFormData.jcxmpfwh" /> <el-input v-model="jcFormData.jcxmpfwh" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="审核处室" label-width="160"> <el-form-item label="审核处室" label-width="160" prop="jcpfshcs">
<el-input v-model="jcFormData.jcpfshcs" /> <el-input v-model="jcFormData.jcpfshcs" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="未通过主要原因与要求" label-width="160"> <el-form-item label="未通过主要原因与要求" label-width="160" prop="jcwtgzyyyyyq">
<el-input <el-input
v-model="jcFormData.jcwtgzyyyyyq" v-model="jcFormData.jcwtgzyyyyyq"
type="textarea" type="textarea"
...@@ -675,7 +675,7 @@ ...@@ -675,7 +675,7 @@
<el-collapse-item title="其他" name="其他"> <el-collapse-item title="其他" name="其他">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<el-form-item label-width="160" label="投资主体首次申报时间"> <el-form-item label-width="160" label="投资主体首次申报时间" prop="tzztscsbsj">
<el-date-picker <el-date-picker
v-model="jcFormData.tzztscsbsj" v-model="jcFormData.tzztscsbsj"
type="date" type="date"
...@@ -684,12 +684,12 @@ ...@@ -684,12 +684,12 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label-width="160" label="审核人"> <el-form-item label-width="160" label="审核人" prop="shr">
<el-input v-model="jcFormData.shr" /> <el-input v-model="jcFormData.shr" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label-width="160" label="会签完成时间"> <el-form-item label-width="160" label="会签完成时间" prop="hqwcsj">
<el-date-picker <el-date-picker
v-model="jcFormData.hqwcsj" v-model="jcFormData.hqwcsj"
type="date" type="date"
...@@ -698,7 +698,7 @@ ...@@ -698,7 +698,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label-width="160" label="首次发函时间"> <el-form-item label-width="160" label="首次发函时间" prop="scfhsj">
<el-date-picker <el-date-picker
v-model="jcFormData.scfhsj" v-model="jcFormData.scfhsj"
type="date" type="date"
...@@ -707,7 +707,7 @@ ...@@ -707,7 +707,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label-width="160" label="补充资料时间"> <el-form-item label-width="160" label="补充资料时间" prop="bczlsj">
<el-date-picker <el-date-picker
v-model="jcFormData.bczlsj" v-model="jcFormData.bczlsj"
type="date" type="date"
...@@ -724,10 +724,43 @@ ...@@ -724,10 +724,43 @@
</template> </template>
<script setup> <script setup>
import { inject } from "vue"; import { inject, ref } from "vue";
import CommonSelector from "@/components/CommonSelector.vue"; import CommonSelector from "@/components/CommonSelector.vue";
import FileUploader from "@/components/FileUploader/index.vue"; import FileUploader from "@/components/FileUploader/index.vue";
const jcApprovalFormRef = ref();
const requiredInput = (msg) => ({
required: true,
message: `请输入${msg}`,
trigger: "blur",
});
const requiredSelect = (msg) => ({
required: true,
message: `请选择${msg}`,
trigger: [],
});
const formRules = {
jcqthysyqk: [requiredInput("其他会议审议情况")],
jczzpfyj: [requiredSelect("最终审批意见")],
jcxmpfsj: [requiredSelect("项目批复时间")],
jcxmpfwh: [requiredInput("项目批复文号")],
jcpfshcs: [requiredInput("审核处室")],
jcwtgzyyyyyq: [requiredInput("未通过主要原因与要求")],
tzztscsbsj: [requiredSelect("投资主体首次申报时间")],
shr: [requiredInput("审核人")],
hqwcsj: [requiredSelect("会签完成时间")],
scfhsj: [requiredSelect("首次发函时间")],
bczlsj: [requiredSelect("补充资料时间")],
};
const validate = () => {
return jcApprovalFormRef.value?.validate();
};
defineExpose({ validate });
const { const {
jcFormData, jcFormData,
isPreview, isPreview,
...@@ -757,3 +790,9 @@ const { ...@@ -757,3 +790,9 @@ const {
token, token,
} = inject("jcShared"); } = inject("jcShared");
</script> </script>
<style scoped>
.tab-content :deep(.el-form-item__error) {
display: none;
}
</style>
...@@ -2,7 +2,10 @@ ...@@ -2,7 +2,10 @@
<div class="tab-content"> <div class="tab-content">
<div class="tab-content"> <div class="tab-content">
<el-form <el-form
ref="lxApprovalFormRef"
:model="formData" :model="formData"
:rules="formRules"
:validate-on-rule-change="false"
:label-width="150" :label-width="150"
:disabled="isPreview || Number(formData.projectLzType) >= 5" :disabled="isPreview || Number(formData.projectLzType) >= 5"
> >
...@@ -198,17 +201,17 @@ ...@@ -198,17 +201,17 @@
<el-collapse-item title="项目立项信息" name="项目立项信息"> <el-collapse-item title="项目立项信息" name="项目立项信息">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="其他会议审议情况"> <el-form-item label="其他会议审议情况" prop="qthysyqk">
<el-input v-model="formData.qthysyqk" type="textarea" /> <el-input v-model="formData.qthysyqk" type="textarea" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="6">
<el-form-item label="立项最终审批意见"> <el-form-item label="立项最终审批意见" prop="lxzzpfyj">
<CommonSelector v-model="formData.lxzzpfyj" dictName="spyj" /> <CommonSelector v-model="formData.lxzzpfyj" dictName="spyj" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="6">
<el-form-item label="项目立项批复时间"> <el-form-item label="项目立项批复时间" prop="lxxmpfsj">
<el-date-picker <el-date-picker
v-model="formData.lxxmpfsj" v-model="formData.lxxmpfsj"
type="date" type="date"
...@@ -216,13 +219,18 @@ ...@@ -216,13 +219,18 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="6">
<el-form-item label="立项项目批复文号"> <el-form-item label="立项项目批复文号" prop="lxxmpfwh">
<el-input v-model="formData.lxxmpfwh" /> <el-input v-model="formData.lxxmpfwh" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item label="审核处室" prop="jcpfshcs">
<el-input v-model="formData.jcpfshcs" />
</el-form-item>
</el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="未通过主要原因与要求"> <el-form-item label="未通过主要原因与要求" prop="wtgzyyyyyq">
<el-input v-model="formData.wtgzyyyyyq" type="textarea" /> <el-input v-model="formData.wtgzyyyyyq" type="textarea" />
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -250,11 +258,39 @@ ...@@ -250,11 +258,39 @@
</template> </template>
<script setup> <script setup>
import { inject } from "vue"; import { inject, ref } from "vue";
import CommonSelector from "@/components/CommonSelector.vue"; import CommonSelector from "@/components/CommonSelector.vue";
import FormDynamicTable from "@/components/FormDynamicTable/index.vue"; import FormDynamicTable from "@/components/FormDynamicTable/index.vue";
import FileUploader from "@/components/FileUploader/index.vue"; import FileUploader from "@/components/FileUploader/index.vue";
const lxApprovalFormRef = ref();
const requiredInput = (msg) => ({
required: true,
message: `请输入${msg}`,
trigger: "blur",
});
const requiredSelect = (msg) => ({
required: true,
message: `请选择${msg}`,
trigger: [],
});
const formRules = {
qthysyqk: [requiredInput("其他会议审议情况")],
lxzzpfyj: [requiredSelect("立项最终审批意见")],
lxxmpfsj: [requiredSelect("项目立项批复时间")],
lxxmpfwh: [requiredInput("立项项目批复文号")],
jcpfshcs: [requiredInput("审核处室")],
wtgzyyyyyq: [requiredInput("未通过主要原因与要求")],
};
const validate = () => {
return lxApprovalFormRef.value?.validate();
};
defineExpose({ validate });
const { const {
formData, formData,
isPreview, isPreview,
...@@ -302,3 +338,9 @@ const updateSpyjTable = (val) => { ...@@ -302,3 +338,9 @@ const updateSpyjTable = (val) => {
spyjTableData.splice(0, spyjTableData.length, ...val); spyjTableData.splice(0, spyjTableData.length, ...val);
}; };
</script> </script>
<style scoped>
.tab-content :deep(.el-form-item__error) {
display: none;
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment