明树Git Lab

Commit f89eef28 authored by zhanghan's avatar zhanghan

1

parent 6c6712a9
Pipeline #108703 passed with stage
in 20 seconds
......@@ -6,7 +6,6 @@
<img src="@/assets/images/logo.png" alt="" />
<div class="Split"></div>
<div class="header_subtitle">投资决策分析系统</div>
<!-- <span class="city-name">123123</span> -->
</div>
<div class="header-right">
<div class="message-wrap" @click="toMessagePage">
......@@ -22,8 +21,8 @@
</div>
<div class="Split"></div>
<span class="avatar">
<el-icon size="20"><Avatar /></el-icon
></span>
<el-icon size="20"><Avatar /></el-icon>
</span>
<el-dropdown @visible-change="changeVisible">
<span class="username">
{{ userInfo.name }}
......@@ -85,7 +84,9 @@ import { useRouter, useRoute } from "vue-router";
import { useUserStore } from "@/stores/user.js";
import windowConfig from "@/window";
import LeftMenu from "./leftMenu.vue";
import axios from "axios"; // watch中使用proxy会有warning
import axios from "axios";
import { Bell, Avatar, ArrowUp, ArrowDown } from "@element-plus/icons-vue"; // 补充导入图标
const userStore = useUserStore();
const proxyRef = ref(null);
const { proxy } = getCurrentInstance();
......@@ -95,7 +96,8 @@ const isIcon = ref(false);
const changeVisible = (bool) => {
isIcon.value = Boolean(bool);
};
// 2. 判断是否包含目标路由的核心方法
// 判断是否包含目标路由的核心方法
const isExcludeRoute = (path) => {
return !excludeTabs.includes(path);
};
......@@ -105,11 +107,13 @@ const instance = getCurrentInstance();
if (instance) {
proxyRef.value = instance.proxy;
}
let userInfo = ref(
sessionStorage.getItem("userInfo")
? JSON.parse(sessionStorage.getItem("userInfo"))
: [],
: {}, // 修改为空对象更合理,用户信息不是数组
);
const router = useRouter();
const route = useRoute();
......@@ -168,29 +172,43 @@ const handleTabClick = (tab) => {
}
};
// 关闭标签(逻辑调整:删除同路径的所有记录)
// 修复后的关闭标签方法
const handleTabRemove = (targetFullPath) => {
const targetView = visitedViews.value.find(
// 1. 找到要删除的标签索引
const index = visitedViews.value.findIndex(
(v) => v.fullPath === targetFullPath,
);
if (!targetView) return;
// 根据基础路径删除(确保同路径的标签只删一次)
const index = visitedViews.value.findIndex((v) => v.path === targetView.path);
if (index !== -1) {
// 跳转逻辑保持不变
if (targetFullPath === route.fullPath) {
if (visitedViews.value.length > 0) {
const nextView =
visitedViews.value[index] || visitedViews.value[index - 1];
if (nextView) {
router.push(nextView.fullPath);
}
} else {
router.push("/");
}
// 如果没找到,直接返回
if (index === -1) return;
// 2. 获取要删除的视图
const targetView = visitedViews.value[index];
// 3. 删除该标签
visitedViews.value.splice(index, 1);
// 4. 如果删除的是当前激活的标签,需要跳转到其他标签
if (targetFullPath === route.fullPath) {
// 优先跳转到下一个标签,如果没有则跳转到上一个
const nextIndex = index < visitedViews.value.length ? index : index - 1;
if (nextIndex >= 0 && visitedViews.value[nextIndex]) {
// 跳转到下一个/上一个标签
router.push(visitedViews.value[nextIndex].fullPath);
} else {
// 如果没有剩余标签,跳转到首页
router.push("/");
}
}
// 5. 更新激活的标签路径
if (visitedViews.value.length > 0) {
activePath.value =
visitedViews.value[visitedViews.value.length - 1].fullPath;
} else {
activePath.value = "";
}
};
// ========== 路由标签页相关结束 ==========
......@@ -200,45 +218,66 @@ const getResourceData = () => {
.post(windowConfig.baseUrl + "/api/resource/listResourceAll", {})
.then((res) => {
sessionStorage.setItem("resourceData", JSON.stringify(res.data));
});
})
.catch((err) => console.error("获取资源库数据失败:", err)); // 增加错误处理
};
// 获取未读消息数量
let messageCount = ref(0);
const getMessageCount = () => {
axios
.post(windowConfig.baseUrl + "/api/message/getMesCount", {})
.then((res) => {
messageCount.value = res.data.count;
});
messageCount.value = res.data.count || 0; // 增加默认值
})
.catch((err) => console.error("获取消息数量失败:", err)); // 增加错误处理
};
// 跳转消息列表页
const toMessagePage = () => {
router.push("/message");
};
onMounted(() => {
getResourceData();
getMessageCount();
addView(route); // 初始化时添加当前路由
});
// 优化watch:监听完整的route变化,而不只是path
watch(
() => route.path,
() => {
() => route,
(newRoute) => {
getMessageCount();
addView(route); // 路由变化时添加到标签页
addView(newRoute); // 路由变化时添加到标签页
},
{ immediate: false, deep: true }, // 深度监听路由对象
);
// 处理退出登录
const handleLogout = () => {
// 清除登录状态
proxy.$post({
url: "/api/user/logout",
data: {},
callback: (data) => {
// 优先使用axios,避免依赖proxy
axios
.post(windowConfig.baseUrl + "/api/user/logout", {})
.then(() => {
userStore.clearUserInfo();
sessionStorage.removeItem("userInfo"); // 清除本地存储
router.replace("/login");
},
});
})
.catch((err) => console.error("退出登录失败:", err));
// // 如果需要保留proxy方式,使用下面的代码
// if (proxy) {
// proxy.$post({
// url: "/api/user/logout",
// data: {},
// callback: (data) => {
// userStore.clearUserInfo();
// sessionStorage.removeItem("userInfo");
// router.replace("/login");
// },
// });
// }
};
</script>
......@@ -282,7 +321,6 @@ const handleLogout = () => {
/* 子菜单被激活时,父菜单也高亮 */
:deep(.el-sub-menu.is-active > .el-sub-menu__title) {
color: #0084ff !important;
// background-color: #b3d7ff !important;
}
/* 完全去掉系统管理子菜单的背景色 */
......@@ -306,7 +344,6 @@ const handleLogout = () => {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24px;
.Split {
......
......@@ -608,7 +608,7 @@
<el-col :span="8">
<el-form-item label="项目总投资(万元)">
<el-input-number
v-model="formData.nd_zjxx_xmztz"
v-model="formData.xmztz"
:min="0"
:precision="2"
controls-position="right"
......@@ -618,7 +618,7 @@
<el-col :span="8">
<el-form-item label="建安费(万元)">
<el-input-number
v-model="formData.nd_zjxx_jaf"
v-model="formData.jaf"
:min="0"
:precision="2"
controls-position="right"
......@@ -628,7 +628,7 @@
<el-col :span="8">
<el-form-item label="设备及工具购置费(万元)">
<el-input-number
v-model="formData.nd_zjxx_sbgzgzf"
v-model="formData.sbjgjgzf"
:min="0"
:precision="2"
controls-position="right"
......@@ -638,7 +638,7 @@
<el-col :span="8">
<el-form-item label="土地相关费用(万元)">
<el-input-number
v-model="formData.nd_zjxx_tdxgfy"
v-model="formData.tdxgfy"
:min="0"
:precision="2"
controls-position="right"
......@@ -648,7 +648,7 @@
<el-col :span="8">
<el-form-item label="建设单位管理费(万元)">
<el-input-number
v-model="formData.nd_zjxx_jsdwglf"
v-model="formData.jsdwglf"
:min="0"
:precision="2"
controls-position="right"
......@@ -658,7 +658,7 @@
<el-col :span="8">
<el-form-item label="其他建设项目管理费(万元)">
<el-input-number
v-model="formData.nd_zjxx_qtjsxmglf"
v-model="formData.qtjsxmglf"
:min="0"
:precision="2"
controls-position="right"
......@@ -668,7 +668,7 @@
<el-col :span="8">
<el-form-item label="其他费用(万元)">
<el-input-number
v-model="formData.nd_zjxx_qtfy"
v-model="formData.qtfy"
:min="0"
:precision="2"
controls-position="right"
......@@ -678,7 +678,7 @@
<el-col :span="8">
<el-form-item label="能建方建安费(万元)">
<el-input-number
v-model="formData.nd_zjxx_njfjaf"
v-model="formData.njfjaf"
:min="0"
:precision="2"
controls-position="right"
......@@ -688,7 +688,7 @@
<el-col :span="8">
<el-form-item label="建设期利息(万元)">
<el-input-number
v-model="formData.nd_zjxx_jsqlx"
v-model="formData.jsqlx"
:min="0"
:precision="2"
controls-position="right"
......@@ -699,7 +699,10 @@
</el-collapse-item>
<!-- 运营期目标责任书 -->
<el-collapse-item title="运营期目标责任书" name="运营期目标责任书">
<el-collapse-item
title="运营期目标责任书"
name="运营期目标责任书"
>
<div class="collapse-title">投融资与运营指标(万元)</div>
<div class="tab-handle" style="margin-bottom: 10px">
<el-button
......@@ -716,7 +719,11 @@
border
>
<el-table-column type="index" label="序号" width="60" />
<el-table-column prop="zbmc" label="指标名称" width="260">
<el-table-column
prop="zbmc"
label="指标名称"
width="260"
>
<template #default="scope">
<el-input
v-model="scope.row.zbmc"
......@@ -724,7 +731,11 @@
/>
</template>
</el-table-column>
<el-table-column prop="sfkh" label="是否考核" width="100">
<el-table-column
prop="sfkh"
label="是否考核"
width="100"
>
<template #default="scope">
<el-select
v-model="scope.row.sfkh"
......@@ -735,7 +746,11 @@
</el-select>
</template>
</el-table-column>
<el-table-column prop="zrmzb" label="责任目标值" width="140">
<el-table-column
prop="zrmzb"
label="责任目标值"
width="140"
>
<template #default="scope">
<el-input-number
v-model="scope.row.zrmzb"
......@@ -745,7 +760,11 @@
/>
</template>
</el-table-column>
<el-table-column prop="khjzf" label="考核基准分" width="120">
<el-table-column
prop="khjzf"
label="考核基准分"
width="120"
>
<template #default="scope">
<el-input-number
v-model="scope.row.khjzf"
......@@ -779,7 +798,10 @@
</el-collapse-item>
<!-- 其他对项目决策与实施有颠覆性影响的边界条件 -->
<el-collapse-item title="其他对项目决策与实施有颠覆性影响的边界条件" name="边界条件">
<el-collapse-item
title="其他对项目决策与实施有颠覆性影响的边界条件"
name="边界条件"
>
<div class="tab-handle" style="margin-bottom: 10px">
<el-button
type="primary"
......@@ -803,7 +825,11 @@
/>
</template>
</el-table-column>
<el-table-column prop="khjzf" label="考核基准分" width="180">
<el-table-column
prop="khjzf"
label="考核基准分"
width="180"
>
<template #default="scope">
<el-input-number
v-model="scope.row.khjzf"
......@@ -837,7 +863,10 @@
</el-collapse-item>
<!-- 项目实施过程中其他提高项目投资收益或带动公司市场开拓的情况 -->
<el-collapse-item title="项目实施过程中其他提高项目投资收益或带动公司市场开拓的情况" name="市场开拓">
<el-collapse-item
title="项目实施过程中其他提高项目投资收益或带动公司市场开拓的情况"
name="市场开拓"
>
<div class="tab-handle" style="margin-bottom: 10px">
<el-button
type="primary"
......@@ -861,7 +890,11 @@
/>
</template>
</el-table-column>
<el-table-column prop="khjzf" label="考核基准分" width="180">
<el-table-column
prop="khjzf"
label="考核基准分"
width="180"
>
<template #default="scope">
<el-input-number
v-model="scope.row.khjzf"
......@@ -927,9 +960,13 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="已盖章签字的运营阶段目标责任书附件">
<el-form-item
label="已盖章签字的运营阶段目标责任书附件"
>
<el-upload
:action="windowConfig.baseUrl + '/api/file/upload'"
:action="
windowConfig.baseUrl + '/api/file/upload'
"
:headers="{ Authorization: token }"
:show-file-list="false"
multiple
......@@ -1523,11 +1560,11 @@ const deleteRowFile = (row, index) => {
// 投融资与运营指标
const addTrzRow = () => {
trzData.value.push({
zbmc: '',
sfkh: '1',
zbmc: "",
sfkh: "1",
zrmzb: 0,
khjzf: 0,
jfxz: ''
jfxz: "",
});
};
const deleteTrzRow = (index) => {
......@@ -1544,9 +1581,9 @@ const deleteTrzRow = (index) => {
// 边界条件
const addBjtjRow = () => {
bjtjData.value.push({
zbmc: '',
zbmc: "",
khjzf: 0,
jfxz: ''
jfxz: "",
});
};
const deleteBjtjRow = (index) => {
......@@ -1563,9 +1600,9 @@ const deleteBjtjRow = (index) => {
// 市场开拓
const addScktRow = () => {
scktData.value.push({
zbmc: '',
zbmc: "",
khjzf: 0,
jfxz: ''
jfxz: "",
});
};
const deleteScktRow = (index) => {
......
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