main
严飞永 4 weeks ago
parent 568ce5118e
commit 22eaa5ba54

@ -1,3 +0,0 @@
<template>
<div>1234</div>
</template>

@ -145,7 +145,7 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="建设起止时间">
<el-form-item label="建设起止时间" required>
<el-date-picker v-model="form.begainTime" type="month" value-format="yyyy-MM" placeholder="开始日期"
style="width: 11rem;"></el-date-picker>
~
@ -319,7 +319,15 @@ export default {
],
introduction: [
{ max: 1000, message: '项目简介长度不能超过1000个字', trigger: 'blur' }
]
],
tyshxydm: [
{ required: true, message: "请填写", trigger: "blur" },
{
pattern: /^[a-zA-Z0-9]{18}$/,
message: "请输入正确格式的18位统一社会信用代码",
trigger: "blur",
},
],
},
// select
ssgnqMap: {

@ -440,24 +440,31 @@ export default {
this.selectedBuilding = building; // 使building
},
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.$refs.buildingFormRef.validate((valid) => {
if (valid) {
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 ? '更新失败' : '新增失败');
});
} else {
this.$message.error('请填写完整的楼栋信息');
return false;
}
});
},
handleDelete(id) {
console.log('Deleting building with ID:', id); //

@ -26,36 +26,35 @@
<div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="4" border>
<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>
<span>{{ tableData.length }}</span>
</el-descriptions-item>
<el-descriptions-item label="入驻企业行业类型">
<el-input v-if="isEditing" v-model="form.rzqyhylx" style="width: 100%;"></el-input>
<span v-else>{{ form.rzqyhylx }}</span>
<span v-else>{{ form.rzqyhylx || "" }}</span>
</el-descriptions-item>
<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>
<span v-else>{{ form.rysl || "" }}</span>
</el-descriptions-item>
<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>
<span v-else>{{ form.rzl || "" }}</span>
</el-descriptions-item>
<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>
<span v-else>{{ form.yczmj || "" }}</span>
</el-descriptions-item>
<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>
<span v-else>{{ form.kzczmj || "" }}</span>
</el-descriptions-item>
<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>
<span v-else>{{ form.gycfpjzj || "" }}</span>
</el-descriptions-item>
<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>
<span v-else>{{ form.gycfpjwyf || "" }}</span>
</el-descriptions-item>
</el-descriptions>
<div class="btnarea" v-if="action === 'fill' || !action || action === 'okay'">
@ -104,14 +103,9 @@
</el-table-column>
</el-table>
<div class="block">
<el-pagination
:current-page="pagination.currentPage"
:page-sizes="[10, 20, 50, 100]"
:page-size="pagination.pageSize"
layout="total, prev, pager, next, jumper"
:total="pagination.total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange">
<el-pagination :current-page="pagination.currentPage" :page-sizes="[10, 20, 50, 100]"
:page-size="pagination.pageSize" layout="total, prev, pager, next, jumper" :total="pagination.total"
@current-change="handleCurrentChange" @size-change="handleSizeChange">
</el-pagination>
</div>
</div>
@ -198,7 +192,7 @@ export default {
};
},
created() {
console.log('xmId:', this.xmId);
console.log('xmId:', this.xmId);
this.fetchTableData();
},
watch: {
@ -218,7 +212,7 @@ export default {
current: this.pagination.currentPage,
size: this.pagination.pageSize
};
getqyBasicInformationPage(params).then(response => {
return getqyBasicInformationPage(params).then(response => {
console.log('Fetched Data:', response.data.records); //
this.tableData = response.data.records.map(item => ({
...item,
@ -238,7 +232,7 @@ export default {
save() {
const formData = {
...this.form,
rzqys: Number(this.form.rzqys),
rzqys: this.tableData.length,
rysl: Number(this.form.rysl),
rzl: Number(this.form.rzl),
yczmj: Number(this.form.yczmj),
@ -256,7 +250,6 @@ export default {
},
saveRow(row) {
row.isEditing = false;
//
updateqyBasicInformation(row).then(response => {
this.$modal.msgSuccess('保存成功');
}).catch(error => {
@ -270,7 +263,12 @@ export default {
this.$modal.msgSuccess('删除成功');
this.tableData.splice(index, 1);
//
this.fetchTableData();
this.fetchTableData().then(() => {
// form
this.form.rzqys = this.tableData.length;
// save
this.save();
});
}).catch(error => {
console.error('删除失败:', error);
this.$modal.msgError('删除失败');
@ -294,19 +292,23 @@ export default {
this.upload.isUploading = true;
},
handleFileSuccess(response) {
this.upload.isUploading = false;
this.upload.open = false;
this.$refs.upload.clearFiles();
this.upload.isUploading = false;
this.upload.open = false;
this.$refs.upload.clearFiles();
if (response.code === 200) {
if (response.code === 200) {
this.$modal.msgSuccess(response.msg);
//
this.fetchTableData();
this.$emit("refresh-data"); //
} else {
this.fetchTableData().then(() => {
// form
this.form.rzqys = this.tableData.length;
// save
this.save();
});
} else {
this.$modal.msgError(response.msg || "导入失败");
}
},
}
},
submitFileForm() {
if (this.$refs.upload.uploadFiles.length === 0) {
this.$modal.msgWarning("请先选择文件");
@ -317,7 +319,7 @@ export default {
formData.append('file', this.$refs.upload.uploadFiles[0].raw);
formData.append('xmId', this.upload.data.xmId);
this.$refs.upload.submit(formData); //
this.$refs.upload.submit(formData);
},
//

@ -152,10 +152,15 @@ export default {
//
this.$emit('update-info', updatedData);
// anotherInfo
this.anotherInfo = updatedData;
// 退
this.isEditMode = false;
this.$message.success('保存成功');
} catch (error) {
console.error('保存失败:', error);
this.$message.error('保存失败: ' + (error.message || '请检查网络连接'));
} finally {
this.saveLoading = false;
}
@ -186,10 +191,12 @@ export default {
this.editedData = this.editedData.filter(i => i.id !== item.id);
}
// anotherInfo
this.anotherInfo = this.anotherInfo.filter(i => i.id !== item.id);
//
this.$emit('delete-info', item.id);
this.$message.success('删除成功');
location.reload(); //
} catch (error) {
this.$message.error('删除失败: ' + (error.message || '请检查网络连接'));
}
@ -225,10 +232,20 @@ export default {
// API
const response = await addxmqt(requestData);
console.log('新增成功:', response);
// anotherInfo
this.anotherInfo.push({
id: response.data.id, // ID
zdname: this.form.zdname,
zdinfor: this.form.zdinfor
});
//
this.dialogVisible = false;
this.$message.success('新增成功');
location.reload(); //
} catch (error) { }
} catch (error) {
this.$message.error('新增失败: ' + (error.message || '请检查网络连接'));
}
},
//

@ -135,7 +135,7 @@ export default {
type: Object,
required: true
},
xmId:{
xmId: {
type: Number,
required: true
},
@ -176,7 +176,7 @@ export default {
updateTime: null,
},
rules: {
}
};
},
@ -196,9 +196,9 @@ export default {
/** 导出 */
handleExport() {
this.download(
"/gysl/basicInformation/export",
"/gysl/planInformation/export",
{
xmid: this.form.xmId
xmId: this.form.xmId
},
`规划信息${new Date().getTime()}.xlsx`
);
@ -206,6 +206,7 @@ export default {
//
edit() {
this.isEditing = true;
document.addEventListener('click', this.handleClickOutside);
},
//
save() {
@ -214,18 +215,16 @@ export default {
//
this.$emit('update-data', formData);
this.isEditing = false;
document.removeEventListener('click', this.handleClickOutside);
}
},
//
validateForm() {
for (const field in this.rules) {
const rules = this.rules[field];
const value = this.form[field];
for (const rule of rules) {
if (rule.required && !value) {
this.$message.error(rule.message);
return false;
}
const requiredFields = ['zydmj', 'rjl', 'zjzmj', 'jzds', 'zgjzcs', 'fhdj'];
for (const field of requiredFields) {
if (!this.form[field]) {
this.$message.error('请填写完整的规划信息');
return false;
}
}
return true;
@ -249,6 +248,12 @@ export default {
//
handleFileUploaded(fileName) {
this.form.ghwj = `${this.baseUrl}/${fileName}`; // baseURL
},
handleClickOutside(event) {
const saveButton = this.$el.querySelector('.el-button:contains("保存")');
if (!this.$el.contains(event.target) || saveButton.contains(event.target)) {
return;
}
}
}
};

@ -19,7 +19,7 @@
<!-- 展示区域 -->
<div class="image-container">
<div v-for="(item, index) in projectList" :key="index" class="image-box">
<img :src="item.img" alt="项目图片" class="image">
<img :src="baseUrl + item.img" alt="项目图片" class="image">
<div class="close-button" @click="removeImage(index)">
<img src="../../../assets/images/detailsicon/icon-关闭@2x.png" alt="">
</div>
@ -28,7 +28,7 @@
<div class="dianjibox" @click="handleItemClick(item)"></div>
<div class="bottombox">
<div class="bottomtext"><span>{{ item.xmmc || '未命名项目' }}</span></div>
<div class="bottomtime"><span>{{ formatDate(item.createTime) }}</span></div>
<div class="bottomtime"><span>{{ item.sj }}</span></div>
</div>
</div>
</div>
@ -88,7 +88,7 @@
<el-input v-model="form.newsEvent" type="textarea" :rows="4" placeholder="请输入新闻事件"></el-input>
</el-form-item>
<el-form-item label="附件上传">
<fileUpload v-model="form.fj" />
<FileUpload @file-uploaded="handleFileUploaded" v-model="form.fj" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@ -125,7 +125,7 @@
</el-col>
</el-row>
<el-form-item label="项目图片">
<img :src="currentItem.img" style="max-width: 100%; max-height: 200px;" v-if="currentItem.img">
<img :src="baseUrl + currentItem.img" style="max-width: 100%; max-height: 200px;" v-if="currentItem.img">
<span v-else></span>
</el-form-item>
<el-form-item label="说明">
@ -137,6 +137,9 @@
<el-form-item label="新闻事件">
<el-input v-model="currentItem.newsEvent" type="textarea" :rows="4"></el-input>
</el-form-item>
<el-form-item label="附件">
<el-input v-model="fjFileName" :disabled="true"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="detailVisible = false"> </el-button>
@ -165,6 +168,7 @@ export default {
},
data() {
return {
baseUrl: process.env.VUE_APP_BASE_API,
detailVisible: false,
currentItem: {},
dialogVisible: false,
@ -195,7 +199,10 @@ export default {
computed: {
dialogTitle() {
return this.isEditMode ? '编辑项目巡礼' : '新增项目巡礼';
}
},
fjFileName() {
return this.currentItem.fj ? this.currentItem.fj.split('/').pop() : '无附件';
}
},
created() {
this.fetchProjectList();
@ -260,7 +267,10 @@ export default {
}
}
},
//
handleFileUploaded(fileName) {
this.form.fj = `${this.baseUrl}/${fileName}`; // baseURL
},
//
openAddDialog() {
this.isEditMode = false;
@ -366,6 +376,7 @@ export default {
...this.form,
xmId: this.xmId,
id: 0,
fj: "",
createTime: "",
createBy: "",
createId: 0,

@ -1,165 +0,0 @@
<template>
<div class="maintenance">
<!-- 导入按钮 -->
<el-button type="primary" icon="plus" @click="handleOpenUploadDialog"> Excel</el-button>
<!-- 表格 -->
<el-table :data="tableData" style="width: 100%" border>
<el-table-column
v-for="(header, index) in tableHeaders"
:key="index"
:prop="header"
:label="header"
></el-table-column>
</el-table>
<!-- 上传文件的弹窗 -->
<el-dialog title="上传 Excel 文件" :visible.sync="uploadDialogVisible" width="30%">
<el-upload
action="#"
accept=".xlsx,.xls"
:before-upload="beforeUpload"
:on-change="handleFileChange"
:auto-upload="false"
:show-file-list="false"
>
<el-button type="primary" icon="upload">选择文件</el-button>
<el-button type="primary" icon="download" @click="downloadTemplate"></el-button>
</el-upload>
<div v-if="fileName">
已选择文件: {{ fileName }}
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="uploadDialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleUploadFile"></el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import * as XLSX from 'xlsx';
export default {
data() {
return {
title: 'Excel 文件处理',
uploadDialogVisible: false, //
tableHeaders: [], //
tableData: [], //
selectedFile: null, //
fileName: '', //
};
},
methods: {
//
handleOpenUploadDialog() {
this.uploadDialogVisible = true;
},
//
beforeUpload(file) {
const isExcel =
file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||
file.type === 'application/vnd.ms-excel';
if (!isExcel) {
this.$message.error('只能上传 Excel 文件!');
return false;
}
const requiredHeaders = ['企业名称', '统一信用代码', '所属行业', '租金价格(元/每平方米*月)'];
const reader = new FileReader();
reader.onload = (e) => {
const data = e.target.result;
const workbook = XLSX.read(data, { type: 'binary' });
//
const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];
// JSON
const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });
//
if (jsonData.length > 0) {
const headers = jsonData[0];
const hasRequiredHeaders = requiredHeaders.every(header => headers.includes(header));
if (!hasRequiredHeaders) {
this.$message.error('上传的文件格式不正确,请使用模板文件!');
return false;
}
}
// handleFileChange
this.handleFileChange({ raw: file, name: file.name });
return true;
};
reader.readAsBinaryString(file);
return false; //
},
//
handleFileChange(file) {
if (file) {
this.selectedFile = file.raw; //
this.fileName = file.name; //
}
},
//
handleUploadFile() {
if (!this.selectedFile) {
this.$message.warning('请先选择文件!');
return;
}
const reader = new FileReader();
reader.onload = (e) => {
const data = e.target.result;
const workbook = XLSX.read(data, { type: 'binary' });
//
const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];
// JSON
const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });
//
if (jsonData.length > 0) {
this.tableHeaders = jsonData[0]; //
this.tableData = jsonData.slice(1).map((row) => {
const rowData = {};
this.tableHeaders.forEach((header, index) => {
rowData[header] = row[index];
});
return rowData;
});
}
this.$message.success('文件上传并解析成功!');
this.uploadDialogVisible = false; //
};
reader.readAsBinaryString(this.selectedFile);
},
//
downloadTemplate() {
const link = document.createElement('a');
link.href = '/template.xlsx'; //
link.download = 'template.xlsx';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
},
},
};
</script>
<style scoped>
.maintenance {
padding: 20px;
}
</style>

@ -1,51 +1,95 @@
<template>
<div class="container">
<div>
<div class="title">整体项目情况</div>
<table>
<thead>
<tr>
<th>项目总数</th>
<th>建筑面积(万平方米)</th>
<th>已建数量()</th>
<th>在建数量()</th>
<th>拟建数量()</th>
<th style="visibility: hidden;">拟建数量()</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ projectData.allProject }}</td>
<td>{{ projectData.allGrossArea }}</td>
<td>{{ projectData.allBuilding1 }}</td>
<td>{{ projectData.allBuilding2 }}</td>
<td>{{ projectData.allBuilding3 }}</td>
</tr>
</tbody>
</table>
<div class="top">
<div class="title">整体项目情况</div>
<div class="importdiv">
<el-date-picker v-model="selectedYear" type="year" placeholder="选择年份" format="yyyy"
value-format="yyyy" @change="handleYearChange">
</el-date-picker>
<!-- <el-button icon="el-icon-upload2" style="background-color: #2B62F1; color: #FFFFFF;"
@click="handleExport">
报告导出
</el-button> -->
</div>
</div>
<div class="mainarea">
<div class="itemone">
<img src="@/assets/images/icon-xmzs@2x.png" alt="">
<div class="itemleft">
<div class="lefttitle">项目总数</div>
<div class="number">{{ projectData.allProject }}</div>
</div>
</div>
<div class="itemone">
<img src="@/assets/images/icon-jzmj@2x.png" alt="">
<div class="itemleft">
<div class="lefttitle">建筑面积(万平方米)</div>
<div class="number">{{ projectData.allGrossArea }}</div>
</div>
</div>
<div class="itemone">
<img src="@/assets/images/icon-yjsl@2x.png" alt="">
<div class="itemleft">
<div class="lefttitle">已建数量()</div>
<div class="number">{{ projectData.allBuilding1 }}</div>
</div>
</div>
<div class="itemone">
<img src="@/assets/images/icon-yjsl@2x.png" alt="">
<div class="itemleft">
<div class="lefttitle">在建数量()</div>
<div class="number">{{ projectData.allBuilding2 }}</div>
</div>
</div>
<div class="itemone">
<img src="@/assets/images/icon-yjsl@2x.png" alt="">
<div class="itemleft">
<div class="lefttitle">拟建数量()</div>
<div class="number">{{ projectData.allBuilding3 }}</div>
</div>
</div>
</div>
</div>
<div>
<div class="title">当年项目情况</div>
<table>
<thead>
<tr>
<th>新开工项目数</th>
<th>建筑面积(万平方米)</th>
<th>已建数量()</th>
<th>在建数量()</th>
<th style="visibility: hidden;">拟建数量()</th>
<th style="visibility: hidden;">拟建数量()</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ currentYearData.currentYearProject }}</td>
<td>{{ currentYearData.currentYearGrossArea }}</td>
<td>{{ currentYearData.currentYearBuilding1 }}</td>
<td>{{ currentYearData.currentBuilding2 || 0 }}</td>
</tr>
</tbody>
</table>
<div class="mainarea">
<div class="itemone">
<img src="@/assets/images/icon-xkgxms@2x.png" alt="">
<div class="itemleft">
<div class="lefttitle">新开工项目数</div>
<div class="number">{{ currentYearData.currentYearProject }}</div>
</div>
</div>
<div class="itemone">
<img src="@/assets/images/icon-jzmj@2x.png" alt="">
<div class="itemleft">
<div class="lefttitle">建筑面积(万平方米)</div>
<div class="number">{{ currentYearData.currentYearGrossArea }}</div>
</div>
</div>
<div class="itemone">
<img src="@/assets/images/icon-yjsl@2x.png" alt="">
<div class="itemleft">
<div class="lefttitle">已建数量()</div>
<div class="number">{{ currentYearData.currentYearBuilding1 }}</div>
</div>
</div>
<div class="itemone">
<img src="@/assets/images/icon-yjsl@2x.png" alt="">
<div class="itemleft">
<div class="lefttitle">在建数量()</div>
<div class="number">{{ currentYearData.currentBuilding2 }}</div>
</div>
</div>
<div class="itemone">
<img src="@/assets/images/icon-yjsl@2x.png" alt="">
<div class="itemleft">
<div class="lefttitle">拟建数量()</div>
<div class="number">{{ currentYearData.currentBuilding2 }}</div>
</div>
</div>
</div>
</div>
</div>
</template>
@ -56,18 +100,19 @@ import { allproject } from '@/api/ManageApi';
export default {
data() {
return {
selectedYear: new Date().getFullYear().toString(),
projectData: {
allProject: 0, //
allGrossArea: 0, //
allGrossArea: 0, //
allBuilding1: 0, //
allBuilding2: 0, //
allBuilding3: 0 //
},
currentYearData: {
currentYearProject: 0, //
currentYearGrossArea: 0, //
currentYearBuilding1: 0, //
currentBuilding2: 0 //
currentYearProject: 0, //
currentYearGrossArea: 0, //
currentYearBuilding1: 0, //
currentBuilding2: 0 //
},
loading: false,
error: null
@ -77,25 +122,50 @@ export default {
this.fetchProjectData();
},
methods: {
/** 导出按钮操作 */
handleExport() {
this.download(
"/gysl/zwStats/exportBg",
{
years: this.selectedYear
},
`项目整体情况${this.selectedYear}.docx`
);
},
// Handle year change
handleYearChange(year) {
if (year) {
this.selectedYear = year;
this.fetchProjectData();
}
},
async fetchProjectData() {
this.loading = true;
try {
const response = await allproject();
// API years
const response = await allproject({
years: this.selectedYear,
_t: Date.now() //
});
this.projectData = {
allProject: response.data.allProject || 0,
allGrossArea: response.data.allGrossArea || 0,
allBuilding1: response.data.allBuilding1 || 0,
allBuilding2: response.data.allBuilding2 || 0,
allBuilding3: response.data.allBuilding3 || 0
};
};
this.currentYearData = {
currentYearProject: response.data.currentYearProject || 0,
currentYearGrossArea: response.data.currentYearGrossArea || 0,
currentYearBuilding1: response.data.currentYearBuilding1 || 0,
currentBuilding2: response.data.currentBuilding2 || 0
};
}
finally {
} catch (error) {
console.error("获取数据失败:", error);
this.$message.error("数据加载失败");
} finally {
this.loading = false;
}
}
@ -104,10 +174,16 @@ export default {
</script>
<style scoped>
.importdiv {
display: flex;
gap: .5rem;
}
/* Your existing styles remain unchanged */
.container {
display: flex;
flex-direction: column;
gap: 1.5rem;
gap: 2rem;
}
table {
@ -127,7 +203,7 @@ th {
}
.title {
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
font-family: alibold;
font-weight: 600;
font-size: 1.25rem;
color: #3D424C;
@ -139,8 +215,8 @@ th {
margin-left: .4rem;
}
thead tr {
font-family: AlibabaPuHuiTi, AlibabaPuHuiTi;
.lefttitle {
font-family: aliregular;
font-weight: 400;
font-size: 0.88rem;
color: #7B8599;
@ -149,14 +225,46 @@ thead tr {
font-style: normal;
text-transform: none;
}
tbody tr {
font-family: DIN, DIN;
.number {
font-family: DINbold;
font-weight: 600;
font-size: 1.5rem;
color: #292C33;
line-height: 2.11rem;
font-size: 1.25rem;
color: #3D424C;
line-height: 1.69rem;
text-align: left;
font-style: normal;
text-transform: none;
margin-left: .4rem;
}
.mainarea {
padding: .5rem;
height: auto;
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 1rem;
}
.itemone {
width: 12rem;
height: 3rem;
/* background-color: lightblue; */
display: flex;
gap: .3rem;
}
.itemleft {
display: flex;
flex-direction: column;
margin-left: .5rem;
}
.top {
display: flex;
width: 100%;
justify-content: space-between;
}
</style>

@ -16,6 +16,7 @@ export default {
{ value: 54, name: '国企', itemStyle: { color: '#36C3FB' } },
{ value: 65, name: '民企', itemStyle: { color: '#5B76F9' } },
{ value: 32, name: '外企', itemStyle: { color: '#FAC858' } },
{ value: 32, name: '其他', itemStyle: { color: '#50DFB3' } },
],
};
},
@ -31,7 +32,7 @@ export default {
} else {}
},
processData(data) {
const names = ['国企', '民企', '外企'];
const names = ['国企', '民企', '外企','其他'];
const counts = data.map(item => item.count);
return names.map((name, index) => ({
value: counts[index] || 0,
@ -50,7 +51,7 @@ export default {
orient: 'vertical', //
right: '20%', //
top: 'center', //
itemGap: 35, //
itemGap: 30, //
formatter: function (name) {
//
const item = this.chartData.find(item => item.name === name);

@ -26,7 +26,6 @@
<div class="search-results" v-if="searchList && searchList.length > 0">
<div class="search-item" v-for="(item, index) in searchList" :key="index" @click="centerMap(item)">
<div class="item-name">{{ item.name }}</div>
<div class="item-address">{{ item.address }}</div>
</div>
</div>
<!-- 右侧地图区域 -->
@ -167,20 +166,25 @@ export default {
});
},
centerMap(item) {
this.searchBox = item.name;
this.searchList = [];
this.selectedProject = {
name: item.name,
projectLeader: item.projectLeader || '暂无',
phone: item.phone || '暂无',
ztze: item.ztze || '暂无',
xmfrdwxz: item.xmfrdwxz || '暂无',
xzfl: item.xzfl || '暂无'
};
if (!item.jsdd) {
this.$message.warning('该项目未落图!');
return;
}
this.showLocationIcon = true;
this.setRandomIconPosition();
},
this.searchBox = item.name;
this.searchList = [];
this.selectedProject = {
name: item.name,
projectLeader: item.projectLeader || '暂无',
phone: item.phone || '暂无',
ztze: item.ztze || '暂无',
xmfrdwxz: item.xmfrdwxz || '暂无',
xzfl: item.xzfl || '暂无'
};
this.showLocationIcon = true;
this.setRandomIconPosition();
},
showDialog() {
if (this.selectedProject.name) {
this.dialogVisible = true;

@ -31,12 +31,12 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<!-- <el-col :span="7">
<el-form-item label="项目法人单位">
<el-input v-model="queryParams.xmfrdwxz" placeholder="请输入项目名称" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
</el-col> -->
</el-row>
<el-row>
<el-col :span="8">

@ -288,16 +288,20 @@ export default {
},
`基本信息${new Date().getTime()}.xlsx`
);
},
/** 单片材料导出按钮操作 */
handleExporttwo() {
if (this.ids.length === 0) {
this.$message.warning('请选择要导出的项目');
return;
}
this.download(
"/gysl/basicInformation/wordExport",
{
ids: this.ids.join(","),
},
`单片材料${new Date().getTime()}.zip`
);
@ -305,9 +309,10 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const projectName = row.name; //
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除项目id为"' + ids + '"的数据项?')
.confirm(`是否确认删除项目"${projectName}"`)
.then(() => {
return deleteBasicInformation(ids);
})

@ -10,7 +10,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="建设起止时间">
<!-- <el-form-item label="建设起止时间">
<el-date-picker v-model="queryParams.begainTime"
type="date" placeholder="开始日期" value-format="yyyy-MM-dd"
style="width: 11rem;" :clearable="true">
@ -21,6 +21,15 @@
value-format="yyyy-MM-dd"
style="width: 10.5rem;" :clearable="true">
</el-date-picker>
</el-form-item> -->
<el-form-item label="建设起止时间">
<el-date-picker v-model="queryParams.begainTime" type="month" placeholder="开始月份" value-format="yyyy-MM"
style="width: 9rem;" :clearable="true">
</el-date-picker>
~
<el-date-picker v-model="queryParams.endTime" type="month" placeholder="结束月份" value-format="yyyy-MM"
style="width: 9rem;" :clearable="true">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
@ -67,7 +76,7 @@
<el-table-column label="项目法人单位" align="center" prop="xmfrdwxz" />
<el-table-column label="项目建设起止时间" align="center">
<template slot-scope="scope">
{{ formatMonthYear(scope.row.begainTime) }} {{ formatMonthYear(scope.row.endTime) }}
{{ scope.row.begainTime }} {{ scope.row.endTime }}
</template>
</el-table-column>
<el-table-column label="项目评价" align="center" width="130" sortable="custom" prop="pjdj">
@ -83,13 +92,8 @@
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current" :limit.sync="queryParams.size"
@pagination="getList" />
</div>
<!-- 详情对话框 -->
@ -238,16 +242,13 @@ export default {
const params = {
current: this.queryParams.current,
size: this.queryParams.size,
...(this.queryParams.name && { name: this.queryParams.name }),
...(this.queryParams.xzfl && { xzfl: this.queryParams.xzfl }),
...(this.queryParams.pjdj && { pjdj: this.queryParams.pjdj }),
//
...(this.queryParams.begainTime && { begainTime: this.queryParams.begainTime }),
...(this.queryParams.endTime && { endTime: this.queryParams.endTime })
name: this.queryParams.name,
xzfl: this.queryParams.xzfl,
pjdj: this.queryParams.pjdj,
begainTime: this.queryParams.begainTime || null,
endTime: this.queryParams.endTime || null
};
console.log('最终查询参数:', params); //
getProjectEvaluationList(params)
.then(response => {
this.postList = response.data.records;
@ -293,8 +294,11 @@ export default {
//
},
formatMonthYear(date) {
if (!date) return '';
return date.split('-').slice(0, 2).join('-');
// if (!date) return '';
return date;
// //
// const fullDate = date.includes('-') ? date : `${date}-01`; //
// return fullDate.split('-').slice(0, 2).join('-');
}
},
mounted() {

@ -81,18 +81,12 @@
</Others>
</div>
<div class="footer" v-if="showCompanySection">
<el-button type="primary"
v-if="(checkRole(['company']) && !isSubmitted && action === 'fill') || action === 'fill'"
@click="submitAll">提交审核</el-button>
<el-button type="primary"
v-if="(checkRole(['company']) && !isSubmitted && action === 'fill') || action === 'fill'"
@click="saveAll">暂存</el-button>
</div>
<div class="footer" v-if="checkRole(['common']) && action === 'fill'">
<el-button type="primary" v-if="checkRole(['common'])" @click="aduitAll"></el-button>
</div>
<div class="footer" v-if="checkRole(['common']) && action === 'okay'">
<el-button type="primary" v-if="checkRole(['common'])" @click="aduitAll"></el-button>
<el-button type="primary" v-if="checkRole(['common'])" @click="aduitAlltwo"></el-button>
</div>
</div>
<!-- 返回顶部 -->
@ -340,6 +334,22 @@ export default {
.finally(() => {
this.loading = false;
});
},
//
aduitAlltwo() {
this.loading = true;
const submitData = this.prepareSubmitData();
auditBasicInformation(submitData)
.then(response => {
console.log('提交成功:', response);
this.$message.success('修改成功');
this.isSubmitted = true;
this.$router.push('/manage');
})
.finally(() => {
this.loading = false;
});
},
//
prepareSubmitData() {

@ -81,7 +81,6 @@
</Others>
</div>
<div class="footer">
<el-button type="primary" v-if="checkRole(['admin', 'common'])" @click="aduitAll"></el-button>
<el-button type="primary"
v-if="(checkRole(['company']) && !isSubmitted && action === 'fill') || action === 'fill'"
@click="submitAll">提交审核</el-button>
@ -269,7 +268,7 @@ export default {
}
console.log(`接收到 ${dataKey} 更新:`, updatedData);
},
isDefault(obj, defaultObj) {
for (const key in defaultObj) {
if (obj[key] !== defaultObj[key]) {
@ -299,17 +298,62 @@ export default {
//
submitAll() {
this.loading = true;
const submitData = this.prepareSubmitData();
console.log('准备提交的完整数据:', JSON.stringify(submitData, null, 2)); //
fillBasicInformation(submitData)
.then(response => {
this.$message.success('提交成功');
this.isSubmitted = true;
this.$router.push('/manage');
})
.finally(() => {
this.loading = false;
});
//
console.log('qyrzInformation:', this.qyrzInformation);
console.log('wysmxInformations:', this.wysmxInformations);
// wysmxInformations null
if (this.wysmxInformations.length === 0 || this.wysmxInformations.includes(null)) {
this.$message.error('请填写模型管理信息');
this.loading = false;
return;
}
// qyrzInformation rzqys
if (this.qyrzInformation.rzqys === 0 || this.qyrzInformation.rzqys === null || this.qyrzInformation.rzqys === undefined) {
this.$message.error('请导入入驻信息');
this.loading = false;
return;
}
// planInformation
const planRequiredFields = ['zydmj', 'rjl', 'zjzmj', 'jzds', 'zgjzcs', 'fhdj'];
const planMissingFields = planRequiredFields.filter(field => !this.planInformation[field]);
if (planMissingFields.length > 0) {
this.$message.error('请填写完整的规划信息');
this.loading = false;
return;
}
// basicInformation
const basicRequiredFields = ['ssgnq', 'begainTime', 'endTime', 'xzfl', 'jsms'];
const basicMissingFields = basicRequiredFields.filter(field => !this.basicInformation[field]);
if (basicMissingFields.length > 0) {
this.$message.error('请填写完整的基本信息');
this.loading = false;
return;
}
//
// const submitData = this.prepareSubmitData();
// console.log(':', JSON.stringify(submitData, null, 2)); //
// fillBasicInformation(submitData)
// .then(response => {
// this.$message.success('');
// this.isSubmitted = true;
// this.$router.push('/manage');
// })
// .catch(error => {
// this.$message.error('');
// console.error(':', error);
// })
// .finally(() => {
// this.loading = false;
// });
},
//

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

@ -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.107:7071/`,
target: `http://192.168.0.108:7071/`,
// target: `http://39.101.188.84:7071/`,
changeOrigin: true,
pathRewrite: {

Loading…
Cancel
Save