其他信息

xuhongjie
严飞永 1 month ago
parent d3b6025375
commit 86cc25ecb0

@ -128,7 +128,7 @@ export function getProjectEvaluationPage(params) {
} }
// 评价配置结束 // 评价配置结束
// 要素指标管理 // 要素指标管理(模型管理)
// 新增要素或者指标 // 新增要素或者指标
export function addElement(data) { export function addElement(data) {
return request({ return request({
@ -157,10 +157,11 @@ export function editElemention(data) {
} }
// 删除指标 // 删除指标
export function deleteElemention(id) { export function deleteElemention(idList) {
return request({ return request({
url: `/gysl/mx/delete`, url: `/gysl/mx/delete`,
method: 'delete' method: 'delete',
params: { idList }
}); });
} }
@ -336,7 +337,7 @@ export function addjzxx(data) {
export function deletejzxx(idList) { export function deletejzxx(idList) {
console.log('Deleting buildings with IDs:', idList); // 调试信息 console.log('Deleting buildings with IDs:', idList); // 调试信息
return request({ return request({
url: '/gysl/buildingInformation/delete', // 使用正确的URL url: '/gysl/buildingInformation/delete',
method: 'delete', method: 'delete',
params: { idList: idList.join(',') } // 将数组转换为逗号分隔的字符串 params: { idList: idList.join(',') } // 将数组转换为逗号分隔的字符串
}); });
@ -394,11 +395,11 @@ export function deletexmtl(idList) {
export function updatexmtll(data) { export function updatexmtll(data) {
return request({ return request({
url:'/gysl/projectLegend/edit', url:'/gysl/projectLegend/edit',
method:'post', method:'put',
data data
}) })
} }
//分页查询所有数据 //分页查询所有数据根据xmid
export function getxmtlPageByxmid(params) { export function getxmtlPageByxmid(params) {
return request({ return request({
url:'/gysl/projectLegend/page', url:'/gysl/projectLegend/page',
@ -413,3 +414,78 @@ export function getxmtlById(id) {
method:'get', method:'get',
}) })
} }
//项目其他信息
//新增数据
export function addxmqt(data) {
return request({
url:'/gysl/projectOtherInfo/add',
method:'post',
data
})
}
//删除数据
export function deletexmqt(idList) {
return request({
url:'/gysl/projectOtherInfo/delete',
method:'delete',
params:{idList}
})
}
//修改数据
export function updatexmqt(data) {
return request({
url:'/gysl/projectOtherInfo/edit',
method:'post',
data
})
}
//根据项目id查询信息// 根据项目id查询信息
export function getOtherInfoByxmid(query) {
return request({
url: '/gysl/projectOtherInfo/searchId',
method: 'get',
params: query // 使用 params 传递查询参数
});
}
//项目备忘录
//新增数据
export function addxmmmb(data) {
return request({
url:'/gysl/projectRemark/add',
method:'post',
data
})
}
//删除数据
export function deletexmmmb(idList) {
return request({
url:'/gysl/projectRemark/delete',
method:'delete',
params:{idList}
})
}
//修改数据
export function updatexmmmb(data) {
return request({
url:'/gysl/projectRemark/edit',
method:'post',
data
})
}
//查询所有数据
export function getxmmmbPage(params) {
return request({
url:'/gysl/projectRemark/page',
method:'get',
params
})
}
//通过主键查询单条数据
export function getxmmmbById(id) {
return request({
url:`/gysl/projectRemark/${id}`,
method:'get',
params:{id}
})
}

@ -170,6 +170,16 @@
<el-input v-model="form.jsjd" maxlength="50"></el-input> <el-input v-model="form.jsjd" maxlength="50"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<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="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-form-item label="项目法人单位简介" prop="unitIntroduction">
<el-input v-model="form.unitIntroduction" type="textarea" rows="4" maxlength="1000"></el-input> <el-input v-model="form.unitIntroduction" type="textarea" rows="4" maxlength="1000"></el-input>
@ -247,7 +257,11 @@ export default {
unitIntroduction: '', unitIntroduction: '',
introduction: '', introduction: '',
fj: '', fj: '',
jsjd: '' jsjd: '',
//
latitude:'',
//
longitude:''
}, },
rules: { rules: {
name: [ name: [
@ -361,6 +375,8 @@ export default {
{ label: '施工许可证发放时间', value: data.issuingTime }, { label: '施工许可证发放时间', value: data.issuingTime },
{ label: '竣工验收时间', value: data.acceptanceTime }, { label: '竣工验收时间', value: data.acceptanceTime },
{ label: '建设进度', value: data.jsjd }, { label: '建设进度', value: data.jsjd },
// { label: '', value: data.longitude },
// { label: '', value: data.latitude },
{ label: '项目法人单位简介', value: data.unitIntroduction }, { label: '项目法人单位简介', value: data.unitIntroduction },
{ label: '项目简介', value: data.introduction } { label: '项目简介', value: data.introduction }
]; ];
@ -392,6 +408,8 @@ export default {
ssgnq: parseInt(this.form.ssgnq), ssgnq: parseInt(this.form.ssgnq),
unitIntroduction: this.form.unitIntroduction, unitIntroduction: this.form.unitIntroduction,
jsjd: this.form.jsjd, jsjd: this.form.jsjd,
latitude:this.form.latitude,
longitude:this.form.longitude,
updateBy: '', updateBy: '',
updateId: 0, updateId: 0,
updateTime: '', updateTime: '',
@ -472,6 +490,10 @@ export default {
updateBy: '', updateBy: '',
updateId: 0, updateId: 0,
updateTime: '', updateTime: '',
//
latitude:'',
//
longitude:''
}; };
}, },
// //

@ -8,7 +8,8 @@
</div> </div>
<div class="topright"> <div class="topright">
<el-button type="primary" size="medium" plain <el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;"> style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;"
@click="handleEditMemo">
<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;"> style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
编辑 编辑
@ -33,107 +34,166 @@
</el-form> </el-form>
</div> </div>
<div class="descriptionsdivnext"> <div class="descriptionsdivnext">
<div class="descriptionditem"> <!-- 渲染多个备忘录 -->
<div class="itemone">2024-09-28</div> <div v-for="memo in memos" :key="memo.id" class="descriptionditem">
<div class="itemtwo">该项目已完工需继续更新</div> <div class="itemone">{{ memo.createTime }}</div>
<div class="itemthree">2024-09-28</div> <div class="itemtwo">{{ memo.remark }}</div>
<div class="itemthree">{{ memo.createBy }}</div>
<div class="itemfour">
<el-button type="text" @click="handleEditMemo(memo)"></el-button>
<el-button type="text" @click="handleDeleteMemo(memo.id)"></el-button>
</div> </div>
<div class="descriptionditem">
<div class="itemone">2024-09-28</div>
<div class="itemtwo">该项目已完工需继续更新</div>
<div class="itemthree">2024-09-28</div>
</div>
<div class="descriptionditem">
<div class="itemone">2024-09-28</div>
<div class="itemtwo">该项目已完工需继续更新</div>
<div class="itemthree">2024-09-28</div>
</div> </div>
</div> </div>
</div> </div>
<!-- 新增弹窗表单 --> <!-- 新增/编辑弹窗表单 -->
<el-dialog title="新增备忘录" :visible.sync="dialogVisible" width="500px"> <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
<el-form :model="newMemo" label-width="100px"> <el-form :model="newMemo" label-width="100px">
<el-form-item label="姓名"> <el-form-item label="备忘录内容">
<el-input v-model="newMemo.name"></el-input> <el-input type="textarea" v-model="newMemo.remark" :rows="4"></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-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button> <el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleAddMemo"></el-button> <el-button type="primary" @click="handleSubmit"></el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { addxmmmb, deletexmmmb, updatexmmmb, getxmmmbPage } from '@/api/ManageApi/index';
export default { export default {
props: {
xmId: {
type: Number,
required: true
}
},
data() { data() {
return { return {
dynamicTags: ['标签一', '标签二', '标签三'],
inputVisible: false,
inputValue: '',
form: { form: {
name: '',
region: '',
date1: null, date1: null,
date2: '',
delivery: false,
type: [],
resource: '',
desc: ''
}, },
dialogVisible: false, dialogVisible: false,
dialogTitle: '新增备忘录',
newMemo: { newMemo: {
name: '', id: null,
date: '', remark: '', // remark
content: '' xmId: this.xmId, // 使 xmId
} },
memos: [], //
}; };
}, },
created() {
this.fetchMemos(); //
},
methods: { methods: {
onSubmit() { onSubmit() {
console.log('submit!'); console.log('submit!');
console.log(this.form); console.log(this.form);
}, },
handleClose(tag) { //
this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1); fetchMemos() {
}, const params = {
showInput() { xmId: this.xmId, // 使 xmId
this.inputVisible = true; };
this.$nextTick(_ => { getxmmmbPage(params)
this.$refs.saveTagInput.$refs.input.focus(); .then(response => {
}); if (response.code === 200 && response.data) {
}, this.memos = response.data; //
handleInputConfirm() { } else {
let inputValue = this.inputValue; console.error("获取备忘录失败:数据为空");
if (inputValue) {
this.dynamicTags.push(inputValue);
} }
this.inputVisible = false; })
this.inputValue = ''; .catch(error => {
console.error("获取备忘录失败:", error);
});
}, },
//
handleAdd() { handleAdd() {
this.dialogTitle = '新增备忘录';
this.dialogVisible = true; this.dialogVisible = true;
this.newMemo = {
id: null,
remark: '', // remark
xmId: this.xmId, // 使 xmId
};
}, },
handleAddMemo() { //
console.log('新增备忘录:', this.newMemo); handleEditMemo(memo) {
// if (memo) {
this.dialogVisible = false; this.dialogTitle = '编辑备忘录';
this.dialogVisible = true;
this.newMemo = { this.newMemo = {
name: '', id: memo.id,
date: '', remark: memo.remark, // remark
content: '' xmId: memo.xmId,
}; };
} }
},
//
handleDeleteMemo(id) {
this.$confirm('此操作将永久删除该备忘录, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deletexmmmb([id])
.then(response => {
if (response.code === 200) {
this.$message.success('删除成功!');
this.fetchMemos(); //
} else {
this.$message.error('删除失败!');
}
})
.catch(error => {
console.error('删除失败', error);
this.$message.error('删除失败!');
});
}).catch(() => {
this.$message.info('已取消删除');
});
},
// /
handleSubmit() {
this.dialogVisible = false;
if (this.newMemo.id) {
//
updatexmmmb(this.newMemo)
.then(response => {
if (response.code === 200) {
this.$message.success('数据编辑成功!');
this.fetchMemos(); //
} else {
this.$message.error('数据编辑失败!');
}
})
.catch(error => {
console.error('编辑数据失败', error);
this.$message.error('数据编辑失败!');
});
} else {
//
addxmmmb(this.newMemo)
.then(response => {
if (response.code === 200) {
this.$message.success('数据新增成功!');
this.fetchMemos(); //
} else {
this.$message.error('数据新增失败!');
}
})
.catch(error => {
console.error('新增数据失败', error);
this.$message.error('数据新增失败!');
});
} }
},
},
}; };
</script> </script>
@ -218,22 +278,24 @@ export default {
height: 8rem; height: 8rem;
margin-top: -1rem; margin-top: -1rem;
gap: 1rem; gap: 1rem;
flex-wrap: wrap;
} }
.descriptionditem { .descriptionditem {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 1rem; gap: 0.5rem;
width: 21.75rem; width: 21.75rem;
height: 7rem; height: auto;
background: #FBFCFF; background: #FBFCFF;
border-radius: 0.25rem 0.25rem 0.25rem 0.25rem; border-radius: 0.25rem 0.25rem 0.25rem 0.25rem;
border: 0.06rem solid #E6E6E6; border: 0.06rem solid #E6E6E6;
padding: .5rem; padding: .5rem;
position: relative;
} }
.itemone { .itemone {
width: 5.88rem; width: 100%;
height: 0.88rem; height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi; font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 500; font-weight: 500;
@ -257,7 +319,7 @@ export default {
} }
.itemthree { .itemthree {
width: 6.06rem; width: 100%;
height: 0.88rem; height: 0.88rem;
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi; font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-weight: 400; font-weight: 400;
@ -268,6 +330,12 @@ export default {
text-transform: none; text-transform: none;
} }
.itemfour {
position: absolute;
bottom: 0.5rem;
right: 0.5rem;
}
.el-textarea__inner { .el-textarea__inner {
height: 10rem !important; height: 10rem !important;
/* 固定高度 */ /* 固定高度 */

@ -8,13 +8,13 @@
</div> </div>
<div class="topright"> <div class="topright">
<el-button type="primary" size="medium" plain <el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;"> style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="openDialog('add')">
<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;"> style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增 新增
</el-button> </el-button>
<el-button type="primary" size="medium" plain <el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;"> style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="openDialog('edit')">
<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;"> style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
编辑 编辑
@ -26,114 +26,137 @@
导出 导出
</el-button> </el-button>
<el-button type="primary" size="medium" plain <el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(242,83,83,0.1);color: #F25353;"> style="border: none;background-color: rgba(242,83,83,0.1);color: #F25353;" @click="deleteData">
<img src="../../../assets/images/detailsicon/icon-delet@2x.png" alt="删除" <img src="../../../assets/images/detailsicon/icon-delet@2x.png" alt="删除"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;"> style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
删除 删除
</el-button> </el-button>
</div> </div>
</div> </div>
<!-- 内容区上方的表格 -->
<!-- 数据展示表格 -->
<div class="tagdiv"> <div class="tagdiv">
<div class="descriptionsdiv"> <div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="4" border> <el-descriptions class="margin-top" :column="4" border>
<el-descriptions-item> <el-descriptions-item label="键">
<template slot="label"> {{ otherInfo.zdname }}
改造前容积率
</template>
18100000000
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
改造后容积率
</template>
苏州市
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
亩均税收万元/每亩
</template>
kooriookami
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
亩均销售万元/每亩
</template>
18100000000
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
贷款情况
</template>
苏州市
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item label="值">
<template slot="label"> {{ otherInfo.zdinfor }}
荣誉情况
</template>
苏州市
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
</div> </div>
<!-- 表单弹窗 -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="30%">
<el-form :model="form" label-width="80px">
<el-form-item label="键">
<el-input v-model="form.zdname" placeholder="请输入键"></el-input>
</el-form-item>
<el-form-item label="值">
<el-input v-model="form.zdinfor" placeholder="请输入值"></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="submitForm"></el-button>
</span>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { addxmqt, updatexmqt, getOtherInfoByxmid } from '@/api/ManageApi/index';
export default { export default {
props: { props: {
size: { xmId: {
type: String, type: Number,
default: '' // required: true
} }
}, },
data() { data() {
return { return {
tableData: [ otherInfo: { //
{ zdname: '', //
date: '2016-05-02', zdinfor: '' //
name: '大众电脑生成制造基地',
address: ' 1518 弄',
data: '1000',
status: '在建'
}, },
{ dialogVisible: false, //
date: '2016-05-04', dialogTitle: '', //
name: '大众电脑生成制造基地', form: { //
address: ' 1517 弄', zdname: '',
data: '1500', zdinfor: ''
status: '拟建'
}, },
{ isEditMode: false //
date: '2016-05-01', };
name: '大众电脑生成制造基地',
address: ' 1519 弄',
data: '2000',
status: '已建'
}, },
{ created() {
date: '2016-05-03', this.fetchOtherInfo(); //
name: '大众电脑生成制造基地',
address: ' 1516 弄',
data: '2500',
status: '在建'
}
],
}
}, },
methods: { methods: {
getStatusColor(status) { //
switch (status) { fetchOtherInfo() {
case '在建': getOtherInfoByxmid({ xmId: this.xmId }) //
return 'color: #2DD29F;'; .then(response => {
case '拟建': if (response.code === 200 && response.data) {
return 'color: #F08445;'; this.otherInfo = response.data; //
case '已建': } else {
return 'color: #2B62F1;'; console.error("获取其他信息失败:数据为空");
} }
} })
.catch(error => {
console.error("获取其他信息失败:", error);
});
},
//
openDialog(mode) {
if (mode === 'add') {
this.dialogTitle = '新增';
this.isEditMode = false;
this.form = { zdname: '', zdinfor: '' }; //
} else if (mode === 'edit') {
this.dialogTitle = '编辑';
this.isEditMode = true;
this.form = { ...this.otherInfo }; //
}
this.dialogVisible = true;
},
//
submitForm() {
if (this.isEditMode) {
//
updatexmqt({ ...this.form, xmId: this.xmId })
.then(response => {
if (response.code === 200) {
this.$message.success('编辑成功');
this.fetchOtherInfo(); //
}
})
.catch(error => {
console.error("编辑失败:", error);
});
} else {
//
addxmqt({ ...this.form, xmId: this.xmId })
.then(response => {
if (response.code === 200) {
this.$message.success('新增成功');
this.fetchOtherInfo(); //
}
})
.catch(error => {
console.error("新增失败:", error);
});
}
this.dialogVisible = false; //
},
//
deleteData() {
this.$message.warning('删除功能暂未实现');
} }
} }
};
</script> </script>
<style scoped> <style scoped>
@ -204,6 +227,7 @@
.tagdiv { .tagdiv {
padding: 1rem 3em 1rem 1rem; padding: 1rem 3em 1rem 1rem;
} }
.block { .block {
width: 100%; width: 100%;
display: flex; display: flex;
@ -211,4 +235,3 @@
margin-top: 1rem; margin-top: 1rem;
} }
</style> </style>

@ -15,7 +15,7 @@
</el-button> </el-button>
</div> </div>
</div> </div>
<!-- 图片盒子容器 --> <!-- 展示的区域 -->
<div class="image-container"> <div class="image-container">
<div v-for="(image, index) in images" :key="index" class="image-box"> <div v-for="(image, index) in images" :key="index" class="image-box">
<img :src="image.src" alt="项目图片" class="image"> <img :src="image.src" alt="项目图片" class="image">
@ -24,23 +24,9 @@
</div> </div>
</div> </div>
</div> </div>
<!-- 上传附件弹窗 --> <!-- 新增项目巡礼的弹窗 -->
<el-dialog title="上传附件" :visible.sync="dialogVisible" width="50%"> <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"> <span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button> <el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submitUpload"> </el-button> <el-button type="primary" @click="submitUpload"> </el-button>
@ -50,7 +36,7 @@
</template> </template>
<script> <script>
import { addXmxl, getXmxlPage } from '@/api/ManageApi/index.js'; // import { addXmxl, getXmxlPage } from '@/api/ManageApi/index.js';
export default { export default {
data() { data() {

@ -15,7 +15,7 @@
<!-- 内容区 --> <!-- 内容区 -->
<div class="content"> <div class="content">
<div class="picturediv"> <div class="picturediv">
<div ref="chart" style="width: 30rem; height: 28rem; margin-left: 2rem;"></div> <div ref="chart" style="width: 40rem; height: 28rem; margin-left: 2rem;"></div>
</div> </div>
<div class="descriptionsdiv"> <div class="descriptionsdiv">
<div class="tablehead"> <div class="tablehead">

@ -1,93 +1,239 @@
<template> <template>
<div> <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="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
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">
<!-- 上侧三张图 -->
<div class="image-row">
<div v-for="(item, index) in carousel1Items.slice(0, 3)" :key="index" class="image-item">
<img :src="item.imageUrl" :alt="'Image ' + (index + 1)" />
<div class="classify">
类型A
</div>
<el-input v-if="dialogVisible" v-model="form.images[index]" placeholder="请输入图片URL"></el-input>
</div>
</div>
<!-- 下侧三张图 -->
<div class="image-row">
<div v-for="(item, index) in carousel2Items.slice(0, 3)" :key="index" class="image-item">
<img :src="item.imageUrl" :alt="'Image ' + (index + 1)" />
<div class="classify">
类型B
</div>
<el-input v-if="dialogVisible" v-model="form.images[index + 3]" placeholder="请输入图片URL"></el-input>
</div>
</div>
</div>
<!-- 编辑/新增对话框 -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
<el-form :model="form" label-width="120px"> <el-form :model="form" label-width="120px">
<el-form-item label="ID"> <el-form-item label="类型">
<el-input v-model="form.id"></el-input> <el-select v-model="form.type" placeholder="请选择类型">
</el-form-item>
<el-form-item label="文件类型" prop="lx">
<el-select v-model="form.imgType" placeholder="请选择文件类型">
<el-option v-for="dict in dict.type.tplx" :key="dict.value" :label="dict.label" <el-option v-for="dict in dict.type.tplx" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option> :value="dict.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="图片url"> <el-form-item label="图片上传">
<el-input v-model="form.img"></el-input> <div v-for="(image, index) in form.images" :key="index" style="margin-bottom: 10px;">
</el-form-item> <ImageUpload v-model="form.images[index]" />
<el-form-item label="经度"> <el-input v-model="form.images[index]" placeholder="请输入图片URL"></el-input>
<el-input v-model="form.latitude"></el-input> </div>
</el-form-item>
<el-form-item label="纬度">
<el-input v-model="form.longitude"></el-input>
</el-form-item>
<el-form-item label="项目ID">
<el-input v-model="form.xmId"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSubmit"></el-button>
<el-button @click="resetForm"></el-button>
</el-form-item> </el-form-item>
</el-form> </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>
</div> </div>
</template> </template>
<script> <script>
import { addxmtl } from '@/api/ManageApi/index';
import ImageUpload from '@/components/ImageUpload'; import ImageUpload from '@/components/ImageUpload';
import { getxmtlPageByxmid, addxmtl, updatexmtll } from '@/api/ManageApi/index';
export default { export default {
components: { ImageUpload }, components: { ImageUpload },
dicts: ['tplx'], dicts: ['tplx'],
props: {
xmId: {
type: Number,
required: true
}
},
data() { data() {
return { return {
carousel1Items: [], // A
carousel2Items: [], // B
dialogVisible: false,
dialogTitle: '',
form: { form: {
createBy: '', type: '',
createTime: '', images: ['', '', '', '', '', ''] //
id: 0, }
img: '',
imgType: 0,
latitude: '',
longitude: '',
remark: '',
updateBy: '',
updateTime: '',
xmId: 0,
},
}; };
}, },
methods: { created() {
handleFileUploaded(fileUrl) { this.fetchProjectLegends();
this.form.img = fileUrl;
}, },
handleSubmit() { methods: {
addxmtl(this.form) //
.then((response) => { fetchProjectLegends() {
if (response.code === 200) { console.log('Fetching data for xmId:', this.xmId);
this.$message.success('新增成功'); if (this.xmId === null || this.xmId === undefined) {
this.resetForm(); console.error('xmId is null or undefined');
} else { return;
this.$message.error('新增失败'); }
getxmtlPageByxmid({ xmId: this.xmId })
.then(response => {
if (response.code === 200 && response.data.length > 0) {
const data = response.data[0]; //
// A
this.carousel1Items = data.type1.images.map(imageUrl => ({ imageUrl }));
// B
this.carousel2Items = data.type2.images.map(imageUrl => ({ imageUrl }));
} }
}) })
.catch((error) => { .catch(error => {
console.error('新增失败:', error); console.error("获取项目图例数据失败:", error);
this.$message.error('新增失败');
}); });
}, },
resetForm() { //
handleAdd() {
this.dialogTitle = '新增';
this.form = { type: '', images: ['', '', '', '', '', ''] }; //
this.dialogVisible = true;
},
//
handleEdit() {
this.dialogTitle = '编辑';
//
this.form = { this.form = {
createBy: '', type: '', //
createTime: '', images: [
id: 0, this.carousel1Items[0] ? this.carousel1Items[0].imageUrl : '',
img: '', this.carousel1Items[1] ? this.carousel1Items[1].imageUrl : '',
imgType: 0, this.carousel1Items[2] ? this.carousel1Items[2].imageUrl : '',
latitude: '', this.carousel2Items[0] ? this.carousel2Items[0].imageUrl : '',
longitude: '', this.carousel2Items[1] ? this.carousel2Items[1].imageUrl : '',
remark: '', this.carousel2Items[2] ? this.carousel2Items[2].imageUrl : ''
updateBy: '', ]
updateTime: '',
xmId: 0,
}; };
this.dialogVisible = true;
}, },
}, //
handleSubmit() {
if (this.dialogTitle === '新增') {
// API
addxmtl({ ...this.form, xmId: this.xmId })
.then(response => {
if (response.code === 200) {
this.$message.success('新增成功');
this.fetchProjectLegends(); //
}
})
.catch(error => {
console.error("新增失败:", error);
});
} else if (this.dialogTitle === '编辑') {
// API
updatexmtll({ ...this.form, xmId: this.xmId })
.then(response => {
if (response.code === 200) {
this.$message.success('编辑成功');
this.fetchProjectLegends(); //
}
})
.catch(error => {
console.error("编辑失败:", error);
});
}
this.dialogVisible = false;
}
}
}; };
</script> </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;
}
.main-content {
display: flex;
flex-direction: column;
gap: 1rem;
padding: 1rem;
}
.image-row {
display: flex;
justify-content: space-between;
gap: 1rem;
}
.image-item {
position: relative;
width: calc(33.33% - 0.67rem); /* 三张图片每张占三分之一减去间隔 */
}
.image-item img {
width: 100%;
height: 12rem;
object-fit: cover;
}
.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: 98;
}
</style>

@ -17,8 +17,11 @@
<el-form-item label="项目名称"> <el-form-item label="项目名称">
<el-input v-model="pointForm.name" ref="pointNameInput"></el-input> <el-input v-model="pointForm.name" ref="pointNameInput"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="现状分类"> <el-form-item label="纬度">
<el-input v-model="pointForm.latlng" ></el-input> <el-input v-model="pointForm.lat" readonly></el-input>
</el-form-item>
<el-form-item label="经度">
<el-input v-model="pointForm.lng" readonly></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -71,7 +74,8 @@ export default {
pointDialogTitle: '新增点位', // pointDialogTitle: '新增点位', //
pointForm: { pointForm: {
name: '', name: '',
latlng: '', lat: '',
lng: '',
}, },
selectedLatLng: null, // selectedLatLng: null, //
existingMarker: null, // existingMarker: null, //
@ -112,7 +116,8 @@ export default {
} }
const { latlng } = event; const { latlng } = event;
this.selectedLatLng = latlng; this.selectedLatLng = latlng;
this.pointForm.latlng = `${latlng.lat}, ${latlng.lng}`; this.pointForm.lat = latlng.lat.toString();
this.pointForm.lng = latlng.lng.toString();
this.showFloatingPanel(); this.showFloatingPanel();
}, },
// //

@ -53,25 +53,25 @@
</div> </div>
<!-- 项目图例 --> <!-- 项目图例 -->
<div id="projectpicturetwo"> <div id="projectpicturetwo">
<Projectpicturetwo22 :id="projectId"></Projectpicturetwo22> <Projectpicturetwo22 :xmId="projectId"></Projectpicturetwo22>
</div> </div>
<!-- 项目巡礼 --> <!-- 项目巡礼 -->
<div id="projectgift"> <!-- <div id="projectgift">
<Projectgift></Projectgift> <Projectgift></Projectgift>
</div> </div> -->
<!-- 现场实况 --> <!-- 现场实况 -->
<div id="liver"> <div id="liver">
<Liver></Liver> <Liver></Liver>
</div> </div>
<!-- 项目备忘录 --> <!-- 项目备忘录 -->
<div id="memo"> <div id="memo">
<Memo></Memo> <Memo :xmId="projectId"></Memo>
</div> </div>
<!-- 其他信息 --> <!-- 其他信息 -->
<div class="bottombox" id="others"> <div class="bottombox" id="others">
<Others></Others> <Others :xmId="projectId"></Others>
</div> </div>
<div> <div class="footer">
<el-button type="primary">审核通过</el-button> <el-button type="primary">审核通过</el-button>
</div> </div>
</div> </div>
@ -91,7 +91,7 @@ import Memo from '../components/ProjectDetails/Memo.vue';
import Models from '../components/ProjectDetails/Models.vue'; import Models from '../components/ProjectDetails/Models.vue';
import Months from '../components/ProjectDetails/Months.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 Projectgift from '../components/ProjectDetails/Projectgift.vue';
import Projectpicture from '../components/ProjectDetails/Projectpicture.vue'; import Projectpicture from '../components/ProjectDetails/Projectpicture.vue';
import Projectpicturetwo from '../components/ProjectDetails/Projectpicturetwo.vue'; import Projectpicturetwo from '../components/ProjectDetails/Projectpicturetwo.vue';
import Others from '../components/ProjectDetails/Others.vue'; import Others from '../components/ProjectDetails/Others.vue';
@ -108,7 +108,7 @@ export default {
Models, Models,
Months, Months,
Programme, Programme,
Projectgift, // Projectgift,
Projectpicture, Projectpicture,
Projectpicturetwo, Projectpicturetwo,
Others Others
@ -135,7 +135,7 @@ export default {
}, },
created() { created() {
// projectId // projectId
this.projectId = this.$route.params.id; this.projectId = Number(this.$route.params.id); // projectId
this.loadData(); this.loadData();
}, },
methods: { methods: {
@ -249,4 +249,10 @@ export default {
z-index: 99; z-index: 99;
font-size: 18px; font-size: 18px;
} }
.footer {
display: flex;
padding: 0 0 2rem 0;
justify-content: center;
}
</style> </style>

@ -5,18 +5,21 @@
<el-row style="margin-top: 1rem;"> <el-row style="margin-top: 1rem;">
<el-col :span="6"> <el-col :span="6">
<el-form-item label="关键要素" style="width: 100%;"> <el-form-item label="关键要素" style="width: 100%;">
<el-input placeholder="请输入关键要素" clearable style="width: 14rem;" /> <el-input placeholder="请输入关键要素" clearable style="width: 14rem;"
v-model="searchForm.keyElement" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="具体指标" style="width: 100%;"> <el-form-item label="具体指标" style="width: 100%;">
<el-input placeholder="请输入具体指标" clearable style="width: 14rem;" /> <el-input placeholder="请输入具体指标" clearable style="width: 14rem;"
v-model="searchForm.specificIndicator" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item style="margin-left: 2.5rem;"> <el-form-item style="margin-left: 2.5rem;">
<el-button type="primary" icon="el-icon-search" size="mini">查询</el-button> <el-button type="primary" icon="el-icon-search" size="mini"
<el-button icon="el-icon-refresh" size="mini">重置</el-button> @click="fetchElements">查询</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetSearchForm"></el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -25,43 +28,47 @@
<div class="tablebox" style="margin: .5rem;"> <div class="tablebox" style="margin: .5rem;">
<el-button type="primary" icon="el-icon-plus" @click="dialogVisible = true; resetForm()">新增要素</el-button> <el-button type="primary" icon="el-icon-plus" @click="dialogVisible = true; resetForm()">新增要素</el-button>
<div v-for="(category, categoryName) in tableData" :key="categoryName"> <!-- 渲染所有要素 -->
<div v-for="(items, itemName) in category" :key="itemName" class="tablebox"> <div v-for="(element, index) in tableData" :key="index" class="tablebox">
<div class="boxheader"> <div class="boxheader">
<div class="headerone"> <div class="headerone">
<div>{{ categoryName }}</div> <!-- 关键要素/重要要素 -->
<div>{{ itemName }}</div> <div>{{ element.type === 1 ? '关键要素' : '重要要素' }}</div>
<!-- 关键要素/重要要素的名称 -->
<div>{{ element.name }}</div>
</div> </div>
<!-- 对要素的类型和名称进行编辑 -->
<div class="headertwo"> <div class="headertwo">
<el-button type="primary" icon="el-icon-edit" size="mini" <el-button type="primary" icon="el-icon-edit" size="mini"
@click="handleUpdate(items[0])">编辑要素</el-button> @click="handleUpdate(element)">编辑要素</el-button>
<el-button type="primary" icon="el-icon-edit" <el-button type="primary" icon="el-icon-edit"
@click="showAddIndicatorDialog">新增指标</el-button> @click="showAddIndicatorDialog(element)">新增指标</el-button>
</div> </div>
</div> </div>
<el-table :data="items" style="width: 100%"> <!-- 每个要素对应的指标和详细要求的展示这里编辑和删除只是删除这个指标不删除要素 -->
<el-table :data="element.indicators" style="width: 100%">
<el-table-column prop="id" label="序号" width="180"></el-table-column> <el-table-column prop="id" label="序号" width="180"></el-table-column>
<el-table-column prop="jtzb" label="具体指标" width="180"></el-table-column> <el-table-column prop="jtzb" label="具体指标" width="180"></el-table-column>
<el-table-column prop="xxyq" label="详细要求" width="950"></el-table-column> <el-table-column prop="xxyq" label="详细要求" width="950"></el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" @click="handleUpdate(scope.row)" <el-button size="mini" type="text" @click="handleUpdateIndicator(scope.row)"
v-hasPermi="['system:post:edit']">编辑</el-button> v-hasPermi="['system:post:edit']">编辑指标</el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)" style="color: #F25353;" <el-button size="mini" type="text" @click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']">删除</el-button> style="color: #F25353;" v-hasPermi="['system:post:remove']">删除指标</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
</div>
<!-- 新增要素// --> <!-- 这是新增要素/编辑要素弹窗 -->
<el-dialog :title="form.id ? '编辑要素' : '新增要素'" :visible.sync="dialogVisible" width="30%"> <el-dialog :title="form.id ? '编辑要素' : '新增要素'" :visible.sync="dialogVisible" width="30%">
<el-form :model="form" label-width="80px"> <el-form :model="form" label-width="80px">
<el-form-item label="类型"> <el-form-item label="类型">
<el-select v-model="form.type" placeholder="请选择类型"> <el-select v-model="form.type" placeholder="请选择类型">
<el-option label="关键" value="关键要素"></el-option> <el-option v-for="dict in dict.type.yslx" :key="dict.value" :label="dict.label"
<el-option label="重要" value="重要要素"></el-option> :value="parseInt(dict.value)"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="名称"> <el-form-item label="名称">
@ -74,17 +81,14 @@
</span> </span>
</el-dialog> </el-dialog>
<!-- 新增指标弹窗 --> <!-- 这是新增指标/编辑指标弹窗 -->
<el-dialog title="新增指标" :visible.sync="indicatorDialogVisible" width="30%"> <el-dialog :title="indicatorForm.id ? '编辑指标' : '新增指标'" :visible.sync="indicatorDialogVisible" width="30%">
<el-form :model="indicatorForm" label-width="80px"> <el-form :model="indicatorForm" label-width="80px">
<el-form-item label="指标名称"> <el-form-item label="具体指标">
<el-input v-model="indicatorForm.name" placeholder="请输入指标名称"></el-input> <el-input v-model="indicatorForm.jtzb" placeholder="请输入具体指标"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="指标类型"> <el-form-item label="详细内容">
<el-select v-model="indicatorForm.type" placeholder="请选择类型"> <el-input v-model="indicatorForm.xxyq" placeholder="请输入详细要求"></el-input>
<el-option label="关键指标" value="关键指标"></el-option>
<el-option label="重要指标" value="重要指标"></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
@ -96,122 +100,102 @@
</template> </template>
<script> <script>
import { getAllElements, addElement, editElemention } from '@/api/ManageApi/index'; import { addElement, getAllElements } from '@/api/ManageApi/index';
export default { export default {
dicts: ['yslx'],
data() { data() {
return { return {
tableData: { searchForm: {
关键要素: { keyElement: '',
环保安全: [], specificIndicator: ''
安全: []
}, },
重要要素: { tableData: [], //
设备: [], dialogVisible: false, // /
设备载重: [] indicatorDialogVisible: false, // /
}
},
dialogVisible: false, // /
indicatorDialogVisible: false, //
form: { form: {
id: '', id: null,
type: '', type: '',
name: '' name: ''
}, },
indicatorForm: { indicatorForm: {
name: '', id: null,
type: '' jtzb: '',
} xxyq: '',
elementId: null
} }
}, };
mounted() {
this.fetchData();
}, },
methods: { methods: {
// //
async fetchData() { fetchElements() {
try { getAllElements(this.searchForm).then(response => {
const response = await getAllElements();
if (response.code === 200) {
this.tableData = response.data; this.tableData = response.data;
} else { });
console.error('获取数据失败', response.msg);
}
} catch (error) {
console.error('请求错误', error);
}
}, },
// //
showAddIndicatorDialog() { resetSearchForm() {
this.indicatorForm = { name: '', type: '' }; // this.searchForm = {
this.indicatorDialogVisible = true; // keyElement: '',
specificIndicator: ''
};
this.fetchElements();
}, },
// //
handleAddIndicator() { resetForm() {
addElement(this.indicatorForm).then(response => { this.form = {
if (response.code === 200) { id: null,
this.$message.success('新增指标成功'); type: '',
this.indicatorDialogVisible = false; // name: ''
this.fetchData(); // };
} else {
this.$message.error('新增指标失败:' + response.msg);
}
}).catch(error => {
this.$message.error('请求错误:' + error.message);
});
}, },
// / //
handleAddElement() { handleAddElement() {
if (this.form.id) {
//
editElemention(this.form).then(response => {
if (response.code === 200) {
this.$message.success('编辑成功');
this.dialogVisible = false; //
this.fetchData(); //
} else {
this.$message.error('编辑失败:' + response.msg);
}
});
} else {
//
addElement(this.form).then(response => { addElement(this.form).then(response => {
if (response.code === 200) { this.$message.success('操作成功');
this.$message.success('新增成功'); this.dialogVisible = false;
this.dialogVisible = false; // this.fetchElements();
this.fetchData(); //
} else {
this.$message.error('新增失败:' + response.msg);
}
}); });
}
}, },
// //
handleUpdate(row) { handleUpdate(element) {
this.form = { ...row }; // this.form = { ...element };
this.dialogVisible = true; // this.dialogVisible = true;
}, },
// //
handleDelete(row) { showAddIndicatorDialog(element) {
this.$confirm('确定删除该要素吗?', '提示', { this.indicatorForm.elementId = element.id;
this.indicatorDialogVisible = true;
},
//
handleAddIndicator() {
//
this.$message.success('操作成功');
this.indicatorDialogVisible = false;
this.fetchElements();
},
//
handleUpdateIndicator(indicator) {
this.indicatorForm = { ...indicator };
this.indicatorDialogVisible = true;
},
//
handleDelete(indicator) {
this.$confirm('确定删除该指标吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
// //
this.$message.success('删除成功'); this.$message.success('删除成功');
}).catch(() => { this.fetchElements();
this.$message.info('已取消删除');
}); });
},
//
resetForm() {
this.form = {
id: '',
type: '',
name: ''
};
}
} }
},
mounted() {
this.fetchElements();
} }
};
</script> </script>
<style scoped> <style scoped>

Loading…
Cancel
Save