明树Git Lab

Commit a371fcfa authored by zhanghan's avatar zhanghan

表单样式处理

parent e114f81a
Pipeline #108564 passed with stage
in 20 seconds
......@@ -175,7 +175,7 @@
<!-- 操作按钮 -->
<el-col :span="buttonSpan || 6">
<el-form-item>
<el-form-item label=" ">
<div class="search-form-buttons">
<el-button type="primary" :icon="Search" @click="handleSearch">
{{ searchText || "搜索" }}
......@@ -435,9 +435,5 @@ initFormData(false);
:deep(.el-input-number) {
width: 100%;
}
.el-col-6.is-guttered {
padding: 0px 24px !important;
}
}
</style>
......@@ -504,7 +504,7 @@ const handleNextClick = (val) => {
.common-table {
background: #fff;
border-radius: 8px;
padding: 10px 20px;
padding: 16px 20px 20px 20px;
.table-header {
display: flex;
......
<template>
<div>
<div class="add-project-back">
<div class="back" @click="() => router.back()">
<el-icon class="backIcon"><ArrowLeft /></el-icon>
<span class="backText">返回</span>
</div>
<span class="backName">{{ route.meta.title }}</span>
</div>
</div>
</template>
<script setup>
import { useRouter, useRoute } from "vue-router";
const route = useRoute();
const router = useRouter();
</script>
<style scoped lang="scss">
.add-project-back {
margin-bottom: 16px;
display: flex;
align-items: center;
.back {
display: flex;
align-items: center;
opacity: 1;
font-size: 14px;
font-weight: 400;
color: rgba(51, 51, 51, 1);
cursor: pointer;
&:hover {
color: #409eff;
}
}
.backName {
margin-left: 17px;
height: 24px;
font-size: 16px;
font-weight: 700;
color: rgba(51, 51, 51, 1);
}
}
</style>
......@@ -15,7 +15,7 @@ import "../public/iconFont/iconfont.css"; // 图标字体样式
import { $get, $post } from "@/data/https.js";
import windowConfig from "@/window";
import moment from "moment";
import "@/styles/manage.less";
const pinia = createPinia();
const app = createApp(App);
app.config.globalProperties.$get = $get;
......
......@@ -82,8 +82,8 @@ const routes = [
{
path: "/addProject",
name: "addProject",
title: "新增项目",
meta: { title: "新增项目详情" }, // 修改:新增项目 → 新增项目详情
title: "项目详情",
meta: { title: "项目详情" },
component: () => import("@/views/projectManage/addProject.vue"),
},
],
......@@ -362,16 +362,16 @@ const routes = [
{
path: "/informationConstruction",
name: "informationConstruction",
title: "信息化建设",
meta: { title: "信息化建设" },
title: "问题反馈",
meta: { title: "问题反馈" },
component: () =>
import("@/views/everydayPage/informationConstruction.vue"),
},
{
path: "/informationConstructionAdd",
name: "informationConstructionAdd",
title: "信息化建设",
meta: { title: "信息化建设详情" }, // 修改:信息化建设 → 信息化建设详情
title: "问题反馈",
meta: { title: "问题反馈详情" },
component: () =>
import("@/views/everydayPage/informationConstructionAdd.vue"),
},
......
.system-manage-container {
padding: 16px;
background: #ecf2f8;
height: 100%;
display: flex;
flex-direction: column;
box-sizing: border-box;
}
.add-project-content {
background-color: #fff;
padding-top: 16px;
padding-right: 16px;
}
.system-manage-header {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
......@@ -32,7 +26,6 @@
.system-manage-content {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.manage-search {
......@@ -64,7 +57,7 @@
.manage-container {
width: 100%;
height: 100%;
padding: 24px 24px 0 24px;
padding: 16px 16px 0 16px;
box-sizing: border-box;
display: flex;
flex-direction: column;
......@@ -80,7 +73,6 @@
padding-right: 16px;
display: flex;
justify-content: space-between;
padding-bottom: 10px;
background-color: #fff;
}
.manage-content {
......@@ -106,7 +98,6 @@
}
.add-project-container {
width: 100%;
height: 100%;
padding: 16px;
box-sizing: border-box;
display: flex;
......@@ -116,9 +107,12 @@
color: var(--el-color-primary);
}
.add-project-header {
border: none;
height: 64px;
display: flex;
justify-content: space-between;
margin-bottom: 10px;
align-items: center;
margin-bottom: 0;
margin-top: 10px;
}
.add-project-content {
flex: 1;
......@@ -241,7 +235,6 @@
align-items: center;
}
.add-project-content .project-tab-content {
padding: 0 20px;
height: 100%;
}
.add-dialog .el-tree {
......@@ -292,3 +285,39 @@
font-size: 12px;
color: #969696;
}
.el-form-item__label {
min-width: 100px;
max-width: 200px;
font-weight: 400;
font-size: 14px;
color: #333333;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
line-height: 1.2;
}
.el-input-number,
.el-date-editor,
.el-cascader,
.el-tree-select .el-select,
.el-input,
.el-date-editor {
width: 100% !important;
}
.add-project-content {
background-color: #fff;
padding-top: 16px;
padding-right: 16px;
padding: 16px 16px 0 16px;
}
.add-project-content .el-collapse {
border: none;
}
.add-project-content .el-collapse-item__header {
background-color: #f5f7fa;
height: 48px !important;
padding: 16px;
margin: 0;
margin-bottom: 24px;
}
.system-manage-container {
padding: 16px;
background: #ecf2f8;
height: 100%;
display: flex;
......@@ -7,12 +6,6 @@
box-sizing: border-box;
}
.add-project-content {
background-color: #fff;
padding-top: 16px;
padding-right: 16px;
}
.system-manage-header {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
......@@ -34,7 +27,6 @@
.system-manage-content {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.manage-search {
......@@ -70,7 +62,7 @@
&-container {
width: 100%;
height: 100%;
padding: 24px 24px 0 24px;
padding: 16px 16px 0 16px;
box-sizing: border-box;
display: flex;
......@@ -88,7 +80,6 @@
padding-right: 16px;
display: flex;
justify-content: space-between;
padding-bottom: 10px;
background-color: #fff;
}
&-content {
......@@ -117,7 +108,6 @@
.add-project {
&-container {
width: 100%;
height: 100%;
padding: 16px;
box-sizing: border-box;
display: flex;
......@@ -127,10 +117,14 @@
}
}
&-header {
border: none;
height: 64px;
display: flex;
justify-content: space-between;
margin-bottom: 10px;
align-items: center;
margin-bottom: 0;
margin-top: 10px;
}
&-content {
flex: 1;
height: 0;
......@@ -253,11 +247,11 @@
align-items: center;
}
.project-tab-content {
padding: 0 20px;
height: 100%;
}
}
}
.add-dialog {
.el-tree {
width: 100%;
......@@ -313,3 +307,47 @@
}
}
}
// ==========================设置定制化样式 start ==========================
.el-form-item__label {
min-width: 100px;
max-width: 200px;
font-weight: 400;
font-size: 14px;
color: rgba(51, 51, 51, 1);
height: 32px;
display: flex;
align-items: center;
justify-content: center;
line-height: 1.2;
}
.el-input-number,
.el-date-editor,
.el-cascader,
.el-tree-select .el-select,
.el-input,
.el-date-editor {
width: 100% !important;
}
.add-project-content {
background-color: #fff;
padding-top: 16px;
padding-right: 16px;
padding: 16px 16px 0 16px;
// .el-tabs--border-card {
// border: none;
// }
.el-collapse {
border: none;
}
.el-collapse-item__header {
background-color: #f5f7fa;
height: 48px !important;
padding: 16px;
margin: 0;
margin-bottom: 24px;
}
}
// ==========================设置定制化样式 end ==========================
......@@ -185,6 +185,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<!-- 项目信息 -->
<el-collapse-item title="项目信息" name="项目信息">
......@@ -157,6 +149,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -168,7 +169,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
import FileUploader from "../../components/FileUploader/index.vue";
// 引入增强后的DynamicTable组件
import DynamicTable from "../../components/FormDynamicTable/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// 初始化全局变量
const router = useRouter();
const route = useRoute();
......@@ -399,8 +400,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
.add-project-container {
padding: 20px;
background: #f5f7fa;
......
......@@ -175,6 +175,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" label-width="150" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<el-collapse-item title="项目基本信息" name="项目基本信息">
<el-row :gutter="24">
......@@ -359,6 +351,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -369,6 +370,7 @@ import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import DynamicTable from "@/components/FormDynamicTable/index.vue";
import FinancialTable from "@/components/FinancialTable.vue";
import routerBack from "@/components/common/routerBack.vue";
const transferColumns = ref([
{
prop: "njfcgbl",
......@@ -702,9 +704,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
// @import "@/styles/manage.less";
.DynamicTable-slot {
display: flex;
div {
......
......@@ -159,6 +159,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<!-- 基本信息 -->
<el-collapse-item title="基本信息" name="基本信息">
......@@ -70,6 +62,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -79,6 +80,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus";
import DynamicTable from "@/components/FormDynamicTable/index.vue"; // 引入通用组件
import routerBack from "@/components/common/routerBack.vue";
// 初始化全局变量
const router = useRouter();
const route = useRoute();
......@@ -316,6 +318,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -194,6 +194,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<!-- 项目信息 -->
<el-collapse-item title="项目信息" name="项目信息">
......@@ -81,6 +73,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -90,7 +91,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import DynamicTable from "@/components/FormDynamicTable/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// 路由与全局实例
const router = useRouter();
const route = useRoute();
......@@ -246,6 +247,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -187,6 +187,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<!-- 项目信息 -->
<el-collapse-item title="项目信息" name="项目信息">
......@@ -61,6 +53,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -70,7 +71,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import costTab from "./costTab1.vue";
import routerBack from "@/components/common/routerBack.vue";
// 路由与全局实例
const router = useRouter();
const route = useRoute();
......@@ -645,6 +646,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -191,6 +191,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form label-width="150" :model="formData" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<!-- 基本信息:字段完全对齐数据库 -->
<el-collapse-item title="基本信息" name="基本信息">
......@@ -155,7 +147,10 @@
<el-collapse-item title="战略类A" name="战略类A">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否国家中长期规划重大项目(A1)">
<el-form-item
label-width="200"
label="是否国家中长期规划重大项目(A1)"
>
<CommonSelector
:radio="true"
v-model="formData.sfgjzcqghzdxm"
......@@ -164,7 +159,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否国家有关部门下达的重点项目(A2)">
<el-form-item
label-width="200"
label="是否国家有关部门下达的重点项目(A2)"
>
<CommonSelector
:radio="true"
v-model="formData.sfgjygbmxddzdxm"
......@@ -173,7 +171,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="大规模设备更新(A3)">
<el-form-item
label-width="200"
label="大规模设备更新(A3)"
>
<CommonSelector
:radio="true"
v-model="formData.dgmsbgx"
......@@ -182,7 +183,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="战略性新兴产业百大工程(A4)">
<el-form-item
label-width="200"
label="战略性新兴产业百大工程(A4)"
>
<CommonSelector
:radio="true"
v-model="formData.zlxxxcybdgc"
......@@ -192,6 +196,7 @@
</el-col>
<el-col :span="12">
<el-form-item
label-width="200"
label="列入央企产业焕新和未来产业启航行动的项目(A5)"
>
<CommonSelector
......@@ -202,7 +207,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="强链补链重点项目(A6)">
<el-form-item
label-width="200"
label="强链补链重点项目(A6)"
>
<CommonSelector
:radio="true"
v-model="formData.qlblzdxm"
......@@ -211,7 +219,10 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="对应重大或重点项目名录名称">
<el-form-item
label-width="200"
label="对应重大或重点项目名录名称"
>
<el-input
v-model="formData.dyzdhzdxmmlmc"
placeholder="请输入对应重大或重点项目名录名称"
......@@ -219,7 +230,10 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="战略性新兴产业分类(如有,必填)">
<el-form-item
label-width="200"
label="战略性新兴产业分类(如有,必填)"
>
<el-input
v-model="formData.zlxxxcyfl"
placeholder="请输入战略性新兴产业分类"
......@@ -234,6 +248,7 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label-width="200"
label="列入企业发展战略性新兴产业工作方案的项目(B1)"
>
<CommonSelector
......@@ -244,7 +259,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="粮食、能源、矿产资源保障项目(B2)">
<el-form-item
label-width="200"
label="粮食、能源、矿产资源保障项目(B2)"
>
<CommonSelector
:radio="true"
v-model="formData.lsnykczybzxm"
......@@ -254,6 +272,7 @@
</el-col>
<el-col :span="12">
<el-form-item
label-width="200"
label="传统产业高端化、智能化、绿色化转型升级项目(B3)"
>
<CommonSelector
......@@ -264,7 +283,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="支撑企业发展的重点项目(B4)">
<el-form-item
label-width="200"
label="支撑企业发展的重点项目(B4)"
>
<CommonSelector
:radio="true"
v-model="formData.zcqyfzdddxm"
......@@ -273,7 +295,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="制造业技术改造项目">
<el-form-item
label-width="200"
label="制造业技术改造项目"
>
<CommonSelector
:radio="true"
v-model="formData.zzyjsgzxm"
......@@ -778,7 +803,10 @@
>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="参股单位出资情况修正">
<el-form-item
label-width="200"
label="参股单位出资情况修正"
>
<DynamicTable
:columns="transferColumns"
:disabled="isPreview"
......@@ -798,6 +826,16 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -808,7 +846,7 @@ import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import annualPlan from "./annualPlan.vue";
import DynamicTable from "@/components/FormDynamicTable/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// ========== 年度计划子组件专属时间列表【核心:适配任意年份,父子唯一统一】 ==========
const annualDynamicTimeList = ref([]);
......@@ -1481,56 +1519,3 @@ onMounted(() => {
}
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
.add-project-container {
width: 100%;
height: 100%;
padding: 20px;
box-sizing: border-box;
}
.add-project-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.tab-content {
background: #fff;
padding: 20px;
border-radius: 4px;
}
// 表格样式优化:两个表格统一样式,逻辑独立
:deep(.el-table-cell) {
padding-left: 8px !important;
box-sizing: border-box;
}
:deep(.el-input-number__input) {
text-align: right;
padding-right: 25px;
}
:deep(.el-collapse-item__header) {
font-weight: bold;
}
:deep(.el-table) {
--el-table-border-color: #ebeef5;
}
// 文本域宽度适配
:deep(.el-textarea__inner) {
width: 100% !important;
}
// 年度计划表格子组件容器
.annualPlans {
width: 100%;
overflow-x: auto;
}
// 修复数字输入框样式
:deep(.el-input-number) {
width: 100%;
}
</style>
......@@ -186,6 +186,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<!-- 表单模型绑定表字段formData,保留原有布局/禁用逻辑 -->
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<el-row :gutter="20">
<!-- 文件名称 → 绑定wjmc -->
<el-col :span="12">
......@@ -62,7 +55,7 @@
<!-- 附件 → 绑定fjsc -->
<el-col :span="24">
<el-form-item label="附件" label-width="200">
<el-form-item label="附件">
<FileUploader v-model="formData.fjsc" />
</el-form-item>
</el-col>
......@@ -71,6 +64,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -81,6 +83,7 @@ import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
// 附件上传组件保留
import FileUploader from "../../components/FileUploader/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// 路由&全局实例(原有逻辑保留)
const router = useRouter();
......@@ -162,8 +165,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
.add-project-container {
padding: 20px;
background: #f5f7fa;
......
......@@ -179,6 +179,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="问题标题" required>
......@@ -45,7 +37,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label-width="0" label="">
<el-form-item label="问题文件">
<FileUploader v-model="formData.fjsc" />
</el-form-item>
</el-col>
......@@ -54,6 +46,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -63,7 +64,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import FileUploader from "../../components/FileUploader/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// 路由&全局实例
const router = useRouter();
const route = useRoute();
......@@ -155,8 +156,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
.add-project-container {
padding: 20px;
background: #f5f7fa;
......
......@@ -201,6 +201,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form label-width="150" :model="formData" :disabled="isPreview">
<el-row :gutter="20">
<!-- 事项名称 -->
<el-col :span="12">
......@@ -102,19 +94,19 @@
<!-- 附件上传区域 - 上级单位投资规划 -->
<el-col :span="24">
<el-form-item label="上级单位投资规划" label-width="200">
<el-form-item label="上级单位投资规划">
<FileUploader v-model="formData.sjdwtzgh" />
</el-form-item>
</el-col>
<!-- 附件上传区域 - 本级单位投资规划 -->
<el-col :span="24">
<el-form-item label="本级单位投资规划" label-width="200">
<el-form-item label="本级单位投资规划">
<FileUploader v-model="formData.bjdwtzgh" />
</el-form-item>
</el-col>
<!-- 附件上传区域 - 其他材料 -->
<el-col :span="24">
<el-form-item label="其他材料" label-width="200">
<el-form-item label="其他材料">
<FileUploader v-model="formData.qtcl" />
</el-form-item>
</el-col>
......@@ -123,6 +115,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -132,7 +133,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import FileUploader from "../../components/FileUploader/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// 路由&全局实例
const router = useRouter();
const route = useRoute();
......@@ -240,6 +241,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -177,6 +177,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<!-- 仅保留档案基本信息折叠项,删除所有无用折叠项 -->
<el-collapse v-model="activeCollapse">
<el-collapse-item title="档案基本信息" name="档案基本信息">
......@@ -105,6 +98,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -116,6 +118,7 @@ import { ElMessage } from "element-plus";
import { useUserStore } from "@/stores/user.js";
// 引入组件:仅保留实际用到的
import FileUploader from "@/components/FileUploader/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// 初始化必要全局变量:删除无用的token/options
const userStore = useUserStore();
......@@ -242,6 +245,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -191,6 +191,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" label-width="150" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<el-collapse-item title="基本信息" name="基本信息">
<el-row :gutter="20">
......@@ -499,6 +492,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -508,7 +510,7 @@ import { reactive, ref, onMounted, getCurrentInstance, h, computed } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus";
import { useUserStore } from "@/stores/user.js";
import routerBack from "@/components/common/routerBack.vue";
// 初始化全局变量
const userStore = useUserStore();
const router = useRouter();
......@@ -854,9 +856,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
// @import "@/styles/manage.less";
.subtotal {
background-color: #f5f7fa;
height: 40px;
......
......@@ -187,6 +187,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="文件名称">
......@@ -74,6 +66,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -83,7 +84,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import FileUploader from "../../components/FileUploader/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// 路由&全局实例
const router = useRouter();
const route = useRoute();
......@@ -159,8 +160,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
.add-project-container {
padding: 20px;
background: #f5f7fa;
......
......@@ -197,6 +197,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<el-row :gutter="20">
<!-- 会议编号(必填、唯一) -->
<el-col :span="12">
......@@ -77,7 +70,7 @@
</el-col>
<!-- 会议纪要附件(无需额外处理,组件直接绑定) -->
<el-col :span="24">
<el-form-item label="会议纪要附件" label-width="200">
<el-form-item label="会议纪要附件">
<FileUploader v-model="formData.meetingMinutesAttachment" />
</el-form-item>
</el-col>
......@@ -86,6 +79,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -95,6 +97,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import FileUploader from "../../components/FileUploader/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// 路由&全局实例
const router = useRouter();
......@@ -202,8 +205,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
.add-project-container {
padding: 20px;
background: #f5f7fa;
......
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="80" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<el-collapse-item title="投资额控制" name="投资额控制">
<el-collapse-item title="项目信息" name="项目信息">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="项目信息" required>
......@@ -890,6 +882,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -898,6 +899,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus";
import FileUploader from "@/components/FileUploader/index.vue";
import routerBack from "@/components/common/routerBack.vue";
import { useUserStore } from "@/stores/user.js";
const userStore = useUserStore();
......@@ -1340,7 +1342,6 @@ const saveClick = () => {
}
}
}
@import "@/styles/manage.less";
.add-project-header {
margin-bottom: 10px;
}
......
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
......@@ -374,6 +367,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -392,6 +394,7 @@ const route = useRoute();
const { proxy } = getCurrentInstance();
let token = ref("");
token.value = userStore.authToken || sessionStorage.getItem("authToken") || "";
import routerBack from "@/components/common/routerBack.vue";
const activeCollapse = reactive(["基本信息", "已发现或暴露的风险"]);
let formData = reactive({});
......@@ -570,7 +573,6 @@ const saveClick = () => {
};
</script>
<style lang="less">
@import "@/styles/manage.less";
.add-project-header {
margin-bottom: 10px;
}
......
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<el-tabs v-model="pageActiveName" type="border-card">
<el-tab-pane label="全生命周期责任书" name="全生命周期责任书">
......@@ -167,7 +160,6 @@
:max="99999999999.99999999"
controls-position="right"
></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -523,6 +515,15 @@
</el-tab-pane>
</el-tabs>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -539,6 +540,7 @@ const { proxy } = getCurrentInstance();
const pageActiveName = ref("全生命周期责任书");
let token = ref("");
token.value = userStore.authToken || sessionStorage.getItem("authToken") || "";
import routerBack from "@/components/common/routerBack.vue";
const activeCollapse = reactive([
"责任书基本信息",
......@@ -1041,7 +1043,6 @@ const saveClick = () => {
</script>
<style lang="less">
@import "@/styles/manage.less";
.add-project-header {
margin-bottom: 10px;
}
......
......@@ -196,6 +196,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<!-- 项目信息选择 -->
<el-row :gutter="20" style="margin-bottom: 20px">
<el-col :span="12">
......@@ -123,6 +115,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -132,7 +133,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import FileUploader from "../../components/FileUploader/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// 初始化全局变量
const router = useRouter();
const route = useRoute();
......@@ -270,8 +271,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
// 标签页样式优化
:deep(.el-tabs--border-card) {
--el-tabs-card-border-color: var(--el-border-color);
......
......@@ -161,6 +161,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<!-- 基本信息 -->
<el-collapse-item title="基本信息" name="基本信息">
......@@ -222,6 +215,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -231,6 +233,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus";
import FileUploader from "../../components/FileUploader/index.vue";
import routerBack from "@/components/common/routerBack.vue";
// 初始化全局变量
const router = useRouter();
......@@ -403,8 +406,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
.tab-handle {
margin-bottom: 10px;
text-align: left;
......
......@@ -175,6 +175,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" label-width="150" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<el-collapse-item title="项目基本信息" name="项目基本信息">
<el-row :gutter="24">
......@@ -359,6 +351,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -369,6 +370,7 @@ import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import DynamicTable from "@/components/FormDynamicTable/index.vue";
import FinancialTable from "@/components/FinancialTable.vue";
import routerBack from "@/components/common/routerBack.vue";
const transferColumns = ref([
{
prop: "njfcgbl",
......@@ -701,9 +703,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
// @import "@/styles/manage.less";
.DynamicTable-slot {
display: flex;
div {
......
......@@ -191,6 +191,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<el-collapse v-model="activeCollapse">
<el-tabs v-model="pageActiveName" type="border-card">
<el-tab-pane label="基础信息" name="基础信息">
<div class="project-tab-content">
<el-form
:model="formData"
:label-width="200"
:disabled="isPreview"
>
<el-form :model="formData" :disabled="isPreview">
<!-- 1. 项目基本信息 -->
<el-collapse-item title="项目基本信息" name="项目基本信息">
<el-row :gutter="20">
......@@ -861,11 +849,7 @@
</el-tab-pane>
<el-tab-pane label="申请报告" name="申请报告">
<div class="project-tab-content">
<el-form
:model="formData"
:label-width="200"
:disabled="isPreview"
>
<el-form :model="formData" :disabled="isPreview">
<!-- 一、项目背景 -->
<el-collapse-item title="一、项目背景" name="一、项目背景">
<el-row :gutter="20">
......@@ -1316,6 +1300,15 @@
</el-tabs>
</el-collapse>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -1325,7 +1318,7 @@ import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import DynamicTable from "@/components/FormDynamicTable/index.vue";
import routerBack from "@/components/common/routerBack.vue";
import FileUploader from "@/components/FileUploader/index.vue";
import FinancialTable from "@/components/FinancialTable.vue";
......@@ -2517,20 +2510,3 @@ onMounted(() => {
}
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
// 调整折叠面板和表格样式
:deep(.el-collapse-item__header) {
font-weight: 600;
}
:deep(.el-table) {
--el-table-header-text-color: #333;
--el-table-row-hover-bg-color: #f8f9fa;
}
// 文件上传组件间距
:deep(.el-form-item) {
margin-bottom: 20px;
}
</style>
......@@ -155,6 +155,4 @@ onMounted(() => {
getProjectData();
});
</script>
<style lang="less" scoped>
@import "@/styles/manage.less";
</style>
<style lang="less" scoped></style>
......@@ -187,6 +187,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<routerBack />
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<el-form :model="formData" label-width="150" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<!-- 选择类型 -->
<el-collapse-item title="选择类型" name="选择类型">
......@@ -261,7 +253,7 @@
<el-collapse-item title="项目投资效益" name="项目投资效益">
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label=" ">
<el-form-item label-width="0">
<DynamicTable
:showDeleteButton="false"
:showAddButton="false"
......@@ -740,6 +732,15 @@
</div>
</div>
</div>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
</div>
</div>
</template>
......@@ -750,7 +751,7 @@ import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import DynamicTable from "@/components/FormDynamicTable/index.vue";
import FileUploader from "@/components/FileUploader/index.vue";
import routerBack from "@/components/common/routerBack.vue";
const transferColumns = ref([
{
prop: "njfcgbl",
......@@ -1192,61 +1193,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
.add-project-container {
width: 100%;
height: 100%;
padding: 20px;
box-sizing: border-box;
}
.add-project-content {
background: #fff;
border-radius: 8px;
padding: 20px;
height: 100%;
overflow-y: auto;
}
.add-project-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #e6e6e6;
}
.header-right {
display: flex;
gap: 10px;
}
.tabs-content {
width: 100%;
}
.project-tab-content {
width: 100%;
}
.tab-content {
width: 100%;
}
.el-collapse {
--el-collapse-header-text-color: #303133;
--el-collapse-header-font-size: 16px;
}
.el-table {
--el-table-row-hover-bg-color: #f8f9fa;
margin-bottom: 10px;
}
.el-input-number {
width: 100%;
}
</style>
<style scoped lang="less"></style>
......@@ -171,6 +171,4 @@ onMounted(() => {
jcdwList = resourceData.jcdw;
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -182,6 +182,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<routerBack></routerBack>
<div class="tabs-content">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button
type="primary"
v-if="
!formData.projectLzType ||
['1', '5', '7'].includes(formData.projectLzType.toString())
"
@click="saveClick('save')"
>保存</el-button
>
<el-button
type="primary"
v-if="formData.projectLzType == '1'"
@click="saveClick('submit')"
>发起立项填报</el-button
>
<el-button
type="primary"
v-if="jcFormData.projectLzType == '7'"
@click="saveClick('submit')"
>发起决策信息填报</el-button
>
</template>
<el-button
v-if="
isPreview &&
canAudit &&
(formData.projectLzType == '3' ||
jcFormData.projectLzType == '8') &&
formData.del !== 1
"
type="primary"
@click="auditDialogVisible = true"
>审核</el-button
>
</div>
</div>
<el-tabs v-model="pageActiveName" type="border-card">
<el-tab-pane label="立项填报" name="立项填报">
<div class="project-tab-content">
......@@ -51,7 +11,6 @@
<div class="tab-content">
<el-form
:model="formData"
:label-width="150"
:disabled="
isPreview ||
(Number(formData.projectLzType) <= 5 &&
......@@ -84,16 +43,40 @@
<el-col :span="6">
<el-form-item label="是否再决策">
<el-radio-group v-model="formData.sfzjc">
<el-radio value="1" @click.prevent="() => radioClick('1', 'sfzjc')"></el-radio>
<el-radio value="2" @click.prevent="() => radioClick('2', 'sfzjc')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => radioClick('1', 'sfzjc')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => radioClick('2', 'sfzjc')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否能建联合体项目">
<el-radio-group v-model="formData.sfnjlhtxm">
<el-radio value="1" @click.prevent="() => radioClick('1', 'sfnjlhtxm')"></el-radio>
<el-radio value="2" @click.prevent="() => radioClick('2', 'sfnjlhtxm')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => radioClick('1', 'sfnjlhtxm')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => radioClick('2', 'sfnjlhtxm')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -130,16 +113,40 @@
:label-width="170"
>
<el-radio-group v-model="formData.sfnjzdhzytz">
<el-radio value="1" @click.prevent="() => radioClick('1', 'sfnjzdhzytz')"></el-radio>
<el-radio value="2" @click.prevent="() => radioClick('2', 'sfnjzdhzytz')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => radioClick('1', 'sfnjzdhzytz')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => radioClick('2', 'sfnjzdhzytz')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否自主决策">
<el-radio-group v-model="formData.sfzzjc">
<el-radio value="1" @click.prevent="() => radioClick('1', 'sfzzjc')"></el-radio>
<el-radio value="2" @click.prevent="() => radioClick('2', 'sfzzjc')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => radioClick('1', 'sfzzjc')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => radioClick('2', 'sfzzjc')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -178,10 +185,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="政府审批(核准、备案)级别"
:label-width="200"
>
<el-form-item label="政府审批(核准、备案)级别">
<el-select
v-model="formData.zfsphzbajb"
placeholder="请选择"
......@@ -203,8 +207,20 @@
:label-width="170"
>
<el-radio-group v-model="formData.sflxbqyscx">
<el-radio value="1" @click.prevent="() => radioClick('1', 'sflxbqyscx')"></el-radio>
<el-radio value="2" @click.prevent="() => radioClick('2', 'sflxbqyscx')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => radioClick('1', 'sflxbqyscx')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => radioClick('2', 'sflxbqyscx')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -312,8 +328,20 @@
:label-width="190"
>
<el-radio-group v-model="formData.sfydylyxgj">
<el-radio value="1" @click.prevent="() => radioClick('1', 'sfydylyxgj')"></el-radio>
<el-radio value="2" @click.prevent="() => radioClick('2', 'sfydylyxgj')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => radioClick('1', 'sfydylyxgj')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => radioClick('2', 'sfydylyxgj')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -617,24 +645,60 @@
<el-radio-group
v-model="formData.sfxbgjfzggwhswbhz"
>
<el-radio value="1" @click.prevent="() => radioClick('1', 'sfxbgjfzggwhswbhz')"></el-radio>
<el-radio value="2" @click.prevent="() => radioClick('2', 'sfxbgjfzggwhswbhz')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => radioClick('1', 'sfxbgjfzggwhswbhz')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => radioClick('2', 'sfxbgjfzggwhswbhz')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否国家领导见签">
<el-radio-group v-model="formData.sfgjldjq">
<el-radio value="1" @click.prevent="() => radioClick('1', 'sfgjldjq')"></el-radio>
<el-radio value="2" @click.prevent="() => radioClick('2', 'sfgjldjq')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => radioClick('1', 'sfgjldjq')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => radioClick('2', 'sfgjldjq')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否境内特别监管类">
<el-radio-group v-model="formData.sfjntbjgl">
<el-radio value="1" @click.prevent="() => radioClick('1', 'sfjntbjgl')"></el-radio>
<el-radio value="2" @click.prevent="() => radioClick('2', 'sfjntbjgl')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => radioClick('1', 'sfjntbjgl')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => radioClick('2', 'sfjntbjgl')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -1798,8 +1862,20 @@
<el-radio-group
v-model="jcFormData.sfnjzdhzytz"
>
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfnjzdhzytz')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfnjzdhzytz')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfnjzdhzytz')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfnjzdhzytz')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -1809,8 +1885,20 @@
:label-width="170"
>
<el-radio-group v-model="jcFormData.njsfqtf">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'njsfqtf')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'njsfqtf')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'njsfqtf')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'njsfqtf')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -1834,8 +1922,20 @@
:label-width="170"
>
<el-radio-group v-model="jcFormData.sfpppxm">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfpppxm')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfpppxm')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfpppxm')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfpppxm')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -1890,8 +1990,20 @@
<el-col :span="6">
<el-form-item label="是否自主决策">
<el-radio-group v-model="jcFormData.sfzzjc">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfzzjc')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfzzjc')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfzzjc')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfzzjc')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -2035,24 +2147,60 @@
<el-col :span="6">
<el-form-item label="是否已经立项">
<el-radio-group v-model="jcFormData.sfyjlx">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfyjlx')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfyjlx')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfyjlx')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfyjlx')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否能建联合体项目">
<el-radio-group v-model="jcFormData.sfnjlhtxm">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfnjlhtxm')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfnjlhtxm')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfnjlhtxm')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfnjlhtxm')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否重点区域">
<el-radio-group v-model="jcFormData.sfzdqy">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfzdqy')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfzdqy')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfzdqy')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfzdqy')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -2257,8 +2405,20 @@
:label-width="170"
>
<el-radio-group v-model="jcFormData.sfnrbtml">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfnrbtml')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfnrbtml')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfnrbtml')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfnrbtml')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -2297,8 +2457,22 @@
</el-form-item>
<el-form-item label="是否再决策">
<el-radio-group v-model="jcFormData.sfzjc">
<el-radio value="1" id="是" @click.prevent="() => jcRadioClick('1', 'sfzjc')"></el-radio>
<el-radio value="2" id="否" @click.prevent="() => jcRadioClick('2', 'sfzjc')"></el-radio>
<el-radio
value="1"
id="是"
@click.prevent="
() => jcRadioClick('1', 'sfzjc')
"
></el-radio
>
<el-radio
value="2"
id="否"
@click.prevent="
() => jcRadioClick('2', 'sfzjc')
"
></el-radio
>
</el-radio-group>
</el-form-item>
<el-form-item
......@@ -2327,24 +2501,62 @@
<el-radio-group
v-model="jcFormData.sfxbgjfzggwhswbhz"
>
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfxbgjfzggwhswbhz')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfxbgjfzggwhswbhz')"></el-radio>
<el-radio
value="1"
@click.prevent="
() =>
jcRadioClick('1', 'sfxbgjfzggwhswbhz')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() =>
jcRadioClick('2', 'sfxbgjfzggwhswbhz')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否国家领导见签">
<el-radio-group v-model="jcFormData.sfgjldjq">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfgjldjq')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfgjldjq')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfgjldjq')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfgjldjq')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="是否境内特别监管类">
<el-radio-group v-model="jcFormData.sfjntbjgl">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfjntbjgl')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfjntbjgl')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfjntbjgl')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfjntbjgl')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -2354,8 +2566,20 @@
:label-width="190"
>
<el-radio-group v-model="jcFormData.sfydylyxgj">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfydylyxgj')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfydylyxgj')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfydylyxgj')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfydylyxgj')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -2462,8 +2686,20 @@
:label-width="170"
>
<el-radio-group v-model="jcFormData.sfyjzfsp">
<el-radio value="1" @click.prevent="() => jcRadioClick('1', 'sfyjzfsp')"></el-radio>
<el-radio value="2" @click.prevent="() => jcRadioClick('2', 'sfyjzfsp')"></el-radio>
<el-radio
value="1"
@click.prevent="
() => jcRadioClick('1', 'sfyjzfsp')
"
></el-radio
>
<el-radio
value="2"
@click.prevent="
() => jcRadioClick('2', 'sfyjzfsp')
"
></el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -5235,6 +5471,47 @@
</div>
</el-tab-pane>
</el-tabs>
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button
type="primary"
v-if="
!formData.projectLzType ||
['1', '5', '7'].includes(formData.projectLzType.toString())
"
@click="saveClick('save')"
>保存</el-button
>
<el-button
type="primary"
v-if="formData.projectLzType == '1'"
@click="saveClick('submit')"
>发起立项填报</el-button
>
<el-button
type="primary"
v-if="jcFormData.projectLzType == '7'"
@click="saveClick('submit')"
>发起决策信息填报</el-button
>
</template>
<el-button
v-if="
isPreview &&
canAudit &&
(formData.projectLzType == '3' ||
jcFormData.projectLzType == '8') &&
formData.del !== 1
"
type="primary"
@click="auditDialogVisible = true"
>审核</el-button
>
</div>
</div>
</div>
</div>
<el-dialog
......@@ -5279,6 +5556,7 @@ import { reactive, ref, onMounted, getCurrentInstance, computed } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus";
import { useUserStore } from "@/stores/user.js";
import routerBack from "@/components/common/routerBack.vue";
import _ from "lodash";
import Decimal from "decimal.js";
const router = useRouter();
......@@ -5336,8 +5614,15 @@ const activeCollapse = reactive([
"项目投资资金流量表",
"项目资本金现金流量表",
"能建方现金流量表",
"利润表",, "一、项目背景", "二、项目基本情况", "三、项目必要性", "四、项目可行性", "五、风险防控",
"六、内部决策情况", "七、需要说明的问题"
"利润表",
,
"一、项目背景",
"二、项目基本情况",
"三、项目必要性",
"四、项目可行性",
"五、风险防控",
"六、内部决策情况",
"七、需要说明的问题",
]);
let formData = reactive({});
let jcFormData = reactive({});
......@@ -6978,6 +7263,4 @@ const submitAudit = () => {
};
</script>
<style lang="less">
@import "@/styles/manage.less";
</style>
<style lang="less"></style>
......@@ -265,6 +265,4 @@ const previewProject = (item) => {
};
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -162,6 +162,4 @@ const approvalProject = (item) => {
};
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -159,6 +159,4 @@ const previewProject = (item) => {
};
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -188,6 +188,4 @@ const deleteProject = (item) => {
};
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -176,6 +176,4 @@ const fillDecision = (item) => {
};
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
......@@ -142,6 +142,4 @@ const exportData = () => {
};
</script>
<style lang="less">
@import "@/styles/manage.less";
</style>
<style lang="less"></style>
......@@ -309,7 +309,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
.depart-manage {
padding: 20px;
background: rgba(157, 188, 218, 0.1);
......
......@@ -216,6 +216,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></style>
<template>
<div class="system-manage-container message-container" v-loading="loading">
<div class="manage-container">
<div class="manage-wrap">
<search-form @search="handleSearch" />
<div
class="system-manage-container message-container"
v-loading="loading"
>
<div class="system-manage-content manage-content">
<common-table
:autoHeight="true"
......@@ -17,27 +24,55 @@
@current-page-change="handleCurrentPageChange"
>
<template #operations="{ row, index }">
<el-button link type="primary" size="small" @click="handlePreview(row, index)">
<el-button
link
type="primary"
size="small"
@click="handlePreview(row, index)"
>
查看
</el-button>
<el-button link type="danger" size="small" @click="handleDelete(row, index)">
<el-button
link
type="danger"
size="small"
@click="handleDelete(row, index)"
>
删除
</el-button>
</template>
</common-table>
</div>
<el-dialog v-model="messageDialogVisible" title="" width="500" align-center
<el-dialog
v-model="messageDialogVisible"
title=""
width="500"
align-center
@close="closeDialog"
>
<div class="message-wrap">
<div class="message-title">{{ messageInfo.title }}</div>
<div class="message-content">
<div class="label">消息类型:</div>
<div class="info">{{ messageInfo.type === 2 ? "项目初步审核" : messageInfo.type === 3 ? "项目终审" : "系统消息" }}</div>
<div class="info">
{{
messageInfo.type === 2
? "项目初步审核"
: messageInfo.type === 3
? "项目终审"
: "系统消息"
}}
</div>
</div>
<div class="message-content">
<div class="label">时间:</div>
<div class="info">{{ proxy.moment(messageInfo.createdAt).format("YYYY-MM-DD HH:mm:SS") }}</div>
<div class="info">
{{
proxy
.moment(messageInfo.createdAt)
.format("YYYY-MM-DD HH:mm:SS")
}}
</div>
</div>
<div class="message-content">
<div class="label">备注:</div>
......@@ -47,18 +82,35 @@
<template #footer>
<div class="dialog-footer">
<el-button @click="closeDialog">关闭</el-button>
<el-button type="primary" @click="toProjectPage">去处理</el-button>
<el-button type="primary" @click="toProjectPage"
>去处理</el-button
>
</div>
</template>
</el-dialog>
</div>
</div>
</div>
</template>
<script setup>
import { ref, reactive, onMounted, getCurrentInstance, computed, nextTick } from "vue";
import {
ref,
reactive,
onMounted,
getCurrentInstance,
computed,
nextTick,
} from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { useRouter } from "vue-router";
import CommonTable from "@/components/common/commonTable.vue";
import SearchForm from "@/components/common/SearchForm.vue";
const handleSearch = (formData) => {
currentPage.value = 1;
loadTableData(formData);
};
const router = useRouter();
const { proxy } = getCurrentInstance();
const loading = ref(false);
......@@ -72,7 +124,7 @@ const tableColumns = [
{
prop: "title",
label: "标题",
minWidth: 100
minWidth: 100,
},
{
prop: "type",
......@@ -80,8 +132,12 @@ const tableColumns = [
width: 120,
align: "center",
formatter: (data) => {
return data.type === 2 ? "项目初步审核" : data.type === 3 ? "项目终审" : "系统消息";
}
return data.type === 2
? "项目初步审核"
: data.type === 3
? "项目终审"
: "系统消息";
},
},
{
prop: "isRead",
......@@ -90,7 +146,7 @@ const tableColumns = [
align: "center",
formatter: (data) => {
return data.isRead ? "已读" : "未读";
}
},
},
{
prop: "createdAt",
......@@ -99,7 +155,7 @@ const tableColumns = [
align: "center",
formatter: (data) => {
return proxy.moment(data.createdAt).format("YYYY-MM-DD HH:mm:SS");
}
},
},
{
prop: "operations",
......@@ -108,15 +164,16 @@ const tableColumns = [
slot: "operations",
fixed: "right",
align: "center",
}
},
];
const loadTableData = () => {
const loadTableData = (formData = {}) => {
loading.value = true;
proxy.$post({
url: "/api/message/getUserMessages",
data: {
page: currentPage.value,
pageSize: pageSize.value,
...formData,
},
callback: (data) => {
tableData.value = data.rows;
......@@ -149,7 +206,7 @@ const handlePreview = (item) => {
proxy.$post({
url: "/api/message/getMessageInfo",
data: {
id: item.id
id: item.id,
},
callback: (data) => {
messageDialogVisible.value = true;
......@@ -159,21 +216,21 @@ const handlePreview = (item) => {
ElMessage.error("加载数据失败");
},
});
}
};
const closeDialog = () => {
messageInfo.value = {};
messageDialogVisible.value = false;
}
};
// 跳转到对应项目
const toProjectPage = () => {
router.push({
name: "addProject",
query: {
projectId: messageInfo.value.projectId,
isPreview: true
}
isPreview: true,
},
});
}
};
// 删除
const handleDelete = (row) => {
ElMessageBox.confirm(`确定删除该条消息?`, "提示", {
......@@ -193,27 +250,26 @@ const handleDelete = (row) => {
},
});
});
}
};
</script>
<style lang="less">
@import "@/styles/manage.less";
.message-wrap{
.message-title{
.message-wrap {
.message-title {
font-size: 16px;
font-weight: 600;
margin: 10px 0;
}
.message-content{
.message-content {
display: flex;
align-items: flex-start;
margin-bottom: 10px;
.label{
.label {
width: 80px;
text-align: justify;
text-align-last: justify;
}
.info{
.info {
flex: 1;
width: 0;
}
......
......@@ -175,7 +175,11 @@
/>
</el-form-item>
<el-form-item label="唯一标识" prop="key">
<el-input v-model="listFormData.key" placeholder="请输入唯一标识" :disabled="!!resourceFormData.id" />
<el-input
v-model="listFormData.key"
placeholder="请输入唯一标识"
:disabled="!!resourceFormData.id"
/>
</el-form-item>
</el-form>
<template #footer>
......@@ -436,7 +440,6 @@ const handleDelete = async (row, index) => {
</script>
<style lang="less">
@import "@/styles/manage.less";
.tree-content {
width: 100%;
height: 150px;
......
......@@ -4,7 +4,11 @@
<div class="header-left">
<el-form :inline="true" :model="searchForm">
<el-form-item label="名称查询">
<el-input v-model="searchForm.name" clearable @keydown.enter="handleSearch"/>
<el-input
v-model="searchForm.name"
clearable
@keydown.enter="handleSearch"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">查询</el-button>
......@@ -36,10 +40,20 @@
@current-page-change="handleCurrentPageChange"
>
<template #operations="{ row, index }">
<el-button link type="primary" size="small" @click="handleEdit(row, index)">
<el-button
link
type="primary"
size="small"
@click="handleEdit(row, index)"
>
编辑
</el-button>
<el-button link type="danger" size="small" @click="handleDelete(row, index)">
<el-button
link
type="danger"
size="small"
@click="handleDelete(row, index)"
>
删除
</el-button>
<!-- <el-button type="text" size="small">数据权限 </el-button> -->
......@@ -47,26 +61,38 @@
</common-table>
</div>
<el-dialog class="add-dialog"
<el-dialog
class="add-dialog"
v-model="dialogVisible"
:title="dialogTitle"
width="400px"
@close="cancelRoleForm"
:close-on-click-modal="false" :close-on-press-escape="false"
:close-on-click-modal="false"
:close-on-press-escape="false"
>
<el-form
:model="roleFormData"
ref="roleForm"
:rules="roleRules"
label-width="100"
>
<el-form :model="roleFormData" ref="roleForm" :rules="roleRules" label-width="100">
<el-form-item label="角色名称" prop="name">
<el-input v-model="roleFormData.name" placeholder="请输入角色名称" />
</el-form-item>
<el-form-item label="角色标识" prop="key">
<el-input v-model="roleFormData.key" placeholder="请输入角色标识" :disabled="!!roleFormData.id" />
<el-input
v-model="roleFormData.key"
placeholder="请输入角色标识"
:disabled="!!roleFormData.id"
/>
</el-form-item>
<el-form-item label="菜单配置">
<el-tree ref="treeRef"
<el-tree
ref="treeRef"
v-model="roleFormData.menus"
:data="treeData"
node-key="id"
:props="{label: 'name'}"
:props="{ label: 'name' }"
showCheckbox
@check="selectMenus"
/>
......@@ -121,7 +147,14 @@
</template>
<script setup>
import { ref, reactive, onMounted, getCurrentInstance, computed, nextTick } from "vue";
import {
ref,
reactive,
onMounted,
getCurrentInstance,
computed,
nextTick,
} from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue";
......@@ -179,12 +212,8 @@ const dialogTitle = ref("新增角色");
const roleForm = ref();
const roleFormData = ref({});
const roleRules = {
name: [
{ required: true, message: "请输入角色名称", trigger: "blur" }
],
key: [
{ required: true, message: "请输入角色标识", trigger: "blur" }
]
name: [{ required: true, message: "请输入角色名称", trigger: "blur" }],
key: [{ required: true, message: "请输入角色标识", trigger: "blur" }],
};
// 事件处理函数
const handleSearch = (formData) => {
......@@ -248,7 +277,7 @@ const handleDelete = async (row, index) => {
};
const saveRoleForm = () => {
roleForm.value.validate(valid => {
roleForm.value.validate((valid) => {
if (valid) {
let url = roleFormData.value.id ? "updateRole" : "createRole";
proxy.$post({
......@@ -261,23 +290,25 @@ const saveRoleForm = () => {
},
error: (err) => {
ElMessage.error(dialogTitle.value + "失败:", err);
}
},
});
}
})
});
};
const cancelRoleForm = () => {
roleFormData.value = {};
roleForm.value.resetFields();
treeRef.value.setCheckedKeys([]);
dialogVisible.value = false;
}
};
const selectMenus = () => {
// 使用 treeRef 获取当前勾选节点
const treeInst = treeRef.value;
if (!treeInst) return;
const checkedNodes = treeInst.getCheckedNodes ? treeInst.getCheckedNodes() : [];
const checkedNodes = treeInst.getCheckedNodes
? treeInst.getCheckedNodes()
: [];
const halfCheckedNodes = treeInst.getHalfCheckedNodes
? treeInst.getHalfCheckedNodes()
: [];
......@@ -287,7 +318,9 @@ const selectMenus = () => {
? halfCheckedNodes.map((node) => node.id)
: [];
const allSelectedIds = Array.from(new Set([...checkedIds, ...halfCheckedIds]));
const allSelectedIds = Array.from(
new Set([...checkedIds, ...halfCheckedIds]),
);
// 把选中的菜单 id 写回表单数据,供提交使用
roleFormData.value.menus = allSelectedIds;
......@@ -338,7 +371,6 @@ onMounted(() => {
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
.el-tree {
max-height: 500px;
overflow-y: auto;
......
......@@ -413,6 +413,4 @@ onMounted(() => {
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<style scoped lang="less"></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