测试内容的页面

xuhongjie
严飞永 1 month ago
parent cd2ecc1ef5
commit d77fa4b624

@ -74,7 +74,7 @@
<el-table-column prop="name" label="企业名称" show-overflow-tooltip> <el-table-column prop="name" label="企业名称" show-overflow-tooltip>
<template slot-scope="scope"> <template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model="scope.row.name"></el-input> <el-input v-if="scope.row.isEditing" v-model="scope.row.name"></el-input>
<span v-else style="color: #2B62F1;" >{{ scope.row.name }}</span> <span v-else style="color: #2B62F1;">{{ scope.row.name }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="code" label="统一社会信用代码" width="200"> <el-table-column prop="code" label="统一社会信用代码" width="200">
@ -152,8 +152,8 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="block"> <div class="block">
<el-pagination :current-page="pagination.currentPage" :page-sizes="[5]" <el-pagination :current-page="pagination.currentPage" :page-sizes="[5]" :page-size="pagination.pageSize"
:page-size="pagination.pageSize" layout="total, prev, pager, next, jumper" :total="pagination.total" layout="total, prev, pager, next, jumper" :total="pagination.total"
@current-change="handleCurrentChange" @size-change="handleSizeChange"> @current-change="handleCurrentChange" @size-change="handleSizeChange">
</el-pagination> </el-pagination>
</div> </div>
@ -223,7 +223,7 @@ export default {
tableData: [], tableData: [],
pagination: { pagination: {
currentPage: 1, currentPage: 1,
pageSize: 10, pageSize: 5,
total: 0 total: 0
}, },
upload: { upload: {
@ -320,18 +320,22 @@ export default {
}, },
deleteRow(index) { deleteRow(index) {
const id = this.tableData[index].id; const id = this.tableData[index].id;
const projectName = this.tableData[index].name;
this.$modal.confirm(`是否确认删除"${projectName}"`).then(() => {
deleteqyBasicInformation([id]).then(response => { deleteqyBasicInformation([id]).then(response => {
this.$modal.msgSuccess('删除成功');
this.tableData.splice(index, 1); this.tableData.splice(index, 1);
this.fetchTableData().then(() => { this.fetchTableData().then(() => {
this.form.rzqys = this.tableData.length; this.form.rzqys = this.tableData.length;
this.save(); this.save();
}); });
this.$modal.msgSuccess("删除成功");
}).catch(error => { }).catch(error => {
this.$modal.msgError('删除失败'); this.$modal.msgError('删除失败');
}); });
}).catch(() => {
this.$modal.msgWarning("已取消删除");
});
}, },
// //
handleImport() { handleImport() {
this.upload.open = true; this.upload.open = true;

@ -7,79 +7,110 @@
<span>月度进展信息</span> <span>月度进展信息</span>
</div> </div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'"> <div class="topright" v-if="action === 'fill' || !action || action === 'okay'">
<!-- <el-button type="primary" size="medium" plain v-if="checkRole(['admin', 'common'])"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleExport">
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="导出"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
</el-button> -->
<el-button type="primary" size="medium" plain <el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleAdd"> style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleAdd">
<img src="../../../assets/images/detailsicon/icon-xz@2x.png" alt="新增" <img src="../../../assets/images/detailsicon/icon-xz@2x.png" alt="新增"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;"> style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增 新增
</el-button> </el-button>
<el-button type="primary" size="medium" plain v-if="checkRole(['admin', 'common'])"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleExport">
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="导出"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
</el-button>
</div> </div>
</div> </div>
<!-- 内容区 --> <!-- 内容区 -->
<div class="content"> <div class="content">
<div class="descriptionsdiv"> <div class="custom-table-container">
<el-table :data="tableData" style="width: 100%"> <div class="custom-table-header">
<el-table-column prop="month" label="进度月份"> <div class="table-cell">进度月份</div>
</el-table-column> <div class="table-cell">状态</div>
<el-table-column prop="status" label="状态" align="center"> <div class="table-cell">当月完成投资</div>
<template slot-scope="scope"> <div class="table-cell">累计完成投资</div>
<span :style="getStatusColor(scope.row.status)">{{ scope.row.status }}</span> <div
style="width: auto; text-align: center;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;padding: 0 0.5rem;">
截止目前累计建成面积平方米</div>
<div class="table-cell">项目进展详情</div>
<div class="table-cell">操作</div>
</div>
<div class="custom-table-body">
<div v-if="tableData.length === 0" class="no-data-row">
暂无数据
</div>
<div v-else v-for="item in tableData" :key="item.id" class="custom-table-row">
<!-- 进度月份 -->
<div class="table-cell">
<template v-if="item.isEditing">
<el-date-picker v-model="item.month" type="month" value-format="yyyy-MM"
style="width: 100%;"></el-date-picker>
</template>
<template v-else>
{{ item.month }}
</template>
</div>
<!-- 状态始终不编辑 -->
<div class="table-cell">
<span :style="getStatusColor(item.status)">{{ item.status }}</span>
</div>
<!-- 当月完成投资 -->
<div class="table-cell">
<template v-if="item.isEditing">
<el-input-number v-model.number="item.monthDoneAmount" :controls="false" style="width: 100%;" />
</template> </template>
</el-table-column> <template v-else>
<el-table-column prop="monthDoneAmount" label="当月完成投资" align="center"> {{ item.monthDoneAmount }}
<template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model.number="scope.row.monthDoneAmount"
style="width: 100%;"></el-input>
<span v-else>{{ scope.row.monthDoneAmount }}</span>
</template> </template>
</el-table-column> </div>
<el-table-column prop="totalDoneAmount" label="累计完成投资" align="center">
<template slot-scope="scope"> <!-- 累计完成投资 -->
<el-input v-if="scope.row.isEditing" v-model.number="scope.row.totalDoneAmount" <div class="table-cell">
style="width: 100%;"></el-input> <template v-if="item.isEditing">
<span v-else>{{ scope.row.totalDoneAmount }}</span> <el-input-number v-model.number="item.totalDoneAmount" :controls="false" style="width: 100%;" />
</template> </template>
</el-table-column> <template v-else>
<el-table-column prop="cumulativeArea" label='截止目前累计建成面积(平方米)' align="center"> {{ item.totalDoneAmount }}
<template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model.number="scope.row.cumulativeArea"
style="width: 100%;"></el-input>
<span v-else>{{ scope.row.cumulativeArea }}</span>
</template> </template>
</el-table-column> </div>
<el-table-column prop="xmjzxq" label='项目进展详情' align="center">
<template slot-scope="scope"> <!-- 累计建成面积 -->
<el-input v-if="scope.row.isEditing" v-model="scope.row.xmjzxq" style="width: 100%;"></el-input> <div class="table-cell">
<span v-else>{{ scope.row.xmjzxq }}</span> <template v-if="item.isEditing">
<el-input v-model="item.cumulativeArea" style="width: 100%;" />
</template> </template>
</el-table-column> <template v-else>
<el-table-column label="操作" align="center"> {{ item.cumulativeArea }}
<template slot-scope="scope"> </template>
<el-button v-if="scope.row.isEditing" type="text" icon="el-icon-check" </div>
@click="handleSave(scope.row)">保存</el-button>
<el-button v-else type="text" icon="el-icon-edit" @click="handleEdit(scope.row)"></el-button> <!-- 项目进展详情 -->
<el-button type="text" icon="el-icon-delete" style="color: #F25353;" <div class="table-cell">
@click="handleDelete(scope.row)">删除</el-button> <template v-if="item.isEditing">
<el-input v-model="item.xmjzxq" style="width: 100%;" />
</template> </template>
</el-table-column> <template v-else>
</el-table> {{ formattedXmjzxq(item.xmjzxq) }}
<div class="block"> </template>
<div style="visibility: hidden;"></div> </div>
<el-pagination :current-page="current" :page-sizes="[10, 20, 30, 40]" :page-size="size"
layout="total, prev, pager, next, jumper" :total="total"> <!-- 操作列 -->
</el-pagination> <div class="table-cell">
<el-button v-if="!item.isEditing" type="text" icon="el-icon-edit" @click="handleEdit(item)"></el-button>
<el-button v-else type="text" icon="el-icon-check" @click="handleSave(item)"></el-button>
<el-button type="text" icon="el-icon-delete" style="color: #F25353;"
@click="handleDelete(item)">删除</el-button>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
<!-- 弹窗 --> <!-- 弹窗 -->
<el-dialog title="新增月度进展" :visible.sync="dialogVisible" width="50%"> <el-dialog title="新增月度进展" :visible.sync="dialogVisible" width="55%">
<el-form :model="form" :rules="rules" label-width="160px" ref="formRef"> <el-form :model="form" :rules="rules" label-width="240px" ref="formRef">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="进度月份" prop="month"> <el-form-item label="进度月份" prop="month">
@ -106,7 +137,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="累计建成面积(㎡)" prop="cumulativeArea"> <el-form-item label="截止目前累计建成面积(平方米)" prop="cumulativeArea">
<el-input v-model="form.cumulativeArea" placeholder="请输入面积"></el-input> <el-input v-model="form.cumulativeArea" placeholder="请输入面积"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -123,99 +154,139 @@
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
<!-- <div class="yuedu">
<yuedutouzi :xmId="xmId" />
</div> -->
</div> </div>
</template> </template>
<script> <script>
// //
import { getMonthInformationPage } from "@/api/ManageApi/index"; import { getMonthInformationPage } from "@/api/ManageApi/index";
//Apitwo // Apitwo
import { updateProjectProgress, deletemonth, addmonth } from "@/api/manageApitwo/index"; import { updateProjectProgress, deletemonth, addmonth } from "@/api/manageApitwo/index";
import { checkPermi, checkRole } from "@/utils/permission"; import { checkPermi, checkRole } from "@/utils/permission";
//
import yuedutouzi from '@/views/components/analysis/yuedutouzi.vue'
export default { export default {
components: { yuedutouzi },
props: { props: {
action: { action: {
type: String, type: String,
required: true, required: true
}, },
xmId: { xmId: {
type: Number, type: Number,
required: true, required: true
}, }
}, },
data() { data() {
return { return {
tableData: [], tableData: [], //
current: 1,
size: 10,
total: 0,
dialogVisible: false, // dialogVisible: false, //
form: { form: {
month: '', // month: "", //
status: '未更新', // status: "已更新", //
monthDoneAmount: 0, // monthDoneAmount: "", //
totalDoneAmount: 0, // totalDoneAmount: "", //
cumulativeArea: '', // cumulativeArea: "", //
xmjzxq: '' // xmjzxq: "" //
}, },
rules: { rules: {
month: [ month: [
{ required: true, message: '请选择月份', trigger: 'change' } { required: true, message: "请选择月份", trigger: "change" }
], ],
monthDoneAmount: [ monthDoneAmount: [
{ required: true, message: '请输入当月完成投资', trigger: 'blur' } { required: true, message: "请输入当月完成投资", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value === '' || value === null) {
callback(new Error("请输入数字"));
} else if (isNaN(value)) {
callback(new Error("只能输入数字"));
} else {
callback();
}
},
trigger: 'blur'
}
], ],
totalDoneAmount: [ totalDoneAmount: [
{ required: true, message: '请输入累计完成投资', trigger: 'blur' } { required: true, message: "请输入累计完成投资", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value === '' || value === null) {
callback(new Error("请输入数字"));
} else if (isNaN(value)) {
callback(new Error("只能输入数字"));
} else {
callback();
}
},
trigger: 'blur'
}
] ]
} }
}; };
}, },
computed: {
formattedXmjzxq() {
return (text) => {
return text === 'etry' ? '' : text;
};
}
},
methods: { methods: {
checkPermi, checkPermi,
checkRole, checkRole,
//
handleAdd() { handleAdd() {
this.form = { this.form = {
month: '', month: "",
status: '未更新', status: "已更新",
monthDoneAmount: 0, monthDoneAmount: "",
totalDoneAmount: 0, totalDoneAmount: "",
cumulativeArea: '', cumulativeArea: "",
xmjzxq: '' xmjzxq: ""
}; };
this.dialogVisible = true; this.dialogVisible = true;
}, },
//
submitForm() { submitForm() {
this.$refs.formRef.validate(valid => { this.$refs.formRef.validate(valid => {
if (valid) { if (valid) {
const payload = { const payload = {
...this.form, ...this.form,
xmId: this.xmId, xmId: this.xmId
status: this.form.status
}; };
addmonth(payload) addmonth(payload)
.then(response => { .then(response => {
if (response.code === 200) { if (response.code === 200) {
this.$message.success('新增成功'); this.$message.success("新增成功");
this.dialogVisible = false; this.dialogVisible = false;
this.getMonthInformationPage(); this.getMonthInformationPage();
} else { } else {
this.$message.error(response.msg || '新增失败'); this.$message.error(response.msg || "新增失败");
} }
}) })
.catch(error => { .catch(error => {
console.error('新增失败:', error); console.error("新增失败:", error);
this.$message.error('新增失败,请稍后再试'); this.$message.error("新增失败,请稍后再试");
}); });
} else { } else {
this.$message.error('请填写必填项'); this.$message.error("请填写必填项");
return false; return false;
} }
}); });
}, },
/** 导出 */
//
handleExport() { handleExport() {
this.download( this.download(
"/gysl/projectProgress/export", "/gysl/projectProgress/export",
@ -225,82 +296,87 @@ export default {
`月度信息${new Date().getTime()}.xlsx` `月度信息${new Date().getTime()}.xlsx`
); );
}, },
getStatusColor(status) {
switch (status) { //
case "未更新": async getMonthInformationPage() {
return "color: #2DD29F;"; try {
case "已更新": const response = await getMonthInformationPage({ xmId: this.xmId });
return "color: #2B62F1;";
default: if (Array.isArray(response.data) && response.data.length > 0) {
return ""; // status
this.tableData = response.data.map(item => ({
...item,
status: '已更新',
monthDoneAmount: item.monthDoneAmount ?? 0,
totalDoneAmount: item.totalDoneAmount ?? 0,
cumulativeArea: item.cumulativeArea ?? '',
xmjzxq: item.xmjzxq ?? ''
}));
} else {
this.tableData = [];
}
} catch (error) {
console.error("获取月度进展信息失败:", error);
this.$message.error("获取月度进展信息失败");
} }
}, },
//
handleEdit(row) { handleEdit(row) {
row.originalData = { ...row }; //
row.isEditing = true; this.tableData.forEach(item => {
this.$set(item, 'isEditing', item.id === row.id);
});
}, },
//
async handleSave(row) { async handleSave(row) {
try { try {
const updateData = { const updateData = {
id: row.id, id: row.id,
month: row.month,
monthDoneAmount: row.monthDoneAmount, monthDoneAmount: row.monthDoneAmount,
totalDoneAmount: row.totalDoneAmount, totalDoneAmount: row.totalDoneAmount,
cumulativeArea: row.cumulativeArea, cumulativeArea: row.cumulativeArea,
xmjzxq: row.xmjzxq, xmjzxq: row.xmjzxq
}; };
const response = await updateProjectProgress(updateData); const response = await updateProjectProgress(updateData);
if (response.code === 200) {
this.$message({
type: "success",
message: "更新成功!",
});
row.isEditing = false;
row.status = "已更新";
// this.getMonthInformationPage(); if (response.code === 200) {
this.$message.success("更新成功");
this.$set(row, 'isEditing', false);
} else { } else {
this.$message.error(response.msg || "更新失败"); this.$message.error(response.msg || "更新失败");
Object.assign(row, row.originalData);
} }
} catch (error) { } catch (error) {
console.error("更新失败:", error); console.error("更新失败:", error);
this.$message.error("更新失败"); this.$message.error("更新失败");
Object.assign(row, row.originalData);
} finally {
delete row.originalData;
} }
}, },
//
handleDelete(row) { handleDelete(row) {
this.$confirm("确定要删除此条月度进展记录吗?", "提示", { this.$confirm("确定要删除此条月度进展记录吗?", "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning", type: "warning"
}) })
.then(async () => { .then(async () => {
try { try {
//
const response = await deletemonth([row.id]); const response = await deletemonth([row.id]);
if (response.code === 200) { if (response.code === 200) {
this.$message({ this.$message({
type: "success", type: "success",
message: "删除成功!", message: "删除成功!"
}); });
// //
const index = this.tableData.findIndex(item => item.id === row.id); const index = this.tableData.findIndex(item => item.id === row.id);
if (index !== -1) { if (index !== -1) {
this.tableData.splice(index, 1); this.tableData.splice(index, 1);
} }
//
this.total -= 1;
//
if (this.tableData.length === 0 && this.current > 1) {
this.current -= 1;
// this.getMonthInformationPage();
}
} else { } else {
this.$message.error(response.msg || "删除失败"); this.$message.error(response.msg || "删除失败");
} }
@ -312,31 +388,26 @@ export default {
.catch(() => { .catch(() => {
this.$message({ this.$message({
type: "info", type: "info",
message: "已取消删除", message: "已取消删除"
}); });
}); });
}, },
async getMonthInformationPage() {
try {
const response = await getMonthInformationPage({ xmId: this.xmId });
if (Array.isArray(response.data.records) && response.data.records.length > 0) { //
this.tableData = response.data.records; getStatusColor(status) {
this.total = response.data.total || 0; switch (status) {
} else { case "未更新":
// return "color: #23B88E;";
this.tableData = []; case "已更新":
this.total = 0; return "color: #23B88E;";
default:
return "";
} }
} catch (error) {
console.error("获取月度进展信息失败:", error);
this.$message.error("获取月度进展信息失败");
} }
}, },
},
created() { created() {
this.getMonthInformationPage(); this.getMonthInformationPage();
}, }
}; };
</script> </script>
@ -347,13 +418,7 @@ export default {
width: 100%; width: 100%;
background-color: #FFFFFF; background-color: #FFFFFF;
box-shadow: 0rem 0.13rem 0.63rem 0rem rgba(177, 177, 177, 0.1); box-shadow: 0rem 0.13rem 0.63rem 0rem rgba(177, 177, 177, 0.1);
border-radius: 0.5rem 0.5rem 0.5rem 0.5rem; border-radius: 0.5rem;
}
.content {
padding: 1rem;
display: flex;
} }
.containertop { .containertop {
@ -378,44 +443,64 @@ export default {
} }
.topleft span { .topleft span {
width: auto;
height: 1rem;
font-family: aliregular; font-family: aliregular;
font-weight: 500; font-weight: 500;
font-size: 1rem; font-size: 1rem;
color: #3D424C; color: #3D424C;
line-height: 1rem; line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;
} }
.picturediv { .content {
width: 18.31rem; padding: 1rem 1rem 1rem 2rem;
height: 25.31rem;
background-color: lightblue;
} }
.descriptionsdiv { /* 自定义表格样式 */
.custom-table-container {
width: 100%; width: 100%;
margin-left: 1rem; border: 1px solid #EBEEF5;
height: auto; overflow: hidden;
} }
.two-row-item { .custom-table-header {
height: 20rem; display: flex;
background-color: #f5f7fa;
/* font-weight: bold; */
font-size: 0.88rem;
padding: 0.5rem 0;
} }
.block { .custom-table-body {
width: 100%; max-height: 14rem;
overflow-y: auto;
font-size: 0.88rem;
padding-right: 0.5rem;
}
.custom-table-row {
display: flex; display: flex;
justify-content: space-between; align-items: center;
margin-top: 1rem; padding: 0.5rem 0;
border-bottom: 1px solid #EBEEF5;
} }
.no-data { .table-cell {
flex: 1;
text-align: center; text-align: center;
padding: 2rem; white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding: 0 0.5rem;
}
.no-data-row {
text-align: center;
padding: 1rem 0;
color: #999; color: #999;
font-size: 0.875rem;
}
.yuedu{
width: 100%;
height: 100%;
padding: 0rem 1rem 1rem 2rem;
} }
</style> </style>

@ -3,25 +3,49 @@
<div class="top"> <div class="top">
<span>时间截止至2025年2月</span> <span>时间截止至2025年2月</span>
</div> </div>
<!-- 图例说明 -->
<div class="legend">
<div class="legend-item">
<div class="legend-color completed-color"></div>
<span>已完成</span>
</div>
<div class="legend-item">
<div class="legend-color remaining-color"></div>
<span>未完成</span>
</div>
<div class="legend-item">
<div class="legend-color buffer-color"></div>
<span>本年目标</span>
</div>
</div>
<!-- 循环渲染 4 年的数据 --> <!-- 循环渲染 4 年的数据 -->
<div class="year-progress" v-for="item in progressData" :key="item.year"> <div class="year-progress" v-for="item in progressData" :key="item.year"
:class="{ 'no-data': item.target === 0 }">
<div class="header"> <div class="header">
<span>{{ item.year }}</span> <span>{{ item.year }}</span>
<span>已完成 {{ item.completed }} / 目标 {{ item.target }} / 未完成 {{ item.remaining }}</span> <!-- <span>已完成 {{ item.completed }} / 未完成 {{ item.remaining }} / 目标 {{ item.target }}</span> -->
</div> </div>
<div class="progress-bar"> <div class="progress-bar">
<!-- 已完成 --> <!-- 已完成 -->
<div class="completed" :style="{ width: completedWidth(item) }"></div> <div class="completed" :style="{ width: completedWidth(item) }">
<span class="progress-text">{{ item.completed }}</span>
</div>
<!-- 未完成 --> <!-- 未完成 -->
<div class="remaining" :style="{ width: remainingWidth(item) }"></div> <div class="remaining" :style="{ width: remainingWidth(item) }">
<span class="progress-text">{{ item.remaining }}</span>
</div>
<!-- 缓冲区只有当 completed <= target 时才显示 --> <!-- 缓冲区 -->
<div class="buffer" :style="{ <div class="buffer" :style="{
width: shouldShowBuffer(item) ? bufferWidth(item) : '0%', width: shouldShowBuffer(item) ? bufferWidth(item) : '0%',
transition: 'width 0.3s ease' transition: 'width 0.3s ease'
}"></div> }">
</div>
</div>
<div>
<span>{{ item.target }}</span>
</div> </div>
</div> </div>
</div> </div>
@ -33,14 +57,15 @@ export default {
data() { data() {
const currentYear = new Date().getFullYear(); const currentYear = new Date().getFullYear();
return { return {
//
progressData: [ progressData: [
{ year: currentYear, completed: 950, target: 900, remaining: 50 }, { year: currentYear, completed: 0, target: 0, remaining: 0 },
{ year: currentYear - 1, completed: 800, target: 800, remaining: 0 }, { year: currentYear - 1, completed: 25, target: 65, remaining: 31 },
{ year: currentYear - 2, completed: 750, target: 700, remaining: 0 }, { year: currentYear - 2, completed: 25, target: 55, remaining: 30 },
{ year: currentYear - 3, completed: 500, target: 600, remaining: 100 }, { year: currentYear - 3, completed: 25, target: 39, remaining: 14 },
{ year: currentYear - 4, completed: 25, target: 31, remaining: 6 },
{ year: currentYear - 5, completed: 21, target: 22, remaining: 1 },
], ],
bufferZone: 50 bufferZone: 3
}; };
}, },
methods: { methods: {
@ -51,19 +76,28 @@ export default {
// + // +
completedWidth(item) { completedWidth(item) {
const max = item.target + this.bufferZone; const max = item.target + this.bufferZone;
if (max === 0) return '0%'; // 0
const value = Math.min(item.completed, max); const value = Math.min(item.completed, max);
return `${(value / max) * 100}%`; const percentage = (value / max) * 100;
// completed 0 target > 0 1%
return `${item.completed > 0 ? percentage : 15}%`;
}, },
// //
bufferWidth(item) { bufferWidth(item) {
const max = item.target + this.bufferZone; const max = item.target + this.bufferZone;
return `${(this.bufferZone / max) * 100}%`; const percentage = (this.bufferZone / max) * 100;
return `${percentage > 0 ? percentage : 1}%`;
}, },
// //
remainingWidth(item) { remainingWidth(item) {
const max = item.target + this.bufferZone; const max = item.target + this.bufferZone;
const remaining = Math.max(0, max - item.completed); const remaining = Math.max(0, max - item.completed);
return `${(remaining / max) * 100}%`; const percentage = (remaining / max) * 100;
return `${percentage > 0 ? percentage : 1}%`;
} }
} }
}; };
@ -75,7 +109,8 @@ export default {
height: 100%; height: 100%;
overflow: auto; overflow: auto;
} }
.top{
.top {
width: 100%; width: 100%;
display: flex; display: flex;
margin-bottom: 10px; margin-bottom: 10px;
@ -83,8 +118,12 @@ export default {
color: gray; color: gray;
justify-content: flex-end; justify-content: flex-end;
} }
.year-progress { .year-progress {
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
width: 100%;
display: flex;
gap: 10px;
} }
.header { .header {
@ -95,6 +134,7 @@ export default {
} }
.progress-bar { .progress-bar {
width: 82%;
height: 1rem; height: 1rem;
border-radius: 0.5rem; border-radius: 0.5rem;
background-color: #e0e0e0; background-color: #e0e0e0;
@ -119,4 +159,66 @@ export default {
/* 淡蓝色 - 未完成 */ /* 淡蓝色 - 未完成 */
height: 100%; height: 100%;
} }
.legend {
width: 100%;
padding-left: 50%;
display: flex;
justify-content: space-between;
margin-bottom: 0.5rem;
}
.legend-item {
display: flex;
align-items: center;
font-size: 0.75rem;
color: #666;
}
.legend-color {
width: 12px;
height: 12px;
border-radius: 50%;
margin-right: 1rem;
}
.completed-color {
background-color: #409EFF;
/* 已完成颜色 */
}
.buffer-color {
background-color: #f0f0f0;
/* 年度目标颜色 */
}
.remaining-color {
background-color: #87CEFA;
/* 未完成颜色 */
}
.progress-bar {
position: relative;
height: 1rem;
display: flex;
align-items: center;
/* 垂直居中 */
}
.progress-bar div {
position: relative;
text-align: center;
color: white;
/* 文字颜色 */
font-size: 0.75rem;
overflow: hidden;
}
.progress-text {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
white-space: nowrap;
}
</style> </style>

@ -0,0 +1,208 @@
<template>
<div class="chart-container">
<!-- 自定义标题 -->
<div class="custom-title">项目投资趋势</div>
<!-- 筛选区域 -->
<div class="filter-bar">
<!-- 年份 -->
<el-date-picker v-model="years" type="year" value-format="yyyy" placeholder="选择年份"
@change="fetchData"></el-date-picker>
<!-- 年度/季度 -->
<el-select v-model="type" placeholder="选择类型" @change="fetchData">
<el-option label="年度统计" :value="1"></el-option>
<el-option label="季度统计" :value="2"></el-option>
</el-select>
</div>
<!-- 折线图容器 -->
<div ref="lineChart" style="width: 110%; height: 400px;"></div>
</div>
</template>
<script>
import * as echarts from 'echarts';
import { fetchInvestmentData } from '@/api/ManageApi/index';
export default {
name: 'YueDuTouZi',
props: {
xmId: {
type: Number,
required: true
}
},
data() {
return {
chart: null,
type: 1,
years: new Date().getFullYear().toString(),
chartOption: {
grid: {
left: '3%',
containLabel: true
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['月投资额', '月投资比例', '累计投资额']
},
xAxis: {
type: 'category',
data: []
},
yAxis: {
type: 'value'
},
series: [
{
name: '月投资额',
type: 'line',
data: [],
smooth: true,
itemStyle: { color: '#4CAF50' }
},
{
name: '累计投资额',
type: 'line',
data: [],
smooth: true,
itemStyle: { color: '#2B62F1' }
},
{
name: '月投资比例',
type: 'line',
data: [],
smooth: true,
itemStyle: { color: '#FF9800' }
}
]
}
};
},
mounted() {
this.initChart();
this.fetchData();
},
methods: {
initChart() {
this.chart = echarts.init(this.$refs.lineChart);
this.chart.setOption(this.chartOption);
},
async fetchData() {
try {
const params = {
xmId: this.xmId,
type: this.type
};
if (this.years) {
params.years = this.years;
}
const res = await fetchInvestmentData(params);
if (res.code === 200 && Array.isArray(res.data)) {
let categories = [];
let seriesData = [];
if (this.type === 1) {
//
const months = Array.from({ length: 12 }, (_, i) => `${i + 1}`);
const dataMap = res.data.reduce((acc, item) => {
const month = item.month ? parseInt(item.month.split('-')[1]) : -1;
if (month >= 1 && month <= 12) {
acc[month] = item;
}
return acc;
}, {});
categories = months;
const ytzeData = months.map((_, index) => dataMap[index + 1]?.ytze ?? 0);
const ljtzeData = months.map((_, index) => dataMap[index + 1]?.ljtze ?? 0);
const ytzblData = months.map((_, index) => dataMap[index + 1]?.ytzbl ?? 0);
seriesData = [
{ name: '月投资额', type: 'line', data: ytzeData, itemStyle: { color: '#4CAF50' } },
{ name: '累计投资额', type: 'line', data: ljtzeData, itemStyle: { color: '#2B62F1' } },
{ name: '月投资比例', type: 'line', data: ytzblData, itemStyle: { color: '#FF9800' } }
];
} else if (this.type === 2) {
//
const quarters = ['第一季度', '第二季度', '第三季度', '第四季度'];
const dataMap = {};
res.data.forEach(item => {
if (item.jd >= 1 && item.jd <= 4) {
dataMap[item.jd] = item;
}
});
categories = quarters;
const jdtzeData = quarters.map((_, idx) => dataMap[idx + 1]?.jdtze ?? 0);
seriesData = [
{ name: '季度投资额', type: 'line', data: jdtzeData, itemStyle: { color: '#2B62F1' } }
];
}
this.chart.setOption({
grid: {
left: '3%',
containLabel: true
},
tooltip: {
trigger: 'axis'
},
legend: {
data: this.type === 1 ? ['月投资额', '累计投资额', '月投资比例'] : ['季度投资额']
},
xAxis: {
type: 'category',
data: categories
},
yAxis: {
type: 'value'
},
series: seriesData
}, true);
}
} catch (error) {
console.error('获取投资数据失败:', error);
this.$message.error('获取数据失败');
}
}
},
beforeDestroy() {
if (this.chart) {
this.chart.dispose();
}
}
};
</script>
<style scoped>
.chart-container {
margin-top: 1rem;
}
.custom-title {
font-size: 1rem;
font-weight: 600;
color: #333;
margin-bottom: 1rem;
}
.filter-bar {
display: flex;
align-items: center;
width: 97%;
justify-content: flex-end;
gap: 1rem;
margin-bottom: 2rem;
}
</style>

@ -11,7 +11,7 @@
<el-tab-pane label="政务人员登录" name="second"></el-tab-pane> <el-tab-pane label="政务人员登录" name="second"></el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
<el-form-item prop="username" class="loginitem" style="margin-top: 1rem;"> <!-- <el-form-item prop="username" class="loginitem" style="margin-top: 1rem;">
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号"> <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
</el-input> </el-input>
@ -21,8 +21,8 @@
@keyup.enter.native="handleLogin"> @keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input> </el-input>
</el-form-item> </el-form-item> -->
<el-form-item prop="code" v-if="captchaEnabled" class="loginitem"> <!-- <el-form-item prop="code" v-if="captchaEnabled" class="loginitem">
<el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%" <el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%"
@keyup.enter.native="handleLogin"> @keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
@ -30,14 +30,14 @@
<div class="login-code"> <div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img" style="width: 8.56rem;" /> <img :src="codeUrl" @click="getCode" class="login-code-img" style="width: 8.56rem;" />
</div> </div>
</el-form-item> </el-form-item> -->
<el-checkbox v-model="loginForm.rememberMe" style="margin:1rem 18.6rem 25px 0px;"></el-checkbox> <!-- <el-checkbox v-model="loginForm.rememberMe" style="margin:1rem 18.6rem 25px 0px;"></el-checkbox> -->
<el-form-item style="width:24rem;;margin-top: 1rem;"> <el-form-item style="width:24rem;;margin-top: 1rem;">
<el-button :loading="loading" size="medium" type="primary" style="width:100%;background: #2B62F1;" <!-- <el-button :loading="loading" size="medium" type="primary" style="width:100%;background: #2B62F1;"
@click.native.prevent="handleLogin"> @click.native.prevent="handleLogin">
<span v-if="!loading"> </span> <span v-if="!loading"> </span>
<span v-else> ...</span> <span v-else> ...</span>
</el-button> </el-button> -->
<el-button v-if="showGovernmentLoginButton" size="medium" type="primary" class="tongyidenglu" <el-button v-if="showGovernmentLoginButton" size="medium" type="primary" class="tongyidenglu"
style="width:100%;background: #2B62F1;" @click.native.prevent="handleGovernmentLogin"> style="width:100%;background: #2B62F1;" @click.native.prevent="handleGovernmentLogin">
<span>政务统一身份认证登录</span> <span>政务统一身份认证登录</span>
@ -200,11 +200,10 @@ export default {
}); });
}, },
handleGovernmentLogin() { handleGovernmentLogin() {
window.location.href = 'https://qyt.sipac.gov.cn/' window.location.href = 'https://qyt.sipac.gov.cn/sipsg-enterprise-mobile-manage/#/login'
}, },
handleEnterpriseLogin() { handleEnterpriseLogin() {
// window.location.href = 'https://gysl.sipac.gov.cn';
// window.location.href = 'https://example.com/enterprise-login';
} }
} }
} }

@ -1,4 +1,5 @@
<template> <template>
<!-- 正式的统计页面 -->
<div class="dashboard-container"> <div class="dashboard-container">
<!-- 1 --> <!-- 1 -->
<div class="dashboard-row"> <div class="dashboard-row">
@ -57,31 +58,31 @@
<Cydxml /> <Cydxml />
</div> </div>
</div> </div>
<div class="dashboard-col"> <div class="dashboard-col" style="height: 11rem;">
<div class="itemhead"> <div class="itemhead">
<span>产业导向细分产业分析</span> <span>产业导向细分产业分析</span>
</div> </div>
<div class="relaitem"> <div class="relaitem" style="height: 9rem;">
<Cydxxfgl /> <Cydxxfgl />
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import AllArea from '@/views/components/analysis/all.vue' import AllArea from '@/views/components/analysis/all.vue'
import FunctionArea from '@/views/components/analysis/function.vue' import FunctionArea from '@/views/components/analysis/function.vue'
import InvestArea from '@/views/components/analysis/invest.vue' import InvestArea from '@/views/components/analysis/invest.vue'
import Message from '@/views/components/analysis/message.vue' import Message from '@/views/components/analysis/message.vue'
import ProjectList from '@/views/components/analysis/projectList.vue' import ProjectList from '@/views/components/analysis/projectList.vue'
import MapArea from '@/views/components/analysis/map.vue' import MapArea from '@/views/components/analysis/map.vue'
import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue' import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue'
import Cydxml from '@/views/components/analysis/chanyedxml.vue' import Cydxml from '@/views/components/analysis/chanyedxml.vue'
import Cydxxfgl from '@/views/components/analysis/chanyexfgl.vue' import Cydxxfgl from '@/views/components/analysis/chanyexfgl.vue'
import { investall, fungong } from '@/api/ManageApi/index' import { investall, fungong } from '@/api/ManageApi/index'
export default { export default {
components: { components: {
AllArea, AllArea,
FunctionArea, FunctionArea,
@ -134,12 +135,12 @@
this.getData(); this.getData();
this.getfuncdata(); this.getfuncdata();
} }
}; };
</script> </script>
<style scoped> <style scoped>
.dashboard-container { .dashboard-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
@ -147,40 +148,40 @@
gap: 0.5rem; gap: 0.5rem;
box-sizing: border-box; box-sizing: border-box;
overflow: auto; overflow: auto;
} }
.dashboard-row { .dashboard-row {
display: flex; display: flex;
flex: 1; flex: 1;
gap: 0.5rem; gap: 0.5rem;
} }
.dashboard-rowtwo { .dashboard-rowtwo {
display: flex; display: flex;
height: auto; height: auto;
gap: 0.5rem; gap: 0.5rem;
} }
.dashboard-col { .dashboard-col {
flex: 1; flex: 1;
background-color: #FFFFFF; background-color: #FFFFFF;
border-radius: 0.5rem; border-radius: 0.5rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
} }
.dashboard-col.wide { .dashboard-col.wide {
flex: 2; flex: 2;
} }
.dashboard-col.narrow { .dashboard-col.narrow {
flex: 1; flex: 1;
} }
.itemhead { .itemhead {
width: 100%; width: 100%;
border-left: 0.25rem solid #2B62F1; border-left: 0.25rem solid #2B62F1;
margin: 0.5rem 0; margin: 0.5rem 0;
@ -188,14 +189,14 @@
height: 1.25rem; height: 1.25rem;
display: flex; display: flex;
align-items: center; align-items: center;
} }
.relaitem { .relaitem {
flex: 1; flex: 1;
position: relative; position: relative;
} }
.itemsall { .itemsall {
position: absolute; position: absolute;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -204,9 +205,9 @@
top: 33%; top: 33%;
left: 23%; left: 23%;
z-index: 1; z-index: 1;
} }
.itemsall span:nth-child(1) { .itemsall span:nth-child(1) {
font-family: DINbold; font-family: DINbold;
font-weight: 500; font-weight: 500;
font-size: 1.25rem; font-size: 1.25rem;
@ -214,9 +215,9 @@
text-align: left; text-align: left;
font-style: normal; font-style: normal;
text-transform: none; text-transform: none;
} }
.itemsall span:nth-child(2) { .itemsall span:nth-child(2) {
font-family: alibold; font-family: alibold;
font-weight: 400; font-weight: 400;
font-size: 0.68rem; font-size: 0.68rem;
@ -224,9 +225,9 @@
text-align: left; text-align: left;
font-style: normal; font-style: normal;
text-transform: none; text-transform: none;
} }
.itemhead span { .itemhead span {
margin-left: 1rem; margin-left: 1rem;
font-family: alibold; font-family: alibold;
font-weight: 600; font-weight: 600;
@ -236,24 +237,22 @@
text-align: left; text-align: left;
font-style: normal; font-style: normal;
text-transform: none; text-transform: none;
} }
.mainarea { .mainarea {
flex: 1; flex: 1;
padding: 0 0 0 .5rem; padding: 0 0 0 .5rem;
overflow: auto; overflow: auto;
} }
.allarea { .allarea {
flex: 1; flex: 1;
padding: 0rem 1rem 0 1rem; padding: 0rem 1rem 0 1rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.bgcicon { .bgcicon {
padding: 0 !important; padding: 0 !important;
} }
</style>
</style>

@ -1,4 +1,5 @@
<template> <template>
<!-- 这是测试的页面 -->
<div class="dashboard-container"> <div class="dashboard-container">
<!-- 1 --> <!-- 1 -->
<div class="dashboard-row"> <div class="dashboard-row">
@ -91,23 +92,23 @@
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import AllArea from '@/views/components/analysis/all.vue' import AllArea from '@/views/components/analysis/all.vue'
import FunctionArea from '@/views/components/analysis/function.vue' import FunctionArea from '@/views/components/analysis/function.vue'
import InvestArea from '@/views/components/analysis/invest.vue' import InvestArea from '@/views/components/analysis/invest.vue'
import Message from '@/views/components/analysis/message.vue' import Message from '@/views/components/analysis/message.vue'
import ProjectList from '@/views/components/analysis/projectList.vue' import ProjectList from '@/views/components/analysis/projectList.vue'
import MapArea from '@/views/components/analysis/map.vue' import MapArea from '@/views/components/analysis/map.vue'
import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue' import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue'
import Cydxml from '@/views/components/analysis/chanyedxml.vue' import Cydxml from '@/views/components/analysis/chanyedxml.vue'
import Cydxxfgl from '@/views/components/analysis/chanyexfgl.vue' import Cydxxfgl from '@/views/components/analysis/chanyexfgl.vue'
import Cbxm from '@/views/components/analysis/chubeixm.vue' import Cbxm from '@/views/components/analysis/chubeixm.vue'
import Ndwcqk from '@/views/components/analysis/ndwcqk.vue' import Ndwcqk from '@/views/components/analysis/ndwcqk.vue'
import { investall, fungong } from '@/api/ManageApi/index' import { investall, fungong } from '@/api/ManageApi/index'
export default { export default {
components: { components: {
AllArea, AllArea,
FunctionArea, FunctionArea,
@ -162,12 +163,12 @@
this.getData(); this.getData();
this.getfuncdata(); this.getfuncdata();
} }
}; };
</script> </script>
<style scoped> <style scoped>
.dashboard-container { .dashboard-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
@ -175,40 +176,40 @@
gap: 0.5rem; gap: 0.5rem;
box-sizing: border-box; box-sizing: border-box;
overflow: auto; overflow: auto;
} }
.dashboard-row { .dashboard-row {
display: flex; display: flex;
flex: 1; flex: 1;
gap: 0.5rem; gap: 0.5rem;
} }
.dashboard-rowtwo { .dashboard-rowtwo {
display: flex; display: flex;
height: auto; height: auto;
gap: 0.5rem; gap: 0.5rem;
} }
.dashboard-col { .dashboard-col {
flex: 1; flex: 1;
background-color: #FFFFFF; background-color: #FFFFFF;
border-radius: 0.5rem; border-radius: 0.5rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow: hidden; overflow: hidden;
} }
.dashboard-col.wide { .dashboard-col.wide {
flex: 2; flex: 2;
} }
.dashboard-col.narrow { .dashboard-col.narrow {
flex: 1; flex: 1;
} }
.itemhead { .itemhead {
width: 100%; width: 100%;
border-left: 0.25rem solid #2B62F1; border-left: 0.25rem solid #2B62F1;
margin: 0.5rem 0; margin: 0.5rem 0;
@ -226,14 +227,14 @@
color: gray!important; color: gray!important;
justify-content: flex-end; justify-content: flex-end;
} }
} }
.relaitem { .relaitem {
flex: 1; flex: 1;
position: relative; position: relative;
} }
.itemsall { .itemsall {
position: absolute; position: absolute;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -242,9 +243,9 @@
top: 33%; top: 33%;
left: 23%; left: 23%;
z-index: 1; z-index: 1;
} }
.itemsall span:nth-child(1) { .itemsall span:nth-child(1) {
font-family: DINbold; font-family: DINbold;
font-weight: 500; font-weight: 500;
font-size: 1.25rem; font-size: 1.25rem;
@ -252,9 +253,9 @@
text-align: left; text-align: left;
font-style: normal; font-style: normal;
text-transform: none; text-transform: none;
} }
.itemsall span:nth-child(2) { .itemsall span:nth-child(2) {
font-family: alibold; font-family: alibold;
font-weight: 400; font-weight: 400;
font-size: 0.68rem; font-size: 0.68rem;
@ -262,9 +263,9 @@
text-align: left; text-align: left;
font-style: normal; font-style: normal;
text-transform: none; text-transform: none;
} }
.itemhead span { .itemhead span {
margin-left: 1rem; margin-left: 1rem;
font-family: alibold; font-family: alibold;
font-weight: 600; font-weight: 600;
@ -274,22 +275,22 @@
text-align: left; text-align: left;
font-style: normal; font-style: normal;
text-transform: none; text-transform: none;
} }
.mainarea { .mainarea {
flex: 1; flex: 1;
padding: 0 0 0 .5rem; padding: 0 0 0 .5rem;
overflow: auto; overflow: auto;
} }
.allarea { .allarea {
flex: 1; flex: 1;
padding: 0rem 1rem 0 1rem; padding: 0rem 1rem 0 1rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.bgcicon { .bgcicon {
padding: 0 !important; padding: 0 !important;
} }
</style> </style>

@ -1,4 +1,5 @@
<template> <template>
<!-- 正式的统计页面 -->
<div class="dashboard-container"> <div class="dashboard-container">
<!-- 1 --> <!-- 1 -->
<div class="dashboard-row"> <div class="dashboard-row">
@ -58,35 +59,11 @@
</div> </div>
</div> </div>
<div class="dashboard-col" style="height: 11rem;"> <div class="dashboard-col" style="height: 11rem;">
<div class="itemhead">
<!-- <span>产业导向细分产业分析</span> -->
<span>年度任务完成情况</span>
</div>
<div class="relaitem" style="height: 9rem;">
<!-- <Cydxxfgl /> -->
<Ndwcqk />
</div>
</div>
</div>
<!-- 4 -->
<div class="dashboard-row">
<div class="dashboard-col">
<div class="itemhead">
<span>储备项目统计分析</span>
</div>
<div class="relaitem">
<Cbxm />
</div>
</div>
<div class="dashboard-col">
<div class="itemhead"> <div class="itemhead">
<span>产业导向细分产业分析</span> <span>产业导向细分产业分析</span>
<!-- <span>年度任务完成情况</span> -->
</div> </div>
<div class="relaitem"> <div class="relaitem" style="height: 9rem;">
<Cydxxfgl /> <Cydxxfgl />
<!-- <Ndwcqk /> -->
</div> </div>
</div> </div>
</div> </div>
@ -103,8 +80,6 @@ import MapArea from '@/views/components/analysis/map.vue'
import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue' import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue'
import Cydxml from '@/views/components/analysis/chanyedxml.vue' import Cydxml from '@/views/components/analysis/chanyedxml.vue'
import Cydxxfgl from '@/views/components/analysis/chanyexfgl.vue' import Cydxxfgl from '@/views/components/analysis/chanyexfgl.vue'
import Cbxm from '@/views/components/analysis/chubeixm.vue'
import Ndwcqk from '@/views/components/analysis/ndwcqk.vue'
import { investall, fungong } from '@/api/ManageApi/index' import { investall, fungong } from '@/api/ManageApi/index'
export default { export default {
@ -117,9 +92,7 @@ export default {
MapArea, MapArea,
Cyeshuju, Cyeshuju,
Cydxml, Cydxml,
Cydxxfgl, Cydxxfgl
Cbxm,
Ndwcqk
}, },
data() { data() {
return { return {
@ -216,16 +189,6 @@ export default {
height: 1.25rem; height: 1.25rem;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between;
.top {
width: auto;
display: flex;
margin-bottom: 10px;
font-size: 0.88rem;
color: gray!important;
justify-content: flex-end;
}
} }
.relaitem { .relaitem {

Loading…
Cancel
Save