明树Git Lab

Commit 7e4f239c authored by yangyajing's avatar yangyajing

决策表单开发

parent af84499e
Pipeline #104361 passed with stage
in 13 seconds
...@@ -144,8 +144,8 @@ ...@@ -144,8 +144,8 @@
<div class="target-name">{{ target.name }}</div> <div class="target-name">{{ target.name }}</div>
<div class="target-value" <div class="target-value"
:class="{ :class="{
'target-green': !isNaN(target.value) && target.value > 0, 'target-green': !isNaN(target.value) && target.value < 0,
'target-red': !isNaN(target.value) && target.value < 0, 'target-red': !isNaN(target.value) && target.value > 0,
}" }"
> >
{{ target.value }} {{ target.value }}
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
label-width="70px" label-width="70px"
class="login-form" class="login-form"
labelPosition="top" labelPosition="top"
@keydown.enter="handleLogin"
> >
<el-form-item label="用户名" prop="username"> <el-form-item label="用户名" prop="username">
<el-input <el-input
......
...@@ -8,8 +8,10 @@ ...@@ -8,8 +8,10 @@
<div class="header-left"></div> <div class="header-left"></div>
<div class="header-right"> <div class="header-right">
<el-button type="default" @click="backClick">返回</el-button> <el-button type="default" @click="backClick">返回</el-button>
<el-button type="primary" v-if="formData.projectLzType === 1 || !formData.projectLzType" @click="saveClick('save')">保存</el-button> <template v-if="!loading">
<el-button type="primary" v-if="formData.projectLzType === 1" @click="saveClick('submit')">发起立项填报</el-button> <el-button type="primary" v-if="formData.projectLzType === 1 || !formData.projectLzType" @click="saveClick('save')">保存</el-button>
<el-button type="primary" v-if="formData.projectLzType === 1" @click="saveClick('submit')">发起立项填报</el-button>
</template>
</div> </div>
</div> </div>
<el-tabs v-model="lxTabActiveName"> <el-tabs v-model="lxTabActiveName">
...@@ -52,11 +54,7 @@ ...@@ -52,11 +54,7 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="投资主体"> <el-form-item label="投资主体">
<el-select v-model="formData.tzzt" placeholder="请选择"> <el-input v-model="formData.tzzt" />
<el-option v-for="item in tzztList" :key="item.value"
:label="item.value" :value="item.key"
></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
...@@ -784,7 +782,7 @@ ...@@ -784,7 +782,7 @@
</el-tabs> </el-tabs>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="决策信息填报" name="决策信息填报" v-if="[5,7].includes(jcFormData.projectLzType)"> <el-tab-pane label="决策信息填报" name="决策信息填报" v-if="formData.projectLzType === 5 || formData.projectLzType === 7">
<div class="project-tab-content"> <div class="project-tab-content">
<div class="add-project-header"> <div class="add-project-header">
<div class="header-left"></div> <div class="header-left"></div>
...@@ -797,7 +795,7 @@ ...@@ -797,7 +795,7 @@
<el-tabs v-model="jcTabActiveName"> <el-tabs v-model="jcTabActiveName">
<el-tab-pane label="基本信息" name="基本信息"> <el-tab-pane label="基本信息" name="基本信息">
<div class="tab-content"> <div class="tab-content">
<el-form :model="jcFormData" :label-width="150" :disabled="isPreview || [5,7].includes(jcFormData.projectLzType)"> <el-form :model="jcFormData" :label-width="150" :disabled="isPreview">
<el-collapse v-model="activeCollapse"> <el-collapse v-model="activeCollapse">
<el-collapse-item title="项目基本信息" name="项目基本信息"> <el-collapse-item title="项目基本信息" name="项目基本信息">
<el-row :gutter="20"> <el-row :gutter="20">
...@@ -1508,10 +1506,59 @@ ...@@ -1508,10 +1506,59 @@
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="我方担保及债权融资情况" name="我方担保及债权融资情况"> <el-collapse-item title="我方担保及债权融资情况" name="我方担保及债权融资情况">
<!-- wffzdzqrzjewy: { type: DataTypes.DECIMAL(19, 8), allowNull: true, comment: "我方负责的债权融资金额(万元)" }, <div class="tab-handle">
rzcbzq: { type: DataTypes.DECIMAL(19, 8), allowNull: true, comment: "融资成本债权" }, <el-button type="primary" size="small" @click="addDbzq">新增</el-button>
qxzq: { type: DataTypes.INTEGER, allowNull: true, comment: "期限债权" },TODO: </div>
yjldsjzq: { type: DataTypes.DATE, allowNull: true, comment: "预计落地时间债权" },建表 --> <el-table :data="dbzqData" style="width: 100%" empty-text="暂无数据" border>
<el-table-column type="index" width="50" />
<el-table-column prop="wffzdzqrzjewy" label="金额">
<template #default="scope">
<el-input-number v-model="scope.row.wffzdzqrzjewy" :min="0" :precision="2" :max="999.99"
controls-position="right"
>
<template #suffix>
<span>万元</span>
</template>
</el-input-number>
</template>
</el-table-column>
<el-table-column prop="rzcbzq" label="融资成本">
<template #default="scope">
<el-input-number v-model="scope.row.rzcbzq" :min="0" :precision="2" :max="999.99"
controls-position="right"
>
<template #suffix>
<span>%</span>
</template>
</el-input-number>
</template>
</el-table-column>
<el-table-column prop="qxzq" label="期限">
<template #default="scope">
<el-input-number v-model="scope.row.qxzq" :min="0" :precision="2" :max="999.99"
controls-position="right"
>
<template #suffix>
<span></span>
</template>
</el-input-number>
</template>
</el-table-column>
<el-table-column prop="yjldsjzq" label="预计落地时间">
<template #default="scope">
<el-date-picker
v-model="scope.row.yjldsjzq"
type="date"
placeholder="请选择"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="60">
<template #default="scope">
<el-button link type="danger" size="small" @click="deleteDbzq(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="工程带动情况" name="工程带动情况"> <el-collapse-item title="工程带动情况" name="工程带动情况">
<el-row :gutter="20"> <el-row :gutter="20">
...@@ -1658,53 +1705,6 @@ ...@@ -1658,53 +1705,6 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="审批意见" name="审批意见">
<div class="tab-handle">
<el-button type="primary" size="small" @click="addSpyj">新增</el-button>
</div>
<el-table :data="spyjTableData" style="width: 100%" empty-text="暂无数据" border>
<el-table-column type="index" width="50" />
<el-table-column prop="lx" label="类型">
<template #default="scope">
<el-select v-model="scope.row.lx" placeholder="请选择">
<el-option label="类型1" value="类型1"></el-option>
<el-option label="类型2" value="类型2"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="批复意见" prop="pfyj">
<template #default="scope">
<el-input v-model="scope.row.pfyj" type="textarea" />
</template>
</el-table-column>
<el-table-column label="批复意见时间" prop="pfyjsj">
<template #default="scope">
<el-date-picker
v-model="scope.row.pfyjsj"
type="date"
placeholder="请选择"
/>
</template>
</el-table-column>
<el-table-column label="执行回复" prop="zxhf">
<template #default="scope">
<el-input v-model="scope.row.zxhf" type="textarea" />
</template>
</el-table-column>
<el-table-column label="执行回复时间" prop="zxhfsj">
<template #default="scope">
<el-date-picker
v-model="scope.row.zxhfsj"
type="date"
placeholder="请选择"
/>
</template>
</el-table-column>
<el-table-column label="执行回复附件" prop="zxhffj">
<!-- TODO: 文件上传 和 文件信息展示 暂时只有一个文件 -->
</el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item title="投评决策资料" name="投评决策资料"> <el-collapse-item title="投评决策资料" name="投评决策资料">
<el-form-item label="可研材料" :label-width="160"> <el-form-item label="可研材料" :label-width="160">
<el-upload <el-upload
...@@ -1809,7 +1809,7 @@ ...@@ -1809,7 +1809,7 @@
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="决策批复" name="决策批复"> <el-tab-pane label="决策批复" name="决策批复">
<div class="tab-content"> <div class="tab-content">
<el-form :model="jcFormData" :label-width="150" :disabled="isPreview || [5,7].includes(jcFormData.projectLzType)"> <el-form :model="jcFormData" :label-width="150" :disabled="isPreview">
<el-collapse v-model="activeCollapse"> <el-collapse v-model="activeCollapse">
<el-collapse-item title="项目投资总额(全口径)" name="项目投资总额(全口径)"> <el-collapse-item title="项目投资总额(全口径)" name="项目投资总额(全口径)">
<el-table :data="jcTzzeqkjData" style="width: 100%" empty-text="暂无数据" <el-table :data="jcTzzeqkjData" style="width: 100%" empty-text="暂无数据"
...@@ -2001,7 +2001,25 @@ ...@@ -2001,7 +2001,25 @@
<el-input v-model="scope.row.jcjl" type="textarea" /> <el-input v-model="scope.row.jcjl" type="textarea" />
</template> </template>
</el-table-column> </el-table-column>
<!-- TODO: 会议纪要 hyjy 文件上传 --> <el-table-column label="会议纪要" prop="hyjy">
<template #default="scope">
<el-upload
v-if="!scope.row.hyjy"
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{Authorization: '8681f75e775447f7903708c55a35634e'}"
:show-file-list="false"
:on-success="(res, file) => addJcztshqkFile(res, file, scope.row)"
>
<el-button link type="primary">上传</el-button>
</el-upload>
<div class="upload-file-wrap" v-else>
<span class="file-name" @click="downloadFile(scope.row.hyjy)">{{ scope.row.hyjy.originalname }}</span>
<span class="delete-btn" @click="deleteJcztshqkFile(scope.row, scope.$index)">
<el-icon><CloseBold /></el-icon>
</span>
</div>
</template>
</el-table-column>
<el-table-column prop="qtsm" label="其他说明"> <el-table-column prop="qtsm" label="其他说明">
<template #default="scope"> <template #default="scope">
<el-input v-model="scope.row.qtsm" type="textarea" /> <el-input v-model="scope.row.qtsm" type="textarea" />
...@@ -2047,7 +2065,25 @@ ...@@ -2047,7 +2065,25 @@
<el-input v-model="scope.row.jl" type="textarea" /> <el-input v-model="scope.row.jl" type="textarea" />
</template> </template>
</el-table-column> </el-table-column>
<!-- TODO: 附件 fj 文件上传 --> <el-table-column label="附件" prop="fj">
<template #default="scope">
<el-upload
v-if="!scope.row.fj"
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{Authorization: '8681f75e775447f7903708c55a35634e'}"
:show-file-list="false"
:on-success="(res, file) => addTzztshqkFile(res, file, scope.row)"
>
<el-button link type="primary">上传</el-button>
</el-upload>
<div class="upload-file-wrap" v-else>
<span class="file-name" @click="downloadFile(scope.row.fj)">{{ scope.row.fj.originalname }}</span>
<span class="delete-btn" @click="deleteTzztshqkFile(scope.row, scope.$index)">
<el-icon><CloseBold /></el-icon>
</span>
</div>
</template>
</el-table-column>
<el-table-column prop="qtsm" label="其他说明"> <el-table-column prop="qtsm" label="其他说明">
<template #default="scope"> <template #default="scope">
<el-input v-model="scope.row.qtsm" type="textarea" /> <el-input v-model="scope.row.qtsm" type="textarea" />
...@@ -2070,7 +2106,7 @@ ...@@ -2070,7 +2106,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="最终审批意见"> <el-form-item label="最终审批意见" label-width="160">
<el-select v-model="jcFormData.jczzpfyj" placeholder="请选择"> <el-select v-model="jcFormData.jczzpfyj" placeholder="请选择">
<el-option label="类型1" value="类型1"></el-option> <el-option label="类型1" value="类型1"></el-option>
<el-option label="类型2" value="类型2"></el-option> <el-option label="类型2" value="类型2"></el-option>
...@@ -2092,7 +2128,7 @@ ...@@ -2092,7 +2128,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="未通过主要原因与要求"> <el-form-item label="未通过主要原因与要求" label-width="160">
<el-input v-model="jcFormData.jcwtgzyyyyyq" type="textarea" /> <el-input v-model="jcFormData.jcwtgzyyyyyq" type="textarea" />
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -2126,6 +2162,39 @@ ...@@ -2126,6 +2162,39 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="执行回复" prop="zxhf">
<template #default="scope">
<el-input v-model="scope.row.zxhf" type="textarea" />
</template>
</el-table-column>
<el-table-column label="执行回复时间" prop="zxhfsj">
<template #default="scope">
<el-date-picker
v-model="scope.row.zxhfsj"
type="date"
placeholder="请选择"
/>
</template>
</el-table-column>
<el-table-column label="执行回复附件" prop="zxhffj">
<template #default="scope">
<el-upload
v-if="!scope.row.zxhffj"
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{Authorization: '8681f75e775447f7903708c55a35634e'}"
:show-file-list="false"
:on-success="(res, file) => addJcspyjFile(res, file, scope.row)"
>
<el-button link type="primary">上传</el-button>
</el-upload>
<div class="upload-file-wrap" v-else>
<span class="file-name" @click="downloadFile(scope.row.zxhffj)">{{ scope.row.zxhffj.originalname }}</span>
<span class="delete-btn" @click="deleteRowFile(scope.row, scope.$index)">
<el-icon><CloseBold /></el-icon>
</span>
</div>
</template>
</el-table-column>
<el-table-column label="操作" width="60"> <el-table-column label="操作" width="60">
<template #default="scope"> <template #default="scope">
<el-button link type="danger" size="small" @click="deleteJcspyj(scope.$index)">删除</el-button> <el-button link type="danger" size="small" @click="deleteJcspyj(scope.$index)">删除</el-button>
...@@ -2208,7 +2277,7 @@ ...@@ -2208,7 +2277,7 @@
"项目基本信息","项目所在地", "计量币种", "实施时间", "投资分类", "特别关注、特别监管类等信息", "项目基本信息","项目所在地", "计量币种", "实施时间", "投资分类", "特别关注、特别监管类等信息",
"建设规模(实物量指标)", "股东信息", "项目必要性及可行性", "立项资料", "项目投资总额(全口径)", "建设规模(实物量指标)", "股东信息", "项目必要性及可行性", "立项资料", "项目投资总额(全口径)",
"财务评价指标", "核心边界条件", "项目立项信息", "审批意见", "政府审批(核准、备案)情况", "财务评价指标", "核心边界条件", "项目立项信息", "审批意见", "政府审批(核准、备案)情况",
"我方担保及融资情况", "工程带动情况", "项目内容及必要性", "风险管理", "里程碑节点", "投评决策资料", "我方担保及股权融资情况", "我方担保及债权融资情况", "工程带动情况", "项目内容及必要性", "风险管理", "里程碑节点", "投评决策资料",
"决策主体审核情况", "投资主体审核情况", "项目批复信息", "其他" "决策主体审核情况", "投资主体审核情况", "项目批复信息", "其他"
]); ]);
let formData = reactive({}); let formData = reactive({});
...@@ -2409,6 +2478,14 @@ ...@@ -2409,6 +2478,14 @@
const deleteJcSwlzb = (index) => { const deleteJcSwlzb = (index) => {
jcSwlzbData.splice(index, 1); jcSwlzbData.splice(index, 1);
}; };
// 我方担保及债权融资情况
let dbzqData = reactive([]);
const addDbzq = () => {
dbzqData.push({});
};
const deleteDbzq = (index) => {
dbzqData.splice(index, 1);
};
// 风险管理 // 风险管理
let fxglData = reactive([]); let fxglData = reactive([]);
const addFxgl = () => { const addFxgl = () => {
...@@ -2702,6 +2779,14 @@ ...@@ -2702,6 +2779,14 @@
const deleteJcztshqk = (index) => { const deleteJcztshqk = (index) => {
jcztshqkData.splice(index, 1); jcztshqkData.splice(index, 1);
} }
const addJcztshqkFile = (res, file, row) => {
row.hyjy = {};
Object.assign(row.hyjy, res.data);
};
const deleteJcztshqkFile = (row, index) => {
let {hyjy, ...data} = row;
jcztshqkData[index] = data;
};
// 投资主体审核情况 // 投资主体审核情况
let tzztshqkData = reactive([]); let tzztshqkData = reactive([]);
const addTzztshqk = () => { const addTzztshqk = () => {
...@@ -2710,6 +2795,14 @@ ...@@ -2710,6 +2795,14 @@
const deleteTzztshqk = (index) => { const deleteTzztshqk = (index) => {
tzztshqkData.splice(index, 1); tzztshqkData.splice(index, 1);
} }
const addTzztshqkFile = (res, file, row) => {
row.fj = {};
Object.assign(row.fj, res.data);
};
const deleteTzztshqkFile = (row, index) => {
let {fj, ...data} = row;
tzztshqkData[index] = data;
};
// 审批意见 // 审批意见
let jcspyjData = reactive([]); let jcspyjData = reactive([]);
const addJcspyj = () => { const addJcspyj = () => {
...@@ -2718,9 +2811,26 @@ ...@@ -2718,9 +2811,26 @@
const deleteJcspyj = (index) => { const deleteJcspyj = (index) => {
jcspyjData.splice(index, 1); jcspyjData.splice(index, 1);
} }
const addJcspyjFile = (res, file, row) => {
row.zxhffj = {};
Object.assign(row.zxhffj, res.data);
};
const deleteRowFile = (row, index) => {
let {zxhffj, ...data} = row;
jcspyjData[index] = data;
};
// 下载已上传文件
const downloadFile = (data) => {
let a = document.createElement("a");
a.href = `${proxy.windowConfig.baseUrl}/api/file/download/${data.id}`;
a.download = data.originalname;
document.body.appendChild(a);
a.click();
a.remove();
};
// 获取资源库数据 // 获取资源库数据
let tzztList = reactive([]); // 投资主体
let zyList = reactive([]); // 主页/非主业 let zyList = reactive([]); // 主页/非主业
let cwbblxList = reactive([]); // 财务报表类型 let cwbblxList = reactive([]); // 财务报表类型
let zfspjbList = reactive([]); // 政府审批(核准、备案)级别 let zfspjbList = reactive([]); // 政府审批(核准、备案)级别
...@@ -2817,12 +2927,28 @@ ...@@ -2817,12 +2927,28 @@
// 决策 // 决策
let jcData = res.juece || res.lixiang || {}; let jcData = res.juece || res.lixiang || {};
Object.assign(jcFormData, jcData); Object.assign(jcFormData, jcData);
Object.assign(jcSwlzbData, jcData.projectJsgms);
Object.assign(dbzqData, jcData.projectZqrzs);
Object.assign(fxglData, jcData.projectFxgls);
Object.assign(gdxxData, jcData.projectGdxxs);
Object.assign(lcbjdData, jcData.projectLcbjds);
Object.assign(lcbspData.value, jcData.lcbjhspb);
Object.assign(kyclData.value, jcData.kycl);
Object.assign(jjzbcsData.value, jcData.jjzbcbcscl);
Object.assign(tpzcclData.value, jcData.qtxgzccl);
Object.assign(shyaData.value, jcData.shya);
Object.assign(jcTzzeqkjData, jcData.projectXmtzzes);
Object.assign(jcCwpjzbData, jcData.projectCwpjzbs);
Object.assign(jcHxbjtjData, jcData.projectBjtjs);
Object.assign(jcztshqkData, jcData.projectJczts);
Object.assign(tzztshqkData, jcData.projectTzzts);
Object.assign(jcspyjData, jcData.projectSpyjs);
} }
}); });
}; };
onMounted(() => { onMounted(() => {
projectId && getProjectInfo(); projectId && getProjectInfo();
getResourceData(); // getResourceData();
}) })
// 返回列表页 // 返回列表页
...@@ -2868,10 +2994,11 @@ ...@@ -2868,10 +2994,11 @@
let params = { let params = {
...jcFormData, ...jcFormData,
projectJsgms: jcSwlzbData, projectJsgms: jcSwlzbData,
projectFxgl: fxglData, projectZqrzs: dbzqData,
projectFxgls: fxglData,
projectGdxxs: gdxxData, projectGdxxs: gdxxData,
projectLcbjds: lcbjdData, projectLcbjds: lcbjdData,
// lcbjhspb: lcbspData.value, lcbjhspb: lcbspData.value,
kycl: kyclData.value, kycl: kyclData.value,
jjzbcbcscl: jjzbcsData.value, jjzbcbcscl: jjzbcsData.value,
qtxgzccl: tpzcclData.value, qtxgzccl: tpzcclData.value,
...@@ -2879,9 +3006,9 @@ ...@@ -2879,9 +3006,9 @@
projectXmtzzes: jcTzzeqkjData, projectXmtzzes: jcTzzeqkjData,
projectCwpjzbs: jcCwpjzbData, projectCwpjzbs: jcCwpjzbData,
projectBjtjs: jcHxbjtjData, projectBjtjs: jcHxbjtjData,
projectJczt: jcztshqkData, projectJczts: jcztshqkData,
projectTzzt: tzztshqkData, projectTzzts: tzztshqkData,
projectSpyj: jcspyjData projectSpyjs: jcspyjData
} }
proxy.$post({ proxy.$post({
url: "/api/project/" + url, url: "/api/project/" + url,
...@@ -2946,6 +3073,25 @@ ...@@ -2946,6 +3073,25 @@
} }
} }
} }
.upload-file-wrap{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.file-name{
flex: 1;
width: 0;
color: #409eff;
cursor: pointer;
-webkit-background-clip: text;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.delete-btn{
cursor: pointer;
color: #F56C6C;
}
}
} }
} }
.project-tab-content{ .project-tab-content{
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
{ {
prop: "operations", prop: "operations",
label: "操作", label: "操作",
width: 160, width: 200,
slot: "operations", slot: "operations",
fixed: "right", fixed: "right",
align: "center" align: "center"
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
{ {
prop: "operations", prop: "operations",
label: "操作", label: "操作",
width: 160, width: 170,
slot: "operations", slot: "operations",
fixed: "right", fixed: "right",
align: "center" align: "center"
...@@ -126,6 +126,9 @@ ...@@ -126,6 +126,9 @@
const previewProject = (item) => { const previewProject = (item) => {
router.push({ router.push({
name: "addProject", name: "addProject",
params: {
type: "xmlingxuan"
},
query: { query: {
isPreview: true, isPreview: true,
projectId: item.id projectId: item.id
......
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