接口联调

xuhongjie
严飞永 3 months ago
parent 598e2f426d
commit bd9813ae49

@ -61,7 +61,8 @@
"vue-meta": "2.4.0",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0"
"vuex": "3.6.0",
"xlsx": "^0.18.5"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.6",

@ -1,3 +1,4 @@
// src/api/ManageApi/index.js
import request from '@/utils/request';
// 企业--基本信息==展示
@ -25,6 +26,63 @@ export function getProgrammeInformationById(id) {
});
}
// 基本信息的导出功能
export function exportBasicInformation(params) {
return request({
url: `/gysl/basicInformation/export`,
method: 'post',
data: params,
responseType: 'blob'
});
}
// 项目评价清单
// 分页查询项目评价清单
export function getProjectEvaluationList(params) {
return request({
url: '/gysl/xmpjqd/page',
method: 'get',
params
});
}
// 项目评价配置接口
// 新增数据
export function addProjectEvaluation(data) {
return request({
url: '/gysl/pjpz/add',
method: 'post',
data
});
}
// 删除数据
export function deleteProjectEvaluation(idList) {
return request({
url: '/gysl/pjpz/delete',
method: 'delete',
params: { idList }
});
}
// 修改数据
export function updateProjectEvaluation(data) {
return request({
url: '/gysl/pjpz/edit',
method: 'post',
data
});
}
// 分页查询所有数据
export function getProjectEvaluationPage(params) {
return request({
url: '/gysl/pjpz/page',
method: 'get',
params
});
}
// 修改规划信息
export function updateProgrammeInformation(data) {
return request({
@ -33,3 +91,121 @@ export function getProgrammeInformationById(id) {
data
});
}
// 要素指标管理
// 新增要素或者指标
export function addElement(data) {
return request({
url: '/gysl/mx/add',
method: 'post',
data
});
}
// 查询所有要素
export function getAllElements(params) {
return request({
url: '/gysl/mx/page',
method: 'get',
params
});
}
// 编辑要素或者指标
export function editElemention(data) {
return request({
url: '/gysl/mx/edit',
method: 'post',
data
});
}
// 删除指标
export function deleteElemention(id) {
return request({
url: `/gysl/mx/delete`,
method: 'delete'
});
}
// 目录管理
// 新增目录
export function addCatalog(data) {
return request({
url: '/gysl/ml/add',
method: 'post',
data
});
}
// 删除目录
export function deleteCatalog(idList) {
return request({
url: `/gysl/ml/delete`,
method: 'delete',
params: { idList }
});
}
// 修改目录
export function editCatalog(data) {
return request({
url: '/gysl/ml/edit',
method: 'post',
data
});
}
// 查询所有目录
export function getAllCatalogs(params) {
return request({
url: '/gysl/ml/page',
method: 'get',
params
});
}
// 项目知识库管理
// 新增数据
export function addXmzsk(data) {
return request({
url: '/gysl/xmzsk/add',
method: 'post',
data
});
}
// 删除数据
export function deleteXmzsk(idList) {
return request({
url: '/gysl/xmzsk/delete',
method: 'delete',
params: { idList }
});
}
// 修改数据
export function updateXmzsk(data) {
return request({
url: '/gysl/xmzsk/edit',
method: 'post',
data
});
}
// 分页查询所有数据
export function getXmzskPage(params) {
return request({
url: '/gysl/xmzsk/page',
method: 'get',
params
});
}
// 通过主键查询单条数据
export function getXmzskById(id) {
return request({
url: `/gysl/xmzsk/${id}`,
method: 'get'
});
}

@ -0,0 +1,232 @@
<template>
<div class="component-upload-image">
<el-upload
multiple
:action="uploadImgUrl"
list-type="picture-card"
:on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload"
:limit="limit"
:on-error="handleUploadError"
:on-exceed="handleExceed"
ref="imageUpload"
:on-remove="handleDelete"
:show-file-list="true"
:headers="headers"
:file-list="fileList"
:on-preview="handlePictureCardPreview"
:class="{hide: this.fileList.length >= this.limit}"
>
<i class="el-icon-plus"></i>
</el-upload>
<!-- 上传提示 -->
<div class="el-upload__tip" slot="tip" v-if="showTip">
请上传
<template v-if="fileSize"> <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
<template v-if="fileType"> <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
的文件
</div>
<el-dialog
:visible.sync="dialogVisible"
title="预览"
width="800"
append-to-body
>
<img
:src="dialogImageUrl"
style="display: block; max-width: 100%; margin: 0 auto"
/>
</el-dialog>
</div>
</template>
<script>
import { getToken } from "@/utils/auth";
import { isExternal } from "@/utils/validate";
export default {
props: {
value: [String, Object, Array],
//
limit: {
type: Number,
default: 1,
},
// (MB)
fileSize: {
type: Number,
default: 5,
},
// , ['png', 'jpg', 'jpeg']
fileType: {
type: Array,
default: () => ["png", "jpg", "jpeg"],
},
//
isShowTip: {
type: Boolean,
default: true
}
},
data() {
return {
number: 0,
uploadList: [],
dialogImageUrl: "",
dialogVisible: false,
hideUpload: false,
baseUrl: process.env.VUE_APP_BASE_API,
uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", //
headers: {
Authorization: "Bearer " + getToken(),
},
fileList: []
};
},
watch: {
value: {
handler(val) {
if (val) {
//
const list = Array.isArray(val) ? val : this.value.split(',');
//
this.fileList = list.map(item => {
if (typeof item === "string") {
if (item.indexOf(this.baseUrl) === -1 && !isExternal(item)) {
item = { name: this.baseUrl + item, url: this.baseUrl + item };
} else {
item = { name: item, url: item };
}
}
return item;
});
} else {
this.fileList = [];
return [];
}
},
deep: true,
immediate: true
}
},
computed: {
//
showTip() {
return this.isShowTip && (this.fileType || this.fileSize);
},
},
methods: {
// loading
handleBeforeUpload(file) {
let isImg = false;
if (this.fileType.length) {
let fileExtension = "";
if (file.name.lastIndexOf(".") > -1) {
fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
}
isImg = this.fileType.some(type => {
if (file.type.indexOf(type) > -1) return true;
if (fileExtension && fileExtension.indexOf(type) > -1) return true;
return false;
});
} else {
isImg = file.type.indexOf("image") > -1;
}
if (!isImg) {
this.$modal.msgError(`文件格式不正确,请上传${this.fileType.join("/")}图片格式文件!`);
return false;
}
if (file.name.includes(',')) {
this.$modal.msgError('文件名不正确,不能包含英文逗号!');
return false;
}
if (this.fileSize) {
const isLt = file.size / 1024 / 1024 < this.fileSize;
if (!isLt) {
this.$modal.msgError(`上传头像图片大小不能超过 ${this.fileSize} MB!`);
return false;
}
}
this.$modal.loading("正在上传图片,请稍候...");
this.number++;
},
//
handleExceed() {
this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
},
//
handleUploadSuccess(res, file) {
if (res.code === 200) {
this.uploadList.push({ name: res.fileName, url: res.fileName });
this.uploadedSuccessfully();
} else {
this.number--;
this.$modal.closeLoading();
this.$modal.msgError(res.msg);
this.$refs.imageUpload.handleRemove(file);
this.uploadedSuccessfully();
}
},
//
handleDelete(file) {
const findex = this.fileList.map(f => f.name).indexOf(file.name);
if (findex > -1) {
this.fileList.splice(findex, 1);
this.$emit("input", this.listToString(this.fileList));
}
},
//
handleUploadError() {
this.$modal.msgError("上传图片失败,请重试");
this.$modal.closeLoading();
},
//
uploadedSuccessfully() {
if (this.number > 0 && this.uploadList.length === this.number) {
this.fileList = this.fileList.concat(this.uploadList);
this.uploadList = [];
this.number = 0;
this.$emit("input", this.listToString(this.fileList));
this.$modal.closeLoading();
}
},
//
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
//
listToString(list, separator) {
let strs = "";
separator = separator || ",";
for (let i in list) {
if (list[i].url) {
strs += list[i].url.replace(this.baseUrl, "") + separator;
}
}
return strs != '' ? strs.substr(0, strs.length - 1) : '';
}
}
};
</script>
<style scoped lang="scss">
// .el-upload--picture-card
::v-deep.hide .el-upload--picture-card {
display: none;
}
//
::v-deep .el-list-enter-active,
::v-deep .el-list-leave-active {
transition: all 0s;
}
::v-deep .el-list-enter, .el-list-leave-active {
opacity: 0;
transform: translateY(0);
}
</style>

@ -30,7 +30,6 @@ export default {
map.destroy();
delete this[`map${this.withKeyId}`];
}
console.log(">>>>> 地图卸载完成 >>>>");
},
methods: {
async initMap() {
@ -55,7 +54,6 @@ export default {
);
this.$emit("onload", this[`map${this.withKeyId}`]);
console.log("Map二维地图构造参数", mapOptions);
},
},
};

@ -2,72 +2,58 @@
<div>
<!-- 表单查询项 -->
<div class="headerbox">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="200">
<el-form ref="queryForm" :model="queryParams" size="small" label-width="100px">
<el-row>
<el-col :span="5">
<el-form-item label="文件名称" prop="postName" style="width: 100%;">
<el-input v-model="queryParams.postName" placeholder="请输入文件名称" clearable
<el-form-item label="文件名称" prop="name" style="width: 100%;">
<el-input v-model="queryParams.name" placeholder="请输入文件名称" :fetch-suggestions="querySearchAsync"
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="文件类型">
<el-select v-model="form.region" placeholder="请选择文件类型">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
<el-form-item label="文件类型" prop="lx">
<el-select v-model="queryParams.lx" placeholder="请选择文件类型">
<el-option v-for="dict in dict.type.wjlx" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="5">
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<!-- 导出行 -->
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:post:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['system:post:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['system:post:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:post:export']">导出</el-button>
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd"></el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<!-- <el-table-column label="序号" align="center" prop="postId" /> -->
<el-table-column label="文件名称" align="center" prop="postName" />
<el-table-column label="类型" align="center" prop="postName" />
<el-table-column label="附件" align="center" prop="postCode" />
<el-table-column label="上传用户" align="center" prop="postSort" />
<el-table-column label="上传时间" align="center" prop="postSort" />
<el-table-column label="文件名称" align="center" prop="name" />
<el-table-column label="类型" align="center">
<template slot-scope="scope">
{{ fileTypeMap[scope.row.lx] || scope.row.lx }}
</template>
</el-table-column>
<el-table-column label="附件" align="center" prop="fj" />
<el-table-column label="上传用户" align="center" prop="scyh" />
<el-table-column label="上传时间" align="center" prop="scsj" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view" @click="getInfo(scope.row)"
<el-button size="mini" type="text" @click="getInfo(scope.row)"
v-hasPermi="['system:post:detail']">详情</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
<el-button size="mini" type="text" @click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']">编辑</el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)" style="color: red;"
v-hasPermi="['system:post:remove']">删除</el-button>
</template>
</el-table-column>
@ -77,25 +63,26 @@
</div>
<!-- 添加或修改项目对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目名称" prop="postName">
<el-input v-model="form.postName" placeholder="请输入项目名称" />
<el-dialog :title="title" :visible.sync="open" width="40rem" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="7rem">
<el-form-item label="文件名称" prop="name">
<el-input v-model="form.name" placeholder="请输入文件名称" />
</el-form-item>
<el-form-item label="项目编码" prop="postCode">
<el-input v-model="form.postCode" placeholder="请输入编码名称" />
<el-form-item label="类型" prop="lx">
<el-select v-model="form.lx" placeholder="请选择文件类型" style="width: 100%;">
<el-option v-for="dict in dict.type.wjlx" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目顺序" prop="postSort">
<el-input-number v-model="form.postSort" controls-position="right" :min="0" />
<el-form-item label="上传用户" prop="scyh">
<el-input v-model="form.scyh" placeholder="请输入上传用户" />
</el-form-item>
<el-form-item label="项目状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
}}</el-radio>
</el-radio-group>
<el-form-item label="上传时间" prop="scsj">
<el-date-picker v-model="form.scsj" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"
style="width: 100%;" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
<el-form-item label="附件" prop="fj">
<fileload v-model="form.fj"></fileload>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -103,34 +90,48 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 批量导入对话框 :headers="upload.headers" -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls"
: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">
<!-- <div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div> -->
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
<!-- 详情项目对话框 -->
<el-dialog :title="title" :visible.sync="detailOpen" width="40rem" append-to-body>
<el-form ref="detailForm" :model="detailForm" label-width="7rem" :disabled="true">
<el-form-item label="文件名称" prop="name">
<el-input v-model="detailForm.name" placeholder="请输入文件名称" />
</el-form-item>
<el-form-item label="类型" prop="lx">
<el-select v-model="detailForm.lx" placeholder="请选择文件类型" style="width: 100%;">
<el-option v-for="dict in dict.type.wjlx" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="上传用户" prop="scyh">
<el-input v-model="detailForm.scyh" placeholder="请输入上传用户" />
</el-form-item>
<el-form-item label="上传时间" prop="scsj">
<el-date-picker v-model="detailForm.scsj" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"
style="width: 100%;" />
</el-form-item>
<el-form-item label="附件" prop="fj">
<el-input v-model="detailForm.fj" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
<el-button @click="detailOpen = false">取消</el-button>
<el-button @click="detailOpen = false">确定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPost, getPost, delPost, addPost, updatePost } from "@/api/system/post";
import { getXmzskPage, addXmzsk, updateXmzsk, deleteXmzsk, getXmzskById } from "@/api/ManageApi/index";
import fileload from "@/components/FileUpload/index.vue"
export default {
name: "Post",
dicts: ['sys_normal_disable'],
dicts: ['wjlx'],
name: "Xmzsk",
components: {
fileload
},
data() {
return {
//
@ -145,82 +146,101 @@
showSearch: true,
//
total: 0,
//
//
postList: [],
//
title: "",
//
//
open: false,
//
detailOpen: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
postName: undefined,
status: undefined
name: undefined,
lx: undefined
},
//
form: {},
form: {
id: undefined,
name: undefined,
lx: undefined,
fj: undefined,
scsj: undefined,
scyh: undefined,
createBy: undefined,
createId: undefined,
createTime: undefined,
updateBy: undefined,
updateId: undefined,
updateTime: undefined
},
//
detailForm: {
id: undefined,
name: undefined,
lx: undefined,
fj: undefined,
scsj: undefined,
scyh: undefined,
createBy: undefined,
createId: undefined,
createTime: undefined,
updateBy: undefined,
updateId: undefined,
updateTime: undefined
},
//
rules: {
postName: [
{ required: true, message: "项目名称不能为空", trigger: "blur" }
name: [
{ required: true, message: "文件名称不能为空", trigger: "blur" }
],
lx: [
{ required: true, message: "文件类型不能为空", trigger: "change" }
],
postCode: [
{ required: true, message: "项目编码不能为空", trigger: "blur" }
scyh: [
{ required: true, message: "上传用户不能为空", trigger: "blur" }
],
postSort: [
{ required: true, message: "项目顺序不能为空", trigger: "blur" }
scsj: [
{ required: true, message: "上传时间不能为空", trigger: "change" }
]
},
//
upload: {
//
open: false,
//
title: "导入",
//
isUploading: false,
//
updateSupport: 0,
//
// headers: { Authorization: "Bearer " + getToken() },
//
// url: process.env.VUE_APP_BASE_API + "/tc/assetApp/importData"
// url: location.origin + "/api/tc/assetApp/importData"
},
//
fileTypeMap: {
1: "政策文件",
2: "研究报告",
3: "网络信息",
4: "其他",
}
};
},
created() {
this.getList();
},
methods: {
//
handleImport() {
this.upload.open = true;
},
//
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();
querySearchAsync(queryString, cb) {
let results = [];
// getXmzskPage API
getXmzskPage({ name: queryString }).then(res => {
res.data.records.forEach(item => {
results.push({
value: item.name,
id: item.id,
});
});
});
cb(results);
},
/** 查询项目列表 */
//
getList() {
this.loading = true;
listPost(this.queryParams).then(response => {
this.postList = response.rows;
this.total = response.total;
getXmzskPage(this.queryParams).then(response => {
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
}).catch(error => {
console.error('API Request Error:', error);
this.loading = false;
});
},
@ -232,12 +252,18 @@
//
reset() {
this.form = {
postId: undefined,
postCode: undefined,
postName: undefined,
postSort: 0,
status: "0",
remark: undefined
id: undefined,
name: undefined,
lx: undefined,
fj: undefined,
scsj: undefined,
scyh: undefined,
createBy: undefined,
createId: undefined,
createTime: undefined,
updateBy: undefined,
updateId: undefined,
updateTime: undefined
};
this.resetForm("form");
},
@ -253,47 +279,43 @@
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.postId)
this.single = selection.length != 1
this.multiple = !selection.length
this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加项目";
this.title = "新增项目知识库";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const postId = row.postId || this.ids
getPost(postId).then(response => {
this.form = response.data;
const catalogId = row.id;
this.form = { ...row };
this.open = true;
this.title = "修改项目";
});
},
/** 详情按钮操作 */
getInfo(row) {
this.$store.commit("SET_CRUMBS", this.$route.meta.title + "详情");
const postIds = row.postId || this.ids;
this.$router.push({ path: `/manage-info/${postIds}` });
this.title = "修改项目知识库";
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.postId != undefined) {
updatePost(this.form).then(response => {
if (this.form.id !== undefined) {
updateXmzsk(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).catch(error => {
console.error('API Request Error:', error);
});
} else {
addPost(this.form).then(response => {
addXmzsk(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).catch(error => {
console.error('API Request Error:', error);
});
}
}
@ -301,25 +323,29 @@
},
/** 删除按钮操作 */
handleDelete(row) {
const postIds = row.postId || this.ids;
this.$modal.confirm('是否确认删除项目编号为"' + postIds + '"的数据项?' + '删除这条信息之后有可能找不回来了,请思考一下哟!').then(function () {
return delPost(postIds);
const catalogIds = row.id || this.ids;
this.$modal.confirm('是否确认删除项目知识库编号为"' + catalogIds + '"的数据项?').then(() => {
return deleteXmzsk([catalogIds]);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => { });
},
/** 导出按钮操作 */
handleExport() {
this.download('system/post/export', {
...this.queryParams
}, `post_${new Date().getTime()}.xlsx`)
/** 详情按钮操作 */
getInfo(row) {
const catalogId = row.id;
getXmzskById(catalogId).then(response => {
this.detailForm = { ...response.data };
this.detailOpen = true;
this.title = "项目知识库详情";
}).catch(error => {
console.error('API Request Error:', error);
});
}
}
};
</script>
<style scoped>
.headerbox {
background-color: #fff;
@ -352,4 +378,3 @@
margin-bottom: 1rem;
}
</style>

@ -21,7 +21,7 @@
</el-button>
</div>
</div>
<!-- 内容-->
<!-- 内容展示-->
<div class="content">
<div class="picturediv">
<img v-if="form.fj" :src="form.fj" alt="项目代表性照片" style="width: 100%; height: auto;">
@ -69,17 +69,18 @@
<el-row>
<el-col :span="12">
<el-form-item label="项目法人单位性质">
<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 v-model="form.nature" placeholder="请选择" value-key="value"
style="width: 22.5rem;">
<el-option v-for="dict in dict.type.xmfrdwxz" :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="建设模式">
<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 v-model="form.jsms" placeholder="请选择" value-key="value" style="width: 22.5rem;">
<el-option v-for="dict in dict.type.jsms" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)" />
</el-select>
</el-form-item>
</el-col>
@ -130,6 +131,15 @@
</el-form-item>
</el-col>
<el-col :span="12">
<!-- <el-form-item label="施工许可证发放时间">
<el-date-picker
v-model="form.issuingTime"
type="datetime"
placeholder="选择日期时间"
style="width: 22.5rem;"
value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item> -->
<el-form-item label="施工许可证发放时间">
<el-input v-model="form.issuingTime"></el-input>
</el-form-item>
@ -139,7 +149,8 @@
<el-col :span="12">
<el-form-item label="建设起止时间">
<el-date-picker v-model="form.begainTime" type="daterange" range-separator=""
start-placeholder="开始日期" end-placeholder="结束日期" style="width: 22.5rem;"></el-date-picker>
start-placeholder="开始日期" end-placeholder="结束日期"
style="width: 22.5rem;"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
@ -151,9 +162,9 @@
<el-row>
<el-col :span="12">
<el-form-item label="现状分类">
<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 v-model="form.xzfl" placeholder="请选择" value-key="value" style="width: 22.5rem;">
<el-option v-for="dict in dict.type.xzfl" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)" />
</el-select>
</el-form-item>
</el-col>
@ -170,10 +181,7 @@
<el-input v-model="form.introduction" type="textarea" rows="4"></el-input>
</el-form-item>
<el-form-item label="项目代表性照片">
<ImageUpload />
<el-dialog :visible.sync="dialogVisibletwo">
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
<ImageUpload v-model="form.fj" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@ -181,17 +189,20 @@
<el-button type="primary" @click="saveForm"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getBasicInformationById, updateBasicInformation } from '@/api/ManageApi/index';
import { getBasicInformationById, updateBasicInformation,exportBasicInformation } from '@/api/ManageApi/index';
import ImageUpload from '@/components/ImageUpload2/index.vue';
export default {
components: {
ImageUpload
},
dicts: [
'ssgnq'
'ssgnq', 'xmfrdwxz', 'xzfl', 'jsms'
],
props: {
size: {
@ -217,7 +228,7 @@ export default {
sgdw: '',
sjdw: '',
ztze: 0,
ssgnq: '',
ssgnq: 0,
begainTime: '',
xzfl: 0,
jsdd: '',
@ -235,6 +246,28 @@ export default {
rules: {
name: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
jsdd: [{ required: true, message: '建设地点不能为空', trigger: 'blur' }],
},
// select
ssgnqMap: {
1: '高端制造与国际贸易区',
2: '阳澄湖半岛旅游度假区',
3: '金鸡湖商务区',
4: '苏相合作区'
},
xmfrdwxzMap: {
1: '国企',
2: '外资企业',
3: '民营企业',
4: '其他'
},
jsmsMap: {
1: '工地实施',
2: '利用存量用地改扩建',
},
xzflMap: {
1: '已建',
2: '再建',
3: '拟建',
}
};
},
@ -242,13 +275,6 @@ export default {
this.fetchData();
},
methods: {
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
//
fetchData() {
getBasicInformationById(this.id)
@ -266,16 +292,16 @@ export default {
return [
{ label: '项目名称', value: data.name },
{ label: '项目法人单位', value: data.xmfrdwxz },
{ label: '项目法人单位性质', value: data.nature },
{ label: '项目法人单位性质', value: this.xmfrdwxzMap[data.nature] || '未知' },
{ label: '施工单位', value: data.sgdw },
{ label: '设计单位', value: data.sjdw },
{ label: '总投资额(万元)', value: data.ztze },
{ label: '所属功能区', value: data.ssgnq },
{ label: '所属功能区', value: this.ssgnqMap[data.ssgnq] || '未知' },
{ label: '建设起止时间', value: data.begainTime },
{ label: '现状分类', value: data.xzfl },
{ label: '现状分类', value: this.xzflMap[data.xzfl] || '未知' },
{ label: '建设地点', value: data.jsdd },
{ label: '重点发展产业', value: data.prioritize },
{ label: '建设模式', value: data.jsms },
{ label: '建设模式', value: this.jsmsMap[data.jsms] || '未知' },
{ label: '项目标签', value: data.label },
{ label: '项目负责人', value: data.projectLeader },
{ label: '联系方式', value: data.phone },
@ -288,9 +314,52 @@ export default {
},
//
handleExport() {
this.download('system/post/export', {
...this.queryParams
}, `post_${new Date().getTime()}.xlsx`);
//
const queryParams = {
acceptanceTime: this.form.acceptanceTime,
begainTime: this.formatDateRange(this.form.begainTime),
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,
updateBy: '',
updateId: 0,
updateTime: '',
xmfrdwxz: this.form.xmfrdwxz,
xzfl: parseInt(this.form.xzfl),
ztze: parseFloat(this.form.ztze)
};
console.log('queryParams:', queryParams); //
//
exportBasicInformation(queryParams)
.then(response => {
console.log('response:', 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() {
@ -306,6 +375,7 @@ export default {
this.$message.success('数据保存成功!');
this.dialogVisible = false;
this.fetchData(); //
// window.location.reload();//
})
.catch(error => {
console.error('数据保存失败:', error);

@ -9,7 +9,7 @@
<div class="topright">
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="addBuildingTag">
<img src="../../../assets/images/detailsicon/icon-xz@2x.png" alt="编辑"
<img src="../../../assets/images/detailsicon/icon-xz@2x.png" alt="新增"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增
</el-button>
@ -21,13 +21,13 @@
</el-button>
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;">
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="编辑"
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="导入"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导入
</el-button>
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;">
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="编辑"
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="导出"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
</el-button>
@ -126,6 +126,108 @@
</el-descriptions>
</div>
</div>
<!-- 新增楼栋弹窗 -->
<el-dialog title="新增楼栋" :visible.sync="dialogVisible" width="65%">
<el-form :model="buildingForm" label-width="230px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="楼栋名称:">
<el-input v-model="buildingForm.buildingNumber"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否为重要楼栋:">
<el-select v-model="buildingForm.isImportant" placeholder="请选择" style="width: 22.5rem;">
<el-option label="是" value="true"></el-option>
<el-option label="否" value="false"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="首层高度(米 ">
<el-input v-model="buildingForm.floors"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="层数:">
<el-input v-model="buildingForm.totalHeight"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="4层以上层高">
<el-input v-model="buildingForm.firstFloorHeight"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="柱距:">
<el-input v-model="buildingForm.secondToFourthFloorHeight"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="2至4层层高">
<el-input v-model="buildingForm.fourthFloorAboveHeight"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="*总建筑高度(米):">
<el-input v-model="buildingForm.secondToThirdFloorLoad"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否有汽车盘道">
<el-select v-model="buildingForm.hasCarRamp" placeholder="请选择" style="width: 22.5rem;">
<el-option label="是" value="true"></el-option>
<el-option label="否" value="false"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-form-item label="是否有吊装口">
<el-select v-model="buildingForm.hasLiftingPort" placeholder="请选择" style="width: 22.5rem;">
<el-option label="是" value="true"></el-option>
<el-option label="否" value="false"></el-option>
</el-select>
</el-form-item>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="四层及以上楼面荷载(吨/平方米):">
<el-input v-model="buildingForm.standardFloorArea"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准层面积(千平方米):">
<el-input v-model="buildingForm.standardFloorArea"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="二至三层楼面荷载(吨/平方米):">
<el-input v-model="buildingForm.fourthFloorAboveLoad"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="首层地面荷载(吨/平方米):">
<el-input v-model="buildingForm.fourthFloorAboveLoad"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="handleAddBuilding"> </el-button>
</span>
</el-dialog>
</div>
</template>
@ -143,7 +245,24 @@ export default {
inputVisible: false,
inputValue: '',
currentBuildingNumber: 3,
activeTag: '1栋'
activeTag: '1栋',
dialogVisible: false,
buildingForm: {
buildingNumber: '',
isImportant: '',
floors: '',
totalHeight: '',
firstFloorHeight: '',
secondToFourthFloorHeight: '',
fourthFloorAboveHeight: '',
firstFloorLoad: '',
secondToThirdFloorLoad: '',
standardFloorArea: '',
columnSpacing: '',
hasLiftingPort: '',
hasCarRamp: '',
fourthFloorAboveLoad: ''
}
};
},
methods: {
@ -165,13 +284,49 @@ export default {
this.activeTag = tag;
},
addBuildingTag() {
this.currentBuildingNumber++;
this.dynamicTags.push(`${this.currentBuildingNumber}`);
this.dialogVisible = true;
this.resetBuildingForm();
},
resetBuildingForm() {
this.buildingForm = {
buildingNumber: '',
isImportant: '',
floors: '',
totalHeight: '',
firstFloorHeight: '',
secondToFourthFloorHeight: '',
fourthFloorAboveHeight: '',
firstFloorLoad: '',
secondToThirdFloorLoad: '',
standardFloorArea: '',
columnSpacing: '',
hasLiftingPort: '',
hasCarRamp: '',
fourthFloorAboveLoad: ''
};
},
handleAddBuilding() {
//
if (!this.buildingForm.buildingNumber) {
this.$message.error('请填写楼栋编号');
return;
}
// dynamicTags
this.dynamicTags.push(this.buildingForm.buildingNumber + '栋');
//
this.dialogVisible = false;
//
this.resetBuildingForm();
//
this.$message.success('新增楼栋成功');
}
}
}
</script>
<style scoped>
.container {
display: flex;

@ -1,250 +1,165 @@
<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">
<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="name" label="统一社会信用代码" width="300">
<template slot-scope="scope">
<span style="color: #2B62F1;">{{ scope.row.name }}</span>
</template>
</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="data" label='租金价格' width="250">
</el-table-column>
<el-table-column prop="data" label='操作' width="200">
</el-table-column>
<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>
<div class="block">
<div style="visibility: hidden;"></div>
<!-- @size-change="handleSizeChange"
@current-change="handleCurrentChange" -->
<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>
<!-- 上传文件的弹窗 -->
<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 {
props: {
size: {
type: String,
default: '' //
}
},
data() {
return {
tableData: [
{
date: '2016-05-02',
name: '大众电脑生成制造基地',
address: ' 1518 弄',
data: '1000',
status: '在建'
},
{
date: '2016-05-04',
name: '大众电脑生成制造基地',
address: ' 1517 弄',
data: '1500',
status: '拟建'
},
{
date: '2016-05-01',
name: '大众电脑生成制造基地',
address: ' 1519 弄',
data: '2000',
status: '已建'
},
{
date: '2016-05-03',
name: '大众电脑生成制造基地',
address: ' 1516 弄',
data: '2500',
status: '在建'
}
],
}
title: 'Excel 文件处理',
uploadDialogVisible: false, //
tableHeaders: [], //
tableData: [], //
selectedFile: null, //
fileName: '', //
};
},
methods: {
getStatusColor(status) {
switch (status) {
case '在建':
return 'color: #2DD29F;';
case '拟建':
return 'color: #F08445;';
case '已建':
return 'color: #2B62F1;';
}
//
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;
}
}
</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;
}
// handleFileChange
this.handleFileChange({ raw: file, name: file.name });
return true;
};
.content {
padding: 1rem;
display: flex;
}
reader.readAsBinaryString(file);
return false; //
},
.containertop {
height: auto;
display: flex;
justify-content: space-between;
padding: .7rem 0;
padding: .5rem;
border-bottom: 1px solid #E5E5E5;
//
handleFileChange(file) {
if (file) {
this.selectedFile = file.raw; //
this.fileName = file.name; //
}
},
.topleft {
width: 8rem;
display: flex;
gap: 0.4rem;
align-items: center;
//
handleUploadFile() {
if (!this.selectedFile) {
this.$message.warning('请先选择文件!');
return;
}
.topleft img {
width: 0.81rem;
height: 0.81rem;
}
const reader = new FileReader();
reader.onload = (e) => {
const data = e.target.result;
const workbook = XLSX.read(data, { type: 'binary' });
.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;
}
//
const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];
.picturediv {
width: 18.31rem;
height: 25.31rem;
background-color: lightblue;
}
// JSON
const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });
.descriptionsdiv {
width: 100%;
margin-left: 1rem;
height: auto;
//
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;
});
}
.two-row-item {
height: 20rem;
}
this.$message.success('文件上传并解析成功!');
this.uploadDialogVisible = false; //
};
.tagdiv {
padding: 1rem 3em 1rem 1rem;
}
.block{
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 1rem;
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>

@ -30,28 +30,22 @@
<span style="color: #2B62F1;">{{ scope.row.name }}</span>
</template>
</el-table-column>
<el-table-column prop="address" label="状态" width="200">
</el-table-column>
<el-table-column prop="name" label="当月完成投资" width="240">
<el-table-column prop="status" label="状态" width="80">
<template slot-scope="scope">
<span style="color: #2B62F1;">{{ scope.row.name }}</span>
<span :style="getStatusColor(scope.row.status)">{{ scope.row.status }}</span>
</template>
</el-table-column>
<el-table-column prop="name" label="累计完成投资" width="220">
<template slot-scope="scope">
<span style="color: #2B62F1;">{{ scope.row.name }}</span>
</template>
<el-table-column prop="number" label="当月完成投资" width="240">
</el-table-column>
<el-table-column prop="number" label="累计完成投资" width="220">
</el-table-column>
<el-table-column prop="data" label='截止目前累计建成面积(平方米)' width="260">
</el-table-column>
<el-table-column prop="data" label='贷款额度(万元)' width="200">
<el-table-column prop="number" label='贷款额度(万元)' width="200">
</el-table-column>
<el-table-column prop="data" label='项目进展详情' width="140">
</el-table-column>
<el-table-column prop="status" label="状态" width="80">
<template slot-scope="scope">
<span :style="getStatusColor(scope.row.status)">{{ scope.row.status }}</span>
</template>
<el-table-column prop="address" label="操作" width="200">
</el-table-column>
</el-table>
<div class="block">
@ -74,28 +68,32 @@ export default {
{
date: '2016-05-02',
name: '大众电脑生成制造基地',
address: ' 1518 弄',
number:1000,
address: ' 编辑 删除',
data: '1000',
status: '在建'
},
{
date: '2016-05-04',
name: '大众电脑生成制造基地',
address: ' 1517 弄',
number:1000,
address: ' 编辑 删除',
data: '1500',
status: '拟建'
},
{
date: '2016-05-01',
name: '大众电脑生成制造基地',
address: ' 1519 弄',
number:1000,
address: ' 编辑 删除',
data: '2000',
status: '已建'
},
{
date: '2016-05-03',
name: '大众电脑生成制造基地',
address: ' 1516 弄',
number:1000,
address: ' 编辑 删除',
data: '2500',
status: '在建'
}

@ -7,16 +7,22 @@
<span>规划信息</span>
</div>
<div class="topright">
<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 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 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 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>
<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 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>
</div>
@ -187,21 +193,21 @@
},
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' }],
fhjd: [{ required: true, message: '防火等级不能为空', trigger: 'blur' }],
ghwj: [{ 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' }],
// fhjd: [{ required: true, message: '', trigger: 'blur' }],
// ghwj: [{ required: true, message: '', trigger: 'blur' }]
}
};
},
@ -232,14 +238,16 @@
},
//
save() {
this.$refs.form.validate(valid => {
if (valid) {
if (this.validateForm()) {
const formData = this.prepareFormData(this.form);
updateProgrammeInformation(formData)
.then(response => {
this.$message.success('数据保存成功!');
this.isEditing = false;
//
setTimeout(() => {
this.fetchData(); //
}, 500); // 500
})
.catch(error => {
console.error('数据保存失败:', error);
@ -248,7 +256,20 @@
} else {
this.$message.warning('请填写完整信息!');
}
});
},
//
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;
}
}
}
return true;
},
//
prepareFormData(formData) {

@ -60,7 +60,6 @@ export default {
},
data() {
return {
size: '',
evaluations: [
{ element: '总投资额', ranking: '100' },
{ element: '层数', ranking: '20' },

@ -71,21 +71,8 @@
<!-- 编辑/新增对话框 -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
<el-form :model="form" label-width="120px">
<el-form-item label="项目名称">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="项目地址">
<el-input v-model="form.address"></el-input>
</el-form-item>
<el-form-item label="经纬度">
<el-input v-model="form.latitude" placeholder="纬度"></el-input>
<el-input v-model="form.longitude" placeholder="经度"></el-input>
</el-form-item>
<el-form-item label="图片上传">
<el-upload action="https://jsonplaceholder.typicode.com/posts/" :on-success="handleUploadSuccess"
:on-remove="handleUploadRemove" :file-list="fileList">
<el-button type="primary">上传图片</el-button>
</el-upload>
<el-form-item label="项目代表性照片">
<ImageUpload />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@ -98,10 +85,10 @@
<script>
import MapComponent from '../../map/index.vue';
import ImageUpload from '@/components/ImageUpload/index.vue';
export default {
components: {
MapComponent,
MapComponent,ImageUpload
},
data() {
return {

@ -0,0 +1,249 @@
<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">
<span>新增企业入驻</span>
<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 prop="data" label='操作' width="200">
</el-table-column>
</el-table>
<div class="block">
<div style="visibility: hidden;"></div>
<!-- @size-change="handleSizeChange"
@current-change="handleCurrentChange" -->
<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>
</div>
</template>
<script>
export default {
props: {
size: {
type: String,
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: '在建'
}
],
}
},
methods: {
getStatusColor(status) {
switch (status) {
case '在建':
return 'color: #2DD29F;';
case '拟建':
return 'color: #F08445;';
case '已建':
return 'color: #2B62F1;';
}
}
}
}
</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;
}
</style>

@ -220,9 +220,6 @@ export default {
getBasicInformationById(id)
.then(response => {
this.form = response.data;
})
.catch(error => {
console.error('数据获取失败:', error);
});
},
//
@ -237,11 +234,6 @@ export default {
this.loading = false;
this.$message.success('修改成功');
this.$router.push({ name: 'ProjectDetails', params: this.queryData });
})
.catch(error => {
console.error('修改失败:', error);
this.$message.error('修改失败,请重试!');
this.loading = false;
});
} else {
createBasicInformation(formData)
@ -249,11 +241,6 @@ export default {
this.loading = false;
this.$message.success('新增成功');
this.$router.push({ name: 'ProjectDetails', params: this.queryData });
})
.catch(error => {
console.error('新增失败:', error);
this.$message.error('新增失败,请重试!');
this.loading = false;
});
}
} else {

@ -5,8 +5,8 @@
<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
<el-form-item label="评价要素" prop="pjys" style="width: 100%;">
<el-input v-model="queryParams.pjys" placeholder="请输入评价要素" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
@ -24,21 +24,18 @@
<!-- 标签行 -->
<div class="tablehead">
<div class="headbtn">
<el-button type="primary" icon="el-icon-search">添加规则</el-button>
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
</div>
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center" prop="postId" />
<el-table-column label="评价要素" align="center" prop="postName" />
<el-table-column label="评价规则" align="center" prop="postCode" />
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="评价要素" align="center" prop="pjys" />
<el-table-column label="评价规则" align="center" prop="pfgz" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button size="mini" type="text" icon="el-icon-view" @click="getInfo(scope.row)"
v-hasPermi="['system:post:detail']">详情</el-button> -->
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
<el-button size="mini" type="text" @click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']">编辑</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
<el-button size="mini" type="text" style="color: red;" @click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']">删除</el-button>
</template>
</el-table-column>
@ -47,26 +44,14 @@
@pagination="getList" />
</div>
<!-- 添加或修改项目对话框 -->
<!-- 添加规则的弹窗 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目名称" prop="postName">
<el-input v-model="form.postName" placeholder="请输入项目名称" />
<el-form-item label="评价要素" prop="postName">
<el-input v-model="form.pjys" placeholder="请输入评价要素" />
</el-form-item>
<el-form-item label="项目编码" prop="postCode">
<el-input v-model="form.postCode" placeholder="请输入编码名称" />
</el-form-item>
<el-form-item label="项目顺序" prop="postSort">
<el-input-number v-model="form.postSort" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="项目状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
<el-form-item label="评分规则" prop="postCode">
<el-input v-model="form.pfgz" placeholder="请输入评分规则" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -74,195 +59,129 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 批量导入对话框 :headers="upload.headers" -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls"
: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">
<!-- <div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div> -->
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPost, getPost, delPost, addPost, updatePost } from "@/api/system/post";
import { getProjectEvaluationPage, addProjectEvaluation, updateProjectEvaluation, deleteProjectEvaluation } from '@/api/ManageApi/index';
export default {
name: "Post",
dicts: ['sys_normal_disable'],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
postName: undefined,
status: undefined
postName: ''
},
//
postList: [],
//
total: 0, // total
//
showSearch: true,
//
loading: false,
//
title: '',
//
open: false,
//
form: {},
//
rules: {
postName: [
{ required: true, message: "项目名称不能为空", trigger: "blur" }
],
postCode: [
{ required: true, message: "项目编码不能为空", trigger: "blur" }
],
postSort: [
{ required: true, message: "项目顺序不能为空", trigger: "blur" }
]
},
//
upload: {
//
open: false,
//
title: "导入",
//
isUploading: false,
//
updateSupport: 0,
//
// headers: { Authorization: "Bearer " + getToken() },
//
// url: process.env.VUE_APP_BASE_API + "/tc/assetApp/importData"
// url: location.origin + "/api/tc/assetApp/importData"
},
// postName: [
// { required: true, message: '', trigger: 'blur' }
// ],
// postCode: [
// { required: true, message: '', trigger: 'blur' }
// ]
}
};
},
created() {
this.getList();
},
methods: {
//
handleImport() {
this.upload.open = true;
},
//
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();
},
/** 查询项目列表 */
//
getList() {
this.loading = true;
listPost(this.queryParams).then(response => {
this.postList = response.rows;
this.total = response.total;
console.log('Sending Query Params:', JSON.parse(JSON.stringify(this.queryParams))); //
getProjectEvaluationPage(this.queryParams).then(response => {
console.log('API Response:', response); //
if (response && response.data && response.data.records !== undefined && response.data.total !== undefined) {
this.postList = response.data.records; // 使 records
this.total = response.data.total; // 使 total
} else {
console.error('API Response is missing records or total:', response); //
this.postList = [];
this.total = 0;
}
this.loading = false;
}).catch(error => {
console.error('API Request Error:', error); //
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
postId: undefined,
postCode: undefined,
postName: undefined,
postSort: 0,
status: "0",
remark: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
//
handleQuery() {
this.queryParams.postName = this.queryParams.pjys;
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
//
resetQuery() {
this.resetForm("queryForm");
this.resetForm('queryForm');
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.postId)
this.single = selection.length != 1
this.multiple = !selection.length
this.ids = selection.map(item => item.id); // 使 id
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
//
handleAdd() {
this.reset();
this.open = true;
this.title = "添加项目";
this.title = '添加规则';
},
/** 修改按钮操作 */
//
handleUpdate(row) {
this.reset();
const postId = row.postId || this.ids
getPost(postId).then(response => {
this.form = response.data;
const postId = row.id || this.ids; // 使 id
//
this.form = { ...row };
this.open = true;
this.title = "修改项目";
});
this.title = '修改规则';
},
/** 详情按钮操作 */
getInfo(row) {
this.$store.commit("SET_CRUMBS", this.$route.meta.title + "详情");
const postIds = row.postId || this.ids;
this.$router.push({ path: `/manage-info/${postIds}` });
//
cancel() {
this.open = false;
this.reset();
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate(valid => {
//
reset() {
this.form = {
id: undefined,
pjys: undefined,
pfgz: undefined
};
this.resetForm('form');
},
//
submitForm() {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.postId != undefined) {
updatePost(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
if (this.form.id !== undefined) {
updateProjectEvaluation(this.form).then(response => {
this.$modal.msgSuccess('修改成功');
this.open = false;
this.getList();
});
} else {
addPost(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
addProjectEvaluation(this.form).then(response => {
this.$modal.msgSuccess('新增成功');
this.open = false;
this.getList();
});
@ -270,27 +189,20 @@
}
});
},
/** 删除按钮操作 */
//
handleDelete(row) {
const postIds = row.postId || this.ids;
this.$modal.confirm('是否确认删除项目编号为"' + postIds + '"的数据项?' + '删除这条信息之后有可能找不回来了,请思考一下哟!').then(function () {
return delPost(postIds);
const postIds = row.id || this.ids; // 使 id
this.$modal.confirm('是否确认删除项目评价配置编号为"' + postIds + '"的数据项?').then(() => {
return deleteProjectEvaluation(postIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
this.$modal.msgSuccess('删除成功');
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/post/export', {
...this.queryParams
}, `post_${new Date().getTime()}.xlsx`)
}
}
};
</script>
<style scoped>
.headerbox {
background-color: #fff;
@ -324,4 +236,3 @@
margin-bottom: 1rem;
}
</style>

@ -1,4 +1,3 @@
<!-- 项目评价清单 -->
<template>
<div>
<!-- 表单查询项 -->
@ -7,29 +6,36 @@
<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-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></el-date-picker>
<el-form-item label="项目建设起止时间" prop="createTime">
<el-date-picker
type="daterange"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
:style="{ width: '100%' }"
start-placeholder="开始日期"
end-placeholder="结束日期"
range-separator="至"
clearable
v-model="queryParams.createTime"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类" prop="status">
<el-select v-model="queryParams.status" placeholder="现状分类" clearable>
<el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
:value="dict.value" />
<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-select v-model="form.region" placeholder="请选择活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
<el-select v-model="queryParams.pjdj" placeholder="请选择评价等级" clearable>
<el-option label="区域一" value="1"></el-option>
<el-option label="区域二" value="2"></el-option>
</el-select>
</el-form-item>
</el-col>
@ -50,269 +56,95 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="postId" />
<el-table-column label="项目名称" align="center" prop="postName" />
<el-table-column label="现状分类" align="center" prop="postCode" />
<el-table-column label="项目法人单位" align="center" prop="postSort" />
<el-table-column label="项目建设起止时间" align="center" prop="postSort" />
<el-table-column label="项目评价" align="center" width="130" prop="postSort" />
<el-table-column label="现状分类" align="center" prop="status" />
<el-table-column label="项目法人单位" align="center" prop="xmfrdw" />
<el-table-column label="项目建设起止时间" align="center" prop="xmqzsj" />
<el-table-column label="项目评价" align="center" width="130" prop="xmpj" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view" @click="getInfo(scope.row)"
v-hasPermi="['system:post:detail']">详情</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-view" @click="getInfo(scope.row)" v-hasPermi="['system:post:detail']"></el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:post:edit']"></el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:post:remove']"></el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
</div>
<!-- 添加或修改项目对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目名称" prop="postName">
<el-input v-model="form.postName" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目编码" prop="postCode">
<el-input v-model="form.postCode" placeholder="请输入编码名称" />
</el-form-item>
<el-form-item label="项目顺序" prop="postSort">
<el-input-number v-model="form.postSort" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="项目状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 批量导入对话框 :headers="upload.headers" -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls"
: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">
<!-- <div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div> -->
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPost, getPost, delPost, addPost, updatePost } from "@/api/system/post";
import { getProjectEvaluationList } from '@/api/ManageApi/index.js';
export default {
name: "Post",
dicts: ['sys_normal_disable'],
dicts: [
'xzfl'
],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
title: "",
//
open: false,
//
loading: false,
total: 0,
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
postName: undefined,
status: undefined
},
//
form: {},
//
rules: {
postName: [
{ required: true, message: "项目名称不能为空", trigger: "blur" }
],
postCode: [
{ required: true, message: "项目编码不能为空", trigger: "blur" }
],
postSort: [
{ required: true, message: "项目顺序不能为空", trigger: "blur" }
]
},
//
upload: {
//
open: false,
//
title: "导入",
//
isUploading: false,
//
updateSupport: 0,
//
// headers: { Authorization: "Bearer " + getToken() },
//
// url: process.env.VUE_APP_BASE_API + "/tc/assetApp/importData"
// url: location.origin + "/api/tc/assetApp/importData"
postName: '',
createTime: '',
status: '',
pjdj: ''
},
showSearch: true
};
},
created() {
this.getList();
},
methods: {
//
handleImport() {
this.upload.open = true;
},
//
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 });
handleQuery() {
this.getList();
},
//
submitFileForm() {
this.$refs.upload.submit();
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
postName: '',
createTime: '',
status: '',
pjdj: ''
};
this.handleQuery();
},
/** 查询项目列表 */
getList() {
this.loading = true;
listPost(this.queryParams).then(response => {
this.postList = response.rows;
this.total = response.total;
getProjectEvaluationList(this.queryParams)
.then(response => {
this.postList = response.data.records;
this.total = response.data.total;
})
.catch(error => {
console.error('获取项目评价清单失败:', error);
})
.finally(() => {
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
postId: undefined,
postCode: undefined,
postName: undefined,
postSort: 0,
status: "0",
remark: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.postId)
this.single = selection.length != 1
this.multiple = !selection.length
//
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加项目";
getInfo(row) {
//
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const postId = row.postId || this.ids
getPost(postId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改项目";
});
},
/** 详情按钮操作 */
getInfo(row) {
this.$store.commit("SET_CRUMBS", this.$route.meta.title + "详情");
const postIds = row.postId || this.ids;
this.$router.push({ path: `/manage-info/${postIds}` });
//
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.postId != undefined) {
updatePost(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addPost(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
handleDelete(row) {
//
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const postIds = row.postId || this.ids;
this.$modal.confirm('是否确认删除项目编号为"' + postIds + '"的数据项?' + '删除这条信息之后有可能找不回来了,请思考一下哟!').then(function () {
return delPost(postIds);
}).then(() => {
mounted() {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => { });
},
/** 导出按钮操作 */
handleExport() {
this.download('system/post/export', {
...this.queryParams
}, `post_${new Date().getTime()}.xlsx`)
}
}
};
</script>
<style scoped>
.headerbox {
background-color: #fff;
@ -345,4 +177,3 @@
margin-bottom: 1rem;
}
</style>

@ -22,7 +22,7 @@
</div>
<!-- 基本信息 -->
<div id="basic">
<Basic :id="projectId"></Basic>
<Basic :id="9"></Basic>
</div>
<!-- 规划信息 -->
<div id="programme">

@ -6,8 +6,7 @@
<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-input v-model="queryParams.postName" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="9">
@ -19,8 +18,7 @@
<el-col :span="5">
<el-form-item label="现状分类" prop="status">
<el-select v-model="queryParams.status" placeholder="现状分类" clearable>
<el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
:value="dict.value" />
<el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
@ -49,33 +47,31 @@
<div class="tablehead">
<div class="headtitle"><span>项目清单</span></div>
<div class="headbtn">
<el-button type="primary" icon="el-icon-search">下载模板</el-button>
<el-button type="primary" icon="el-icon-upload2" size="mini" @click="handleImport"></el-button>
<el-button type="primary" icon="el-icon-search" @click="downloadTemplate"></el-button>
<el-button type="primary" icon="el-icon-download" size="mini" @click="handleImport"></el-button>
</div>
</div>
<!-- 导出行 -->
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:post:add']">新增</el-button>
<el-button type="primary" icon="el-icon-upload2" size="medium" @click="handleExport" v-hasPermi="['system:post:export']"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['system:post:edit']">修改</el-button>
<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-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['system:post:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:post:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<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="postId" />
<el-table-column label="项目名称" align="center" prop="postName" />
@ -84,19 +80,16 @@
<el-table-column label="项目建设起止时间" align="center" prop="postSort" />
<el-table-column label="总投资额(万元)" align="center" width="130" prop="postSort" />
<el-table-column label="总用地面积(平方米)" align="center" prop="postSort" />
<el-table-column label="当前状态" align="center" prop="status" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view" @click="getInfo(scope.row)"
v-hasPermi="['system:post:detail']">详情</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-view" @click="getInfo(scope.row)" v-hasPermi="['system:post:detail']"></el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:post:edit']"></el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:post:remove']"></el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
</div>
<!-- 添加或修改项目对话框 -->
@ -113,8 +106,7 @@
</el-form-item>
<el-form-item label="项目状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
}}</el-radio>
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
@ -126,17 +118,12 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 批量导入对话框 :headers="upload.headers" -->
<!-- 批量导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :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">
<!-- <div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div> -->
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
@ -206,11 +193,8 @@ export default {
isUploading: false,
//
updateSupport: 0,
//
// headers: { Authorization: "Bearer " + getToken() },
//
// url: process.env.VUE_APP_BASE_API + "/tc/assetApp/importData"
// url: location.origin + "/api/tc/assetApp/importData"
url: location.origin + "/api/system/post/importData"
},
};
},
@ -245,6 +229,9 @@ export default {
this.postList = response.rows;
this.total = response.total;
this.loading = false;
}).catch(error => {
console.error('获取项目列表失败', error);
this.loading = false;
});
},
//
@ -276,9 +263,9 @@ export default {
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.postId)
this.single = selection.length != 1
this.multiple = !selection.length
this.ids = selection.map(item => item.postId);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
@ -289,34 +276,40 @@ export default {
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const postId = row.postId || this.ids
const postId = row.postId || this.ids[0];
getPost(postId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改项目";
}).catch(error => {
console.error('获取项目详情失败', error);
});
},
/** 详情按钮操作 */
getInfo(row) {
this.$store.commit("SET_CRUMBS", this.$route.meta.title + "详情");
const postIds = row.postId || this.ids;
const postIds = row.postId || this.ids[0];
this.$router.push({ path: `/manage-info/${postIds}` });
},
/** 提交按钮 */
submitForm: function () {
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.postId != undefined) {
if (this.form.postId !== undefined) {
updatePost(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).catch(error => {
console.error('修改项目失败', error);
});
} else {
addPost(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).catch(error => {
console.error('新增项目失败', error);
});
}
}
@ -324,25 +317,83 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
const postIds = row.postId || this.ids;
this.$modal.confirm('是否确认删除项目编号为"' + postIds + '"的数据项?' + '删除这条信息之后有可能找不回来了,请思考一下哟!').then(function () {
return delPost(postIds);
}).then(() => {
const postIds = row.postId || this.ids.join(',');
this.$modal.confirm('是否确认删除项目编号为"' + postIds + '"的数据项?删除这条信息之后有可能找不回来了,请思考一下哟!').then(() => {
delPost(postIds).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(error => {
console.error('删除项目失败', error);
});
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/post/export', {
...this.queryParams
}, `post_${new Date().getTime()}.xlsx`)
}, `post_${new Date().getTime()}.xlsx`);
},
handleExportCommand(command) {
let fileName = '';
switch (command) {
case 'single-material':
fileName = 'single-material';
break;
case 'report':
fileName = 'report';
break;
case 'project-manual':
fileName = 'project-manual';
break;
default:
this.$message.error('未知的导出类型');
return;
}
this.download(`system/post/export/${fileName}`, {
...this.queryParams
}, `${fileName}_${new Date().getTime()}.xlsx`).then(() => {
this.$message.success('下载成功');
}).catch(() => {
this.$message.error('下载失败');
});
},
download(url, params, fileName) {
return new Promise((resolve, reject) => {
const request = new XMLHttpRequest();
request.open('GET', `${process.env.VUE_APP_BASE_API}/${url}`, true);
request.responseType = 'blob';
request.onload = () => {
if (request.status === 200) {
const blob = new Blob([request.response], { type: 'application/vnd.ms-excel' });
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
resolve();
} else {
reject(new Error('下载失败'));
}
};
request.onerror = () => {
reject(new Error('下载失败'));
};
request.send();
});
},
//
downloadTemplate() {
this.download('system/post/template', {}, `template_${new Date().getTime()}.xlsx`).then(() => {
this.$message.success('模板下载成功');
}).catch(() => {
this.$message.error('模板下载失败');
});
}
}
};
</script>
<style scoped>
.headerbox {
background-color: #fff;

@ -2,40 +2,38 @@
<div>
<!-- 产业导向管理--目录管理 -->
<div class="headerbox">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="7rem">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="7rem">
<el-row>
<el-col :span="9">
<el-form-item label="上楼目录类别" prop="postName" style="width: 100%;">
<el-input v-model="queryParams.postName" placeholder="请输入上楼目录类别" clearable style="width: 26.5rem;"
<el-form-item label="上楼目录类别" prop="slmllb" style="width: 100%;">
<el-input v-model="queryParams.slmllb" placeholder="请输入上楼目录类别" clearable style="width: 26.5rem;"
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工业大类" prop="postName" style="width: 100%;">
<el-input v-model="queryParams.postName" placeholder="请输入工业大类" clearable
@keyup.enter.native="handleQuery" />
<el-form-item label="工业大类" prop="industryCategory" style="width: 100%;">
<el-input v-model="queryParams.industryCategory" placeholder="请输入工业大类" clearable style="width: 15.5rem;"
@keyup.enter.native="handleQuery" maxlength="50" show-word-limit />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="产业" prop="postName" style="width: 100%;">
<el-input v-model="queryParams.postName" placeholder="请输入产业" clearable
@keyup.enter.native="handleQuery" />
<el-form-item label="产业" prop="industry" style="width: 100%;">
<el-input v-model="queryParams.industry" placeholder="请输入产业" clearable style="width: 15.5rem;" @keyup.enter.native="handleQuery"
maxlength="50" show-word-limit />
</el-form-item>
</el-col>
</el-row>
<el-row>
<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></el-date-picker>
<el-form-item label="更新时间" prop="updateTime">
<el-date-picker v-model="queryParams.updateTimeRange" type="daterange" format="yyyy-MM-dd"
value-format="yyyy-MM-dd" :style="{ width: '100%' }" start-placeholder="开始日期" end-placeholder="结束日期"
range-separator="至" clearable @change="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item style="margin-left: 2.5rem;">
<el-button type="primary" icon="el-icon-search" size="mini"
@click="handleQuery">查询</el-button>
<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>
@ -47,46 +45,26 @@
<!-- 标签行 -->
<div class="tablehead">
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:post:add']">新增</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single"
@click="handleUpdate" v-hasPermi="['system:post:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
@click="handleDelete" v-hasPermi="['system:post:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:post:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
</el-row>
</div>
<div class="headbtn">
<!-- <el-button type="primary" icon="el-icon-search">下载模板</el-button> -->
<el-button type="primary" icon="el-icon-download" size="mini" @click="handleExport"
<div class="tablebtn">
<el-button type="primary" size="mini" @click="handleExport"
v-hasPermi="['system:post:export']">导出</el-button>
<el-button type="primary" icon="el-icon-upload2" size="mini" @click="handleImport"></el-button>
<el-button type="primary" size="mini" @click="handleImport"></el-button>
</div>
</div>
<!-- 导出行 -->
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="序号" align="center" prop="postId" /> -->
<el-table-column label="上楼目录类别" align="center" prop="postName" />
<el-table-column label="工业大类" align="center" prop="postCode" />
<el-table-column label="产业" align="center" prop="postSort" />
<el-table-column label="更新时间" align="center" prop="postSort" />
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange"
:row-class-name="tableRowClassName">
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="上楼目录类别" align="center" prop="slmllb" />
<el-table-column label="工业大类" align="center" prop="gydl" />
<el-table-column label="产业" align="center" prop="cy" />
<el-table-column label="更新时间" align="center" prop="updateTime" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button size="mini" type="text" icon="el-icon-view" @click="getInfo(scope.row)"
v-hasPermi="['system:post:detail']">详情</el-button> -->
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
@ -94,28 +72,28 @@
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="getList" />
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
</div>
<!-- 添加或修改项目对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目名称" prop="postName">
<el-input v-model="form.postName" placeholder="请输入项目名称" />
<el-dialog :title="title" :visible.sync="open" width="40rem" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="7rem">
<el-form-item label="上楼目录类别" prop="slmllb">
<el-select v-model="form.slmllb" placeholder="请选择上楼目录类别" style="width: 100%;">
<el-option v-for="dict in dict.type.shangloumulu" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目编码" prop="postCode">
<el-input v-model="form.postCode" placeholder="请输入编码名称" />
<el-form-item label="工业大类" prop="industryCategory">
<el-input v-model="form.industryCategory" placeholder="请输入工业大类" maxlength="50" show-word-limit />
</el-form-item>
<el-form-item label="项目顺序" prop="postSort">
<el-input-number v-model="form.postSort" controls-position="right" :min="0" />
<el-form-item label="产业" prop="industry">
<el-input v-model="form.industry" placeholder="请输入产业" maxlength="50" show-word-limit />
</el-form-item>
<el-form-item label="项目状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{
dict.label
}}</el-radio>
</el-radio-group>
<el-form-item label="更新时间" prop="updateTime">
<el-date-picker v-model="form.updateTime" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"
style="width: 100%;" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
@ -126,7 +104,7 @@
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 批量导入对话框 :headers="upload.headers" -->
<!-- 批量导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
@ -134,9 +112,6 @@
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<!-- <div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
</div> -->
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
@ -149,11 +124,13 @@
</template>
<script>
import { listPost, getPost, delPost, addPost, updatePost } from "@/api/system/post";
import { addCatalog, deleteCatalog, editCatalog, getAllCatalogs } from '@/api/ManageApi/index';
export default {
name: "Post",
dicts: ['sys_normal_disable'],
dicts: [
'shangloumulu'
],
name: "Catalog",
data() {
return {
//
@ -168,7 +145,7 @@ export default {
showSearch: true,
//
total: 0,
//
//
postList: [],
//
title: "",
@ -178,22 +155,35 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
postName: undefined,
status: undefined
slmllb: undefined, // slmllb
industryCategory: undefined,
industry: undefined,
updateTimeRange: undefined
},
//
form: {},
form: {
id: undefined,
slmllb: undefined, // slmllb
industryCategory: undefined,
industry: undefined,
updateTime: undefined,
remark: undefined
},
//
rules: {
postName: [
{ required: true, message: "项目名称不能为空", trigger: "blur" }
slmllb: [
{ required: true, message: "上楼目录类别不能为空", trigger: "change" }
],
industryCategory: [
{ required: true, message: "工业大类不能为空", trigger: "blur" },
{ max: 50, message: "工业大类长度不能超过50个字符", trigger: "blur" }
],
postCode: [
{ required: true, message: "项目编码不能为空", trigger: "blur" }
industry: [
{ required: true, message: "产业不能为空", trigger: "blur" },
{ max: 50, message: "产业长度不能超过50个字符", trigger: "blur" }
],
postSort: [
{ required: true, message: "项目顺序不能为空", trigger: "blur" }
updateTime: [
{ required: true, message: "更新时间不能为空", trigger: "change" }
]
},
//
@ -206,11 +196,8 @@ export default {
isUploading: false,
//
updateSupport: 0,
//
// headers: { Authorization: "Bearer " + getToken() },
//
// url: process.env.VUE_APP_BASE_API + "/tc/assetApp/importData"
// url: location.origin + "/api/tc/assetApp/importData"
url: process.env.VUE_APP_BASE_API + "/gysl/ml/importData"
},
};
},
@ -218,6 +205,14 @@ export default {
this.getList();
},
methods: {
tableRowClassName({ row, rowIndex }) {
if (rowIndex === 1) {
return 'warning-row';
} else if (rowIndex === 3) {
return 'success-row';
}
return '';
},
//
handleImport() {
this.upload.open = true;
@ -238,12 +233,20 @@ export default {
submitFileForm() {
this.$refs.upload.submit();
},
/** 查询目列表 */
/** 查询列表 */
getList() {
this.loading = true;
listPost(this.queryParams).then(response => {
this.postList = response.rows;
this.total = response.total;
const params = {
...this.queryParams,
startTime: this.queryParams.updateTimeRange ? this.queryParams.updateTimeRange[0] : undefined,
endTime: this.queryParams.updateTimeRange ? this.queryParams.updateTimeRange[1] : undefined
};
getAllCatalogs(params).then(response => {
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
}).catch(error => {
console.error('API Request Error:', error);
this.loading = false;
});
},
@ -255,11 +258,11 @@ export default {
//
reset() {
this.form = {
postId: undefined,
postCode: undefined,
id: undefined,
postName: undefined,
postSort: 0,
status: "0",
industryCategory: undefined,
industry: undefined,
updateTime: undefined,
remark: undefined
};
this.resetForm("form");
@ -276,47 +279,67 @@ export default {
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.postId)
this.single = selection.length != 1
this.multiple = !selection.length
this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加项目";
this.title = "新增目录";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const postId = row.postId || this.ids
getPost(postId).then(response => {
this.form = response.data;
const catalogId = row.id || this.ids;
editCatalog({ id: catalogId }).then(response => {
const data = response.data;
// updateTime
if (data.updateTime) {
data.updateTime = data.updateTime.split(' ')[0]; //
}
this.form = {
id: data.id,
postName: data.slmllb,
industryCategory: data.gydl,
industry: data.cy,
updateTime: data.updateTime,
remark: data.remark
};
this.open = true;
this.title = "修改项目";
this.title = "修改目录";
}).catch(error => {
console.error('API Request Error:', error);
});
},
/** 详情按钮操作 */
getInfo(row) {
this.$store.commit("SET_CRUMBS", this.$route.meta.title + "详情");
const postIds = row.postId || this.ids;
this.$router.push({ path: `/manage-info/${postIds}` });
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.postId != undefined) {
updatePost(this.form).then(response => {
const formData = {
id: this.form.id,
slmllb: this.form.postName,
gydl: this.form.industryCategory,
cy: this.form.industry,
updateTime: this.form.updateTime,
remark: this.form.remark
};
if (this.form.id !== undefined) {
editCatalog(formData).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).catch(error => {
console.error('API Request Error:', error);
});
} else {
addPost(this.form).then(response => {
addCatalog(formData).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).catch(error => {
console.error('API Request Error:', error);
});
}
}
@ -324,9 +347,9 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
const postIds = row.postId || this.ids;
this.$modal.confirm('是否确认删除项目编号为"' + postIds + '"的数据项?' + '删除这条信息之后有可能找不回来了,请思考一下哟!').then(function () {
return delPost(postIds);
const catalogIds = row.id || this.ids;
this.$modal.confirm('是否确认删除目录编号为"' + catalogIds + '"的数据项?' + '删除这条信息之后有可能找不回来了,请思考一下哟!').then(() => {
return deleteCatalog(catalogIds);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
@ -334,15 +357,14 @@ export default {
},
/** 导出按钮操作 */
handleExport() {
this.download('system/post/export', {
this.download('gysl/ml/export', {
...this.queryParams
}, `post_${new Date().getTime()}.xlsx`)
}, `catalog_${new Date().getTime()}.xlsx`);
}
}
};
</script>
<style scoped>
.headerbox {
background-color: #fff;
@ -373,5 +395,21 @@ export default {
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
display: flex;
width: 100%;
justify-content: space-between;
}
.tablebtn {
display: flex;
gap: .5rem;
}
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>

@ -377,4 +377,5 @@ export default {
margin-top: 1rem;
margin-bottom: 1rem;
}
</style>

@ -0,0 +1,3 @@
<template>
<div>123</div>
</template>
Loading…
Cancel
Save