明树Git Lab

Commit 918db535 authored by zhanghan's avatar zhanghan

代码补全

parent f71a1732
Pipeline #108022 passed with stage
in 20 seconds
......@@ -15,21 +15,31 @@
prop="serialNumber"
label="序号"
width="80"
fixed="left"
align="center"
/>
<!-- 指标项列(层级缩进):保留原逻辑 -->
<el-table-column
prop="indicatorName"
label="名称"
fixed="left"
align="left"
min-width="260"
>
<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>
</el-table-column>
<!-- 合计列:文本行隐藏合计值,不显示0.00 → 从内部数据取值 -->
<el-table-column label="合计" width="140" align="right">
<el-table-column fixed="left" label="合计" width="140" align="right">
<template #default="{ row }">
<span v-if="!row.noTotal">
{{ row.total ? Number(row.total).toFixed(2) : "0.00" }}万元
......@@ -56,7 +66,6 @@
align="center"
>
<template #default="{ row }">
<!-- 1. 文本行:多行文本输入框 -->
<el-input
v-if="row.isTextRow"
v-model="row[timeItem.prop]"
......@@ -283,13 +292,15 @@ const handleTableData = (sourceIndicatorList, sourceTableData) => {
const newData = [];
sourceIndicatorList.forEach((item, index) => {
const { name, isTextRow = false, noTotal = false } = item;
const level = item?.level || 0;
const serialNumber = item?.serialNumber || index + 1;
// 深拷贝源数据行
const originRow =
sourceTableData.find((row) => row.indicatorName === name) || {};
const rowData = JSON.parse(
JSON.stringify({
serialNumber: index + 1,
level: 0,
serialNumber,
level,
indicatorName: name,
isTextRow,
noTotal,
......@@ -333,20 +344,6 @@ watch(
{ 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. 数字行输入回调(逻辑不变)
const handleFinancialChange = (currentRow) => {
if (props.isPreview || !currentRow || currentRow.noTotal) return;
......
......@@ -181,7 +181,7 @@
}
::v-deep.add-project-content .tab-content .upload-file-wrap .delete-btn {
cursor: pointer;
color: #F56C6C;
color: #f56c6c;
}
::v-deep.add-project-content .tab-content .el-select__wrapper .el-select__selection.is-near {
max-height: 120px;
......@@ -254,12 +254,18 @@
}
.add-project-header {
margin-bottom: 10px;
padding-left: 24px;
}
.add-project-header .header-left:hover {
color: #409eff;
cursor: pointer;
}
::v-deep.el-form-item {
display: block;
}
::v-deep.el-form-item .el-form-item__label {
width: auto !important;
color: #333;
}
.tab-handle {
margin-bottom: 10px;
......@@ -280,9 +286,25 @@
align-items: center;
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;
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) {
--el-table-border-color: #ebeef5;
......@@ -291,3 +313,6 @@
:deep(.el-upload) {
width: 100%;
}
::v-deep .el-collapse-item__content {
padding-bottom: 0;
}
This diff is collapsed.
This diff is collapsed.
......@@ -19,12 +19,7 @@
<el-collapse-item title="选择类型" name="选择类型">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="请选择登记类型">
<!-- <CommonSelector
:radio="true"
v-model="formData.djlx"
dictName="xmtc_djlx"
/> -->
<el-form-item label="请选择登记类型" required>
<el-radio-group v-model="formData.djlx">
<el-radio value="1">中止</el-radio>
<el-radio value="2">重启</el-radio>
......@@ -276,7 +271,11 @@
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="项目中止内容" name="项目中止内容">
<el-collapse-item
v-if="formData.djlx == 1"
title="项目中止内容"
name="项目中止内容"
>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="中止原因">
......@@ -327,7 +326,11 @@
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="项目重启内容" name="项目重启内容">
<el-collapse-item
v-if="formData.djlx == 2"
title="项目重启内容"
name="项目重启内容"
>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="中止原因">
......@@ -378,7 +381,11 @@
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="项目终止内容" name="项目终止内容">
<el-collapse-item
v-if="formData.djlx == 3"
title="项目终止内容"
name="项目终止内容"
>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="中止原因">
......@@ -429,7 +436,11 @@
</el-col>
</el-row>
</el-collapse-item>
<el-collapse-item title="项目退出内容" name="项目退出内容">
<el-collapse-item
v-if="formData.djlx == 4"
title="项目退出内容"
name="项目退出内容"
>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="中止原因">
......
This diff is collapsed.
......@@ -2,14 +2,16 @@
<div class="depart-manage" v-loading="loading">
<div class="manage-left">
<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 class="tree-content">
<el-tree
:data="treeData"
node-key="id"
default-expand-all
:props="{label: 'name'}"
:props="{ label: 'name' }"
@node-click="handleNodeClick"
>
<template #default="{ node, data }">
......@@ -45,8 +47,12 @@
<div class="search-container">
<el-form :inline="true" :model="searchForm">
<el-form-item label="关键字查询">
<el-input v-model="searchForm.name" :style="{width: '220px'}" clearable
placeholder="请输入用户姓名" @keydown.enter="handleSearch"
<el-input
v-model="searchForm.name"
:style="{ width: '220px' }"
clearable
placeholder="请输入用户姓名"
@keydown.enter="handleSearch"
/>
</el-form-item>
<el-form-item>
......@@ -78,18 +84,24 @@
:title="dialogTitle"
width="400px"
@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-input v-model="departFormData.name" />
<el-input v-model="departFormData.name" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancelDepartForm">取消</el-button>
<el-button type="primary" @click="saveDepartForm">保存</el-button>
</div>
<div class="dialog-footer">
<el-button @click="cancelDepartForm">取消</el-button>
<el-button type="primary" @click="saveDepartForm">保存</el-button>
</div>
</template>
</el-dialog>
</div>
......@@ -113,9 +125,7 @@ let departFormData = ref({});
const departForm = ref();
// 表单验证规则
const departRules = {
name: [
{ required: true, message: "请输入部门名称", trigger: "blur" }
]
name: [{ required: true, message: "请输入部门名称", trigger: "blur" }],
};
// 新增部门
const handleAdd = () => {
......@@ -127,37 +137,36 @@ const handleAddChild = (data) => {
dialogTitle.value = "新增子部门";
departFormData.value.parentId = data.id;
dialogVisible.value = true;
}
};
const handleEdit = (data) => {
departFormData.value = {...data};
departFormData.value = { ...data };
dialogTitle.value = "编辑部门";
dialogVisible.value = true;
}
};
const handleDelete = (data) => {
ElMessageBox.confirm(`确定删除${data.name}?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
proxy.$post({
url: "/api/user/depart/deleteDepart",
data: { id: data.id },
callback: (data) => {
ElMessage.success("删除成功");
loadTreeData();
},
error: (err) => {
ElMessage.error("删除失败:", err);
},
});
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
proxy.$post({
url: "/api/user/depart/deleteDepart",
data: { id: data.id },
callback: (data) => {
ElMessage.success("删除成功");
loadTreeData();
},
error: (err) => {
ElMessage.error("删除失败:", err);
},
});
}
});
};
const saveDepartForm = () => {
departForm.value.validate(valid => {
departForm.value.validate((valid) => {
if (valid) {
let url = departFormData.value.id ? "updateDepart" : "createDepart"
let url = departFormData.value.id ? "updateDepart" : "createDepart";
proxy.$post({
url: "/api/user/depart/" + url,
data: departFormData.value,
......@@ -171,7 +180,7 @@ const saveDepartForm = () => {
},
});
}
})
});
};
const cancelDepartForm = () => {
departForm.value.resetFields();
......@@ -179,10 +188,6 @@ const cancelDepartForm = () => {
dialogVisible.value = false;
};
// 处理树节点点击事件
const handleNodeClick = (data, node, element) => {
selectedNode.value = data;
......@@ -210,7 +215,6 @@ const loadTreeData = () => {
});
};
// 人员信息
const handleUserData = () => {
userLoading.value = true;
......@@ -299,15 +303,13 @@ const handleCurrentPageChange = (page) => {
handleUserData();
};
onMounted(() => {
loadTreeData();
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
@import "@/styles/manage.less";
.depart-manage {
padding: 20px;
background: rgba(157, 188, 218, 0.1);
......@@ -325,7 +327,7 @@ onMounted(() => {
display: flex;
flex-direction: column;
}
.handle-btn{
.handle-btn {
display: flex;
justify-content: flex-end;
}
......@@ -343,24 +345,24 @@ onMounted(() => {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
display: flex;
flex-direction: column;
.search-container{
.search-container {
padding: 0 20px;
}
.common-table{
.common-table {
flex: 1;
height: 0;
display: flex;
flex-direction: column;
.table-container {
flex: 1;
height: 0;
display: flex;
flex-direction: column;
.table-container{
flex: 1;
height: 0;
display: flex;
flex-direction: column;
.el-table{
flex: 1;
height: 0;
}
.el-table {
flex: 1;
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