测试内容的页面

xuhongjie
严飞永 1 month ago
parent cd2ecc1ef5
commit d77fa4b624

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

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

@ -3,25 +3,49 @@
<div class="top">
<span>时间截止至2025年2月</span>
</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 年的数据 -->
<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">
<span>{{ item.year }}</span>
<span>已完成 {{ item.completed }} / 目标 {{ item.target }} / 未完成 {{ item.remaining }}</span>
<!-- <span>已完成 {{ item.completed }} / 未完成 {{ item.remaining }} / 目标 {{ item.target }}</span> -->
</div>
<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="{
width: shouldShowBuffer(item) ? bufferWidth(item) : '0%',
transition: 'width 0.3s ease'
}"></div>
}">
</div>
</div>
<div>
<span>{{ item.target }}</span>
</div>
</div>
</div>
@ -33,14 +57,15 @@ export default {
data() {
const currentYear = new Date().getFullYear();
return {
//
progressData: [
{ year: currentYear, completed: 950, target: 900, remaining: 50 },
{ year: currentYear - 1, completed: 800, target: 800, remaining: 0 },
{ year: currentYear - 2, completed: 750, target: 700, remaining: 0 },
{ year: currentYear - 3, completed: 500, target: 600, remaining: 100 },
{ year: currentYear, completed: 0, target: 0, remaining: 0 },
{ year: currentYear - 1, completed: 25, target: 65, remaining: 31 },
{ year: currentYear - 2, completed: 25, target: 55, remaining: 30 },
{ 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: {
@ -51,19 +76,28 @@ export default {
// +
completedWidth(item) {
const max = item.target + this.bufferZone;
if (max === 0) return '0%'; // 0
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) {
const max = item.target + this.bufferZone;
return `${(this.bufferZone / max) * 100}%`;
const percentage = (this.bufferZone / max) * 100;
return `${percentage > 0 ? percentage : 1}%`;
},
//
remainingWidth(item) {
const max = item.target + this.bufferZone;
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%;
overflow: auto;
}
.top{
.top {
width: 100%;
display: flex;
margin-bottom: 10px;
@ -83,8 +118,12 @@ export default {
color: gray;
justify-content: flex-end;
}
.year-progress {
margin-bottom: 1.5rem;
width: 100%;
display: flex;
gap: 10px;
}
.header {
@ -95,6 +134,7 @@ export default {
}
.progress-bar {
width: 82%;
height: 1rem;
border-radius: 0.5rem;
background-color: #e0e0e0;
@ -119,4 +159,66 @@ export default {
/* 淡蓝色 - 未完成 */
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>

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

@ -1,259 +1,258 @@
<template>
<div class="dashboard-container">
<!-- 1 -->
<div class="dashboard-row">
<div class="dashboard-col wide">
<div class="allarea">
<AllArea @year-change="handleYearChange" />
</div>
<!-- 正式的统计页面 -->
<div class="dashboard-container">
<!-- 1 -->
<div class="dashboard-row">
<div class="dashboard-col wide">
<div class="allarea">
<AllArea @year-change="handleYearChange" />
</div>
<div class="dashboard-col narrow">
<div class="itemhead">
<span>消息通知</span>
</div>
<div class="mainarea">
<Message />
</div>
</div>
<div class="dashboard-col narrow">
<div class="itemhead">
<span>消息通知</span>
</div>
<div class="mainarea">
<Message />
</div>
</div>
<!-- 2-->
<div class="dashboard-rowtwo">
<div class="dashboard-col wide bgcicon">
<MapArea />
</div>
<!-- 2-->
<div class="dashboard-rowtwo">
<div class="dashboard-col wide bgcicon">
<MapArea />
</div>
<div class="dashboard-col narrow">
<div class="itemhead" style="margin: .5rem 0 0 0;">
<span>功能区</span>
</div>
<div class="relaitem">
<FunctionArea :years="years" />
</div>
<div class="dashboard-col narrow">
<div class="itemhead" style="margin: .5rem 0 0 0;">
<span>功能区</span>
</div>
<div class="relaitem">
<FunctionArea :years="years" />
</div>
<div class="itemhead" style="margin: 0;">
<span>投资主体</span>
</div>
<div class="relaitem">
<InvestArea :years="years" />
</div>
<div class="itemhead" style="margin: 0;">
<span>投资主体</span>
</div>
<div class="relaitem">
<InvestArea :years="years" />
</div>
</div>
<!-- 3 -->
<div class="dashboard-row">
<div class="dashboard-col">
<div class="itemhead">
<span>产业数据分析</span>
</div>
<div class="relaitem">
<Cyeshuju />
</div>
</div>
<!-- 3 -->
<div class="dashboard-row">
<div class="dashboard-col">
<div class="itemhead">
<span>产业数据分析</span>
</div>
<div class="dashboard-col">
<div class="itemhead">
<span>产业导向目录分析</span>
</div>
<div class="relaitem">
<Cydxml />
</div>
<div class="relaitem">
<Cyeshuju />
</div>
</div>
<div class="dashboard-col">
<div class="itemhead">
<span>产业导向目录分析</span>
</div>
<div class="dashboard-col">
<div class="itemhead">
<span>产业导向细分产业分析</span>
</div>
<div class="relaitem">
<Cydxxfgl />
</div>
<div class="relaitem">
<Cydxml />
</div>
</div>
<div class="dashboard-col" style="height: 11rem;">
<div class="itemhead">
<span>产业导向细分产业分析</span>
</div>
<div class="relaitem" style="height: 9rem;">
<Cydxxfgl />
</div>
</div>
</div>
</template>
<script>
import AllArea from '@/views/components/analysis/all.vue'
import FunctionArea from '@/views/components/analysis/function.vue'
import InvestArea from '@/views/components/analysis/invest.vue'
import Message from '@/views/components/analysis/message.vue'
import ProjectList from '@/views/components/analysis/projectList.vue'
import MapArea from '@/views/components/analysis/map.vue'
import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue'
import Cydxml from '@/views/components/analysis/chanyedxml.vue'
import Cydxxfgl from '@/views/components/analysis/chanyexfgl.vue'
import { investall, fungong } from '@/api/ManageApi/index'
export default {
components: {
AllArea,
FunctionArea,
InvestArea,
Message,
ProjectList,
MapArea,
Cyeshuju,
Cydxml,
Cydxxfgl
</div>
</template>
<script>
import AllArea from '@/views/components/analysis/all.vue'
import FunctionArea from '@/views/components/analysis/function.vue'
import InvestArea from '@/views/components/analysis/invest.vue'
import Message from '@/views/components/analysis/message.vue'
import ProjectList from '@/views/components/analysis/projectList.vue'
import MapArea from '@/views/components/analysis/map.vue'
import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue'
import Cydxml from '@/views/components/analysis/chanyedxml.vue'
import Cydxxfgl from '@/views/components/analysis/chanyexfgl.vue'
import { investall, fungong } from '@/api/ManageApi/index'
export default {
components: {
AllArea,
FunctionArea,
InvestArea,
Message,
ProjectList,
MapArea,
Cyeshuju,
Cydxml,
Cydxxfgl
},
data() {
return {
years: new Date().getFullYear().toString(),
allnumber: {
touzinumber: 0
},
functionnumber: {
functionnumber: 0
}
};
},
methods: {
handleYearChange(years) {
this.years = years;
console.log("index.vue: handleYearChange called with years:", years);
},
data() {
return {
years: new Date().getFullYear().toString(),
allnumber: {
touzinumber: 0
},
functionnumber: {
functionnumber: 0
}
};
async getData() {
const response = await investall();
if (response && response.data) {
const totalCount = response.data.reduce((sum, item) => sum + item.count, 0);
this.allnumber = {
touzinumber: totalCount
};
}
},
methods: {
handleYearChange(years) {
this.years = years;
console.log("index.vue: handleYearChange called with years:", years);
},
async getData() {
const response = await investall();
if (response && response.data) {
const totalCount = response.data.reduce((sum, item) => sum + item.count, 0);
this.allnumber = {
touzinumber: totalCount
};
}
},
async getfuncdata() {
const response2 = await fungong();
if (response2 && response2.data) {
const totalCount2 = response2.data.reduce(
(sum, item) => sum + item.count, 0
);
this.functionnumber = {
functionnumber: totalCount2
}
async getfuncdata() {
const response2 = await fungong();
if (response2 && response2.data) {
const totalCount2 = response2.data.reduce(
(sum, item) => sum + item.count, 0
);
this.functionnumber = {
functionnumber: totalCount2
}
}
},
created() {
this.getData();
this.getfuncdata();
}
};
</script>
<style scoped>
.dashboard-container {
display: flex;
flex-direction: column;
height: 100%;
padding: 0.5rem;
gap: 0.5rem;
box-sizing: border-box;
overflow: auto;
}
.dashboard-row {
display: flex;
flex: 1;
gap: 0.5rem;
}
.dashboard-rowtwo {
display: flex;
height: auto;
gap: 0.5rem;
}
.dashboard-col {
flex: 1;
background-color: #FFFFFF;
border-radius: 0.5rem;
display: flex;
flex-direction: column;
overflow: hidden;
}
.dashboard-col.wide {
flex: 2;
}
.dashboard-col.narrow {
flex: 1;
}
.itemhead {
width: 100%;
border-left: 0.25rem solid #2B62F1;
margin: 0.5rem 0;
margin: 0.5rem 0;
height: 1.25rem;
display: flex;
align-items: center;
}
.relaitem {
flex: 1;
position: relative;
}
.itemsall {
position: absolute;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
top: 33%;
left: 23%;
z-index: 1;
}
.itemsall span:nth-child(1) {
font-family: DINbold;
font-weight: 500;
font-size: 1.25rem;
color: #292C33;
text-align: left;
font-style: normal;
text-transform: none;
}
.itemsall span:nth-child(2) {
font-family: alibold;
font-weight: 400;
font-size: 0.68rem;
color: #9E9E9E;
text-align: left;
font-style: normal;
text-transform: none;
}
.itemhead span {
margin-left: 1rem;
font-family: alibold;
font-weight: 600;
font-size: 1rem;
color: #3D424C;
line-height: 1.69rem;
text-align: left;
font-style: normal;
text-transform: none;
}
.mainarea {
flex: 1;
padding: 0 0 0 .5rem;
overflow: auto;
}
.allarea {
flex: 1;
padding: 0rem 1rem 0 1rem;
display: flex;
flex-direction: column;
}
.bgcicon {
padding: 0 !important;
},
created() {
this.getData();
this.getfuncdata();
}
</style>
};
</script>
<style scoped>
.dashboard-container {
display: flex;
flex-direction: column;
height: 100%;
padding: 0.5rem;
gap: 0.5rem;
box-sizing: border-box;
overflow: auto;
}
.dashboard-row {
display: flex;
flex: 1;
gap: 0.5rem;
}
.dashboard-rowtwo {
display: flex;
height: auto;
gap: 0.5rem;
}
.dashboard-col {
flex: 1;
background-color: #FFFFFF;
border-radius: 0.5rem;
display: flex;
flex-direction: column;
overflow: hidden;
}
.dashboard-col.wide {
flex: 2;
}
.dashboard-col.narrow {
flex: 1;
}
.itemhead {
width: 100%;
border-left: 0.25rem solid #2B62F1;
margin: 0.5rem 0;
margin: 0.5rem 0;
height: 1.25rem;
display: flex;
align-items: center;
}
.relaitem {
flex: 1;
position: relative;
}
.itemsall {
position: absolute;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
top: 33%;
left: 23%;
z-index: 1;
}
.itemsall span:nth-child(1) {
font-family: DINbold;
font-weight: 500;
font-size: 1.25rem;
color: #292C33;
text-align: left;
font-style: normal;
text-transform: none;
}
.itemsall span:nth-child(2) {
font-family: alibold;
font-weight: 400;
font-size: 0.68rem;
color: #9E9E9E;
text-align: left;
font-style: normal;
text-transform: none;
}
.itemhead span {
margin-left: 1rem;
font-family: alibold;
font-weight: 600;
font-size: 1rem;
color: #3D424C;
line-height: 1.69rem;
text-align: left;
font-style: normal;
text-transform: none;
}
.mainarea {
flex: 1;
padding: 0 0 0 .5rem;
overflow: auto;
}
.allarea {
flex: 1;
padding: 0rem 1rem 0 1rem;
display: flex;
flex-direction: column;
}
.bgcicon {
padding: 0 !important;
}
</style>

@ -1,295 +1,296 @@
<template>
<div class="dashboard-container">
<!-- 1 -->
<div class="dashboard-row">
<div class="dashboard-col wide">
<div class="allarea">
<AllArea @year-change="handleYearChange" />
</div>
<!-- 这是测试的页面 -->
<div class="dashboard-container">
<!-- 1 -->
<div class="dashboard-row">
<div class="dashboard-col wide">
<div class="allarea">
<AllArea @year-change="handleYearChange" />
</div>
<div class="dashboard-col narrow">
<div class="itemhead">
<span>消息通知</span>
</div>
<div class="mainarea">
<Message />
</div>
</div>
<div class="dashboard-col narrow">
<div class="itemhead">
<span>消息通知</span>
</div>
<div class="mainarea">
<Message />
</div>
</div>
</div>
<!-- 2-->
<div class="dashboard-rowtwo">
<div class="dashboard-col wide bgcicon">
<MapArea />
</div>
<div class="dashboard-col narrow">
<div class="itemhead" style="margin: .5rem 0 0 0;">
<span>功能区</span>
</div>
<div class="relaitem">
<FunctionArea :years="years" />
</div>
<div class="itemhead" style="margin: 0;">
<span>投资主体</span>
</div>
<div class="relaitem">
<InvestArea :years="years" />
</div>
</div>
</div>
<!-- 3 -->
<div class="dashboard-row">
<div class="dashboard-col">
<div class="itemhead">
<span>产业数据分析</span>
</div>
<div class="relaitem">
<Cyeshuju />
</div>
</div>
<!-- 2-->
<div class="dashboard-rowtwo">
<div class="dashboard-col wide bgcicon">
<MapArea />
<div class="dashboard-col">
<div class="itemhead">
<span>产业导向目录分析</span>
</div>
<div class="dashboard-col narrow">
<div class="itemhead" style="margin: .5rem 0 0 0;">
<span>功能区</span>
</div>
<div class="relaitem">
<FunctionArea :years="years" />
</div>
<div class="itemhead" style="margin: 0;">
<span>投资主体</span>
</div>
<div class="relaitem">
<InvestArea :years="years" />
</div>
<div class="relaitem">
<Cydxml />
</div>
</div>
<!-- 3 -->
<div class="dashboard-row">
<div class="dashboard-col">
<div class="itemhead">
<span>产业数据分析</span>
</div>
<div class="relaitem">
<Cyeshuju />
</div>
<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 class="dashboard-col">
<div class="itemhead">
<span>产业导向目录分析</span>
</div>
<div class="relaitem">
<Cydxml />
</div>
</div>
</div>
<!-- 4 -->
<div class="dashboard-row">
<div class="dashboard-col">
<div class="itemhead">
<span>储备项目统计分析</span>
</div>
<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 class="relaitem">
<Cbxm />
</div>
</div>
<!-- 4 -->
<div class="dashboard-row">
<div class="dashboard-col">
<div class="itemhead">
<span>储备项目统计分析</span>
</div>
<div class="relaitem">
<Cbxm />
</div>
<div class="dashboard-col">
<div class="itemhead">
<span>产业导向细分产业分析</span>
<!-- <span>年度任务完成情况</span> -->
</div>
<div class="dashboard-col">
<div class="itemhead">
<span>产业导向细分产业分析</span>
<!-- <span>年度任务完成情况</span> -->
</div>
<div class="relaitem">
<Cydxxfgl />
<!-- <Ndwcqk /> -->
</div>
<div class="relaitem">
<Cydxxfgl />
<!-- <Ndwcqk /> -->
</div>
</div>
</div>
</template>
<script>
import AllArea from '@/views/components/analysis/all.vue'
import FunctionArea from '@/views/components/analysis/function.vue'
import InvestArea from '@/views/components/analysis/invest.vue'
import Message from '@/views/components/analysis/message.vue'
import ProjectList from '@/views/components/analysis/projectList.vue'
import MapArea from '@/views/components/analysis/map.vue'
import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue'
import Cydxml from '@/views/components/analysis/chanyedxml.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'
export default {
components: {
AllArea,
FunctionArea,
InvestArea,
Message,
ProjectList,
MapArea,
Cyeshuju,
Cydxml,
Cydxxfgl,
Cbxm,
Ndwcqk
</div>
</template>
<script>
import AllArea from '@/views/components/analysis/all.vue'
import FunctionArea from '@/views/components/analysis/function.vue'
import InvestArea from '@/views/components/analysis/invest.vue'
import Message from '@/views/components/analysis/message.vue'
import ProjectList from '@/views/components/analysis/projectList.vue'
import MapArea from '@/views/components/analysis/map.vue'
import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue'
import Cydxml from '@/views/components/analysis/chanyedxml.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'
export default {
components: {
AllArea,
FunctionArea,
InvestArea,
Message,
ProjectList,
MapArea,
Cyeshuju,
Cydxml,
Cydxxfgl,
Cbxm,
Ndwcqk
},
data() {
return {
years: new Date().getFullYear().toString(),
allnumber: {
touzinumber: 0
},
functionnumber: {
functionnumber: 0
}
};
},
methods: {
handleYearChange(years) {
this.years = years;
console.log("index.vue: handleYearChange called with years:", years);
},
data() {
return {
years: new Date().getFullYear().toString(),
allnumber: {
touzinumber: 0
},
functionnumber: {
functionnumber: 0
}
};
async getData() {
const response = await investall();
if (response && response.data) {
const totalCount = response.data.reduce((sum, item) => sum + item.count, 0);
this.allnumber = {
touzinumber: totalCount
};
}
},
methods: {
handleYearChange(years) {
this.years = years;
console.log("index.vue: handleYearChange called with years:", years);
},
async getData() {
const response = await investall();
if (response && response.data) {
const totalCount = response.data.reduce((sum, item) => sum + item.count, 0);
this.allnumber = {
touzinumber: totalCount
};
}
},
async getfuncdata() {
const response2 = await fungong();
if (response2 && response2.data) {
const totalCount2 = response2.data.reduce(
(sum, item) => sum + item.count, 0
);
this.functionnumber = {
functionnumber: totalCount2
}
async getfuncdata() {
const response2 = await fungong();
if (response2 && response2.data) {
const totalCount2 = response2.data.reduce(
(sum, item) => sum + item.count, 0
);
this.functionnumber = {
functionnumber: totalCount2
}
}
},
created() {
this.getData();
this.getfuncdata();
}
};
</script>
<style scoped>
.dashboard-container {
display: flex;
flex-direction: column;
height: 100%;
padding: 0.5rem;
gap: 0.5rem;
box-sizing: border-box;
overflow: auto;
}
.dashboard-row {
display: flex;
flex: 1;
gap: 0.5rem;
}
.dashboard-rowtwo {
display: flex;
height: auto;
gap: 0.5rem;
}
.dashboard-col {
flex: 1;
background-color: #FFFFFF;
border-radius: 0.5rem;
display: flex;
flex-direction: column;
overflow: hidden;
}
.dashboard-col.wide {
flex: 2;
}
.dashboard-col.narrow {
flex: 1;
}
.itemhead {
width: 100%;
border-left: 0.25rem solid #2B62F1;
margin: 0.5rem 0;
margin: 0.5rem 0;
height: 1.25rem;
display: flex;
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;
}
},
created() {
this.getData();
this.getfuncdata();
}
.relaitem {
flex: 1;
position: relative;
}
.itemsall {
position: absolute;
};
</script>
<style scoped>
.dashboard-container {
display: flex;
flex-direction: column;
height: 100%;
padding: 0.5rem;
gap: 0.5rem;
box-sizing: border-box;
overflow: auto;
}
.dashboard-row {
display: flex;
flex: 1;
gap: 0.5rem;
}
.dashboard-rowtwo {
display: flex;
height: auto;
gap: 0.5rem;
}
.dashboard-col {
flex: 1;
background-color: #FFFFFF;
border-radius: 0.5rem;
display: flex;
flex-direction: column;
overflow: hidden;
}
.dashboard-col.wide {
flex: 2;
}
.dashboard-col.narrow {
flex: 1;
}
.itemhead {
width: 100%;
border-left: 0.25rem solid #2B62F1;
margin: 0.5rem 0;
margin: 0.5rem 0;
height: 1.25rem;
display: flex;
align-items: center;
justify-content: space-between;
.top {
width: auto;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
top: 33%;
left: 23%;
z-index: 1;
}
.itemsall span:nth-child(1) {
font-family: DINbold;
font-weight: 500;
font-size: 1.25rem;
color: #292C33;
text-align: left;
font-style: normal;
text-transform: none;
}
.itemsall span:nth-child(2) {
font-family: alibold;
font-weight: 400;
font-size: 0.68rem;
color: #9E9E9E;
text-align: left;
font-style: normal;
text-transform: none;
}
.itemhead span {
margin-left: 1rem;
font-family: alibold;
font-weight: 600;
font-size: 1rem;
color: #3D424C;
line-height: 1.69rem;
text-align: left;
font-style: normal;
text-transform: none;
}
.mainarea {
flex: 1;
padding: 0 0 0 .5rem;
overflow: auto;
}
.allarea {
flex: 1;
padding: 0rem 1rem 0 1rem;
display: flex;
flex-direction: column;
}
.bgcicon {
padding: 0 !important;
margin-bottom: 10px;
font-size: 0.88rem;
color: gray!important;
justify-content: flex-end;
}
</style>
}
.relaitem {
flex: 1;
position: relative;
}
.itemsall {
position: absolute;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
top: 33%;
left: 23%;
z-index: 1;
}
.itemsall span:nth-child(1) {
font-family: DINbold;
font-weight: 500;
font-size: 1.25rem;
color: #292C33;
text-align: left;
font-style: normal;
text-transform: none;
}
.itemsall span:nth-child(2) {
font-family: alibold;
font-weight: 400;
font-size: 0.68rem;
color: #9E9E9E;
text-align: left;
font-style: normal;
text-transform: none;
}
.itemhead span {
margin-left: 1rem;
font-family: alibold;
font-weight: 600;
font-size: 1rem;
color: #3D424C;
line-height: 1.69rem;
text-align: left;
font-style: normal;
text-transform: none;
}
.mainarea {
flex: 1;
padding: 0 0 0 .5rem;
overflow: auto;
}
.allarea {
flex: 1;
padding: 0rem 1rem 0 1rem;
display: flex;
flex-direction: column;
}
.bgcicon {
padding: 0 !important;
}
</style>

@ -1,4 +1,5 @@
<template>
<!-- 正式的统计页面 -->
<div class="dashboard-container">
<!-- 1 -->
<div class="dashboard-row">
@ -57,36 +58,12 @@
<Cydxml />
</div>
</div>
<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="dashboard-col" style="height: 11rem;">
<div class="itemhead">
<span>产业导向细分产业分析</span>
<!-- <span>年度任务完成情况</span> -->
</div>
<div class="relaitem">
<div class="relaitem" style="height: 9rem;">
<Cydxxfgl />
<!-- <Ndwcqk /> -->
</div>
</div>
</div>
@ -103,8 +80,6 @@ import MapArea from '@/views/components/analysis/map.vue'
import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue'
import Cydxml from '@/views/components/analysis/chanyedxml.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'
export default {
@ -117,9 +92,7 @@ export default {
MapArea,
Cyeshuju,
Cydxml,
Cydxxfgl,
Cbxm,
Ndwcqk
Cydxxfgl
},
data() {
return {
@ -216,16 +189,6 @@ export default {
height: 1.25rem;
display: flex;
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 {

Loading…
Cancel
Save