接口以及地图设计

main
严飞永 4 weeks ago
parent bd9813ae49
commit 5fdadd26bf

@ -18,14 +18,35 @@ export function updateBasicInformation(data) {
});
}
// 通过主键查询单条基本信息(企业规划信息)
export function getProgrammeInformationById(id) {
// 项目详情 规划信息
// 新增规划信息
export function addProgrammeInformation(data) {
return request({
url: `/gysl/planInformation/${id}`,
method: 'get'
url: '/gysl/planInformation/add',
method: 'post',
data
});
}
// 修改规划信息
export function updateProgrammeInformation(data) {
return request({
url: '/gysl/planInformation/edit',
method: 'post',
data
});
}
// 分页查询所有规划信息
export function getProgrammeInformationPage(params) {
return request({
url: '/gysl/planInformation/page',
method: 'get',
params
});
}
// 基本信息的导出功能
export function exportBasicInformation(params) {
return request({
@ -45,6 +66,32 @@ export function getProjectEvaluationList(params) {
params
});
}
// 修改项目评价清单
export function updateProjectEvaluationList(data) {
return request({
url: '/gysl/xmpjqd/edit',
method: 'post',
data
});
}
// 新增项目评价清单
export function addProjectEvaluationList(data) {
return request({
url: '/gysl/xmpjqd/add',
method: 'post',
data
});
}
// 删除项目评价清单
export function deleteProjectEvaluationList(idList) {
return request({
url: '/gysl/xmpjqd/delete',
method: 'delete',
params: { idList }
});
}
//评价清单结束
// 项目评价配置接口
// 新增数据
@ -82,15 +129,7 @@ export function getProjectEvaluationPage(params) {
params
});
}
// 修改规划信息
export function updateProgrammeInformation(data) {
return request({
url: `/gysl/planInformation/edit`,
method: 'post',
data
});
}
// 评价配置结束
// 要素指标管理
// 新增要素或者指标
@ -208,4 +247,38 @@ export function getXmzskById(id) {
url: `/gysl/xmzsk/${id}`,
method: 'get'
});
}
//项目巡礼
//新增项目巡礼
export function addXmxl(data) {
return request({
url: '/gysl/xmxl/add',
method: 'post',
data
});
}
//删除项目巡礼
export function deleteXmxl(idList) {
return request({
url: '/gysl/xmxl/delete',
method: 'delete',
params: { idList }
});
}
//修改项目巡礼
export function updateXmxl(data) {
return request({
url: '/gysl/xmxl/edit',
method: 'post',
data
});
}
//分页查询所有项目巡礼
export function getXmxlPage(params) {
return request({
url: '/gysl/xmxl/page',
method: 'get',
params
});
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 638 B

@ -96,8 +96,8 @@ export default {
}
.main-container {
display: flex;
border-radius: 1rem;
display: flex;
border-radius: 1rem 1rem 0 0 ;
margin-right: .3rem;
flex: 1;
overflow: hidden;

@ -12,6 +12,7 @@ import "leaflet/dist/leaflet.css";
import "leaflet";
import "mars2d/mars2d.css";
import * as mars2d from 'mars2d'
import App from "./App";
import store from "./store";
@ -64,6 +65,7 @@ Vue.prototype.selectDictLabels = selectDictLabels;
Vue.prototype.download = download;
Vue.prototype.handleTree = handleTree;
Vue.prototype.$echarts = echarts;
Vue.prototype.mars2d = mars2d;
// 全局组件挂载
Vue.component("DictTag", DictTag);

@ -24,7 +24,7 @@
<!-- 内容展示区 -->
<div class="content">
<div class="picturediv">
<img v-if="form.fj" :src="form.fj" alt="项目代表性照片" style="width: 100%; height: auto;">
<img v-if="form.fj" :src="form.fj" alt="项目代表性照片">
</div>
<div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="3" border>
@ -498,7 +498,20 @@ export default {
.picturediv {
width: 18.31rem;
height: 25rem;
/* background-color: lightblue; */
position: relative;
overflow: hidden;
}
.picturediv img {
width: 100%;
height: auto;
object-fit: cover;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
.descriptionsdiv {

@ -13,6 +13,12 @@
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>
</div>
</div>
<div class="content">
@ -44,6 +50,26 @@
</div>
</div>
</div>
<!-- 新增弹窗表单 -->
<el-dialog title="新增备忘录" :visible.sync="dialogVisible" width="500px">
<el-form :model="newMemo" label-width="100px">
<el-form-item label="姓名">
<el-input v-model="newMemo.name"></el-input>
</el-form-item>
<el-form-item label="时间">
<el-date-picker type="date" placeholder="选择日期" v-model="newMemo.date"
style="width: 100%;"></el-date-picker>
</el-form-item>
<el-form-item label="内容">
<el-input type="textarea" v-model="newMemo.content" :rows="4"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleAddMemo"></el-button>
</span>
</el-dialog>
</div>
</template>
@ -63,6 +89,12 @@ export default {
type: [],
resource: '',
desc: ''
},
dialogVisible: false,
newMemo: {
name: '',
date: '',
content: ''
}
};
},
@ -74,14 +106,12 @@ export default {
handleClose(tag) {
this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
},
showInput() {
this.inputVisible = true;
this.$nextTick(_ => {
this.$refs.saveTagInput.$refs.input.focus();
});
},
handleInputConfirm() {
let inputValue = this.inputValue;
if (inputValue) {
@ -89,6 +119,19 @@ export default {
}
this.inputVisible = false;
this.inputValue = '';
},
handleAdd() {
this.dialogVisible = true;
},
handleAddMemo() {
console.log('新增备忘录:', this.newMemo);
//
this.dialogVisible = false;
this.newMemo = {
name: '',
date: '',
content: ''
};
}
}
};

@ -25,36 +25,36 @@
<div class="content">
<div class="descriptionsdiv">
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="name" label="进度月份" width="210">
<template slot-scope="scope">
<span style="color: #2B62F1;">{{ scope.row.name }}</span>
</template>
<el-table-column prop="month" label="进度月份" width="180">
</el-table-column>
<el-table-column prop="status" label="状态" width="80">
<el-table-column prop="status" label="状态" width="120" align="center">
<template slot-scope="scope">
<span :style="getStatusColor(scope.row.status)">{{ scope.row.status }}</span>
</template>
</el-table-column>
<el-table-column prop="number" label="当月完成投资" width="240">
<el-table-column prop="monthlyInvestment" label="当月完成投资" width="210" align="center">
</el-table-column>
<el-table-column prop="number" label="累计完成投资" width="220">
<el-table-column prop="cumulativeInvestment" label="累计完成投资" width="220" align="center">
</el-table-column>
<el-table-column prop="data" label='截止目前累计建成面积(平方米)' width="260">
<el-table-column prop="cumulativeArea" label='截止目前累计建成面积(平方米)' width="260" align="center">
</el-table-column>
<el-table-column prop="number" label='贷款额度(万元)' width="200">
<el-table-column prop="loanAmount" label='贷款额度(万元)' width="200" align="center">
</el-table-column>
<el-table-column prop="data" label='项目进展详情' width="140">
<el-table-column prop="progressDetails" label='项目进展详情' width="180" align="center">
</el-table-column>
<el-table-column prop="address" label="操作" width="200">
<el-table-column label="操作" width="200" align="center">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleEdit(scope.row)"></el-button>
<el-button size="mini" 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="4" :page-sizes="[100, 200, 300, 400]" :page-size="100"
layout="total, prev, pager, next, jumper" :total="400">
<el-pagination :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize"
layout="total, prev, pager, next, jumper" :total="total">
</el-pagination>
</div>
</div>
</div>
</div>
</div>
@ -66,50 +66,82 @@ export default {
return {
tableData: [
{
date: '2016-05-02',
name: '大众电脑生成制造基地',
number:1000,
address: ' 编辑 删除',
data: '1000',
status: '在建'
month: '2016-05',
status: '未更新',
monthlyInvestment: 1000,
cumulativeInvestment: 1000,
cumulativeArea: 1000,
loanAmount: 500,
progressDetails: '项目进展详情1',
},
{
date: '2016-05-04',
name: '大众电脑生成制造基地',
number:1000,
address: ' 编辑 删除',
data: '1500',
status: '拟建'
month: '2016-06',
status: '已更新',
monthlyInvestment: 1000,
cumulativeInvestment: 2000,
cumulativeArea: 1500,
loanAmount: 600,
progressDetails: '项目进展详情2',
},
{
date: '2016-05-01',
name: '大众电脑生成制造基地',
number:1000,
address: ' 编辑 删除',
data: '2000',
status: '已建'
month: '2016-07',
status: '未更新',
monthlyInvestment: 1000,
cumulativeInvestment: 3000,
cumulativeArea: 2000,
loanAmount: 700,
progressDetails: '项目进展详情3',
},
{
date: '2016-05-03',
name: '大众电脑生成制造基地',
number:1000,
address: ' 编辑 删除',
data: '2500',
status: '在建'
month: '2016-08',
status: '已更新',
monthlyInvestment: 1000,
cumulativeInvestment: 4000,
cumulativeArea: 2500,
loanAmount: 800,
progressDetails: '项目进展详情4',
}
],
currentPage: 1,
pageSize: 10,
total: 40,
}
},
methods: {
getStatusColor(status) {
switch (status) {
case '在建':
case '未更新':
return 'color: #2DD29F;';
case '拟建':
return 'color: #F08445;';
case '已建':
case '已更新':
return 'color: #2B62F1;';
}
},
handleEdit(row) {
console.log('编辑:', row);
//
},
handleDelete(row) {
this.$confirm('你确定要删除此条记录吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
console.log('删除:', row);
//
const index = this.tableData.indexOf(row);
if (index !== -1) {
this.tableData.splice(index, 1);
}
this.$message({
type: 'success',
message: '删除成功!'
});
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
}
}
}
@ -134,7 +166,6 @@ export default {
height: auto;
display: flex;
justify-content: space-between;
padding: .7rem 0;
padding: .5rem;
border-bottom: 1px solid #E5E5E5;
}
@ -179,10 +210,11 @@ export default {
.two-row-item {
height: 20rem;
}
.block{
.block {
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 1rem;
}
</style>
</style>

@ -9,7 +9,7 @@
<div class="topright">
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;">
<img src="../../../assets/images/detailsicon/icon-bj@2x.png" alt="编辑"
<img src="../../../assets/images/detailsicon/icon-bj@2x.png" alt="新增"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增
</el-button>
@ -21,13 +21,13 @@
</el-button>
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;">
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="编辑"
<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;">
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="编辑"
style="border: none;background-color: rgba(242,83,83,0.1);color: #F25353;">
<img src="../../../assets/images/detailsicon/icon-delet@2x.png" alt="删除"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
删除
</el-button>

@ -8,7 +8,7 @@
</div>
<div class="topright">
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="">
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="dialogVisible = true">
<img src="../../../assets/images/detailsicon/icon-xz@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增
@ -24,22 +24,121 @@
</div>
</div>
</div>
<!-- 上传附件弹窗 -->
<el-dialog title="上传附件" :visible.sync="dialogVisible" width="50%">
<el-upload
ref="upload"
action="/gysl/xmxl/add"
list-type="picture-card"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
:on-success="handleSuccess"
:before-upload="beforeUpload"
:auto-upload="false"
>
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="previewDialogVisible">
<img width="100%" :src="previewImageUrl" alt="">
</el-dialog>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submitUpload"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { addXmxl, getXmxlPage } from '@/api/ManageApi/index.js';
export default {
data() {
return {
images: [
{ src: '' },
{ src: '' },
{ src: '' },
//
]
images: [],
dialogVisible: false,
previewDialogVisible: false,
previewImageUrl: '',
fileList: []
};
},
created() {
this.fetchImages();
},
methods: {
async fetchImages() {
try {
const response = await getXmxlPage();
if (response.data && response.data.list) {
this.images = response.data.list.map(item => ({
src: item.fj // fj URL
}));
}
} catch (error) {
this.$message.error('获取图片失败');
console.error(error);
}
},
handleAdd() {
this.dialogVisible = true;
},
handleRemove(file, fileList) {
this.fileList = fileList;
},
handlePictureCardPreview(file) {
this.previewImageUrl = file.url;
this.previewDialogVisible = true;
},
handleSuccess(response, file, fileList) {
this.fileList = fileList;
this.images.push({ src: URL.createObjectURL(file.raw) });
},
beforeUpload(file) {
const isJPG = file.type === 'image/jpeg';
const isPNG = file.type === 'image/png';
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG && !isPNG) {
this.$message.error('上传图片只能是 JPG 或 PNG 格式!');
}
if (!isLt2M) {
this.$message.error('上传图片大小不能超过 2MB!');
}
return (isJPG || isPNG) && isLt2M;
},
submitUpload() {
this.$refs.upload.submit();
this.dialogVisible = false;
this.handleAddXmxl();
},
async handleAddXmxl() {
const formData = new FormData();
this.fileList.forEach((file, index) => {
formData.append(`fj[${index}]`, file.raw);
});
//
formData.append('createBy', '');
formData.append('createId', 0);
formData.append('createTime', '');
formData.append('id', 0);
formData.append('jkmc', '');
formData.append('sj', '');
formData.append('status', 0);
formData.append('updateBy', '');
formData.append('updateId', 0);
formData.append('updateTime', '');
try {
const response = await addXmxl(formData);
this.$message.success('新增成功');
console.log(response);
this.fetchImages(); //
} catch (error) {
this.$message.error('新增失败');
console.error(error);
}
},
removeImage(index) {
this.images.splice(index, 1);
}

@ -56,24 +56,29 @@
</div>
<!-- 右侧地图缩略图 -->
<!-- <div class="map-thumbnail" >
<div>
<div class="mapbox">
<MapComponent></MapComponent>
</div>
<div class="classify">
内部
</div>
<div class="map-thumbnail">
<div id="mars2dContainer" class="mars2d-container"></div>
<div class="classify">
位置
</div>
</div> -->
</div>
</div>
<!-- 编辑/新增对话框 -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
<el-form :model="form" label-width="120px">
<el-form-item label="项目代表性照片">
<ImageUpload />
</el-form-item>
<el-form-item label="类型">
<el-select v-model="form.type" placeholder="请选择类型">
<el-option v-for="dict in dict.type.tplx" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="图片上传">
<el-upload action="https://jsonplaceholder.typicode.com/posts/" :on-success="handleUploadSuccess"
:on-remove="handleUploadRemove" :file-list="fileList" list-type="picture-card">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
@ -84,14 +89,37 @@
</template>
<script>
import MapComponent from '../../map/index.vue';
import ImageUpload from '@/components/ImageUpload/index.vue';
import 'mars2d/mars2d.css';
import * as mars2d from 'mars2d';
export default {
components: {
MapComponent,ImageUpload
},
components: {},
dicts: ['tplx'],
data() {
const basePathUrl = window.basePathUrl || "";
return {
configUrl: basePathUrl + "config/config.json",
mapOptions: {
// http://mars2d.cn/apidoc.html#Map
copyright: false, // logo
// basemap: 2021,
basemaps: [
{
"id": 2021,
"pid": 10,
"name": "高德电子",
"icon": "img/basemaps/gaode_vec.png",
"type": "gaode",
"layer": "vec",
"show": true
},
],
center: { lat: 31.2704, lng: 120.7600 }, //
zoom: 16, //
minZoom: 15, //
maxZoom: 20, //
zoomControl: true,
},
// 使
carousel1Items: [
'https://picsum.photos/300/200?random=1',
@ -109,15 +137,17 @@ export default {
dialogVisible: false,
dialogTitle: '编辑项目',
form: {
name: '默认项目名称',
address: '默认项目地址',
latitude: '39.90469',
longitude: '116.40717',
type: '外部', //
images: [], //
},
fileList: [], //
map: null, //
};
},
methods: {
onload(map) {
//
},
//
prevImage(carouselIndex) {
if (carouselIndex === 1) {
@ -142,41 +172,35 @@ export default {
this.dialogVisible = true;
//
this.form = {
name: '默认项目名称',
address: '默认项目地址',
latitude: '39.90469',
longitude: '116.40717',
};
},
//
handleAdd() {
this.dialogTitle = '新增项目';
this.dialogVisible = true;
//
this.form = {
name: '',
address: '',
latitude: '',
longitude: '',
type: '外部', //
images: [], //
};
},
//
handleSubmit() {
console.log('提交表单:', this.form);
this.dialogVisible = false;
// API
},
//
handleUploadSuccess(response, file) {
this.fileList.push(file);
this.form.images.push(file.url);
},
//
handleUploadRemove(file) {
const index = this.fileList.indexOf(file);
if (index !== -1) {
this.fileList.splice(index, 1);
this.form.images.splice(index, 1);
}
},
//
initMap() {
this.map = new mars2d.Map('mars2dContainer', this.mapOptions);
},
},
mounted() {
this.initMap();
},
};
</script>
@ -263,18 +287,6 @@ export default {
right: 0;
}
.map-thumbnail {
width: 80rem;
height: 25rem;
cursor: pointer;
position: relative;
}
#map-container {
width: 100%;
height: 100%;
}
.topleft {
width: 8rem;
display: flex;
@ -313,17 +325,18 @@ export default {
justify-content: center;
align-items: center;
font-size: .7rem;
z-index: 999;
}
.mapbox {
width: 60rem;
height: 25rem;
}
.map-thumbnail {
width: 80rem;
width: 76rem;
height: 25rem;
cursor: pointer;
position: relative;
}
.mars2d-container {
width: 76rem;
height: 25rem;
}
</style>

@ -0,0 +1,311 @@
<template>
<div class="container">
<!-- 顶部操作栏 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<span>项目图例</span>
</div>
<div class="topright">
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleEdit">
<img src="../../../assets/images/detailsicon/icon-xz@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
编辑
</el-button>
</div>
</div>
<!-- 内容区域 -->
<div class="main-content">
<!-- 编辑/新增对话框 -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
<el-form :model="form" label-width="120px">
<el-form-item label="类型">
<el-select v-model="form.type" placeholder="请选择类型">
<el-option v-for="dict in dict.type.tplx" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="showMap"></el-button>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleSubmit"></el-button>
</span>
</el-dialog>
<!-- 地图弹窗 -->
<el-dialog :title="mapDialogTitle" :visible.sync="mapDialogVisible" width="80%" :fullscreen="true">
<div class="map-thumbnail">
<div id="mars2dContainerLuotu" class="mars2d-container"></div>
<div class="classify">
位置
</div>
</div>
</el-dialog>
<!-- 新增点位弹窗 -->
<el-dialog :title="pointDialogTitle" :visible.sync="pointDialogVisible" width="300px">
<el-form :model="pointForm" label-width="100px">
<el-form-item label="点位名称">
<el-input v-model="pointForm.name"></el-input>
</el-form-item>
<el-form-item label="经纬度">
<el-input v-model="pointForm.latlng" disabled></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="pointDialogVisible = false">取消</el-button>
<el-button type="primary" @click="addPoint"></el-button>
</span>
</el-dialog>
</div>
</div>
</template>
<script>
import 'mars2d/mars2d.css';
import * as mars2d from 'mars2d';
export default {
components: {},
dicts: ['tplx'],
data() {
const basePathUrl = window.basePathUrl || "";
return {
configUrl: basePathUrl + "config/config.json",
mapOptions: {
// http://mars2d.cn/apidoc.html#Map
copyright: false, // logo
basemaps: [
{
"pid": 10,
"name": "腾讯电子",
"icon": "/img/basemaps/tencent_vec.png",
"type": "tencent",
"layer": "vec",
"show": true,
},
],
center: { lat: 31.2304, lng: 120.6184 }, //
zoom: 10, //
},
//
dialogVisible: false,
dialogTitle: '编辑项目',
form: {
type: '外部', //
},
map: null, //
mapDialogVisible: false, //
mapDialogTitle: '地图', //
pointDialogVisible: false, //
pointDialogTitle: '新增点位', //
pointForm: {
name: '',
latlng: '',
},
selectedLatLng: null, //
};
},
methods: {
onload(map) {
//
},
//
handleEdit() {
this.dialogTitle = '编辑项目';
this.dialogVisible = true;
//
this.form = {
type: '外部', //
};
},
//
handleSubmit() {
this.dialogVisible = false;
// API
},
//
showMap() {
this.mapDialogVisible = true;
this.$nextTick(() => {
this.initMap();
});
},
//
initMap() {
if (!this.map) {
this.map = new mars2d.Map('mars2dContainerLuotu', this.mapOptions);
this.map.on('click', this.onMapClick);
}
},
//
onMapClick(event) {
const { latlng } = event;
this.selectedLatLng = latlng;
this.pointForm.latlng = `${latlng.lat}, ${latlng.lng}`;
this.pointDialogVisible = true;
},
//
addPoint() {
if (this.selectedLatLng) {
const marker = new mars2d.graphic.Marker({
latlng: this.selectedLatLng,
style: {
image: 'img/marker/mark-blu.png',
width: 32,
height: 32,
},
});
this.map.graphicLayer.addGraphic(marker);
this.pointDialogVisible = false;
this.selectedLatLng = null;
this.pointForm.name = '';
this.pointForm.latlng = '';
}
},
},
mounted() {
//
},
};
</script>
<style scoped>
.container {
display: flex;
flex-direction: column;
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;
gap: 1rem;
overflow: auto;
}
.containertop {
height: auto;
display: flex;
justify-content: space-between;
padding: .5rem;
border-bottom: 1px solid #E5E5E5;
}
.action-bar {
margin-bottom: 20px;
}
.main-content {
display: flex;
gap: 2rem;
padding: 1rem;
}
.carousel-container {
display: flex;
flex-direction: column;
gap: 1rem;
}
.carousel {
width: 21rem;
height: 12rem;
position: relative;
overflow: hidden;
}
.carousel-item {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
opacity: 0;
transition: opacity 0.5s ease-in-out;
}
.carousel-item img {
width: 100%;
height: 100%;
object-fit: cover;
}
.carousel-item.active {
opacity: 1;
}
.carousel-control {
position: absolute;
top: 50%;
transform: translateY(-50%);
cursor: pointer;
font-size: 1.5rem;
color: white;
padding: 0.5rem;
z-index: 10;
}
.carousel-control.left {
left: 0;
}
.carousel-control.right {
right: 0;
}
.topleft {
width: 8rem;
display: flex;
gap: 0.4rem;
align-items: center;
}
.topleft img {
width: 0.81rem;
height: 0.81rem;
}
.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;
}
.classify {
width: 2.81rem;
height: 1.38rem;
background-color: rgba(43, 98, 241, 0.8);
border-radius: 0.69rem 0.69rem 0.69rem 0.69rem;
color: white;
position: absolute;
bottom: .5rem;
left: .5rem;
display: flex;
justify-content: center;
align-items: center;
font-size: .7rem;
z-index: 999;
}
.map-thumbnail {
width: 76rem;
height: 25rem;
position: relative;
}
.mars2d-container {
width: 76rem;
height: 25rem;
}
</style>

@ -5,28 +5,20 @@
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="200">
<el-row>
<el-col :span="5">
<el-form-item label="项目名称" prop="postName" style="width: 100%;">
<el-input v-model="queryParams.postName" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery" />
<el-form-item label="项目名称" style="width: 100%;">
<el-input v-model="queryParams.xmmc" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="项目建设起止时间" prop="createTime">
<el-date-picker
type="daterange"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
:style="{ width: '100%' }"
start-placeholder="开始日期"
end-placeholder="结束日期"
range-separator="至"
clearable
v-model="queryParams.createTime"
></el-date-picker>
<el-form-item label="项目建设起止时间">
<el-date-picker type="daterange" format="yyyy-MM-dd" value-format="yyyy-MM-dd" :style="{ width: '100%' }"
start-placeholder="开始日期" end-placeholder="结束日期" range-separator="至" clearable
v-model="queryParams.xmqzsj"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类" prop="status">
<el-select v-model="queryParams.status" placeholder="现状分类" clearable>
<el-form-item label="现状分类">
<el-select v-model="queryParams.xzfl" placeholder="现状分类" clearable>
<el-option v-for="dict in dict.type.xzfl" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
@ -34,8 +26,7 @@
<el-col :span="5">
<el-form-item label="评价等级">
<el-select v-model="queryParams.pjdj" placeholder="请选择评价等级" clearable>
<el-option label="区域一" value="1"></el-option>
<el-option label="区域二" value="2"></el-option>
<el-option v-for="dict in dict.type.pjdj" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
@ -54,47 +45,142 @@
<div class="tablebox">
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="postId" />
<el-table-column label="项目名称" align="center" prop="postName" />
<el-table-column label="现状分类" align="center" prop="status" />
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="项目名称" align="center" prop="xmmc" />
<el-table-column label="现状分类" align="center">
<template slot-scope="scope">
{{ xzflMap[scope.row.xzfl] || scope.row.xzfl }}
</template>
</el-table-column>
<el-table-column label="项目法人单位" align="center" prop="xmfrdw" />
<el-table-column label="项目建设起止时间" align="center" prop="xmqzsj" />
<el-table-column label="项目评价" align="center" width="130" prop="xmpj" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view" @click="getInfo(scope.row)" v-hasPermi="['system:post:detail']"></el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:post:edit']"></el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:post:remove']"></el-button>
<el-button size="mini" type="text" icon="el-icon-view" @click="handleInfo(scope.row)"
v-hasPermi="['system:post:detail']">详情</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']">修改</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current" :limit.sync="queryParams.size"
@pagination="getList" />
</div>
<!-- 详情对话框 -->
<el-dialog title="项目详情" :visible.sync="infoDialogVisible" width="50%">
<el-form :model="infoForm" label-width="120px" :disabled="true">
<el-form-item label="项目名称">
<el-input v-model="infoForm.xmmc" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目建设起止时间">
<el-date-picker type="daterange" format="yyyy-MM-dd" value-format="yyyy-MM-dd" :style="{ width: '100%' }"
start-placeholder="开始日期" end-placeholder="结束日期" range-separator="至" clearable
v-model="infoForm.xmqzsj"></el-date-picker>
</el-form-item>
<el-form-item label="现状分类">
<el-select v-model="infoForm.xzfl" placeholder="现状分类" clearable>
<el-option v-for="dict in dict.type.xzfl" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="评价等级">
<el-select v-model="infoForm.pjdj" placeholder="请选择评价等级" clearable>
<el-option label="区域一" value="1"></el-option>
<el-option label="区域二" value="2"></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目法人单位">
<el-input v-model="infoForm.xmfrdw" placeholder="请输入项目法人单位" />
</el-form-item>
<el-form-item label="项目评价">
<el-input v-model="infoForm.xmpj" placeholder="请输入项目评价" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="infoDialogVisible = false"> </el-button>
</span>
</el-dialog>
<!-- 修改对话框 -->
<el-dialog title="修改项目" :visible.sync="dialogVisible" width="50%">
<el-form :model="editForm" label-width="120px">
<el-form-item label="项目名称">
<el-input v-model="editForm.xmmc" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目建设起止时间">
<el-date-picker type="daterange" format="yyyy-MM-dd" value-format="yyyy-MM-dd" :style="{ width: '100%' }"
start-placeholder="开始日期" end-placeholder="结束日期" range-separator="至" clearable
v-model="editForm.xmqzsj"></el-date-picker>
</el-form-item>
<el-form-item label="现状分类">
<el-select v-model="editForm.xzfl" placeholder="现状分类" clearable>
<el-option v-for="dict in dict.type.xzfl" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="项目法人单位">
<el-input v-model="editForm.xmfrdw" placeholder="请输入项目法人单位" />
</el-form-item>
<el-form-item label="项目评价">
<el-input v-model="editForm.xmpj" placeholder="请输入项目评价" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="updateProject"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getProjectEvaluationList } from '@/api/ManageApi/index.js';
import { getProjectEvaluationList, updateProjectEvaluationList } from '@/api/ManageApi/index.js';
export default {
dicts: [
'xzfl'
],
'xzfl', 'pjdj'
],
data() {
return {
//
xzflMap: {
'1': '已建',
'2': '再建',
'3': '拟建'
},
postList: [],
loading: false,
total: 0,
queryParams: {
pageNum: 1,
pageSize: 10,
postName: '',
createTime: '',
status: '',
current: 1,
size: 10,
xmmc: '',
xmqzsj: '',
xzfl: '',
pjdj: ''
},
showSearch: true
showSearch: true,
dialogVisible: false,
editForm: {
id: '',
xmmc: '',
xmqzsj: '',
xzfl: '',
pjdj: '',
xmfrdw: '',
xmpj: ''
},
infoDialogVisible: false,
infoForm: {
id: '',
xmmc: '',
xmqzsj: '',
xzfl: '',
pjdj: '',
xmfrdw: '',
xmpj: ''
}
};
},
methods: {
@ -103,11 +189,11 @@ export default {
},
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
postName: '',
createTime: '',
status: '',
current: 1,
size: 10,
xmmc: '',
xmqzsj: '',
xzfl: '',
pjdj: ''
};
this.handleQuery();
@ -129,11 +215,25 @@ export default {
handleSelectionChange(selection) {
//
},
getInfo(row) {
//
handleInfo(row) {
this.infoForm = { ...row };
this.infoDialogVisible = true;
},
handleUpdate(row) {
//
this.editForm = { ...row };
this.dialogVisible = true;
},
updateProject() {
updateProjectEvaluationList(this.editForm)
.then(response => {
this.$message.success('修改成功');
this.dialogVisible = false;
this.getList();
})
.catch(error => {
console.error('修改项目失败:', error);
this.$message.error('修改失败');
});
},
handleDelete(row) {
//

@ -2,7 +2,7 @@
<div>
<!-- 标题 -->
<div class="containerheadone">
<Title :id="projectId"></Title>
<Title :id="9"></Title>
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;"
@click="goBack">
@ -25,9 +25,9 @@
<Basic :id="9"></Basic>
</div>
<!-- 规划信息 -->
<div id="programme">
<!-- <div id="programme">
<Programme :id="projectId"></Programme>
</div>
</div> -->
<!-- 建筑信息 -->
<div id="buildings">
<Buildings></Buildings>
@ -68,6 +68,10 @@
<div class="bottombox" id="others">
<Others></Others>
</div>
<!-- 落图实例 -->
<div>
<luotu/>
</div>
<!-- 返回顶部 -->
<!-- <el-backtop target=".backtop"></el-backtop> -->
</div>
@ -83,14 +87,16 @@ import Liver from '../components/ProjectDetails/Liver.vue';
import Memo from '../components/ProjectDetails/Memo.vue';
import Models from '../components/ProjectDetails/Models.vue';
import Months from '../components/ProjectDetails/Months.vue';
import Programme from '../components/ProjectDetails/Programme.vue';
// import Programme from '../components/ProjectDetails/Programme.vue';
import Projectgift from '../components/ProjectDetails/Projectgift.vue';
import Projectpicture from '../components/ProjectDetails/Projectpicture.vue';
import Projectpicturetwo from '../components/ProjectDetails/Projectpicturetwo.vue';
import Others from '../components/ProjectDetails/Others.vue';
import luotu from '@/views/components/ProjectDetails/luotugongnengshifan.vue'
export default {
components: {
luotu,
Title,
Basic,
Buildings,
@ -99,7 +105,7 @@ export default {
Memo,
Models,
Months,
Programme,
// Programme,
Projectgift,
Projectpicture,
Projectpicturetwo,

@ -1,3 +1,147 @@
<template>
<div>123</div>
</template>
<div class="grid-container">
<div class="grid-item item-1">
<!-- 整体项目情况 -->
<div class="allarea">
<AllArea />
</div>
</div>
<div class="grid-item item-2">
<!-- 消息通知 -->
<div class="itemhead">
<span>消息通知</span>
</div>
<div class="mainarea">
<Message />
</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'
export default {
name: "Pc2FbEcharts",
components: {
AllArea,
FunctionArea,
InvestArea,
Message,
ProjectList,
MapArea,
},
data() {
return {};
},
mounted() {
},
methods: {
},
};
</script>
<style scoped>
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
/* 三列 */
grid-template-rows: auto auto auto;
/* 三行 */
gap: 1rem;
/* 模块之间的间隔 */
padding: 1rem;
/* 容器内边距 */
}
.grid-item {
background-color: #FFFFFF;
border-radius: 0.5rem 0.5rem 0.5rem 0.5rem;
}
.itemhead {
width: 100%;
border-left: 0.25rem solid #2B62F1;
margin: 0.94rem 0;
height: 1.25rem;
display: flex;
align-items: center;
}
.relaitem{
position: relative;
}
.itemsall{
position: absolute;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
top: 5.5rem;
left: 7.2rem;
}
.itemsall span:nth-child(1){
font-family: DIN, DIN;
font-weight: 500;
font-size: 1.75rem;
color: #292C33;
line-height: 2.44rem;
text-align: left;
font-style: normal;
text-transform: none;
}
.itemsall span:nth-child(2){
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400;
font-size: 0.88rem;
color: #9E9E9E;
line-height: 1.25rem;
text-align: left;
font-style: normal;
text-transform: none;
}
.itemhead span {
margin-left: 1rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 600;
font-size: 1rem;
color: #3D424C;
line-height: 1.69rem;
text-align: left;
font-style: normal;
text-transform: none;
}
.mainarea{
padding: 0rem 0rem 0 1.4rem;
overflow: auto;
}
/* 第一行:第一个模块占两列 */
.item-1 {
grid-column: span 2;
background-image: url(../../../src/assets/images/allbg.png);
background-size: 100% 100%;
background-repeat: no-repeat;
}
.allarea {
width: 100%;
height: 14.5rem;
padding: 1rem 1.5rem;
}
/* 最后一行:一个模块占一整行 */
.item-6 {
grid-column: span 3;
/* 占三列 */
}
</style>
Loading…
Cancel
Save