明树Git Lab

Commit 918db535 authored by zhanghan's avatar zhanghan

代码补全

parent f71a1732
Pipeline #108022 passed with stage
in 20 seconds
...@@ -15,21 +15,31 @@ ...@@ -15,21 +15,31 @@
prop="serialNumber" prop="serialNumber"
label="序号" label="序号"
width="80" width="80"
fixed="left"
align="center" align="center"
/> />
<!-- 指标项列(层级缩进):保留原逻辑 --> <!-- 指标项列(层级缩进):保留原逻辑 -->
<el-table-column <el-table-column
prop="indicatorName" prop="indicatorName"
label="名称" label="名称"
fixed="left"
align="left" align="left"
min-width="260" min-width="260"
> >
<template #default="{ row }"> <template #default="{ row }">
<div style="text-align: left">{{ row.indicatorName }}</div> <div
:style="{
textIndent: row.level ? `${row.level * 20}px` : '0px',
textAlign: 'left',
}"
>
{{ row.indicatorName }}
</div>
</template> </template>
</el-table-column> </el-table-column>
<!-- 合计列:文本行隐藏合计值,不显示0.00 → 从内部数据取值 --> <!-- 合计列:文本行隐藏合计值,不显示0.00 → 从内部数据取值 -->
<el-table-column label="合计" width="140" align="right">
<el-table-column fixed="left" label="合计" width="140" align="right">
<template #default="{ row }"> <template #default="{ row }">
<span v-if="!row.noTotal"> <span v-if="!row.noTotal">
{{ row.total ? Number(row.total).toFixed(2) : "0.00" }}万元 {{ row.total ? Number(row.total).toFixed(2) : "0.00" }}万元
...@@ -56,7 +66,6 @@ ...@@ -56,7 +66,6 @@
align="center" align="center"
> >
<template #default="{ row }"> <template #default="{ row }">
<!-- 1. 文本行:多行文本输入框 -->
<el-input <el-input
v-if="row.isTextRow" v-if="row.isTextRow"
v-model="row[timeItem.prop]" v-model="row[timeItem.prop]"
...@@ -283,13 +292,15 @@ const handleTableData = (sourceIndicatorList, sourceTableData) => { ...@@ -283,13 +292,15 @@ const handleTableData = (sourceIndicatorList, sourceTableData) => {
const newData = []; const newData = [];
sourceIndicatorList.forEach((item, index) => { sourceIndicatorList.forEach((item, index) => {
const { name, isTextRow = false, noTotal = false } = item; const { name, isTextRow = false, noTotal = false } = item;
const level = item?.level || 0;
const serialNumber = item?.serialNumber || index + 1;
// 深拷贝源数据行 // 深拷贝源数据行
const originRow = const originRow =
sourceTableData.find((row) => row.indicatorName === name) || {}; sourceTableData.find((row) => row.indicatorName === name) || {};
const rowData = JSON.parse( const rowData = JSON.parse(
JSON.stringify({ JSON.stringify({
serialNumber: index + 1, serialNumber,
level: 0, level,
indicatorName: name, indicatorName: name,
isTextRow, isTextRow,
noTotal, noTotal,
...@@ -333,20 +344,6 @@ watch( ...@@ -333,20 +344,6 @@ watch(
{ deep: true, immediate: true }, { deep: true, immediate: true },
); );
// 监听时间配置变化:更新内部数据
watch(
() => validDynamicTimeList.value,
() => {
if (!validConfig.value || tableDataRef.value.length === 0) return;
tableDataRef.value.forEach((row) => {
initRowTimeField(row);
row.total = calculateRowTotal(row);
});
emitDataChange(tableDataRef.value);
},
{ deep: true, immediate: true },
);
// 10. 数字行输入回调(逻辑不变) // 10. 数字行输入回调(逻辑不变)
const handleFinancialChange = (currentRow) => { const handleFinancialChange = (currentRow) => {
if (props.isPreview || !currentRow || currentRow.noTotal) return; if (props.isPreview || !currentRow || currentRow.noTotal) return;
......
...@@ -181,7 +181,7 @@ ...@@ -181,7 +181,7 @@
} }
::v-deep.add-project-content .tab-content .upload-file-wrap .delete-btn { ::v-deep.add-project-content .tab-content .upload-file-wrap .delete-btn {
cursor: pointer; cursor: pointer;
color: #F56C6C; color: #f56c6c;
} }
::v-deep.add-project-content .tab-content .el-select__wrapper .el-select__selection.is-near { ::v-deep.add-project-content .tab-content .el-select__wrapper .el-select__selection.is-near {
max-height: 120px; max-height: 120px;
...@@ -254,12 +254,18 @@ ...@@ -254,12 +254,18 @@
} }
.add-project-header { .add-project-header {
margin-bottom: 10px; margin-bottom: 10px;
padding-left: 24px;
}
.add-project-header .header-left:hover {
color: #409eff;
cursor: pointer;
} }
::v-deep.el-form-item { ::v-deep.el-form-item {
display: block; display: block;
} }
::v-deep.el-form-item .el-form-item__label { ::v-deep.el-form-item .el-form-item__label {
width: auto !important; width: auto !important;
color: #333;
} }
.tab-handle { .tab-handle {
margin-bottom: 10px; margin-bottom: 10px;
...@@ -280,9 +286,25 @@ ...@@ -280,9 +286,25 @@
align-items: center; align-items: center;
margin-bottom: 24px; margin-bottom: 24px;
} }
::v-deep .el-collapse-item__title { ::v-deep .el-collapse-item .el-collapse-item__title {
color: #333;
font-size: 16px;
flex: auto; flex: auto;
text-align: left; text-align: left;
padding-left: 16px;
position: relative;
}
::v-deep .el-collapse-item .el-collapse-item__title::after {
position: absolute;
content: "";
left: 0;
top: 15px;
width: 2px;
height: 19px;
background-color: #409eff;
}
::v-deep .el-collapse-item .el-icon {
font-size: 16px;
} }
:deep(.el-table) { :deep(.el-table) {
--el-table-border-color: #ebeef5; --el-table-border-color: #ebeef5;
...@@ -291,3 +313,6 @@ ...@@ -291,3 +313,6 @@
:deep(.el-upload) { :deep(.el-upload) {
width: 100%; width: 100%;
} }
::v-deep .el-collapse-item__content {
padding-bottom: 0;
}
.system-manage-container{ .system-manage-container {
padding: 20px; padding: 20px;
background: rgba(157, 188, 218, 0.1); background: rgba(157, 188, 218, 0.1);
height: 100%; height: 100%;
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
flex-direction: column; flex-direction: column;
box-sizing: border-box; box-sizing: border-box;
} }
.system-manage-header{ .system-manage-header {
background: rgba(255, 255, 255, 0.9); background: rgba(255, 255, 255, 0.9);
border-radius: 8px; border-radius: 8px;
padding: 12px 20px 0; padding: 12px 20px 0;
...@@ -15,41 +15,43 @@ ...@@ -15,41 +15,43 @@
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 10px; margin-bottom: 10px;
.header-left{ .header-left {
flex: 1; flex: 1;
width: 0; width: 0;
.el-input, .el-select{
.el-input,
.el-select {
width: 220px; width: 220px;
} }
} }
} }
.system-manage-content{ .system-manage-content {
background: rgba(255, 255, 255, 0.9); background: rgba(255, 255, 255, 0.9);
border-radius: 8px; border-radius: 8px;
padding: 20px; padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
} }
.manage-content{ .manage-content {
flex: 1; flex: 1;
height: 0; height: 0;
.common-table{ .common-table {
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.table-container{ .table-container {
flex: 1; flex: 1;
height: 0; height: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.el-table{ .el-table {
flex: 1; flex: 1;
height: 0; height: 0;
} }
} }
} }
} }
.manage{ .manage {
&-container{ &-container {
width: 100%; width: 100%;
height: 100%; height: 100%;
padding: 20px; padding: 20px;
...@@ -58,7 +60,7 @@ ...@@ -58,7 +60,7 @@
flex-direction: column; flex-direction: column;
background: rgba(157, 188, 218, 0.1); background: rgba(157, 188, 218, 0.1);
} }
&-wrap{ &-wrap {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
...@@ -69,26 +71,26 @@ ...@@ -69,26 +71,26 @@
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
} }
&-header{ &-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-bottom: 10px; margin-bottom: 10px;
} }
&-content{ &-content {
flex: 1; flex: 1;
height: 0; height: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.common-table{ .common-table {
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.table-container{ .table-container {
flex: 1; flex: 1;
height: 0; height: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.el-table{ .el-table {
flex: 1; flex: 1;
height: 0; height: 0;
} }
...@@ -97,80 +99,80 @@ ...@@ -97,80 +99,80 @@
} }
} }
::v-deep.add-project{ ::v-deep.add-project {
&-container{ &-container {
width: 100%; width: 100%;
height: 100%; height: 100%;
padding: 20px; padding: 20px;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.el-collapse-item__header{ .el-collapse-item__header {
color: var(--el-color-primary); color: var(--el-color-primary);
} }
} }
&-header{ &-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
&-content{ &-content {
flex: 1; flex: 1;
height: 0; height: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.tabs-content{ .tabs-content {
flex: 1; flex: 1;
height: 0; height: 0;
} }
.el-tabs{ .el-tabs {
height: 100%; height: 100%;
} }
.el-tab-pane{ .el-tab-pane {
height: 100%; height: 100%;
} }
.tab-content{ .tab-content {
height: 100%; height: 100%;
overflow: auto; overflow: auto;
padding: 0 10px; padding: 0 10px;
.col-title{ .col-title {
height: 24px; height: 24px;
line-height: 24px; line-height: 24px;
font-weight: bold; font-weight: bold;
text-align: center; text-align: center;
} }
.tab-handle{ .tab-handle {
margin-bottom: 16px;; margin-bottom: 16px;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
align-items: center; align-items: center;
} }
.el-table{ .el-table {
margin-bottom: 10px; margin-bottom: 10px;
thead { thead {
color: #000; color: #000;
th{ th {
background: #f5f7fa; background: #f5f7fa;
.cell{ .cell {
text-align: center; text-align: center;
} }
} }
} }
.sums-column{ .sums-column {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: flex-start; justify-content: flex-start;
&>div{ & > div {
height: 26px; height: 26px;
line-height: 26px; line-height: 26px;
text-align: center; text-align: center;
} }
} }
} }
.upload-file-wrap{ .upload-file-wrap {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
.file-name{ .file-name {
flex: 1; flex: 1;
width: 0; width: 0;
color: #409eff; color: #409eff;
...@@ -180,19 +182,19 @@ ...@@ -180,19 +182,19 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.delete-btn{ .delete-btn {
cursor: pointer; cursor: pointer;
color: #F56C6C; color: #f56c6c;
} }
} }
.el-select__wrapper{ .el-select__wrapper {
.el-select__selection.is-near{ .el-select__selection.is-near {
max-height: 120px; max-height: 120px;
overflow: auto; overflow: auto;
} }
} }
} }
.always-click{ .always-click {
padding: 2px; padding: 2px;
font-size: 12px; font-size: 12px;
cursor: pointer !important; cursor: pointer !important;
...@@ -202,17 +204,17 @@ ...@@ -202,17 +204,17 @@
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
} }
.project-tab-content{ .project-tab-content {
padding: 0 20px; padding: 0 20px;
height: 100%; height: 100%;
} }
} }
} }
::v-deep .el-input{ ::v-deep .el-input {
width: 100% !important; width: 100% !important;
} }
.add-dialog{ .add-dialog {
.el-tree{ .el-tree {
width: 100%; width: 100%;
} }
} }
...@@ -252,7 +254,7 @@ ...@@ -252,7 +254,7 @@
justify-content: space-between; justify-content: space-between;
font-size: 14px; font-size: 14px;
padding-right: 8px; padding-right: 8px;
.node-name{ .node-name {
flex: 1; flex: 1;
width: 0; width: 0;
-webkit-background-clip: text; -webkit-background-clip: text;
...@@ -260,22 +262,41 @@ ...@@ -260,22 +262,41 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.node-key{ .node-key {
font-size: 12px; font-size: 12px;
color: #969696; color: #969696;
} }
} }
} }
.add-project-header { .add-project-header {
margin-bottom: 10px; margin-bottom: 10px;
padding-left: 24px;
.header-left {
&:hover {
color: #409eff;
cursor: pointer;
}
// position: relative;
// &::before {
// position: absolute;
// content: "<";
// left: -26px;
// top: -3px;
// width: 2px;
// height: 19px;
// font-size: 19px;
// }
}
} }
::v-deep.el-form-item { ::v-deep.el-form-item {
display: block; display: block;
.el-form-item__label { .el-form-item__label {
width: auto !important; width: auto !important;
color: #333;
// font-weight: 600;
}
} }
}
.tab-handle { .tab-handle {
margin-bottom: 10px; margin-bottom: 10px;
...@@ -293,8 +314,6 @@ ...@@ -293,8 +314,6 @@
} }
} }
.add-project-header { .add-project-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
...@@ -302,14 +321,30 @@ ...@@ -302,14 +321,30 @@
margin-bottom: 24px; margin-bottom: 24px;
} }
// 动态表格样式适配 ::v-deep .el-collapse-item {
:deep(.el-collapse-item__content) { .el-collapse-item__title {
// padding: 16px; color: #333;
} font-size: 16px;
::v-deep .el-collapse-item__title{
flex: auto; flex: auto;
text-align: left; text-align: left;
padding-left: 16px;
position: relative;
&::after {
position: absolute;
content: "";
left: 0;
top: 15px;
width: 2px;
height: 19px;
background-color: #409eff;
}
}
.el-icon {
font-size: 16px;
}
} }
:deep(.el-table) { :deep(.el-table) {
--el-table-border-color: #ebeef5; --el-table-border-color: #ebeef5;
width: 100%; width: 100%;
...@@ -318,3 +353,6 @@ ...@@ -318,3 +353,6 @@
:deep(.el-upload) { :deep(.el-upload) {
width: 100%; width: 100%;
} }
::v-deep .el-collapse-item__content {
padding-bottom: 0;
}
This diff is collapsed.
...@@ -19,12 +19,7 @@ ...@@ -19,12 +19,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="请选择登记类型" required>
<!-- <CommonSelector
:radio="true"
v-model="formData.djlx"
dictName="xmtc_djlx"
/> -->
<el-radio-group v-model="formData.djlx"> <el-radio-group v-model="formData.djlx">
<el-radio value="1">中止</el-radio> <el-radio value="1">中止</el-radio>
<el-radio value="2">重启</el-radio> <el-radio value="2">重启</el-radio>
...@@ -276,7 +271,11 @@ ...@@ -276,7 +271,11 @@
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="项目中止内容" name="项目中止内容"> <el-collapse-item
v-if="formData.djlx == 1"
title="项目中止内容"
name="项目中止内容"
>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="中止原因"> <el-form-item label="中止原因">
...@@ -327,7 +326,11 @@ ...@@ -327,7 +326,11 @@
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="项目重启内容" name="项目重启内容"> <el-collapse-item
v-if="formData.djlx == 2"
title="项目重启内容"
name="项目重启内容"
>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="中止原因"> <el-form-item label="中止原因">
...@@ -378,7 +381,11 @@ ...@@ -378,7 +381,11 @@
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="项目终止内容" name="项目终止内容"> <el-collapse-item
v-if="formData.djlx == 3"
title="项目终止内容"
name="项目终止内容"
>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="中止原因"> <el-form-item label="中止原因">
...@@ -429,7 +436,11 @@ ...@@ -429,7 +436,11 @@
</el-col> </el-col>
</el-row> </el-row>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="项目退出内容" name="项目退出内容"> <el-collapse-item
v-if="formData.djlx == 4"
title="项目退出内容"
name="项目退出内容"
>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="中止原因"> <el-form-item label="中止原因">
......
...@@ -4,7 +4,9 @@ ...@@ -4,7 +4,9 @@
<div class="manage-header"> <div class="manage-header">
<div class="header-left"></div> <div class="header-left"></div>
<div class="header-right"> <div class="header-right">
<el-button type="primary" @click="showFieldsModal">表头筛选</el-button> <el-button type="primary" @click="showFieldsModal"
>表头筛选</el-button
>
</div> </div>
</div> </div>
<div class="manage-content" v-loading="loading"> <div class="manage-content" v-loading="loading">
...@@ -24,16 +26,30 @@ ...@@ -24,16 +26,30 @@
@current-page-change="handleCurrentPageChange" @current-page-change="handleCurrentPageChange"
> >
<template #operations="{ row, index }"> <template #operations="{ row, index }">
<el-button link type="primary" size="small" @click="previewProject(row)">查看</el-button> <el-button
link
type="primary"
size="small"
@click="previewProject(row)"
>查看</el-button
>
</template> </template>
</common-table> </common-table>
</div> </div>
<el-dialog v-model="filedsModalShow" <el-dialog
v-model="filedsModalShow"
modal-class="fields-modal" modal-class="fields-modal"
title="筛选查询" width="50%" top="10vh" title="筛选查询"
:close-on-click-modal="false" :close-on-press-escape="false" width="50%"
top="10vh"
:close-on-click-modal="false"
:close-on-press-escape="false"
> >
<el-table :data="tableFields" style="width: 100%; height: 500px;" empty-text="暂无数据" border <el-table
:data="tableFields"
style="width: 100%; height: 500px"
empty-text="暂无数据"
border
@selection-change="handleFieldsSelectChange" @selection-change="handleFieldsSelectChange"
> >
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
...@@ -42,7 +58,9 @@ ...@@ -42,7 +58,9 @@
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="cancelFieldsModal">取消</el-button> <el-button @click="cancelFieldsModal">取消</el-button>
<el-button type="primary" @click="confirmFieldsModal">确定</el-button> <el-button type="primary" @click="confirmFieldsModal"
>确定</el-button
>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
...@@ -51,27 +69,25 @@ ...@@ -51,27 +69,25 @@
</template> </template>
<script setup> <script setup>
import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue"; import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus"; import CommonTable from "@/components/common/commonTable.vue";
import CommonTable from "@/components/common/commonTable.vue";
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
// 计算表格高度
// 计算表格高度 let tableData = ref([]);
let tableData = ref([]); let tableColumns = ref([
let tableColumns = ref([
{ {
prop: "projectName", prop: "projectName",
label: "项目名称", label: "项目名称",
showOverflowTooltip: true showOverflowTooltip: true,
}, },
{ {
prop: "projectCode", prop: "projectCode",
label: "项目编号", label: "项目编号",
showOverflowTooltip: true showOverflowTooltip: true,
}, },
{ {
prop: "projectLzType", prop: "projectLzType",
...@@ -79,10 +95,20 @@ ...@@ -79,10 +95,20 @@
width: 120, width: 120,
align: "center", align: "center",
formatter: (data) => { formatter: (data) => {
return data.projectLzType === "1" ? "待立项" : data.projectLzType === "3" ? "立项审批中" : return data.projectLzType === "1"
data.projectLzType === "5" ? "已立项" : data.projectLzType === "7" ? "决策填报中" : ? "待立项"
data.projectLzType === "8" ? "决策审批中" : data.projectLzType === "9" ? "已决策" : "待立项" : data.projectLzType === "3"
} ? "立项审批中"
: data.projectLzType === "5"
? "已立项"
: data.projectLzType === "7"
? "决策填报中"
: data.projectLzType === "8"
? "决策审批中"
: data.projectLzType === "9"
? "已决策"
: "待立项";
},
}, },
{ {
prop: "operations", prop: "operations",
...@@ -90,62 +116,73 @@ ...@@ -90,62 +116,73 @@
width: 90, width: 90,
slot: "operations", slot: "operations",
fixed: "right", fixed: "right",
align: "center" align: "center",
} },
]); ]);
// 获取可显示表头项 // 获取可显示表头项
let filedsModalShow = ref(false); let filedsModalShow = ref(false);
let tableFields = reactive([]); let tableFields = reactive([]);
const getTableFields = () => { const getTableFields = () => {
proxy.$post({ proxy.$post({
url: "/api/project/getProjectFields", url: "/api/project/getProjectFields",
data: {}, data: {},
callback: (data) => { callback: (data) => {
tableFields = (data[0] && data[0].attributes) || []; tableFields = (data[0] && data[0].attributes) || [];
} },
}) });
}; };
const showFieldsModal = () => { const showFieldsModal = () => {
filedsModalShow.value = true; filedsModalShow.value = true;
} };
let selectFields = ref([]); let selectFields = ref([]);
const handleFieldsSelectChange = (datas) => { const handleFieldsSelectChange = (datas) => {
selectFields.value = datas; selectFields.value = datas;
}; };
const cancelFieldsModal = () => { const cancelFieldsModal = () => {
selectFields.value = []; selectFields.value = [];
filedsModalShow.value = false; filedsModalShow.value = false;
} };
const confirmFieldsModal = () => { const confirmFieldsModal = () => {
tableColumns.value = selectFields.value.map(item => { tableColumns.value = selectFields.value
.map((item) => {
return { return {
prop: item.fieldName, prop: item.fieldName,
label: item.comment, label: item.comment,
showOverflowTooltip: true showOverflowTooltip: true,
}; };
}).concat([ })
.concat([
{ {
prop: "projectLzType", prop: "projectLzType",
label: "状态", label: "状态",
width: 120, width: 120,
align: "center", align: "center",
formatter: (data) => { formatter: (data) => {
return data.projectLzType === "1" ? "待立项" : data.projectLzType === "3" ? "立项审批中" : return data.projectLzType === "1"
data.projectLzType === "5" ? "已立项" : data.projectLzType === "7" ? "决策填报中" : ? "待立项"
data.projectLzType === "8" ? "决策审批中" : data.projectLzType === "9" ? "已决策" : "待立项" : data.projectLzType === "3"
} ? "立项审批中"
} : data.projectLzType === "5"
? "已立项"
: data.projectLzType === "7"
? "决策填报中"
: data.projectLzType === "8"
? "决策审批中"
: data.projectLzType === "9"
? "已决策"
: "待立项";
},
},
]); ]);
filedsModalShow.value = false; filedsModalShow.value = false;
}; };
let loading = ref(false); let loading = ref(false);
let total = ref(0); let total = ref(0);
let currentPage = ref(1); let currentPage = ref(1);
let pageSize = ref(10); let pageSize = ref(10);
// 获取列表数据 // 获取列表数据
const getProjectData = () => { const getProjectData = () => {
loading.value = true; loading.value = true;
proxy.$post({ proxy.$post({
url: "/api/project/listProject", url: "/api/project/listProject",
...@@ -153,42 +190,42 @@ ...@@ -153,42 +190,42 @@
page: currentPage.value, page: currentPage.value,
pagesize: pageSize.value, pagesize: pageSize.value,
attributes: [], attributes: [],
menuType: "xmdak" menuType: "xmdak",
}, },
callback: (data) => { callback: (data) => {
tableData.value = data.rows; tableData.value = data.rows;
total.value = data.count; total.value = data.count;
loading.value = false; loading.value = false;
} },
}) });
}; };
onMounted(() => { onMounted(() => {
getTableFields(); getTableFields();
getProjectData(); getProjectData();
}) });
// 分页 // 分页
const handleSizeChange = (size) => { const handleSizeChange = (size) => {
pageSize.value = size; pageSize.value = size;
currentPage.value = 1; currentPage.value = 1;
getProjectData(); getProjectData();
} };
const handleCurrentPageChange = (page) => { const handleCurrentPageChange = (page) => {
currentPage.value = page; currentPage.value = page;
getProjectData(); getProjectData();
} };
const previewProject = (item) => { const previewProject = (item) => {
router.push({ router.push({
name: "addProject", name: "addProject",
query: { query: {
isPreview: true, isPreview: true,
projectId: item.id projectId: item.id,
} },
}) });
} };
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@import "@/styles/manage.less"; @import "@/styles/manage.less";
</style> </style>
...@@ -2,14 +2,16 @@ ...@@ -2,14 +2,16 @@
<div class="depart-manage" v-loading="loading"> <div class="depart-manage" v-loading="loading">
<div class="manage-left"> <div class="manage-left">
<div class="handle-btn"> <div class="handle-btn">
<el-button type="primary" size="small" @click="handleAdd">新增</el-button> <el-button type="primary" size="small" @click="handleAdd"
>新增</el-button
>
</div> </div>
<div class="tree-content"> <div class="tree-content">
<el-tree <el-tree
:data="treeData" :data="treeData"
node-key="id" node-key="id"
default-expand-all default-expand-all
:props="{label: 'name'}" :props="{ label: 'name' }"
@node-click="handleNodeClick" @node-click="handleNodeClick"
> >
<template #default="{ node, data }"> <template #default="{ node, data }">
...@@ -45,8 +47,12 @@ ...@@ -45,8 +47,12 @@
<div class="search-container"> <div class="search-container">
<el-form :inline="true" :model="searchForm"> <el-form :inline="true" :model="searchForm">
<el-form-item label="关键字查询"> <el-form-item label="关键字查询">
<el-input v-model="searchForm.name" :style="{width: '220px'}" clearable <el-input
placeholder="请输入用户姓名" @keydown.enter="handleSearch" v-model="searchForm.name"
:style="{ width: '220px' }"
clearable
placeholder="请输入用户姓名"
@keydown.enter="handleSearch"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
...@@ -78,9 +84,15 @@ ...@@ -78,9 +84,15 @@
:title="dialogTitle" :title="dialogTitle"
width="400px" width="400px"
@close="cancelDepartForm" @close="cancelDepartForm"
:close-on-click-modal="false" :close-on-press-escape="false" :close-on-click-modal="false"
:close-on-press-escape="false"
>
<el-form
:model="departFormData"
ref="departForm"
:rules="departRules"
label-width="100"
> >
<el-form :model="departFormData" ref="departForm" :rules="departRules" label-width="100">
<el-form-item label="项目名称" prop="name"> <el-form-item label="项目名称" prop="name">
<el-input v-model="departFormData.name" /> <el-input v-model="departFormData.name" />
</el-form-item> </el-form-item>
...@@ -113,9 +125,7 @@ let departFormData = ref({}); ...@@ -113,9 +125,7 @@ let departFormData = ref({});
const departForm = ref(); const departForm = ref();
// 表单验证规则 // 表单验证规则
const departRules = { const departRules = {
name: [ name: [{ required: true, message: "请输入部门名称", trigger: "blur" }],
{ required: true, message: "请输入部门名称", trigger: "blur" }
]
}; };
// 新增部门 // 新增部门
const handleAdd = () => { const handleAdd = () => {
...@@ -127,12 +137,12 @@ const handleAddChild = (data) => { ...@@ -127,12 +137,12 @@ const handleAddChild = (data) => {
dialogTitle.value = "新增子部门"; dialogTitle.value = "新增子部门";
departFormData.value.parentId = data.id; departFormData.value.parentId = data.id;
dialogVisible.value = true; dialogVisible.value = true;
} };
const handleEdit = (data) => { const handleEdit = (data) => {
departFormData.value = {...data}; departFormData.value = { ...data };
dialogTitle.value = "编辑部门"; dialogTitle.value = "编辑部门";
dialogVisible.value = true; dialogVisible.value = true;
} };
const handleDelete = (data) => { const handleDelete = (data) => {
ElMessageBox.confirm(`确定删除${data.name}?`, "提示", { ElMessageBox.confirm(`确定删除${data.name}?`, "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
...@@ -151,13 +161,12 @@ const handleDelete = (data) => { ...@@ -151,13 +161,12 @@ const handleDelete = (data) => {
}, },
}); });
}); });
} };
const saveDepartForm = () => { const saveDepartForm = () => {
departForm.value.validate(valid => { departForm.value.validate((valid) => {
if (valid) { if (valid) {
let url = departFormData.value.id ? "updateDepart" : "createDepart" let url = departFormData.value.id ? "updateDepart" : "createDepart";
proxy.$post({ proxy.$post({
url: "/api/user/depart/" + url, url: "/api/user/depart/" + url,
data: departFormData.value, data: departFormData.value,
...@@ -171,7 +180,7 @@ const saveDepartForm = () => { ...@@ -171,7 +180,7 @@ const saveDepartForm = () => {
}, },
}); });
} }
}) });
}; };
const cancelDepartForm = () => { const cancelDepartForm = () => {
departForm.value.resetFields(); departForm.value.resetFields();
...@@ -179,10 +188,6 @@ const cancelDepartForm = () => { ...@@ -179,10 +188,6 @@ const cancelDepartForm = () => {
dialogVisible.value = false; dialogVisible.value = false;
}; };
// 处理树节点点击事件 // 处理树节点点击事件
const handleNodeClick = (data, node, element) => { const handleNodeClick = (data, node, element) => {
selectedNode.value = data; selectedNode.value = data;
...@@ -210,7 +215,6 @@ const loadTreeData = () => { ...@@ -210,7 +215,6 @@ const loadTreeData = () => {
}); });
}; };
// 人员信息 // 人员信息
const handleUserData = () => { const handleUserData = () => {
userLoading.value = true; userLoading.value = true;
...@@ -299,15 +303,13 @@ const handleCurrentPageChange = (page) => { ...@@ -299,15 +303,13 @@ const handleCurrentPageChange = (page) => {
handleUserData(); handleUserData();
}; };
onMounted(() => { onMounted(() => {
loadTreeData(); loadTreeData();
}); });
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@import "@/styles/manage.less"; @import "@/styles/manage.less";
.depart-manage { .depart-manage {
padding: 20px; padding: 20px;
background: rgba(157, 188, 218, 0.1); background: rgba(157, 188, 218, 0.1);
...@@ -325,7 +327,7 @@ onMounted(() => { ...@@ -325,7 +327,7 @@ onMounted(() => {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.handle-btn{ .handle-btn {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
} }
...@@ -343,20 +345,20 @@ onMounted(() => { ...@@ -343,20 +345,20 @@ onMounted(() => {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.search-container{ .search-container {
padding: 0 20px; padding: 0 20px;
} }
.common-table{ .common-table {
flex: 1; flex: 1;
height: 0; height: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.table-container{ .table-container {
flex: 1; flex: 1;
height: 0; height: 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.el-table{ .el-table {
flex: 1; flex: 1;
height: 0; height: 0;
} }
......
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