流程接口

xuhongjie
严飞永 1 month ago
parent b43e92d3f9
commit bb639e9fe4

@ -5,4 +5,4 @@ VUE_APP_TITLE = 苏州工业园区工业上楼项目系统
ENV = 'production'
# 苏州工业园区工业上楼项目系统/生产环境
VUE_APP_BASE_API = 'http://39.101.188.84:7071'
# VUE_APP_BASE_API = 'http://39.101.188.84:7071'

@ -1,19 +1,5 @@
// src/api/ManageApi/index.js
import request from '@/utils/request';
import { getToken } from '@/utils/auth';
// 企业--基本信息==下载模板(基本信息模板)
export function exportBasicInformationTemplate() {
return request({
url: '/gysl/basicInformation/importTemplate',
method: 'post',
responseType: 'blob',
headers: {
'Authorization': `Bearer ${getToken()}`
}
});
}
// 分页查询所有数据
export function getBasicInformationPage(params) {
return request({
@ -22,21 +8,6 @@ export function getBasicInformationPage(params) {
params
})
}
// 企业基本信息--的导入功能
export function importBasicInformation(data) {
const formData = new FormData();
formData.append('file', data.file);
return request({
url: '/gysl/basicInformation/import',
method: 'post',
data: formData,
headers: {
'Content-Type': 'multipart/form-data',
'Authorization': `Bearer ${getToken()}`,
},
});
}
// 企业--基本信息==展示
export function getBasicInformationById(id) {
return request({

@ -13,18 +13,19 @@
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
编辑
</el-button>
<el-button type="primary" size="medium" plain
<!-- <el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleExport">
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
</el-button>
</el-button> -->
</div>
</div>
<!-- 内容展示区 -->
<div class="content">
<div class="picturediv">
<img v-if="form.fj" :src="form.fj" alt="项目代表性照片">
<!-- 图片展示 -->
<img v-if="basicInfo.fj" :src="basicInfo.fj" alt="项目代表性照片">
</div>
<div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="3" border>
@ -170,16 +171,6 @@
<el-input v-model="form.jsjd" maxlength="50"></el-input>
</el-form-item>
</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-form-item label="项目法人单位简介" prop="unitIntroduction">
<el-input v-model="form.unitIntroduction" type="textarea" rows="4" maxlength="1000"></el-input>
@ -197,7 +188,8 @@
</span>
</el-dialog>
<!-- 地图弹窗 -->
<el-dialog :title="mapDialogTitle" :visible.sync="mapDialogVisible" width="1000px" height="1000px" style="height: 1000;" append-to-body>
<el-dialog :title="mapDialogTitle" :visible.sync="mapDialogVisible" width="1000px" height="1000px"
style="height: 1000;" append-to-body>
<luotu v-if="mapDialogVisible" />
</el-dialog>
</div>
@ -205,7 +197,6 @@
<script>
import { getBasicInformationById, updateBasicInformation, exportBasicInformation } from '@/api/ManageApi/index';
import ImageUpload from '@/components/ImageUpload2/index.vue';
import luotu from '@/views/components/ProjectDetails/luotu.vue'
@ -221,8 +212,8 @@ export default {
type: String,
default: ''
},
id: {
type: [Number, String],
basicInfo: {
type: Object,
required: true
}
},
@ -258,58 +249,8 @@ export default {
introduction: '',
fj: '',
jsjd: '',
//
latitude:'',
//
longitude:''
},
rules: {
name: [
{ required: true, message: '项目名称不能为空', trigger: 'blur' },
{ max: 50, message: '项目名称不能超过50个字', trigger: 'blur' }
],
jsdd: [
{ required: true, message: '建设地点不能为空', trigger: 'blur' },
{ max: 50, message: '建设地点不能超过50个字', trigger: 'blur' }
],
xmfrdwxz: [
{ required: true, message: '项目法人单位不能为空', trigger: 'blur' },
{ max: 50, message: '项目法人单位不能超过50个字', trigger: 'blur' }
],
nature: [
{ required: true, message: '项目法人单位性质不能为空', trigger: 'change' }
],
sgdw: [
{ max: 50, message: '施工单位不能超过50个字', trigger: 'blur' }
],
sjdw: [
{ max: 50, message: '设计单位不能超过50个字', trigger: 'blur' }
],
ztze: [
{ required: true, message: '总投资额不能为空', trigger: 'blur' },
{ type: 'number', message: '总投资额必须是数字', trigger: 'blur' },
],
ssgnq: [
{ required: true, message: '所属功能区不能为空', trigger: 'change' }
],
// begainTime: [
// { required: true, message: '', trigger: 'change' }
// ],
xzfl: [
{ required: true, message: '现状分类不能为空', trigger: 'change' }
],
projectLeader: [
{ required: true, message: '项目负责人不能为空', trigger: 'blur' },
],
phone: [
{ required: true, message: '联系方式不能为空', trigger: 'blur' },
],
unitIntroduction: [
{ max: 1000, message: '项目法人单位简介不能超过1000个字', trigger: 'blur' }
],
introduction: [
{ max: 1000, message: '项目简介不能超过1000个字', trigger: 'blur' }
]
},
// select
ssgnqMap: {
@ -335,25 +276,20 @@ export default {
}
};
},
created() {
this.fetchData();
watch: {
basicInfo: {
handler(newVal) {
this.descriptions = this.formatDescriptions(newVal);
this.form = {
...newVal,
begainTime: [new Date(newVal.begainTime), new Date(newVal.endTime)],
};
},
immediate: true,
deep: true
}
},
methods: {
//
fetchData() {
getBasicInformationById(this.id)
.then(response => {
const data = response.data;
this.descriptions = this.formatDescriptions(data);
this.form = {
...data,
begainTime: [new Date(data.begainTime), new Date(data.endTime)],
};
})
.catch(error => {
console.error('数据获取失败:', error);
});
},
//
formatDescriptions(data) {
return [
@ -375,87 +311,20 @@ export default {
{ label: '施工许可证发放时间', value: data.issuingTime },
{ label: '竣工验收时间', value: data.acceptanceTime },
{ label: '建设进度', value: data.jsjd },
// { label: '', value: data.longitude },
// { label: '', value: data.latitude },
{ label: '项目法人单位简介', value: data.unitIntroduction },
{ label: '项目简介', value: data.introduction }
];
},
//
handleExport() {
//
const queryParams = {
acceptanceTime: this.form.acceptanceTime,
begainTime: this.form.begainTime[0],
endTime: this.form.begainTime[1],
createBy: '',
createId: 0,
createTime: '',
fj: this.form.fj,
id: this.id,
introduction: this.form.introduction,
issuingTime: this.form.issuingTime,
jsdd: this.form.jsdd,
jsms: parseInt(this.form.jsms),
label: this.form.label,
name: this.form.name,
nature: parseInt(this.form.nature),
phone: this.form.phone,
prioritize: this.form.prioritize,
projectLeader: this.form.projectLeader,
sgdw: this.form.sgdw,
sjdw: this.form.sjdw,
ssgnq: parseInt(this.form.ssgnq),
unitIntroduction: this.form.unitIntroduction,
jsjd: this.form.jsjd,
latitude:this.form.latitude,
longitude:this.form.longitude,
updateBy: '',
updateId: 0,
updateTime: '',
xmfrdwxz: this.form.xmfrdwxz,
xzfl: parseInt(this.form.xzfl),
ztze: parseFloat(this.form.ztze),
};
//
exportBasicInformation(queryParams)
.then(response => {
const url = window.URL.createObjectURL(new Blob([response]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', `basic_information_${new Date().getTime()}.xlsx`);
document.body.appendChild(link);
link.click();
})
.catch(error => {
console.error('导出失败:', error);
this.$message.error('导出失败,请重试!');
});
},
//
edit() {
this.dialogVisible = true;
},
//
saveForm() {
this.$refs.form.validate(valid => {
if (valid) {
const formData = this.prepareFormData();
updateBasicInformation(formData) //
.then(response => {
this.$message.success('数据保存成功!');
this.dialogVisible = false;
this.fetchData(); //
// window.location.reload();//
})
.catch(error => {
console.error('数据保存失败:', error);
this.$message.error('数据保存失败,请重试!');
});
} else {
this.$message.warning('请填写完整信息!');
}
});
const formData = this.prepareFormData(this.form);
//
this.$emit('update-data', formData);
this.dialogVisible = false;
},
//
prepareFormData() {
@ -490,10 +359,6 @@ export default {
updateBy: '',
updateId: 0,
updateTime: '',
//
latitude:'',
//
longitude:''
};
},
//
@ -519,7 +384,7 @@ export default {
removeAttachment() {
this.form.fj = '';
},
//
//
showMap() {
this.mapDialogVisible = true;
}

@ -35,7 +35,8 @@
</div>
<!-- 栋数楼栋名称 -->
<div class="tagdiv">
<div class="tagitem" v-for="building in buildings" :key="building.id" @click="selectBuilding(building.id)":class="getTagItemClass(building)">
<div class="tagitem" v-for="building in buildings" :key="building.id" @click="selectBuilding(building.id)"
:class="getTagItemClass(building)">
<img src="@/assets/images/detailsicon/icon-楼栋@2x.png" alt="">
<span>{{ building.name }}</span>
<img src="@/assets/images/detailsicon/icon-gb@2x.png" alt="" @click.stop="handleDelete(building.id)">
@ -87,7 +88,7 @@
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">是否有吊装口</template>
{{ getTextForBoolean(selectedBuilding.sfydzk )}}
{{ getTextForBoolean(selectedBuilding.sfydzk) }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">是否有汽车盘道</template>
@ -204,10 +205,7 @@
</el-dialog>
</div>
</template>
<script>
import { getjzxxinformationByxmId, getjzxxById, addjzxx, updatejzxx, deletejzxx } from '@/api/ManageApi/index';
export default {
dicts: ['isno'],
props: {
@ -215,8 +213,8 @@ export default {
type: String,
default: ''
},
xmId: {
type: [Number, String],
buildingInfo: {
type: Array,
required: true
}
},
@ -237,9 +235,9 @@ export default {
name: '',
scdmhz: 0,
scgd: 0,
sfwzyld: 2,
sfydzk: 2,
sfyqcpd: 2,
sfwzyld: 0,
sfydzk: 0,
sfyqcpd: 0,
totalBuildingHeight: 0,
twoAndFourCg: 0,
twoAndThreeLmhz: 0,
@ -251,17 +249,33 @@ export default {
}
};
},
created() {
this.fetchBuildings();
watch: {
buildingInfo: {
handler(newVal) {
this.buildings = newVal;
if (this.buildings.length > 0) {
this.selectedBuilding = this.buildings[0];
} else {
this.selectedBuilding = null;
}
},
immediate: true,
deep: true
}
},
mounted() {
// buildingInfo
console.log('buildingInfo in Buildings component:', this.buildingInfo);
},
methods: {
//12
// 12
getTextForBoolean(value) {
return value === 1 ? '是' : '否';
},
//
getTagItemClass(building){
return{
//
getTagItemClass(building) {
return {
'important-building': building.sfwzyld === 1,
};
},
@ -280,9 +294,9 @@ export default {
name: '',
scdmhz: 0,
scgd: 0,
sfwzyld: 2,
sfydzk: 2,
sfyqcpd: 2,
sfwzyld: 0,
sfydzk: 0,
sfyqcpd: 0,
totalBuildingHeight: 0,
twoAndFourCg: 0,
twoAndThreeLmhz: 0,
@ -293,57 +307,27 @@ export default {
zj: 0
};
},
fetchBuildings() {
console.log('Fetching data for xmId:', this.xmId);
getjzxxinformationByxmId({ xmId: this.xmId })
.then(response => {
console.log('API response:', response);
if (response.code === 200 && response.data) {
this.buildings = Object.values(response.data); //
console.log('Buildings data after assignment:', this.buildings);
} else {
console.error('数据格式不正确:', response);
}
})
.catch(error => {
console.error('数据获取失败:', error);
});
},
selectBuilding(id) {
console.log('Selected building ID:', id);
getjzxxById(id)
.then(response => {
console.log('Building details response:', response);
if (response.code === 200 && response.data) {
this.selectedBuilding = response.data; // selectedBuilding
console.log('Selected building data:', this.selectedBuilding);
} else {
console.error('数据格式不正确:', response);
}
})
.catch(error => {
console.error('数据获取失败:', error);
});
this.selectedBuilding = this.buildings.find(building => building.id === id);
},
handleAddBuilding() {
const api = this.buildingForm.id ? updatejzxx : addjzxx; // ID
const form = {
...this.buildingForm
};
api(form)
.then(response => {
if (response.code === 200) {
this.$message.success(form.id ? '更新成功' : '新增成功');
this.dialogVisible = false;
this.fetchBuildings(); //
} else {
this.$message.error(form.id ? '更新失败' : '新增失败');
}
})
.catch(error => {
console.error(form.id ? '更新失败:' : '新增失败:', error);
this.$message.error(form.id ? '更新失败' : '新增失败');
});
//
this.$message.success(this.buildingForm.id ? '更新成功' : '新增成功');
this.dialogVisible = false;
// buildings selectedBuilding
if (this.buildingForm.id) {
//
const index = this.buildings.findIndex(building => building.id === this.buildingForm.id);
if (index !== -1) {
this.buildings.splice(index, 1, { ...this.buildingForm });
}
} else {
//
this.buildingForm.id = this.buildings.length + 1; // ID
this.buildings.push({ ...this.buildingForm });
}
this.selectedBuilding = { ...this.buildingForm };
},
handleDelete(id) {
console.log('Deleting building with ID:', id); //
@ -353,19 +337,13 @@ export default {
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deletejzxx([id]) // ID
.then(response => {
if (response.code === 200) {
this.$message.success('删除成功');
this.fetchBuildings(); //
} else {
this.$message.error('删除失败');
}
})
.catch(error => {
console.error('删除失败:', error);
this.$message.error('删除失败');
});
//
this.$message.success('删除成功');
//
this.buildings = this.buildings.filter(building => building.id !== id);
if (this.selectedBuilding && this.selectedBuilding.id === id) {
this.selectedBuilding = null;
}
}).catch(() => {
this.$message.info('已取消删除');
});
@ -464,7 +442,8 @@ export default {
align-items: center;
cursor: pointer;
}
.important-building {
background-color: rgba(43,98,241,0.1);
background-color: rgba(43, 98, 241, 0.1);
}
</style>

@ -7,181 +7,130 @@
<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;">
<el-button v-if="!isEditing" type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="edit">
<img src="../../../assets/images/detailsicon/icon-bj@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="编辑"
<el-button v-else type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="save">
<img src="../../../assets/images/detailsicon/icon-bj@2x.png" alt="保存"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
保存
</el-button>
</div>
</div>
<!-- 内容区上方的表格 -->
<div class="tagdiv">
<!-- 内容区 -->
<div class="content">
<div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="4" border>
<el-descriptions-item>
<template slot="label">
入驻企业数
</template>
18100000000
<el-descriptions-item label="入驻企业数(家)">
<el-input v-if="isEditing" v-model.number="form.rzqys" style="width: 100%;"></el-input>
<span v-else>{{ form.rzqys }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
入驻企业行业类型
</template>
苏州市
<el-descriptions-item label="入驻企业行业类型">
<el-input v-if="isEditing" v-model="form.rzqyhylx" style="width: 100%;"></el-input>
<span v-else>{{ form.rzqyhylx }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
人员数量
</template>
kooriookami
<el-descriptions-item label="人员数量(人)">
<el-input v-if="isEditing" v-model.number="form.rysl" style="width: 100%;"></el-input>
<span v-else>{{ form.rysl }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
入住率%
</template>
18100000000
<el-descriptions-item label="入住率(%">
<el-input v-if="isEditing" v-model.number="form.rzl" style="width: 100%;"></el-input>
<span v-else>{{ form.rzl }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
已出租面积平方米
</template>
苏州市
<el-descriptions-item label="已出租(售)面积(平方米)">
<el-input v-if="isEditing" v-model.number="form.yczmj" style="width: 100%;"></el-input>
<span v-else>{{ form.yczmj }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
空置出租面积平方米
</template>
kooriookami
<el-descriptions-item label="空置出租(售)面积(平方米)">
<el-input v-if="isEditing" v-model.number="form.kzczmj" style="width: 100%;"></el-input>
<span v-else>{{ form.kzczmj }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
工业厂房平均租金/平方米*
</template>
18100000000
<el-descriptions-item label="工业厂房平均租金(元/平方米*月)">
<el-input v-if="isEditing" v-model.number="form.gycfpjzj" style="width: 100%;"></el-input>
<span v-else>{{ form.gycfpjzj }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
工业厂房平均物业费(/平方米*)
</template>
苏州市
<el-descriptions-item label="工业厂房平均物业费(元/平方米*月)">
<el-input v-if="isEditing" v-model.number="form.gycfpjwyf" style="width: 100%;"></el-input>
<span v-else>{{ form.gycfpjwyf }}</span>
</el-descriptions-item>
</el-descriptions>
</div>
</div>
<!-- 内容区 -->
<div class="content">
<div class="descriptionsdiv">
<div class="spandiv" @click="openDialog"><span>新增企业入驻</span></div>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="address" label="序号" width="200">
</el-table-column>
<el-table-column prop="name" label="企业名称" width="300">
<template slot-scope="scope">
<span style="color: #2B62F1;">{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column prop="number" label="统一社会信用代码" width="300">
</el-table-column>
<el-table-column prop="name" label="所属行业" width="300">
</el-table-column>
<el-table-column prop="data" label='租金价格' width="250">
</el-table-column>
<el-table-column label="操作" width="200" align="center">
<template slot-scope="scope">
<el-button v-if="scope.row.isEditing" size="mini" type="text" icon="el-icon-check" >保存</el-button>
<el-button v-else size="mini" type="text" icon="el-icon-edit" >编辑</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" style="color: #F25353;">删除</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>
</div>
</div>
</div>
<!-- 弹窗 -->
<el-dialog title="企业入驻" :visible.sync="dialogVisible" width="400px" append-to-body>
<el-upload>
<i class="el-icon-upload" style="margin-left: 7rem;"></i>
<div class="el-upload__text" style="margin-left: 7rem;"><em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip" style="margin-top: -1.5rem; margin-left: 9rem;">
<!-- <div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div> -->
<!-- <span>仅允许导入xlsxlsx格式文件</span> -->
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
@click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
props: {
qyrzInfo: {
type: Object,
required: true,
default: () => ({
rzqys: 0,
rzqyhylx: '',
rysl: 0,
rzl: 0,
yczmj: 0,
kzczmj: 0,
gycfpjzj: 0,
gycfpjwyf: 0
})
}
},
data() {
return {
tableData: [
{
date: '2016-05-02',
name: '大众电脑生成制造基地',
number: 123456,
address: ' 1518 弄',
data: '1000',
status: '在建'
},
{
date: '2016-05-04',
name: '大众电脑生成制造基地',
address: ' 1517 弄',
number: 123456,
data: '1500',
status: '拟建'
},
{
date: '2016-05-01',
name: '大众电脑生成制造基地',
address: ' 1519 弄',
number: 123456,
data: '2000',
status: '已建'
},
{
date: '2016-05-03',
name: '大众电脑生成制造基地',
address: ' 1516 弄',
number: 123456,
data: '2500',
status: '在建'
}
],
dialogVisible: false, //
isEditing: false,
form: {
...this.qyrzInfo
},
rules: {
}
};
},
watch: {
qyrzInfo: {
handler(newVal) {
this.form = { ...newVal };
},
immediate: true,
deep: true
}
},
methods: {
openDialog() {
this.dialogVisible = true; //
edit() {
this.isEditing = true;
},
//
save() {
const formData = this.prepareFormData(this.form);
//
this.$emit('update-data', formData);
this.isEditing = false;
},
prepareFormData() {
return {
...this.form,
createBy: '',
createId: 0,
createTime: '',
updateBy: '',
updateId: 0,
updateTime: ''
};
},
handleExport() {
//
}
}
}
};
</script>
<style scoped>
/* 保持原有样式不变 */
.container {
display: flex;
flex-direction: column;
@ -230,37 +179,9 @@ export default {
text-transform: none;
}
.picturediv {
width: 18.31rem;
height: 25.31rem;
background-color: lightblue;
}
.descriptionsdiv {
width: 100%;
margin-left: 1rem;
height: auto;
}
.two-row-item {
height: 20rem;
}
.tagdiv {
padding: 1rem 3em 1rem 1rem;
}
.block {
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 1rem;
}
.spandiv {
padding: 0 0 1rem 0;
color: #0052D9;
font-size: .8rem;
cursor: pointer;
}
</style>

@ -8,10 +8,11 @@
</div>
<div class="topright">
<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="toggleEditAll">
<img src="../../../assets/images/detailsicon/icon-bj@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
编辑
{{ isEditingAll ? '保存' : '编辑' }}
</el-button>
</div>
</div>
@ -20,11 +21,17 @@
<div class="descriptionsdiv">
<div>
<table class="custom-table">
<tr v-for="(row, index) in tableData" :key="index">
<td class="left-column">{{ row.left }}</td>
<td class="right-columns"><span class="label-color">{{ row.label1 }}</span> {{ row.right1 }}</td>
<td class="right-columns"><span class="label-color">{{ row.label2 }}</span> {{ row.right2 }}</td>
<td class="right-columns"><span class="label-color">{{ row.label3 }}</span> {{ row.right3 }}</td>
<tr v-for="(row, rowIndex) in form" :key="rowIndex" style="border: 1px solid #E5E5E5;">
<td class="left-column">{{ row.ysmc }}</td>
<td class="right-columns" v-for="(item, itemIndex) in row.list" :key="itemIndex">
<div v-if="item.isEditing">
<span class="label-color">{{ item.zdname }}</span>
<el-input v-model="item.zdinfor" size="small" style="width: 12rem;"></el-input>
</div>
<div v-else>
<span class="label-color">{{ item.zdname }}</span> {{ item.zdinfor || '无' }}
</div>
</td>
</tr>
</table>
</div>
@ -35,27 +42,52 @@
<script>
export default {
name: "CustomTable",
name: "Models",
props: {
wysmxInfo: {
type: Array,
required: true,
}
},
data() {
return {
tableData: [
{ left: "环保安全", label1: "危险等级:", right1: "7.65", label2: "生产火灾危险等级:", right2: "丙类", label3: "环境保护: ", right3: "无" },
{ left: "设备载重", label1: "设备载重:", right1: "无", label2: "", right2: "", label3: "", right3: "" },
{ left: "垂直交通", label1: "货梯要求:", right1: "原材料质量是否<3吨", label2: "货梯要求:", right2: "1人/15m³", label3: "", right3: "" },
{ left: "减震措施", label1: "加工精度:", right1: "纳米级", label2: "减震措施:", right2: "无", label3: "", right3: "" },
{ left: "工艺需求", label1: "生产类型:", right1: "无", label2: "层高要求:", right2: "无", label3: "", right3: "" },
],
props: {
size: {
type: String,
default: 'mini'
}
},
isEditingAll: false,
form: []
};
},
watch: {
wysmxInfo: {
immediate: true,
handler(newVal) {
this.form = newVal.map(item => ({
ysmc: item.ysmc,
list: item.list.map(subItem => ({
zdname: subItem.zdname,
zdinfor: subItem.zdinfor,
isEditing: false
}))
}));
}
}
},
methods: {
toggleEditAll() {
this.isEditingAll = !this.isEditingAll;
this.form.forEach(row => {
row.list.forEach(item => {
item.isEditing = this.isEditingAll;
});
});
},
saveEdit(rowIndex, itemIndex) {
this.form[rowIndex].list[itemIndex].isEditing = false;
this.$emit('updata-data', this.form);
}
},
created() {
console.log('wysmxInfo 内容:', this.wysmxInfo);
}
};
</script>
<style scoped>
@ -145,7 +177,8 @@ export default {
.right-columns {
border-right: none;
}
.label-color{
.label-color {
color: #808080;
}
</style>

@ -13,12 +13,12 @@
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增
</el-button>
<el-button type="primary" size="medium" plain
<!-- <el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="openDialog('edit')">
<img src="../../../assets/images/detailsicon/icon-bj@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
编辑
</el-button>
</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="导出"
@ -38,7 +38,7 @@
<div class="tagdiv">
<div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="4" border>
<el-descriptions-item v-for="(item, index) in otherInfo" :key="index" :label="item.zdname">
<el-descriptions-item v-for="(item, index) in anotherInfo" :key="index" :label="item.zdname">
{{ item.zdinfor }}
</el-descriptions-item>
</el-descriptions>
@ -64,18 +64,18 @@
</template>
<script>
import { addxmqt, updatexmqt, getOtherInfoByxmid } from '@/api/ManageApi/index';
export default {
props: {
xmId: {
type: Number,
required: true
anotherInfo: {
type: Array,
required: true,
}
},
created() {
console.log('anotherInfo 内容:', this.anotherInfo);
},
data() {
return {
otherInfo: [], //
dialogVisible: false, //
dialogTitle: '', //
form: { //
@ -85,24 +85,7 @@ export default {
isEditMode: false //
};
},
created() {
this.fetchOtherInfo(); //
},
methods: {
//
fetchOtherInfo() {
getOtherInfoByxmid({ xmId: this.xmId }) //
.then(response => {
if (response.code === 200 && response.data) {
this.otherInfo = response.data; // response.data
} else {
console.error("获取其他信息失败:数据为空");
}
})
.catch(error => {
console.error("获取其他信息失败:", error);
});
},
//
openDialog(mode) {
if (mode === 'add') {
@ -112,37 +95,39 @@ export default {
} else if (mode === 'edit') {
this.dialogTitle = '编辑';
this.isEditMode = true;
this.form = { ...this.otherInfo }; //
//
if (this.anotherInfo.length > 0) {
this.form = { ...this.anotherInfo[0] };
} else {
this.form = { zdname: '', zdinfor: '' };
}
}
this.dialogVisible = true;
},
//
prepareFormData(form) {
return {
zdname: form.zdname,
zdinfor: form.zdinfor
};
},
//
submitForm() {
const formData = this.prepareFormData(this.form);
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);
});
//
if (this.anotherInfo.length > 0) {
this.anotherInfo[0] = { ...formData };
this.$message.success('编辑成功');
}
} else {
//
addxmqt({ ...this.form, xmId: this.xmId })
.then(response => {
if (response.code === 200) {
this.$message.success('新增成功');
this.fetchOtherInfo(); //
}
})
.catch(error => {
console.error("新增失败:", error);
});
this.anotherInfo.push({ ...formData }); // zdname zdinfor
this.$message.success('新增成功');
}
//
this.$emit('update-data', formData);
this.dialogVisible = false; //
},
//

@ -115,7 +115,6 @@
</template>
<script>
import { getProgrammeInformationById, updateProgrammeInformation } from '@/api/ManageApi/index';
import FileUpload from '@/components/FileUpload2'
export default {
@ -125,8 +124,8 @@ export default {
type: String,
default: ''
},
xmId: {
type: [Number, String],
planInfo: {
type: Object,
required: true
}
},
@ -161,46 +160,35 @@ export default {
updateTime: null,
},
rules: {
zydmj: [{ required: true, message: '总用地面积不能为空', trigger: 'blur' }],
rjl: [{ required: true, message: '容积率不能为空', trigger: 'blur' }],
zjzmj: [{ required: true, message: '总建筑面积不能为空', trigger: 'blur' }],
bzcjzmj: [{ required: true, message: '标准层建筑面积不能为空', trigger: 'blur' }],
jrjljzmj: [{ required: true, message: '计容积率建筑面积不能为空', trigger: 'blur' }],
jzmd: [{ required: true, message: '建筑密度不能为空', trigger: 'blur' }],
ldl: [{ required: true, message: '绿地率不能为空', trigger: 'blur' }],
jzds: [{ required: true, message: '建筑栋数不能为空', trigger: 'blur' }],
dsjzmj: [{ required: true, message: '地上建筑面积不能为空', trigger: 'blur' }],
dxjzmj: [{ required: true, message: '地下建筑面积不能为空', trigger: 'blur' }],
zgjzcs: [{ required: true, message: '最高建筑层数不能为空', trigger: 'blur' }],
zgjzgd: [{ required: true, message: '最高建筑高度不能为空', trigger: 'blur' }],
jdctcw: [{ required: true, message: '机动车停车位不能为空', trigger: 'blur' }],
fjdctcw: [{ required: true, message: '非机动车停车位不能为空', trigger: 'blur' }],
fhdj: [{ required: true, message: '防火等级不能为空', trigger: 'blur' }],
ghwj: [{ required: true, message: '规划文件不能为空', trigger: 'blur' }]
// zydmj: [{ required: true, message: '', trigger: 'blur' }],
// rjl: [{ required: true, message: '', trigger: 'blur' }],
// zjzmj: [{ required: true, message: '', trigger: 'blur' }],
// bzcjzmj: [{ required: true, message: '', trigger: 'blur' }],
// jrjljzmj: [{ required: true, message: '', trigger: 'blur' }],
// jzmd: [{ required: true, message: '', trigger: 'blur' }],
// ldl: [{ required: true, message: '绿', trigger: 'blur' }],
// jzds: [{ required: true, message: '', trigger: 'blur' }],
// dsjzmj: [{ required: true, message: '', trigger: 'blur' }],
// dxjzmj: [{ required: true, message: '', trigger: 'blur' }],
// zgjzcs: [{ required: true, message: '', trigger: 'blur' }],
// zgjzgd: [{ required: true, message: '', trigger: 'blur' }],
// jdctcw: [{ required: true, message: '', trigger: 'blur' }],
// fjdctcw: [{ required: true, message: '', trigger: 'blur' }],
// fhdj: [{ required: true, message: '', trigger: 'blur' }],
// ghwj: [{ required: true, message: '', trigger: 'blur' }]
}
};
},
created() {
this.fetchData();
watch: {
planInfo: {
handler(newVal) {
this.form = { ...newVal };
},
immediate: true,
deep: true
}
},
methods: {
//
fetchData() {
console.log('Fetching data for xmId:', this.xmId);
getProgrammeInformationById({ xmId: this.xmId })
.then(response => {
console.log('API response:', response);
if (response.code === 200 && response.data) {
this.form = { ...response.data };
console.log('Form data after assignment:', this.form);
} else {
console.error('数据格式不正确:', response);
}
})
.catch(error => {
console.error('数据获取失败:', error);
});
},
//
handleExport() {
this.download('system/post/export', {
@ -215,15 +203,9 @@ export default {
save() {
if (this.validateForm()) {
const formData = this.prepareFormData(this.form);
updateProgrammeInformation(formData)
.then(response => {
this.$message.success('数据保存成功!');
this.isEditing = false;
//
setTimeout(() => {
this.fetchData(); //
}, 500); // 500
})
//
this.$emit('update-data', formData);
this.isEditing = false;
}
},
//

@ -0,0 +1,266 @@
<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;">
<img src="../../../assets/images/detailsicon/icon-bj@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="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
</el-button>
</div>
</div>
<!-- 内容区上方的表格 -->
<div class="tagdiv">
<div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="4" border>
<el-descriptions-item>
<template slot="label">
入驻企业数
</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>
<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>
</div>
</div>
<!-- 内容区 -->
<div class="content">
<div class="descriptionsdiv">
<div class="spandiv" @click="openDialog"><span>新增企业入驻</span></div>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="address" label="序号" width="200">
</el-table-column>
<el-table-column prop="name" label="企业名称" width="300">
<template slot-scope="scope">
<span style="color: #2B62F1;">{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column prop="number" label="统一社会信用代码" width="300">
</el-table-column>
<el-table-column prop="name" label="所属行业" width="300">
</el-table-column>
<el-table-column prop="data" label='租金价格' width="250">
</el-table-column>
<el-table-column label="操作" width="200" align="center">
<template slot-scope="scope">
<el-button v-if="scope.row.isEditing" size="mini" type="text" icon="el-icon-check" >保存</el-button>
<el-button v-else size="mini" type="text" icon="el-icon-edit" >编辑</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" style="color: #F25353;">删除</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>
</div>
</div>
</div>
<!-- 弹窗 -->
<el-dialog title="企业入驻" :visible.sync="dialogVisible" width="400px" append-to-body>
<el-upload>
<i class="el-icon-upload" style="margin-left: 7rem;"></i>
<div class="el-upload__text" style="margin-left: 7rem;"><em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip" style="margin-top: -1.5rem; margin-left: 9rem;">
<!-- <div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div> -->
<!-- <span>仅允许导入xlsxlsx格式文件</span> -->
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
@click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [
{
date: '2016-05-02',
name: '大众电脑生成制造基地',
number: 123456,
address: ' 1518 弄',
data: '1000',
status: '在建'
},
{
date: '2016-05-04',
name: '大众电脑生成制造基地',
address: ' 1517 弄',
number: 123456,
data: '1500',
status: '拟建'
},
{
date: '2016-05-01',
name: '大众电脑生成制造基地',
address: ' 1519 弄',
number: 123456,
data: '2000',
status: '已建'
},
{
date: '2016-05-03',
name: '大众电脑生成制造基地',
address: ' 1516 弄',
number: 123456,
data: '2500',
status: '在建'
}
],
dialogVisible: false, //
}
},
methods: {
openDialog() {
this.dialogVisible = true; //
}
}
}
</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;
}
.content {
padding: 1rem;
display: flex;
}
.containertop {
height: auto;
display: flex;
justify-content: space-between;
padding: .7rem 0;
padding: .5rem;
border-bottom: 1px solid #E5E5E5;
}
.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;
}
.picturediv {
width: 18.31rem;
height: 25.31rem;
background-color: lightblue;
}
.descriptionsdiv {
width: 100%;
margin-left: 1rem;
height: auto;
}
.two-row-item {
height: 20rem;
}
.tagdiv {
padding: 1rem 3em 1rem 1rem;
}
.block {
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 1rem;
}
.spandiv {
padding: 0 0 1rem 0;
color: #0052D9;
font-size: .8rem;
cursor: pointer;
}
</style>

@ -1,197 +0,0 @@
<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="toggleEdit">
<img src="../../../assets/images/detailsicon/icon-bj@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
{{ editMode ? '保存' : '编辑' }}
</el-button>
</div>
</div>
<!-- 内容区上方的表格 -->
<div class="tagdiv">
<div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="4" border>
<el-descriptions-item>
<template slot="label">
入驻企业数
</template>
<el-input v-model="currentCompany.rzqys" v-if="editMode"></el-input>
<span v-else>{{ currentCompany.rzqys }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
入驻企业行业类型
</template>
<el-input v-model="currentCompany.rzqyhylx" v-if="editMode"></el-input>
<span v-else>{{ currentCompany.rzqyhylx }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
人员数量
</template>
<el-input v-model="currentCompany.rysl" v-if="editMode"></el-input>
<span v-else>{{ currentCompany.rysl }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
入住率%
</template>
<el-input v-model="currentCompany.rzl" v-if="editMode"></el-input>
<span v-else>{{ currentCompany.rzl }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
已出租面积平方米
</template>
<el-input v-model="currentCompany.yczmj" v-if="editMode"></el-input>
<span v-else>{{ currentCompany.yczmj }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
空置出租面积平方米
</template>
<el-input v-model="currentCompany.kzczmj" v-if="editMode"></el-input>
<span v-else>{{ currentCompany.kzczmj }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
工业厂房平均租金/平方米*
</template>
<el-input v-model="currentCompany.gycfpjzj" v-if="editMode"></el-input>
<span v-else>{{ currentCompany.gycfpjzj }}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
工业厂房平均物业费(/平方米*)
</template>
<el-input v-model="currentCompany.gycfpjwyf" v-if="editMode"></el-input>
<span v-else>{{ currentCompany.gycfpjwyf }}</span>
</el-descriptions-item>
</el-descriptions>
</div>
</div>
</div>
</template>
<script>
import { updateqyrz, getqyrzById } from '@/api/ManageApi/index';
export default {
data() {
return {
editMode: false, //
currentCompany: {
rzqys: 0, //
rzqyhylx: '', //
rysl: 0, //
rzl: 0, //
yczmj: 0, //
kzczmj: 0, //
gycfpjzj: 0, //
gycfpjwyf: 0, //
},
};
},
mounted() {
this.fetchCompanyData(); //
},
methods: {
//
toggleEdit() {
if (this.editMode) {
this.saveData(); //
}
this.editMode = !this.editMode; //
},
//
async fetchCompanyData() {
try {
const response = await getqyrzById(this.$route.params.id);
this.currentCompany = response.data; //
} catch (error) {
console.error('获取企业入驻信息失败:', error);
this.$message.error('获取企业入驻信息失败');
}
},
//
async saveData() {
try {
const response = await updateqyrz(this.currentCompany);
if (response.success) {
this.$message.success('保存成功');
} else {
this.$message.error('保存失败');
}
} catch (error) {
console.error('保存失败:', error);
this.$message.error('保存失败');
}
}
}
};
</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;
}
.containertop {
height: auto;
display: flex;
justify-content: space-between;
padding: .7rem 0;
padding: .5rem;
border-bottom: 1px solid #E5E5E5;
}
.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;
}
.descriptionsdiv {
width: 100%;
margin-left: 1rem;
height: auto;
}
.tagdiv {
padding: 1rem 3em 1rem 1rem;
}
</style>

@ -1,337 +0,0 @@
<template>
<div class="L-assets-info">
<div class="assets-info-top">
<el-row style="margin: 10px 0;">
<span class="top-title-box">基本信息</span>
</el-row>
<div class="assets-info-box">
<el-form :model="form" :rules="rules" ref="form" label-width="170px" class="demo-ruleForm" label-position="right" :disabled="disabled">
<el-row>
<el-col :span="12">
<el-form-item label="项目名称" prop="name">
<el-input v-model="form.name" placeholder="请输入项目名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="建设地点" prop="jsdd">
<el-input v-model="form.jsdd" placeholder="请输入建设地点"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="项目法人单位" prop="xmfrdwxz">
<el-input v-model="form.xmfrdwxz" placeholder="请输入项目法人单位"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="重点发展产业" prop="prioritize">
<el-input v-model="form.prioritize" placeholder="请输入重点发展产业"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="项目法人单位性质" prop="nature">
<el-select v-model="form.nature" placeholder="请选择项目法人单位性质" style="width: 22.5rem;">
<el-option label="国企" value="国企"></el-option>
<el-option label="民企" value="民企"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="建设模式" prop="jsms">
<el-select v-model="form.jsms" placeholder="请选择建设模式" style="width: 22.5rem;">
<el-option label="新供地实施" value="新供地实施"></el-option>
<el-option label="其他模式" value="其他模式"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="施工单位" prop="sgdw">
<el-input v-model="form.sgdw" placeholder="请输入施工单位"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目标签" prop="label">
<el-input v-model="form.label" placeholder="请输入项目标签"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="设计单位" prop="sjdw">
<el-input v-model="form.sjdw" placeholder="请输入设计单位"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目负责人" prop="projectLeader">
<el-input v-model="form.projectLeader" placeholder="请输入项目负责人"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="总投资额(万元)" prop="ztze">
<el-input v-model.number="form.ztze" placeholder="请输入总投资额"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系方式" prop="phone">
<el-input v-model="form.phone" placeholder="请输入联系方式"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="所属功能区" prop="ssgnq">
<el-select v-model="form.ssgnq" placeholder="请选择所属功能区" value-key="value" style="width: 22.5rem;">
<el-option v-for="dict in dict.type.ssgnq" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="施工许可证发放时间" prop="issuingTime">
<el-input v-model="form.issuingTime" placeholder="请输入施工许可证发放时间"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="建设起止时间" prop="begainTime">
<el-date-picker v-model="form.begainTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" style="width: 22.5rem;"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="竣工验收时间" prop="acceptanceTime">
<el-input v-model="form.acceptanceTime" placeholder="请输入竣工验收时间"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="现状分类" prop="xzfl">
<el-select v-model="form.xzfl" placeholder="请选择现状分类" style="width: 22.5rem;">
<el-option label="已建" value="已建"></el-option>
<el-option label="在建" value="在建"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="建设进度" prop="constructionProgress">
<el-input v-model="form.constructionProgress" placeholder="请输入建设进度"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="项目法人单位简介" prop="unitIntroduction">
<el-input v-model="form.unitIntroduction" type="textarea" resize="none" placeholder="请输入项目法人单位简介" :rows="5"></el-input>
</el-form-item>
<el-form-item label="项目简介" prop="introduction">
<el-input v-model="form.introduction" type="textarea" resize="none" placeholder="请输入项目简介" :rows="5"></el-input>
</el-form-item>
<el-form-item label="项目代表性照片">
<ImageUpload @update-fj="updateFj" />
<el-dialog :visible.sync="dialogVisibletwo">
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
</el-form-item>
<el-row style="margin: 10px 0 ;padding-bottom: 50px; text-align: center;" v-if="pageType !== 'look'">
<el-button type="danger" @click="sendBack"></el-button>
<el-button type="primary" @click="newAssets" :loading="loading">保存</el-button>
</el-row>
</el-form>
<el-row style="margin: 10px 0 ;padding-bottom: 50px; text-align: center;" v-if="pageType == 'look'">
<el-button type="primary" @click="sendBack"></el-button>
</el-row>
</div>
</div>
</div>
</template>
<script>
import { getBasicInformationById, updateBasicInformation, createBasicInformation } from '@/api/ManageApi/index';
import ImageUpload from '@/components/ImageUpload';
export default {
dicts: ['ssgnq'],
props: ['pageType', 'id', 'queryData'],
data() {
return {
form: {
name: '',
xmfrdwxz: '',
nature: '',
sgdw: '',
sjdw: '',
ztze: 0,
ssgnq: '',
begainTime: '',
xzfl: '',
jsdd: '',
prioritize: '',
jsms: '',
label: '',
projectLeader: '',
phone: '',
issuingTime: '',
acceptanceTime: '',
unitIntroduction: '',
introduction: '',
fj: ''
},
rules: {
name: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
jsdd: [{ required: true, message: '建设地点不能为空', trigger: 'blur' }],
xmfrdwxz: [{ required: true, message: '项目法人单位不能为空', trigger: 'blur' }],
prioritize: [{ required: true, message: '重点发展产业不能为空', trigger: 'blur' }],
nature: [{ required: true, message: '项目法人单位性质不能为空', trigger: 'change' }],
jsms: [{ required: true, message: '建设模式不能为空', trigger: 'change' }],
sgdw: [{ required: true, message: '施工单位不能为空', trigger: 'blur' }],
label: [{ required: true, message: '项目标签不能为空', trigger: 'blur' }],
sjdw: [{ required: true, message: '设计单位不能为空', trigger: 'blur' }],
projectLeader: [{ required: true, message: '项目负责人不能为空', trigger: 'blur' }],
ztze: [{ required: true, message: '总投资额不能为空', trigger: 'blur' }],
ssgnq: [{ required: true, message: '所属功能区不能为空', trigger: 'change' }],
begainTime: [{ required: true, message: '建设起止时间不能为空', trigger: 'change' }],
xzfl: [{ required: true, message: '现状分类不能为空', trigger: 'change' }],
constructionProgress: [{ required: true, message: '建设进度不能为空', trigger: 'blur' }],
unitIntroduction: [{ required: true, message: '项目法人单位简介不能为空', trigger: 'blur' }],
introduction: [{ required: true, message: '项目简介不能为空', trigger: 'blur' }]
},
loading: false,
disabled: false,
dialogImageUrl: '',
dialogVisibletwo: false
};
},
mounted() {
if (this.pageType === 'look') {
this.getInfo(this.id);
this.disabled = true;
} else if (this.pageType === 'change') {
this.getInfo(this.id);
this.disabled = false;
}
},
methods: {
getInfo(id) {
getBasicInformationById(id)
.then(response => {
this.form = response.data;
});
},
//
newAssets() {
this.$refs['form'].validate((valid) => {
if (valid) {
this.loading = true;
const formData = this.prepareFormData();
if (this.pageType === 'change') {
updateBasicInformation(formData)
.then(response => {
this.loading = false;
this.$message.success('修改成功');
this.$router.push({ name: 'ProjectDetails', params: this.queryData });
});
} else {
createBasicInformation(formData)
.then(response => {
this.loading = false;
this.$message.success('新增成功');
this.$router.push({ name: 'ProjectDetails', params: this.queryData });
});
}
} else {
this.$message.warning('请填写完整信息!');
}
});
},
sendBack() {
this.$router.push({ name: 'ProjectDetails', params: this.queryData });
},
prepareFormData() {
return {
id: this.id,
name: this.form.name,
xmfrdwxz: this.form.xmfrdwxz,
nature: this.form.nature,
sgdw: this.form.sgdw,
sjdw: this.form.sjdw,
ztze: parseFloat(this.form.ztze),
ssgnq: parseInt(this.form.ssgnq),
begainTime: this.formatDateRange(this.form.begainTime),
xzfl: this.form.xzfl,
jsdd: this.form.jsdd,
prioritize: this.form.prioritize,
jsms: this.form.jsms,
label: this.form.label,
projectLeader: this.form.projectLeader,
phone: this.form.phone,
issuingTime: this.form.issuingTime,
acceptanceTime: this.form.acceptanceTime,
unitIntroduction: this.form.unitIntroduction,
introduction: this.form.introduction,
fj: this.form.fj,
createBy: '',
createId: 0,
createTime: '',
updateBy: '',
updateId: 0,
updateTime: ''
};
},
formatDateRange(dateRange) {
if (!dateRange || dateRange.length !== 2) return '';
const startDate = dateRange[0].toISOString().split('T')[0];
const endDate = dateRange[1].toISOString().split('T')[0];
return `${startDate}${endDate}`;
},
updateFj(url) {
this.form.fj = url;
}
}
};
</script>
<style scoped>
.L-assets-info {
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;
}
.assets-info-top {
height: auto;
display: flex;
justify-content: space-between;
padding: .7rem 0;
padding: .5rem;
border-bottom: 1px solid #E5E5E5;
}
.top-title-box {
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;
}
.assets-info-box {
padding: 1rem;
}
.demo-ruleForm {
width: 100%;
}
</style>

@ -0,0 +1,289 @@
<template>
<div>
<!-- 企业端页面 -->
<!-- 表单查询项 -->
<div class="headerbox">
<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>
</el-col>
<el-col :span="9">
<el-form-item label="项目建设起止时间" prop="">
<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.dateRange"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select v-model="queryParams.postCode" 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-col>
<el-col :span="5">
<el-form-item label="项目法人单位">
<el-input v-model="queryParams.xmfrdwxz" placeholder="请输入项目法人单位" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<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-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<!-- 标签行 -->
<div class="tablehead">
<div class="headtitle"><span>项目清单</span></div>
</div>
<!-- 导入弹窗 -->
<el-dialog title="导入" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="upload.open = false">取消</el-button>
<el-button type="primary" @click="submitFileForm" :loading="upload.isUploading">确定</el-button>
</span>
</el-dialog>
<!-- 导出行 -->
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-upload2" size="medium"
@click="handleExport">导出</el-button>
</el-col>
</el-row>
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" stripe>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="项目名称" align="center" prop="name" width="200" />
<el-table-column label="现状分类" align="center" prop="xzfl" />
<el-table-column label="项目法人单位" align="center" prop="xmfrdwxz" width="200" />
<el-table-column label="项目建设起止时间" align="center" width="200">
<template slot-scope="scope">
{{ scope.row.begainTime }} {{ scope.row.endTime }}
</template>
</el-table-column>
<el-table-column label="总投资额(万元)" align="center" width="130" prop="ztze" />
<el-table-column label="总用地面积(平方米)" align="center" prop="zydmj" />
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<span :style="{ color: statusColors[scope.row.status] }">{{ scope.row.status }}</span>
</template>
</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)"></el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)"
style="color: #F25353;">删除</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" />
</div>
</div>
</template>
<script>
import { getBasicInformationPage } from "@/api/ManageApi/index";
import { getToken } from "@/utils/auth";
import { checkPermi, checkRole } from "@/utils/permission";
export default {
name: "Post",
dicts: ["xzfl"],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
statusColors: {
'审核通过': '#6EDABE',
'待填报': '#FFBF6B',
'待审核': '#7693D8'
},
//
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
postName: undefined,
xmfrdwxz: undefined,
dateRange: [],
status: undefined
},
//
upload: {
open: false, //
isUploading: false, //
updateSupport: 0, //
headers: { Authorization: "Bearer " + getToken() }, //
url: process.env.VUE_APP_BASE_API + "/gysl/basicInformation/import", //
},
};
},
created() {
this.getList();
},
methods: {
checkPermi,
checkRole,
/** 查询项目列表 */
getList() {
this.loading = true;
getBasicInformationPage(this.queryParams).then((response) => {
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
});
},
/** 导入按钮操作 */
handleImport() {
this.upload.open = true;
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
this.getList();
},
//
submitFileForm() {
this.$refs.upload.submit();
},
/** 导出按钮操作 */
handleExport() {
this.download(
"/gysl/basicInformation/exportInfo",
{
...this.queryParams,
},
`项目列表${new Date().getTime()}.xlsx`
);
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除项目id为"' + ids + '"的数据项?')
.then(() => {
return delBasicInformation(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => { });
},
/** 详情按钮操作 */
getInfo(row) {
this.$store.commit("SET_CRUMBS", this.$route.meta.title + "详情");
const id = row.id || this.ids[0];
this.$router.push({ path: `/manage-info/${id}` });
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
},
};
</script>
<style scoped>
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
}
.headbtn {
display: flex;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
}
</style>

@ -0,0 +1,308 @@
<template>
<div>
<!-- 政务端页面 -->
<!-- 表单查询项 -->
<div class="headerbox">
<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>
</el-col>
<el-col :span="9">
<el-form-item label="项目建设起止时间" prop="">
<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.dateRange"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select v-model="queryParams.postCode" 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-col>
<el-col :span="5">
<el-form-item label="项目法人单位">
<el-input v-model="queryParams.xmfrdwxz" placeholder="请输入项目法人单位" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<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-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<!-- 标签行 -->
<div class="tablehead">
<div class="headtitle"><span>项目清单</span></div>
<div class="headbtn">
<el-button type="primary" icon="el-icon-download" @click="importTemplate"></el-button>
<el-button type="primary" size="mini" @click="handleImport"></el-button> <!-- 导入按钮 -->
</div>
</div>
<!-- 导入弹窗 -->
<el-dialog title="导入" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="upload.open = false">取消</el-button>
<el-button type="primary" @click="submitFileForm" :loading="upload.isUploading">确定</el-button>
</span>
</el-dialog>
<!-- 导出行 -->
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-upload2" size="medium" @click="handleExport"></el-button>
</el-col>
<el-col :span="1.5">
<el-dropdown @command="">
<el-button type="primary" size="medium">
导出材料<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="single-material">单片材料</el-dropdown-item>
<el-dropdown-item command="report">报告</el-dropdown-item>
<el-dropdown-item command="project-manual">项目手册</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-col>
</el-row>
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" stripe>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="项目名称" align="center" prop="name" width="200" />
<el-table-column label="现状分类" align="center" prop="xzfl" />
<el-table-column label="项目法人单位" align="center" prop="xmfrdwxz" width="200" />
<el-table-column label="项目建设起止时间" align="center" width="200">
<template slot-scope="scope">
{{ scope.row.begainTime }} {{ scope.row.endTime }}
</template>
</el-table-column>
<el-table-column label="总投资额(万元)" align="center" width="130" prop="ztze" />
<el-table-column label="总用地面积(平方米)" align="center" prop="totalLandArea" />
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<span :style="{ color: statusColors[scope.row.status] }">{{ scope.row.status }}</span>
</template>
</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)"></el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)" style="color: #F25353;">删除</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" />
</div>
</div>
</template>
<script>
import { getBasicInformationPage } from "@/api/ManageApi/index";
import { getToken } from "@/utils/auth";
import { checkPermi, checkRole } from "@/utils/permission";
export default {
name: "Post",
dicts: ["xzfl"],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
statusColors: {
'审核通过': '#6EDABE',
'待填报': '#FFBF6B',
'待审核': '#7693D8'
},
//
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
postName: undefined,
xmfrdwxz: undefined,
dateRange: [],
status: undefined
},
//
upload: {
open: false, //
isUploading: false, //
updateSupport: 0, //
headers: { Authorization: "Bearer " + getToken() }, //
url: process.env.VUE_APP_BASE_API + "/gysl/basicInformation/import", //
},
};
},
created() {
this.getList();
},
methods: {
checkPermi,
checkRole,
/** 查询项目列表 */
getList() {
this.loading = true;
getBasicInformationPage(this.queryParams).then((response) => {
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
});
},
/** 导入按钮操作 */
handleImport() {
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
this.download(
"/gysl/basicInformation/importTemplate",
{},
`项目导入模板${new Date().getTime()}.xlsx`
);
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
this.getList();
},
//
submitFileForm() {
this.$refs.upload.submit();
},
/** 导出按钮操作 */
handleExport() {
this.download(
"/gysl/basicInformation/exportInfo",
{
...this.queryParams,
},
`项目列表${new Date().getTime()}.xlsx`
);
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除项目id为"' + ids + '"的数据项?')
.then(() => {
return delBasicInformation(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => { });
},
/** 详情按钮操作 */
getInfo(row) {
this.$store.commit("SET_CRUMBS", this.$route.meta.title + "详情");
const id = row.id || this.ids[0];
this.$router.push({ path: `/manage-info/${id}` });
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
},
};
</script>
<style scoped>
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
}
.headbtn {
display: flex;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
}
</style>

@ -9,7 +9,8 @@
</el-button>
</div>
<div style="display: flex;justify-content: center;">
<el-button type="primary" v-if="isSubmitted" disabled>已提交</el-button></div>
<el-button type="primary" v-if="isSubmitted" disabled>已提交</el-button>
</div>
<div class="containerbody" v-if="isContainerVisible">
<!-- 目录 -->
<div class="containerhead">
@ -23,56 +24,61 @@
</div>
<!-- 基本信息 -->
<div id="basic">
<Basic :id="projectId"></Basic>
<Basic :basicInfo="basicInformation" @update-data="handleDataUpdate('basicInformation', $event)">
</Basic>
</div>
<!-- 规划信息 -->
<div id="programme">
<Programme :xmId="projectId"></Programme>
<Programme :planInfo="planInformation" @update-data="handleDataUpdate('planInformation', $event)">
</Programme>
</div>
<!-- 建筑信息 -->
<div id="buildings">
<Buildings :xmId="projectId"></Buildings>
<!-- <Buildings :buildingInfo="buildingInformation"></Buildings> -->
</div>
<!-- 要素模型信息 -->
<div id="models">
<Models></Models>
<Models :wysmxInfo="wysmxInformations" @updata-data="handleDataUpdate('wysmxInformations', $event)">
</Models>
</div>
<!-- 月度进展信息 -->
<div id="months">
<Months></Months>
<!-- <Months></Months> -->
</div>
<!-- 企业入驻信息 -->
<div id="companyenter">
<Companyenter></Companyenter>
<Companyenter :qyrzInfo="qyrzInformation" @update-data="handleDataUpdate('qyrzInformation', $event)">
</Companyenter>
</div>
<!-- 项目画像 -->
<div id="projectpicture">
<Projectpicture></Projectpicture>
<!-- <Projectpicture></Projectpicture> -->
</div>
<!-- 项目图例 -->
<div id="projectpicturetwo">
<Projectpicturetwo :id="projectId"></Projectpicturetwo>
<!-- <Projectpicturetwo :id="projectId"></Projectpicturetwo> -->
</div>
<!-- 项目巡礼 -->
<div id="projectgift">
<Projectgift></Projectgift>
<!-- <Projectgift></Projectgift> -->
</div>
<!-- 现场实况 -->
<div id="liver">
<Liver></Liver>
<!-- <Liver></Liver> -->
</div>
<!-- 项目备忘录 -->
<div id="memo">
<Memo :xmId="projectId"></Memo>
<!-- <Memo :xmId="projectId"></Memo> -->
</div>
<!-- 其他信息 -->
<div class="bottombox" id="others">
<Others :xmId="projectId"></Others>
<Others :anotherInfo="projectOtherInfos" @update-data="handleDataUpdate('projectOtherInfos', $event)">
</Others>
</div>
<div class="footer">
<el-button type="primary" v-if="checkRole(['admin','common']) && !isSubmitted"></el-button>
<el-button type="primary" v-if="checkRole(['admin','company']) && !isSubmitted" @click="submitReview"></el-button>
<el-button type="primary" v-if="checkRole(['admin', 'common']) && !isSubmitted"></el-button>
<el-button type="primary" v-if="checkRole(['admin', 'company']) && !isSubmitted"
@click="submitAll">提交审核</el-button>
</div>
</div>
<!-- 返回顶部按钮 -->
@ -81,20 +87,21 @@
</template>
<script>
import Title from '../components/ProjectDetails/Title.vue';
import Basic from '../components/ProjectDetails/Basic.vue';
import Buildings from '../components/ProjectDetails/Buildings.vue';
import Companyenter from '../components/ProjectDetails/Companyenter.vue';
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 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 Title from '@/views/components/ProjectDetails/Title.vue';
import Basic from '@/views/components/ProjectDetails/Basic.vue';
import Buildings from '@/views/components/ProjectDetails/Buildings.vue';
import Companyenter from '@/views/components/ProjectDetails/Companyenter.vue';
import Liver from '@/views/components/ProjectDetails/Liver.vue';
import Memo from '@/views/components/ProjectDetails/Memo.vue';
import Models from '@/views/components/ProjectDetails/Models.vue';
import Months from '@/views/components/ProjectDetails/Months.vue';
import Programme from '@/views/components/ProjectDetails/Programme.vue';
import Projectgift from '@/views/components/ProjectDetails/Projectgift.vue';
import Projectpicture from '@/views/components/ProjectDetails/Projectpicture.vue';
import Projectpicturetwo from '@/views/components/ProjectDetails/Projectpicturetwo.vue';
import Others from '@/views/components/ProjectDetails/Others.vue';
import { checkPermi, checkRole } from "@/utils/permission"; //
import { getBasicInformationById } from '@/api/ManageApi/index';
export default {
components: {
@ -110,7 +117,7 @@ export default {
Projectgift,
Projectpicture,
Projectpicturetwo,
Others
Others,
},
data() {
return {
@ -131,24 +138,34 @@ export default {
],
projectId: null,
isContainerVisible: true, // containerbody
isSubmitted: false //
isSubmitted: false, //
basicInformation: {},
planInformation: {},
projectOtherInfos: [],
wysmxInformations: [],
qyrzInformation: {},
};
},
created() {
// projectId
this.projectId = Number(this.$route.params.id); // projectId
this.projectId = Number(this.$route.params.id);
this.loadData();
},
methods: {
checkPermi,
checkRole,
loadData() {
// projectId
console.log('Loading data for project ID:', this.projectId);
// API
// getProjectDetail(this.projectId).then(response => {
// this.projectDetail = response.data;
// });
getBasicInformationById(this.projectId).then(response => {
const data = response.data;
this.basicInformation = data.basicInformation;
this.planInformation = data.planInformation;
this.buildingInformation = data.buildingInformation;
this.projectOtherInfos = data.projectOtherInfos;
this.wysmxInformations = data.wysmxResponses;
this.qyrzInformation = data.qyrzInformation;
console.log(data);
});
},
scrollToSection(id) {
this.activeSection = id;
@ -166,30 +183,38 @@ export default {
goBack() {
this.$router.go(-1); //
},
submitReview() {
this.$confirm('确定要提交审核吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
//
console.log('提交审核');
// containerbody
this.isContainerVisible = false;
//
this.isSubmitted = true;
// API
// submitReviewApi(this.projectId).then(response => {
// console.log('', response);
// }).catch(error => {
// console.error('', error);
// });
}).catch(() => {
this.$message({
type: 'info',
message: '已取消提交'
});
});
//
handleDataUpdate(dataKey, updatedData) {
if (dataKey === 'projectOtherInfos' || dataKey === 'wysmxInformations') {
// updatedData
if (Array.isArray(updatedData)) {
this[dataKey] = updatedData;
} else {
// updatedData
this[dataKey].push(updatedData);
}
} else {
this[dataKey] = updatedData;
}
console.log(`接收到 ${dataKey} 更新:`, updatedData);
},
//
submitAll() {
const submitData = {
basicInformation: this.basicInformation,
planInformation: this.planInformation,
projectOtherInfos: this.projectOtherInfos,
wysmxInformations: this.wysmxInformations,
qyrzInformation: this.qyrzInformation
// ...
};
console.log('提交的数据:', submitData);
this.$message.success('数据已打印到控制台');
// containerbody
this.isContainerVisible = false;
//
this.isSubmitted = true;
}
}
};

@ -1,300 +1,26 @@
<template>
<div>
<!-- 表单查询项 -->
<div class="headerbox">
<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>
</el-col>
<el-col :span="9">
<el-form-item label="项目建设起止时间" prop="">
<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.dateRange"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select v-model="queryParams.postCode" 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-col>
<el-col :span="5">
<el-form-item label="项目法人单位">
<el-input v-model="queryParams.xmfrdwxz" placeholder="请输入项目法人单位" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<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-form-item>
</el-col>
</el-row>
</el-form>
<!-- 企业端 -->
<div v-if="checkRole(['admin', 'company'])">
<qiyeduan />
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<!-- 标签行 -->
<div class="tablehead">
<div class="headtitle"><span>项目清单</span></div>
<div class="headbtn">
<el-button type="primary" icon="el-icon-download" @click="importTemplate"></el-button>
<el-button type="primary" size="mini" @click="handleImport"></el-button> <!-- 导入按钮 -->
</div>
</div>
<!-- 导入弹窗 -->
<el-dialog title="导入" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="upload.open = false">取消</el-button>
<el-button type="primary" @click="submitFileForm" :loading="upload.isUploading">确定</el-button>
</span>
</el-dialog>
<!-- 导出行 -->
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-upload2" size="medium" @click="handleExport"></el-button>
</el-col>
<el-col :span="1.5">
<el-dropdown @command="handleExportCommand">
<el-button type="primary" size="medium">
导出材料<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="single-material">单片材料</el-dropdown-item>
<el-dropdown-item command="report">报告</el-dropdown-item>
<el-dropdown-item command="project-manual">项目手册</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-col>
</el-row>
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" stripe>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="项目名称" align="center" prop="name" width="200" />
<el-table-column label="现状分类" align="center" prop="xzfl" />
<el-table-column label="项目法人单位" align="center" prop="xmfrdwxz" width="200" />
<el-table-column label="项目建设起止时间" align="center" width="200">
<template slot-scope="scope">
{{ scope.row.begainTime }} {{ scope.row.endTime }}
</template>
</el-table-column>
<el-table-column label="总投资额(万元)" align="center" width="130" prop="ztze" />
<el-table-column label="总用地面积(平方米)" align="center" prop="totalLandArea" />
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<span :style="{ color: statusColors[scope.row.status] }">{{ scope.row.status }}</span>
</template>
</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)"></el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)" style="color: #F25353;">删除</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" />
<!-- 政务端 -->
<div v-if="checkRole(['admin', 'common'])">
<zhengwuduan />
</div>
</div>
</template>
<script>
import { getBasicInformationPage } from "@/api/ManageApi/index";
import { getToken } from "@/utils/auth";
import qiyeduan from '@/views/components/qiyexinxi/qiyexinxi.vue'
import zhengwuduan from '@/views/components/zhengwuxinxi/zhengwuxinxi.vue'
import { checkPermi, checkRole } from "@/utils/permission"; //
export default {
name: "Post",
dicts: ["xzfl"],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
statusColors: {
'审核通过': '#6EDABE',
'待填报': '#FFBF6B',
'待审核': '#7693D8'
},
//
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
postName: undefined,
xmfrdwxz: undefined,
dateRange: [],
status: undefined
},
//
upload: {
open: false, //
isUploading: false, //
updateSupport: 0, //
headers: { Authorization: "Bearer " + getToken() }, //
url: process.env.VUE_APP_BASE_API + "/gysl/basicInformation/import", //
},
};
},
created() {
this.getList();
},
components: { qiyeduan, zhengwuduan },
methods: {
/** 查询项目列表 */
getList() {
this.loading = true;
getBasicInformationPage(this.queryParams).then((response) => {
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
});
},
/** 导入按钮操作 */
handleImport() {
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
this.download(
"/gysl/basicInformation/importTemplate",
{},
`项目导入模板${new Date().getTime()}.xlsx`
);
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
this.getList();
},
//
submitFileForm() {
this.$refs.upload.submit();
},
/** 导出按钮操作 */
handleExport() {
this.download(
"/gysl/basicInformation/exportInfo",
{
...this.queryParams,
},
`项目列表${new Date().getTime()}.xlsx`
);
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除项目id为"' + ids + '"的数据项?')
.then(() => {
return delBasicInformation(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => { });
},
/** 详情按钮操作 */
getInfo(row) {
this.$store.commit("SET_CRUMBS", this.$route.meta.title + "详情");
const id = row.id || this.ids[0];
this.$router.push({ path: `/manage-info/${id}` });
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
},
};
</script>
<style scoped>
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
checkPermi,
checkRole
}
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
}
.headbtn {
display: flex;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
}
</style>
</script>

@ -37,7 +37,7 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: `http://192.168.0.111:7071/`,
target: `192.168.0.111:7071`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''

Loading…
Cancel
Save