xuhongjie
项洋 2 months ago
commit 8f890ee7cf

File diff suppressed because it is too large Load Diff

@ -7,10 +7,20 @@
<script>
import ThemePicker from "@/components/ThemePicker";
import autofit from 'autofit.js';
export default {
name: "App",
components: { ThemePicker },
mounted() {
autofit.init({
dh: 1030, // 稿
dw: 1950, // 稿
el: "body", // DOM
resize: true // resize
})
},
metaInfo() {
return {
title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title,
@ -21,17 +31,19 @@ export default {
}
};
</script>
<style >
<style>
#app .theme-picker {
display: none;
}
/* 项目详情中的表单label */
.el-descriptions-item__label.is-bordered-label {
background: #F4F7FE !important;
background: #F4F7FE !important;
width: 13.13rem;
font-size: 0.5rem;
}
.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{
.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell {
width: 13.13rem;
font-size: 0.88rem;
}

@ -1,22 +1,21 @@
#app {
.main-container {
height: 100%;
transition: margin-left .28s;
transition: margin-left 0.28s;
margin-left: $base-sidebar-width;
position: relative;
}
.sidebarHide {
margin-left: 0!important;
margin-left: 0 !important;
}
.sidebar-container {
-webkit-transition: width .28s;
-webkit-transition: width 0.28s;
transition: width 0.28s;
width: $base-sidebar-width !important;
background-color: $base-menu-background;
height: 100%;
// background-color: $base-menu-background;
// height: 100%;
position: fixed;
font-size: 0px;
top: 0;
@ -30,7 +29,8 @@
// reset element-ui css
.horizontal-collapse-transition {
transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
transition: 0s width ease-in-out, 0s padding-left ease-in-out,
0s padding-right ease-in-out;
}
.scrollbar-wrapper {
@ -39,6 +39,8 @@
.el-scrollbar__bar.is-vertical {
right: 0px;
width: 0px;
top: 0px;
}
.el-scrollbar {
@ -67,6 +69,9 @@
.el-menu {
border: none;
border-right: none;
border-left: none!important;
border-bottom: none !important;
height: 100%;
width: 100% !important;
background-image: url(../images/侧边栏2.png);
@ -74,48 +79,49 @@
background-size: 100% 100%;
}
.el-menu-item, .el-submenu__title {
.el-menu-item,
.el-submenu__title {
overflow: hidden !important;
text-overflow: ellipsis !important;
white-space: nowrap !important;
border-radius: 0.25rem 0.25rem 0.25rem 0.25rem;
border-radius: 0.25rem;
height: 45px;
line-height: 45px;
}
// menu hover
.is-active{
background-color: #2B62F1!important;
.is-active {
background-color: #2b62f1 !important;
}
.submenu-title-noDropdown,
.el-submenu__title {
&:hover {
background-color: #2B62F1 !important;
background-color: #2b62f1 !important;
color: white !important;
}
}
& .is-active > .el-submenu__title {
background-color: #2B62F1 !important;
background-color: #2b62f1 !important;
color: white !important;
}
& .nest-menu .el-submenu>.el-submenu__title,
& .nest-menu .el-submenu > .el-submenu__title,
& .el-submenu .el-menu-item {
min-width: $base-sidebar-width !important;
min-width: 240px !important;
&:hover {
background-color: #2B62F1 !important;
background-color: #2b62f1 !important;
color: white;
}
}
& .nest-menu .el-submenu>.el-submenu__title,
& .nest-menu .el-submenu > .el-submenu__title,
& .el-submenu .el-menu-item {
color: white;
&:hover {
background-color: #2B62F1 !important;
background-color: #2b62f1 !important;
color: white !important;
}
}
@ -146,20 +152,19 @@
.el-submenu {
overflow: hidden;
&>.el-submenu__title {
& > .el-submenu__title {
padding: 0 !important;
.svg-icon {
margin-left: 20px;
}
}
}
.el-menu--collapse {
.el-submenu {
&>.el-submenu__title {
&>span {
& > .el-submenu__title {
& > span {
height: 0;
width: 0;
overflow: hidden;
@ -182,7 +187,7 @@
}
.sidebar-container {
transition: transform .28s;
transition: transform 0.28s;
width: $base-sidebar-width !important;
}
@ -196,7 +201,6 @@
}
.withoutAnimation {
.main-container,
.sidebar-container {
transition: none;
@ -206,22 +210,22 @@
// when menu collapsed
.el-menu--vertical {
&>.el-menu {
& > .el-menu {
.svg-icon {
margin-right: 16px;
}
}
.nest-menu .el-submenu>.el-submenu__title,
.nest-menu .el-submenu > .el-submenu__title,
.el-menu-item {
&:hover {
// you can use $subMenuHover
background-color: #2B62F1 !important;
background-color: #2b62f1 !important;
}
}
// the scroll bar appears when the subMenu is too long
>.el-menu--popup {
> .el-menu--popup {
max-height: 100vh;
overflow-y: auto;

@ -45,7 +45,7 @@ export default {
<style lang="scss" scoped>
.app-main {
/* 50= navbar 50 */
min-height: calc(100vh - 50px);
min-height: 100%;
width: 100%;
position: relative;
overflow: hidden;

@ -19,7 +19,7 @@
<i class="el-icon-caret-bottom" />
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="logout">
<el-dropdown-item @click.native="logout" >
<span>退出登录</span>
</el-dropdown-item>
</el-dropdown-menu>

@ -1,5 +1,5 @@
<template>
<div :class="{'has-logo':showLogo}" :style="{ backgroundColor: settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }" style="padding: 0 1rem ;">
<div :class="{'has-logo':showLogo}" style="padding: 0 1rem ;">
<logo v-if="showLogo" :collapse="isCollapse" />
<el-scrollbar wrap-class="scrollbar-wrapper">
<el-menu
@ -53,4 +53,4 @@ export default {
}
}
};
</script>
</script>

@ -1,26 +1,33 @@
<template>
<div :class="classObj" class="app-wrapper" :style="{'--current-color': theme}">
<div :class="classObj" class="app-wrapper">
<!-- 头部区域独占一行 -->
<div class="header-container">
<navbar/> <!-- 导航栏组件 -->
<navbar /> <!-- 导航栏组件 -->
</div>
<!-- 主内容区域 -->
<div class="main-container">
<!-- 左侧边栏仅在侧边栏未隐藏时显示 -->
<sidebar v-if="!sidebar.hide" class="sidebar-container"/>
<!-- 右侧内容区域 -->
<div :class="{'content-container': true, 'sidebarHide': sidebar.hide}">
<div class="breadword-container"><Breadword></Breadword> </div>
<app-main style="background-color: #FAFAFA;"/>
<!-- 左侧边栏 -->
<sidebar class="sidebar-container" />
<div style="display: flex;flex-direction: column;width: 100%;">
<!-- 面包屑 -->
<div class="breadword-container">
<Breadword></Breadword>
</div>
<!-- 右侧内容区域 -->
<div class="content-container">
<app-main style="background-color: #FAFAFA;" />
</div>
<!-- <el-backtop target=".content-container" :visibility-height = "0"></el-backtop> -->
</div>
</div>
<!-- 右侧面板包含设置面板 -->
<right-panel>
<settings/> <!-- 设置面板组件 -->
<settings />
</right-panel>
<el-backtop target=".main-container"></el-backtop>
</div>
</template>
@ -54,7 +61,6 @@ export default {
}),
classObj() {
return {
// hideSidebar: !this.sidebar.opened,
openSidebar: this.sidebar.opened,
withoutAnimation: this.sidebar.withoutAnimation
}
@ -63,70 +69,65 @@ export default {
return variables;
}
},
methods: {
handleClickOutside() {
this.$store.dispatch('app/closeSideBar', { withoutAnimation: false })
}
}
methods: {}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/mixin.scss";
@import "~@/assets/styles/variables.scss";
@import "~@/assets/styles/mixin.scss";
@import "~@/assets/styles/variables.scss";
.app-wrapper {
@include clearfix;
position: relative;
height: 100%;
width: 100%;
display: flex;
flex-direction: column;
background-image: url("../../src/assets/images/bg@2x.png");
background-size: 100% 100%;
}
.app-wrapper {
@include clearfix;
position: relative;
height: 100%;
width: 100%;
display: flex;
flex-direction: column;
background-image: url("../../src/assets/images/bg@2x.png");
background-size: 100% 100%;
}
.header-container {
width: 100%;
height: $base-header-height;
background-image: url("../../src/assets/images/top@1x.png");
background-size: 100% 100%;
background-repeat: no-repeat;
z-index: 1000;
}
.header-container {
width: 100%;
// height: $base-header-height;
background-image: url("../../src/assets/images/top@1x.png");
background-size: 100% 100%;
background-repeat: no-repeat;
z-index: 1000;
}
.main-container {
display: flex;
border-radius: 1rem 1rem 0 0 ;
margin-right: .3rem;
flex: 1;
overflow: hidden;
background-color: #FAFAFA;
}
.main-container {
display: flex;
border-radius: 1rem 1rem 0 0;
margin-right: .3rem;
flex: 1;
overflow: hidden;
background-color: #FAFAFA;
}
.sidebar-container {
width: $base-sidebar-width;
height: 100%;
transition: width 0.28s;
margin-top: 60px;
background-color: #f0f2f5;
// background-image: url("../../src/assets/images/bg@2x.png");
}
.sidebar-container {
width: $base-sidebar-width;
height: calc(100% - 60px);
transition: width 0.28s;
margin-top: 60px;
background-color: #f0f2f5;
}
.breadword-container{
background-color: #fff;
border-radius: 1rem 1rem 0 0;
}
.breadword-container {
background-color: #fff;
border-radius: 1rem 1rem 0 0;
}
.content-container {
flex: 1;
height: 100%;
overflow: auto;
background-color: #f0f2f5;
transition: margin-left 0.28s;
.content-container {
height: 100%;
overflow: hidden;
overflow-y: auto;
background-color: #f0f2f5;
transition: margin-left 0.28s;
&.sidebarHide {
margin-left: 0;
}
&.sidebarHide {
margin-left: 0;
}
}
</style>

@ -20,8 +20,8 @@
</el-col>
<el-col :span="5">
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<el-button type="primary" icon="el-icon-search" size="medium" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="medium" @click="resetQuery"></el-button>
</el-form-item>
</el-col>
</el-row>
@ -33,15 +33,15 @@
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd"></el-button>
<el-button type="primary" icon="el-icon-plus" size="medium" @click="handleAdd"></el-button>
</el-col>
</el-row>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-download" size="mini" @click="handleImport"></el-button>
<el-button type="primary" icon="el-icon-download" size="medium" @click="handleImport"></el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button type="primary" icon="el-icon-download" size="mini" @click="handleExport"></el-button>
<el-button type="primary" icon="el-icon-download" size="medium" @click="handleExport"></el-button>
</el-col> -->
</el-row>
</div>
@ -67,9 +67,9 @@
<el-table-column label="上传时间" align="center" prop="scsj" :formatter="dateFormat" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="getInfo(scope.row)"></el-button>
<el-button size="mini" type="text" @click="handleUpdate(scope.row)"></el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)" style="color: red;">删除</el-button>
<el-button size="medium" type="text" @click="getInfo(scope.row)"></el-button>
<el-button size="medium" type="text" @click="handleUpdate(scope.row)"></el-button>
<el-button size="medium" type="text" @click="handleDelete(scope.row)" style="color: red;">删除</el-button>
</template>
</el-table-column>
</el-table>
@ -78,7 +78,7 @@
</div>
<!-- 添加或修改项目对话框 -->
<el-dialog :title="title" :visible.sync="open" width="40rem" append-to-body>
<el-dialog :title="title" :visible.sync="open" width="45rem" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="7rem">
<el-form-item label="文件名称" prop="name">
<el-input v-model="form.name" placeholder="请输入文件名称" />

@ -181,18 +181,18 @@
</el-form-item>
</el-col>
</el-row>
<!-- <el-row>
<el-row style="display: none;">
<el-col :span="12">
<el-form-item label="经度" prop="tyshxydm">
<el-input v-model="form.tyshxydm" maxlength="50"></el-input>
<el-form-item label="经度" prop="longitude">
<el-input v-model="form.longitude" maxlength="50"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="纬度" prop="tyshxydm">
<el-input v-model="form.tyshxydm" maxlength="50"></el-input>
<el-form-item label="纬度" prop="latitude">
<el-input v-model="form.latitude" maxlength="50"></el-input>
</el-form-item>
</el-col>
</el-row> -->
</el-row>
<el-form-item label="项目法人单位简介" prop="unitIntroduction">
<el-input v-model="form.unitIntroduction" type="textarea" rows="4" maxlength="1000"></el-input>
</el-form-item>
@ -276,7 +276,10 @@ export default {
introduction: '',
fj: '',
jsjd: '',
//
longitude:'',
//
latitude:''
},
rules: {
name: [
@ -374,8 +377,8 @@ export default {
//
handleMapConfirm(location) {
this.form.jsdd = location.address; //
this.form.lng = location.lng; //
this.form.lat = location.lat; //
this.form.longitude = location.lng; //
this.form.latitude = location.lat; //
this.mapDialogVisible = false; //
},
/** 导出按钮操作 */
@ -541,12 +544,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;

@ -536,12 +536,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;

@ -65,39 +65,39 @@
<!-- 表格显示区 -->
<div class="contenttwo">
<div class="descriptionsdiv">
<el-table :data="tableData" style="width: 98%">
<el-table :data="tableData" style="width: 100%">
<el-table-column label="序号" width="200">
<template slot-scope="scope">
{{ (pagination.currentPage - 1) * pagination.pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column prop="name" label="企业名称" width="300">
<el-table-column prop="name" label="企业名称">
<template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model="scope.row.name" style="width: 100%;"></el-input>
<span v-else style="color: #2B62F1;">{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column prop="code" label="统一社会信用代码" width="300">
<el-table-column prop="code" label="统一社会信用代码">
</el-table-column>
<el-table-column prop="sshy" label="所属行业" width="300">
<el-table-column prop="sshy" label="所属行业">
<template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model="scope.row.sshy" style="width: 100%;"></el-input>
<span v-else>{{ scope.row.sshy }}</span>
</template>
</el-table-column>
<el-table-column prop="zjjg" label='租金价格' width="250">
<el-table-column prop="zjjg" label='租金价格'>
<template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model.number="scope.row.zjjg" style="width: 100%;"></el-input>
<span v-else>{{ scope.row.zjjg }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="200" align="center">
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button v-if="scope.row.isEditing" size="mini" type="text" icon="el-icon-check"
<el-button v-if="scope.row.isEditing" size="medium" type="text" icon="el-icon-check"
@click="saveRow(scope.row)">保存</el-button>
<el-button v-else size="mini" type="text" icon="el-icon-edit"
<el-button v-else size="medium" type="text" icon="el-icon-edit"
@click="editRow(scope.row)">编辑</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" style="color: #F25353;"
<el-button size="medium" type="text" icon="el-icon-delete" style="color: #F25353;"
@click="deleteRow(scope.$index)">删除</el-button>
</template>
</el-table-column>
@ -391,12 +391,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;

@ -80,7 +80,7 @@ export default {
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;
padding: 1rem;
padding: .3rem 0 1rem 0;
gap: 1rem;
overflow: auto;
}
@ -107,12 +107,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;

@ -297,12 +297,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;

@ -169,7 +169,7 @@ export default {
}
.topleft {
width: 8rem;
width: 10rem;
height: 2rem;
display: flex;
gap: 0.4rem;
@ -183,12 +183,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;

@ -15,41 +15,41 @@
<div class="content">
<div class="descriptionsdiv">
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="month" label="进度月份" width="200">
<el-table-column prop="month" label="进度月份">
</el-table-column>
<el-table-column prop="status" label="状态" width="200" align="center">
<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="monthlyInvestment" label="当月完成投资" width="220" align="center">
<el-table-column prop="monthlyInvestment" label="当月完成投资" align="center">
<template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model.number="scope.row.monthlyInvestment"
style="width: 100%;"></el-input>
<span v-else>{{ scope.row.monthlyInvestment }}</span>
</template>
</el-table-column>
<el-table-column prop="cumulativeInvestment" label="累计完成投资" width="280" align="center">
<el-table-column prop="cumulativeInvestment" label="累计完成投资" align="center">
<template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model.number="scope.row.cumulativeInvestment"
style="width: 100%;"></el-input>
<span v-else>{{ scope.row.cumulativeInvestment }}</span>
</template>
</el-table-column>
<el-table-column prop="cumulativeArea" label='截止目前累计建成面积(平方米)' width="280" align="center">
<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="progressDetails" label='项目进展详情' width="180" align="center">
<el-table-column prop="progressDetails" label='项目进展详情' align="center">
<template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model="scope.row.progressDetails" style="width: 100%;"></el-input>
<span v-else>{{ scope.row.progressDetails }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="200" align="center">
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button v-if="scope.row.isEditing" size="mini" type="text" icon="el-icon-check"
@click="handleSave(scope.row)">保存</el-button>
@ -87,17 +87,7 @@ export default {
},
data() {
return {
tableData: [
{
month: '2024-10',
status: '未更新',
monthlyInvestment: 0,
cumulativeInvestment: 0,
cumulativeArea: 0,
progressDetails: '暂无数据',
isEditing: false,
},
],
tableData: [],
current: 1,
size: 10,
total: 0,
@ -132,8 +122,6 @@ export default {
type: "warning",
})
.then(() => {
console.log("删除:", row);
// tableData
if (Array.isArray(this.tableData)) {
const index = this.tableData.indexOf(row);
if (index !== -1) {
@ -155,12 +143,13 @@ export default {
async getMonthInformationPage() {
try {
const response = await getMonthInformationPage({ xmId: this.xmId });
// response.data.records
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) {
@ -211,16 +200,16 @@ export default {
}
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 500;
font-size: 0.88rem;
color: #3D424C;
line-height: 0.88rem;
text-align: right;
font-style: normal;
text-transform: none;
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 {
@ -245,4 +234,10 @@ export default {
justify-content: space-between;
margin-top: 1rem;
}
.no-data {
text-align: center;
padding: 2rem;
color: #999;
}
</style>

@ -32,7 +32,7 @@
<!-- 数据展示表格 -->
<div class="tagdiv">
<div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="4" border>
<el-descriptions class="margin-top" :column="5" border>
<el-descriptions-item v-for="(item, index) in anotherInfo" :key="index" :label="item.zdname">
<template v-if="isEditMode">
<el-input v-model="item.zdinfor" size="small" @change="handleFieldChange(item)"
@ -86,9 +86,7 @@ export default {
default: 0
}
},
created() {
// console.log('anotherInfo :', this.anotherInfo);
},
created() { },
data() {
return {
dialogVisible: false, //
@ -212,9 +210,6 @@ export default {
}
try {
// xmId
// console.log('ID:', this.xmId);
//
const requestData = {
xmId: this.xmId, // 使ID
@ -306,12 +301,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;
@ -336,7 +331,8 @@ export default {
}
.tagdiv {
padding: 1rem 3em 1rem 1rem;
width: 100%;
padding: 1rem;
}
.block {

@ -298,12 +298,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;

@ -292,12 +292,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;
@ -316,7 +316,7 @@ export default {
flex-direction: column;
gap: 1.5rem;
padding: 1rem;
width: 25rem;
width: 35rem;
}
.type-title {

@ -455,7 +455,7 @@ export default {
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;
padding: 1rem;
padding: .3rem 0 1rem 0;
gap: 1rem;
overflow: auto;
}
@ -482,12 +482,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;

@ -272,12 +272,12 @@ export default {
.topleft span {
width: auto;
height: 0.88rem;
height: 1rem;
font-family: aliregular;
font-weight: 500;
font-size: 0.88rem;
font-size: 1rem;
color: #3D424C;
line-height: 0.88rem;
line-height: 1rem;
text-align: right;
font-style: normal;
text-transform: none;

@ -17,7 +17,7 @@
<!-- 内容区域 -->
<div class="main-content">
<!-- 右侧地图 -->
<!-- 地图 -->
<div class="map-container">
<div id="mars2dContainerSSS" class="mars2d-container"></div>
</div>
@ -73,9 +73,7 @@ export default {
},
//
onload() {
// console.log('');
},
onload() {},
//
handleInput() {
@ -84,16 +82,12 @@ export default {
}
this.searchDebounce = setTimeout(() => {
this.toSearch();
}, 300); // 300
}, 300);
},
//
toSearch() {
if (!this.keyword.trim()) {
this.$message({
// message: "",
// type: "warning",
});
return;
}
@ -211,7 +205,7 @@ export default {
.main-content {
display: flex;
width: 75rem;
width: 82rem;
padding: 0 1rem 1rem 1rem;
}

@ -7,7 +7,7 @@
<el-button slot="append" icon="el-icon-search" @click="toSearch"></el-button>
</el-input>
<!-- 落点地点输入框 -->
<el-input v-model="pointForm.address" readonly>
<el-input v-model="pointForm.address" readonly class="search-input">
<template slot="append">
<el-button icon="el-icon-refresh" @click="reverseGeocode" :loading="loadingAddress"></el-button>
</template>
@ -285,12 +285,12 @@ export default {
.search-input {
width: 100%;
max-width: 500px;
/* max-width: 500px; */
}
.selected-place-input {
width: 100%;
max-width: 500px;
/* max-width: 500px; */
}
.search-results {

@ -133,8 +133,6 @@ export default {
`项目整体情况${this.selectedYear}.docx`
);
},
// Handle year change
handleYearChange(year) {
if (year) {
this.selectedYear = year;
@ -181,11 +179,10 @@ export default {
gap: .5rem;
}
/* Your existing styles remain unchanged */
.container {
display: flex;
flex-direction: column;
gap: 2rem;
gap: 1rem;
}
table {
@ -220,7 +217,7 @@ th {
.lefttitle {
font-family: aliregular;
font-weight: 400;
font-size: 0.88rem;
font-size: 0.9rem;
color: #7B8599;
line-height: 1.19rem;
text-align: left;

@ -4,7 +4,7 @@
<span>{{ totalCount }}</span>
<span>项目总数</span>
</div>
<div ref="chart" style="width: 30rem; height: 15rem;"></div>
<div ref="chart" style="width: 30rem; height: 13rem;"></div>
</div>
</template>
@ -20,7 +20,7 @@ export default {
{ value: 54, name: '重点鼓励上楼', itemStyle: { color: '#50DFB3' } },
{ value: 65, name: '有条件上楼', itemStyle: { color: '#507AFC' } },
],
totalCount: 0 //
totalCount: 0
};
},
mounted() {
@ -64,7 +64,11 @@ export default {
//
const item = this.chartData.find(item => item.name === name);
return `${name} ${item.value}`;
}.bind(this)
}.bind(this),
textStyle: {
fontSize: 16, //
fontfamily: 'alibold'
}
},
series: [
{
@ -100,8 +104,8 @@ export default {
flex-direction: column;
justify-content: center;
align-items: center;
top: 5.4rem;
left: 7rem;
top: 3.8rem;
left: 7rem;
}
.itemsall span:nth-child(1) {

@ -4,7 +4,7 @@
<span>{{ totalCount }}</span>
<span>项目总数</span>
</div>
<div ref="chart" style="width: 30rem; height: 15rem;"></div>
<div ref="chart" style="width: 30rem; height: 13rem;"></div>
</div>
</template>
@ -20,7 +20,7 @@ export default {
{ value: 54, name: '细分产业分析', itemStyle: { color: '#36C3FB' } },
{ value: 65, name: '目录分析', itemStyle: { color: '#F6B600' } },
],
totalCount: 0 //
totalCount: 0
};
},
mounted() {
@ -100,7 +100,7 @@ export default {
flex-direction: column;
justify-content: center;
align-items: center;
top: 5.4rem;
top: 3.8rem;
left: 7rem;
}

@ -61,7 +61,7 @@ export default {
.progress-item {
display: flex;
align-items: center;
margin-top: 1.2rem;
margin-top: .7rem;
}
.progress-label {

@ -30,12 +30,8 @@ export default {
if (response && response.code === 200 && response.data) {
this.chartData = this.processData(response.data);
this.renderChart();
} else {
console.error('获取数据失败:', response);
}
} catch (error) {
console.error('获取数据失败:', error);
}
} else { }
} catch (error) { }
},
processData(data) {
const names = ['高端制造与国际贸易区', '独墅湖科教创新区', '阳澄湖半岛旅游度假区', '金鸡湖商务区', '苏相合作区'];
@ -65,12 +61,12 @@ export default {
orient: 'vertical', //
right: '0%', //
top: 'center', //
itemGap: 15, //
itemGap: 18, //
formatter: function (name) {
//
const item = this.chartData.find(item => item.name === name);
return `${name} ${item.value}`;
}.bind(this)
}.bind(this),
},
series: [
{

@ -16,7 +16,7 @@
<ProjectList />
</div>
</div>
<!-- 右侧搜索 -->
<div class="rightdiv">
<el-input v-model="searchBox" placeholder="请输入项目名称" class="search-input" @input="handleSearchInput"
@clear="handleClear" clearable>
@ -29,12 +29,10 @@
<div class="item-name">{{ item.name }}</div>
</div>
</div>
<!-- 右侧地图区域 -->
<div class="blueicon">
<div class="icondiv" v-if="showLocationIcon">
<img src="@/assets/images/detailsicon/icon-定位@2x.png" alt="定位" :style="iconPosition"
@click.stop="showDialog">
</div>
<div class="map-container">
<div id="mars2dContainerSSS" class="mars2d-container"></div>
</div>
</div>
</div>
@ -63,6 +61,8 @@
</template>
<script>
import 'mars2d/mars2d.css';
import * as mars2d from 'mars2d';
import ProjectList from '@/views/components/analysis/projectList.vue'
import { getBasicInformationPage } from "@/api/ManageApi/index";
import { debounce } from 'lodash';
@ -90,6 +90,7 @@ export default {
'click-outside': clickOutside
},
data() {
const basePathUrl = window.basePathUrl || "";
return {
isCollapsed: false,
searchBox: '',
@ -121,16 +122,87 @@ export default {
2: '在建',
3: '拟建'
},
//
configUrl: basePathUrl + "config/config.json",
mapOptions: {
copyright: false,
basemaps: [
{
id: 2021,
chinaCRS: "GCJ02",
pid: 10,
name: "高德电子",
icon: "img/basemaps/gaode_vec.png",
type: "gaode",
layer: "vec",
show: true
}
],
center: { lat: 31.3456, lng: 120.5957 },
zoom: 11,
minZoom: 10,
maxZoom: 20,
zoomControl: true,
chinaCRS: 'GCJ02'
},
map: null
};
},
created() {
this.debouncedSearch = debounce(this.toSearch, 300);
},
mounted() {
this.initMap();
},
beforeDestroy() {
if (this.map) {
this.map.destroy();
}
},
methods: {
//
initMap() {
this.map = new mars2d.Map('mars2dContainerSSS', this.mapOptions);
this.map.on('load', this.onMapLoad);
},
//
onMapLoad() {
// console.log('');
this.addSuzhouIndustrialParkLayer();
},
//
async addSuzhouIndustrialParkLayer() {
try {
const response = await fetch('/config/suzhou.json');
const geoJsonData = await response.json();
const graphicLayer = new mars2d.layer.GraphicLayer({
name: "苏州园区高亮区域",
zIndex: 10
});
this.map.addLayer(graphicLayer);
// 3. GeoJSON
const polygon = mars2d.Util.geoJsonToGraphics(geoJsonData, {
style: {
fill: true,
fillColor: "#2B62F1",
fillOpacity: 0.3,
stroke: true,
color: "#2B62F1",
opacity: 0.8,
weight: 3
},
tooltip: "苏州工业园区"
});
graphicLayer.addGraphic(polygon);
} catch (error) {}
},
handleClear() {
this.showLocationIcon = false;
this.searchList = [];
this.hasSearched = false;
this.showLocationIcon = false;
this.searchList = [];
this.hasSearched = false;
},
toggleCollapse() {
this.isCollapsed = !this.isCollapsed;
@ -139,7 +211,7 @@ export default {
if (this.searchBox.trim() === '') {
this.searchList = [];
this.hasSearched = false;
this.showLocationIcon = false;
this.showLocationIcon = false;
return;
}
this.debouncedSearch();
@ -189,8 +261,15 @@ export default {
xzfl: item.xzfl || '暂无'
};
//
if (item.jsdd && item.jsdd.includes(',')) {
const [lng, lat] = item.jsdd.split(',').map(Number);
this.map.flyTo([lat, lng], 17);
}
this.showLocationIcon = true;
this.setRandomIconPosition();
this.showDialog();
},
showDialog() {
if (this.selectedProject.name) {
@ -203,11 +282,9 @@ export default {
this.dialogVisible = false;
},
setRandomIconPosition() {
// icondiv9rem(135px)9rem(135px)
// 1.7rem(25.5px)2rem(30px)
//
const maxTop = 105; // 135 - 30
const maxLeft = 110; // 135 - 25
const maxTop = 105;
const maxLeft = 110;
const randomTop = Math.floor(Math.random() * maxTop);
const randomLeft = Math.floor(Math.random() * maxLeft);
@ -224,7 +301,6 @@ export default {
</script>
<style scoped>
/* 原有样式保持不变 */
.container {
position: relative;
}
@ -234,7 +310,7 @@ export default {
}
.mapareaone {
height: 26.5rem;
height: 24.5rem;
grid-column: span 2;
width: 100%;
position: relative;
@ -252,7 +328,7 @@ export default {
display: flex;
align-items: center;
justify-content: center;
z-index: 20;
z-index: 10000;
transition: all 0.3s ease;
}
@ -263,14 +339,14 @@ export default {
.leftdiv {
width: 36%;
height: 27rem;
height: 100%;
position: absolute;
left: 0rem;
top: 0rem;
background: #FFFFFF;
border-radius: 0.5rem;
transition: all 0.3s ease;
z-index: 10;
z-index: 9999;
}
.mainarea {
@ -313,6 +389,7 @@ export default {
position: absolute;
right: 1rem;
top: 1rem;
z-index: 9999;
}
.search-results {
@ -324,7 +401,7 @@ export default {
border: 1px solid #E5E5E5;
border-radius: 0.5rem;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
z-index: 15;
z-index: 9999;
max-height: 15rem;
overflow-y: auto;
}
@ -340,7 +417,6 @@ export default {
}
.item-name {
/* font-weight: bold; */
margin-bottom: 0.3rem;
}
@ -382,12 +458,10 @@ export default {
.dialog-title {
font-size: 16px;
/* font-weight: bold; */
font-family: aliregular;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #EBEEF5;
/* background-color:#F5F7FA; */
color: #2B62F1;
white-space: nowrap;
overflow: hidden;
@ -413,4 +487,17 @@ export default {
color: #3D424C;
font-family: aliregular;
}
/* 地图容器样式 */
.map-container {
width: 100%;
height: 100%;
position: relative;
}
.mars2d-container {
width: 100%;
height: 100%;
border-radius: 0.5rem;
}
</style>

@ -121,8 +121,9 @@ export default {
<style scoped>
.container {
width: 30rem;
width: 98%;
height: 14.5rem;
/* background-color: lightblue; */
}
.no-data{
color: gray;

@ -39,9 +39,9 @@
</el-col> -->
<el-col :span="5">
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini"
<el-button type="primary" icon="el-icon-search" size="medium"
@click="handleQuery">查询</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<el-button icon="el-icon-refresh" size="medium" @click="resetQuery"></el-button>
</el-form-item>
</el-col>
</el-row>
@ -103,9 +103,9 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="getInfo(scope.row, 'fill')"
<el-button size="medium" type="text" @click="getInfo(scope.row, 'fill')"
v-if="statusMap[scope.row.status] === '待填报'">填报</el-button>
<el-button size="mini" type="text" @click="getInfo(scope.row, 'detail')"
<el-button size="medium" type="text" @click="getInfo(scope.row, 'detail')"
v-if="statusMap[scope.row.status] !== '待填报'">详情</el-button>
</template>
</el-table-column>

@ -41,9 +41,9 @@
<el-row>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini"
<el-button type="primary" icon="el-icon-search" size="medium"
@click="handleQuery">查询</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
<el-button icon="el-icon-refresh" size="medium" @click="resetQuery"></el-button>
</el-form-item>
</el-col>
</el-row>
@ -119,13 +119,13 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="getAdd(scope.row, 'fill')"
<el-button size="medium" type="text" @click="getAdd(scope.row, 'fill')"
v-if="statusMap[scope.row.status] === '待审核'">详情</el-button>
<el-button size="mini" type="text" @click="getAdd(scope.row, 'okay')"
<el-button size="medium" type="text" @click="getAdd(scope.row, 'okay')"
v-if="statusMap[scope.row.status] === '审核通过'">详情</el-button>
<el-button size="mini" type="text" @click="getAdd(scope.row, 'detail')"
<el-button size="medium" type="text" @click="getAdd(scope.row, 'detail')"
v-if="statusMap[scope.row.status] === '待填报'">详情</el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)"
<el-button size="medium" type="text" @click="handleDelete(scope.row)"
style="color: #F25353;">删除</el-button>
</template>
</el-table-column>

@ -1,26 +1,25 @@
<template>
<div class="bigone">
<!-- 标题 -->
<div class="containerheadone" id="listtop">
<Title :basicInfo="basicInformation"></Title>
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="goBack">
返回
</el-button>
</div>
<div style="display: flex;justify-content: center;">
<el-button type="primary" v-if="isSubmitted" disabled>已提交</el-button>
</div>
<div class="containerbody" v-if="isContainerVisible">
<!-- 目录 -->
<div class="containerhead">
<el-menu :default-active="activeSection" mode="horizontal" @select="scrollToSection"
class="custom-menu">
<el-menu-item v-for="(item, index) in sections" :key="index" :index="item.id"
class="custom-menu-item">
{{ item.label }}
</el-menu-item>
</el-menu>
<!-- 标题和目录 -->
<div fos>
<div class="containerheadone" id="listtop">
<Title :basicInfo="basicInformation"></Title>
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="goBack">
返回
</el-button>
</div>
<!-- 目录 -->
<div class="containerhead">
<el-menu :default-active="activeSection" mode="horizontal" @select="scrollToSection"
class="custom-menu">
<el-menu-item v-for="(item, index) in sections" :key="index" :index="item.id"
class="custom-menu-item">
{{ item.label }}
</el-menu-item>
</el-menu>
</div>
</div>
<!-- 基本信息 -->
<div id="basic">
@ -90,9 +89,12 @@
</div>
</div>
<!-- 返回顶部 -->
<el-button icon="el-icon-caret-top" circle id="back-to-top" @click="scrollToTop" plain></el-button>
<!-- <el-button icon="el-icon-caret-top" circle id="back-to-top" @click="scrollToTop" plain></el-button> -->
<el-backtop target=".content-container" :visibility-height="0" :bottom="500" :right="10"></el-backtop>
<!-- 消息提醒 -->
<div class="message-notice"><Supericon /></div>
<div class="message-notice">
<Supericon />
</div>
</div>
</template>
@ -257,12 +259,12 @@ export default {
element.scrollIntoView({ behavior: 'smooth' });
}
},
scrollToTop() {
const basicSection = document.getElementById('listtop');
if (basicSection) {
basicSection.scrollIntoView({ behavior: 'smooth' });
}
},
// scrollToTop() {
// const basicSection = document.getElementById('listtop');
// if (basicSection) {
// basicSection.scrollIntoView({ behavior: 'smooth' });
// }
// },
goBack() {
this.$router.go(-1); //
},
@ -338,7 +340,7 @@ export default {
this.loading = false;
});
},
//
//
aduitAlltwo() {
this.loading = true;
const submitData = this.prepareSubmitData();
@ -401,7 +403,7 @@ export default {
<style scoped>
.containerbody {
height: auto;
height: 100%;
padding: .3rem .5rem;
display: flex;
flex-direction: column;
@ -472,23 +474,27 @@ export default {
.bigone {
position: relative;
height: 100%;
overflow: auto;
}
#back-to-top {
position: fixed;
bottom:50%;
bottom: 50%;
right: 5px;
z-index: 99;
font-size: 23px;
}
.message-notice{
.message-notice {
position: fixed;
bottom:40%;
bottom: 40%;
right: 1%;
z-index: 99;
font-size: 23px;
cursor: pointer;
}
.footer {
display: flex;
padding: 0 0 2rem 0;

@ -68,7 +68,7 @@
</div>
<!-- 现场实况 -->
<div id="liver">
<Liver :action="action"></Liver>
<Liver :action="action" :xmId=projectId></Liver>
</div>
<!-- 项目备忘录 -->
<div id="memo">
@ -90,7 +90,9 @@
</div>
</div>
<!-- 返回顶部 -->
<el-button icon="el-icon-caret-top" circle id="back-to-top" @click="scrollToTop" plain></el-button>
<!-- <el-button icon="el-icon-caret-top" circle id="back-to-top" @click="scrollToTop" plain></el-button>
-->
<el-backtop target=".content-container" :visibility-height="0" :bottom="500" :right="10"></el-backtop>
</div>
</template>
@ -308,7 +310,6 @@ export default {
const response = await getqyBasicInformationPage(params);
return response.data.total || 0; // 0
} catch (error) {
// console.error(':', error);
return 0;
}
},

@ -77,7 +77,6 @@
<el-table-column label="更新时间" align="center" prop="updateTime" width="180" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="handleUpdate(scope.row)"></el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)" style="color: red;">删除</el-button>
</template>
@ -239,12 +238,10 @@ export default {
getAllCatalogs(this.queryParams).then(response => {
this.postList = response.data.records.map(item => ({
...item,
// updateTime: item.updateTime ? item.updateTime.split(' ')[0] : ''
}));
this.total = response.data.total;
this.loading = false;
}).catch(error => {
console.error('API Request Error:', error);
this.loading = false;
});
},

@ -19,16 +19,9 @@
</div>
<!-- 第二行 -->
<div class="grid-item item-1 bgcicon">
<!-- 项目列表 -->
<!-- <div class="itemhead">
<span>项目列表</span>
</div>
<div class="mainarea">
<ProjectList />
</div> -->
<MapArea />
</div>
<div style="display: flex;flex-direction: column;gap: 1rem;">
<div style="display: flex;flex-direction: column;">
<div class="grid-item item-3">
<!-- 功能区 -->
<div class="itemhead">
@ -158,9 +151,9 @@ export default {
/* 三列 */
grid-template-rows: auto auto auto;
/* 三行 */
gap: 1rem;
gap: .5rem;
/* 模块之间的间隔 */
padding: 1rem;
padding: 0 .5rem;
/* 容器内边距 */
}
@ -172,7 +165,7 @@ export default {
.itemhead {
width: 100%;
border-left: 0.25rem solid #2B62F1;
margin: 0.94rem 0;
margin: 0.5rem 0;
height: 1.25rem;
display: flex;
align-items: center;
@ -239,8 +232,8 @@ export default {
.allarea {
width: 100%;
height: 14.5rem;
padding: 1rem 1.5rem;
height: auto;
padding: .5rem 1rem;
}
/* 最后一行:一个模块占一整行 */
@ -257,7 +250,7 @@ export default {
}
.bgcicon{
/* background-color: red; */
background-image: url(../../assets/images/map@2x.png);
/* background-image: url(../../assets/images/map@2x.png); */
padding: 0!important;
background-repeat: no-repeat;
background-size: 100% 100%;

@ -177,7 +177,6 @@ export default {
/* 第一行:第一个模块占两列 */
.item-1 {
width: 67rem;
/* background-image: url(../../../src/assets/images/allbg.png); */
background-size: 100% 100%;
background-repeat: no-repeat;

Loading…
Cancel
Save