表格排版更改以及新问题更改

yfy
严飞永 2 months ago
parent e577122bee
commit a91c75bcab

@ -7,10 +7,10 @@ ENV = 'production'
# 苏州工业园区工业上楼管理系统/生产环境
# VUE_APP_BASE_API = ''
VUE_APP_BASE_API = ''
# 测试环境
# 公司测试环境
# VUE_APP_BASE_API = 'http://39.101.188.84:7071'
# 正式环境
VUE_APP_BASE_API = '/api'
# VUE_APP_BASE_API = '/api'

@ -8,3 +8,11 @@ export function governmentGetInfo(params) {
params
})
}
export function getSingleLoginHtml() {
return request({
url: '/system/singlelogin/login',
method: 'get',
responseType: 'text' // 确保以文本形式接收响应
}).then(res => res)
}

@ -52,7 +52,7 @@
//
limit: {
type: Number,
default: 1,
default: 3,
},
// (MB)
fileSize: {

@ -13,7 +13,7 @@ import { governmentGetInfo } from "@/api/login/index";
NProgress.configure({ showSpinner: false });
const whiteList = ["/login", "/register"];
const whiteList = ["/login", "/register","/system/singlelogin/login"];
const isWhiteList = (path) => {
return whiteList.some((pattern) => isPathMatch(pattern, path));
@ -25,7 +25,7 @@ router.beforeEach((to, from, next) => {
}
NProgress.start();
// 提取所有 URL 参数(包括 hash 后面的部分)
const search =
window.location.search || window.location.hash.split("?")[1] || "";
const params = new URLSearchParams(search);
@ -33,7 +33,6 @@ router.beforeEach((to, from, next) => {
const signature = params.get("signature");
const timespan = params.get("timespan");
console.log(userToken, signature, timespan, "参数");
// 如果已经处理过一次登录逻辑,不再重复执行
if (from.path === to.path && store.getters.token) {
@ -73,7 +72,7 @@ router.beforeEach((to, from, next) => {
// 如果已有角色信息,直接跳转
if (store.getters.roles.length > 0) {
next("/"); // 或者 next(to.query.redirect || "/")
next("/");
return;
}

@ -17,7 +17,7 @@ import Layout from "@/layout";
* redirect: noRedirect // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
* name:'router-name' // 设定路由的名字,一定要填写不然使用<keep-alive>时会出现各种问题
* query: '{"id": 1, "name": "ry"}' // 访问路由的默认传递参数
* roles: ['admin', 'common','gov'] // 访问路由的角色权限
* roles: ['admin', 'common','gov'] // 访问路由的角色权限
* permissions: ['a:a:a', 'b:b:b'] // 访问路由的菜单权限
* meta : {
noCache: true // 如果设置为true则不会被 <keep-alive> 缓存(默认 false)
@ -44,9 +44,9 @@ export const constantRoutes = [
{
path: "/login",
// 正式环境登录页
component: () => import("@/views/login"),
// component: () => import("@/views/login"),
// 测试
// component: () => import("@/views/login_v1"),
component: () => import("@/views/login_v1"),
hidden: true,
},
{

@ -1,31 +1,43 @@
<template>
<div style="height: 100%">
<div class="container">
<!-- 项目手册管理 -->
<!-- 表单查询项 -->
<div v-if="!previewMode" class="headerbox">
<el-form size="small" :inline="true" label-width="200">
<el-row>
<el-col :span="5">
<el-form-item label="手册名称" style="width: 100%;">
<el-input v-model="queryParams.name" placeholder="请输入手册名称" clearable />
<el-form-item label="手册名称" style="width: 100%">
<el-input
v-model="queryParams.name"
placeholder="请输入手册名称"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="创建时间">
<el-date-picker
v-model="queryParams.startTime"
type="date"
<el-date-picker
v-model="queryParams.startTime"
type="date"
placeholder="选择日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 100%;">
style="width: 100%"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
>查询</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
@ -33,7 +45,7 @@
</div>
<!-- 表格内容区 -->
<div v-if="!previewMode" class="tablebox">
<div v-if="!previewMode" class="tablebox table-container">
<div class="tablebtntwo">
<!-- <el-button
type="primary"
@ -51,44 +63,46 @@
>新增</el-button
>
</div>
<el-table v-loading="loading" :data="postList">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center">
<template slot-scope="scope">
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="手册名称" align="center" prop="name" />
<el-table-column label="创建时间" align="center" prop="createTime" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button
type="text"
style="color: #409eff"
@click="handlePreview(scope.row)"
>预览</el-button
>
<el-button
type="text"
style="color: #67c23a"
@click="handleEdit(scope.row)"
>编辑</el-button
>
<el-button
type="text"
style="color: #409eff"
@click="handleExport(scope.row.id)"
>项目手册导出</el-button
>
<el-button
type="text"
style="color: #f56c6c"
@click="handleDelete(scope.row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<div class="table-wrapper">
<el-table v-loading="loading" :data="postList" height="100%">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center">
<template slot-scope="scope">
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="手册名称" align="center" prop="name" />
<el-table-column label="创建时间" align="center" prop="createTime" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button
type="text"
style="color: #409eff"
@click="handlePreview(scope.row)"
>预览</el-button
>
<el-button
type="text"
style="color: #67c23a"
@click="handleEdit(scope.row)"
>编辑</el-button
>
<el-button
type="text"
style="color: #409eff"
@click="handleExport(scope.row.id)"
>项目手册导出</el-button
>
<el-button
type="text"
style="color: #f56c6c"
@click="handleDelete(scope.row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<pagination
v-show="total > 0"
:total="total"
@ -110,7 +124,6 @@
</div>
<el-button-group class="navigation-buttons">
<el-button
type="primary"
icon="el-icon-arrow-left"
:disabled="currentPage <= 1"
@ -118,7 +131,6 @@
>上一页</el-button
>
<el-button
type="primary"
icon="el-icon-arrow-right"
:disabled="currentPage >= pageCount"
@ -127,7 +139,6 @@
>
</el-button-group>
<el-button
type="info"
icon="el-icon-back"
@click="previewMode = false"
@ -247,13 +258,12 @@
label="项目名称"
align="center"
></el-table-column>
<el-table-column
prop="xzfl"
label="现状分类"
align="center"
>
<el-table-column prop="xzfl" label="现状分类" align="center">
<template slot-scope="scope">
<dict-tag :options="dict.type.xzfl" :value="scope.row.xzfl"/>
<dict-tag
:options="dict.type.xzfl"
:value="scope.row.xzfl"
/>
</template>
</el-table-column>
<el-table-column
@ -399,12 +409,12 @@ export default {
FileUpload,
},
// 使
dicts: ['xzfl'],
dicts: ["xzfl"],
data() {
return {
queryParams: {
current: 1,
size: 10,
size: 20,
name: "",
startTime: "",
},
@ -554,7 +564,7 @@ export default {
this.editingHandbook = null;
this.selectedProjectIds = [];
this.selectedProjects = [];
this.projectParams.pageNum = 1 ;
this.projectParams.pageNum = 1;
this.getProjectList();
},
handleAddDialogClose(done) {
@ -618,7 +628,7 @@ export default {
handleRowClick(row) {
this.$refs.projectTable.toggleRowSelection(row);
const selectedRows = this.$refs.projectTable.selection;
const isSelected = selectedRows.some(item => item.id === row.id);
const isSelected = selectedRows.some((item) => item.id === row.id);
if (isSelected) {
//
if (!this.selectedProjectIds.includes(row.id)) {
@ -627,8 +637,12 @@ export default {
}
} else {
//
this.selectedProjectIds = this.selectedProjectIds.filter(id => id !== row.id);
this.selectedProjects = this.selectedProjects.filter(item => item.id !== row.id);
this.selectedProjectIds = this.selectedProjectIds.filter(
(id) => id !== row.id
);
this.selectedProjects = this.selectedProjects.filter(
(item) => item.id !== row.id
);
}
},
@ -662,7 +676,7 @@ export default {
if (!this.$refs.projectTable) return;
this.$refs.projectTable.clearSelection();
if (!this.selectedProjectIds.length) return;
this.projectList.forEach((row) => {
if (this.selectedProjectIds.includes(row.id)) {
this.$refs.projectTable.toggleRowSelection(row, true);
@ -684,7 +698,9 @@ export default {
if (this.endForm.imageUrl) data.tailingImg = this.endForm.imageUrl;
if (this.endForm.subtitle) data.tail = this.endForm.subtitle;
if (this.selectedProjects && this.selectedProjects.length > 0) {
data.xmId = this.selectedProjects.map((project) => project.id).join(",");
data.xmId = this.selectedProjects
.map((project) => project.id)
.join(",");
}
if (this.editingHandbook) {
@ -715,10 +731,9 @@ export default {
},
//
handleSelect(selection, row) {
//
const isSelected = selection.some(item => item.id === row.id);
const isSelected = selection.some((item) => item.id === row.id);
if (isSelected) {
//
if (!this.selectedProjectIds.includes(row.id)) {
@ -727,39 +742,48 @@ export default {
}
} else {
//
this.selectedProjectIds = this.selectedProjectIds.filter(id => id !== row.id);
this.selectedProjects = this.selectedProjects.filter(item => item.id !== row.id);
this.selectedProjectIds = this.selectedProjectIds.filter(
(id) => id !== row.id
);
this.selectedProjects = this.selectedProjects.filter(
(item) => item.id !== row.id
);
}
},
// /
handleSelectAll(selection) {
// ID
const currentPageIds = this.projectList.map(item => item.id);
const currentPageIds = this.projectList.map((item) => item.id);
//
if (selection.length === 0) {
// -
this.selectedProjectIds = this.selectedProjectIds.filter(
id => !currentPageIds.includes(id)
(id) => !currentPageIds.includes(id)
);
this.selectedProjects = this.selectedProjects.filter(
project => !currentPageIds.includes(project.id)
(project) => !currentPageIds.includes(project.id)
);
} else {
// -
//
const projectIdsNotInCurrentPage = this.selectedProjectIds.filter(
id => !currentPageIds.includes(id)
(id) => !currentPageIds.includes(id)
);
const projectsNotInCurrentPage = this.selectedProjects.filter(
project => !currentPageIds.includes(project.id)
(project) => !currentPageIds.includes(project.id)
);
//
this.selectedProjectIds = [...projectIdsNotInCurrentPage, ...currentPageIds];
this.selectedProjects = [...projectsNotInCurrentPage, ...this.projectList];
this.selectedProjectIds = [
...projectIdsNotInCurrentPage,
...currentPageIds,
];
this.selectedProjects = [
...projectsNotInCurrentPage,
...this.projectList,
];
}
},
//
@ -778,11 +802,11 @@ export default {
imageUrl: detail.tailingImg,
subtitle: detail.tail,
};
//
this.selectedProjectIds = [];
this.selectedProjects = [];
if (detail.xmId) {
const projectIds = detail.xmId.split(",");
this.selectedProjectIds = projectIds.map((id) => Number(id));
@ -790,7 +814,7 @@ export default {
if (detail.projectName && Array.isArray(detail.projectName)) {
this.selectedProjects = detail.projectName;
}
this.projectParams.pageNum = 1 ;
this.projectParams.pageNum = 1;
this.getProjectList();
}
@ -1122,12 +1146,11 @@ export default {
transition: all 0.3s;
margin-right: 30px;
::v-deep .el-input {
flex: 1!important;
max-width: 100%!important;
flex: 1 !important;
max-width: 100% !important;
}
::v-deep .el-input__inner {
width: 100%!important;
width: 100% !important;
}
&:hover {
box-shadow: 0 0 0 1px #409eff;
@ -1192,22 +1215,22 @@ export default {
overflow-y: auto;
padding-right: 10px;
flex: 1;
/* 自定义滚动条样式 */
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 4px;
}
&::-webkit-scrollbar-thumb {
background: #c0c4cc;
border-radius: 4px;
}
&::-webkit-scrollbar-thumb:hover {
background: #909399;
}
@ -1221,10 +1244,10 @@ export default {
border-radius: 4px;
position: relative;
transition: all 0.2s;
&:hover {
background-color: #f0f0f0;
.remove-btn {
opacity: 1;
}
@ -1250,9 +1273,9 @@ export default {
color: #909399;
padding: 2px;
margin-left: 8px;
&:hover {
color: #F56C6C;
color: #f56c6c;
opacity: 1;
transform: scale(1.1);
}
@ -1267,4 +1290,60 @@ export default {
::v-deep .el-dialog__body {
padding: 20px 15px !important;
}
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
border: 1px solid #eee;
overflow: hidden;
}
.table-header {
margin-bottom: 1rem;
width: 99.7%;
display: flex;
justify-content: space-between;
}
.table-wrapper {
flex: 1;
min-height: 0;
overflow: hidden;
}
.el-table {
height: 100% !important;
}
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
</style>

@ -1,77 +1,153 @@
<template>
<div>
<div class="container">
<!-- 表单查询项 -->
<div class="headerbox">
<el-form ref="queryForm" :model="queryParams" size="small" label-width="100px">
<el-form
ref="queryForm"
:model="queryParams"
size="small"
label-width="100px"
align="left"
>
<el-row>
<el-col :span="5">
<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 label="文件名称" prop="name" style="width: 100%;margin-left: -30px;">
<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="文件类型" 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-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="5">
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="medium" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="medium" @click="resetQuery"></el-button>
<el-button
type="primary"
icon="el-icon-search"
size="medium"
@click="handleQuery"
>查询</el-button
>
<el-button
icon="el-icon-refresh"
size="medium"
@click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<div class="table-container">
<!-- 导出行 -->
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<div class="table-header">
<el-row :gutter="4" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" size="medium" @click="handleAdd"></el-button>
<el-button
type="primary"
icon="el-icon-plus"
size="medium"
@click="handleAdd"
>新增</el-button
>
</el-col>
</el-row>
<el-row :gutter="10" class="mb8">
<el-row :gutter="4" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-download" size="medium" @click="handleImport"></el-button>
<el-button
type="primary"
icon="el-icon-download"
size="medium"
@click="handleImport"
>导入</el-button
>
</el-col>
</el-row>
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<el-table-column label="文件名称" align="center" prop="name" />
<el-table-column label="类型" align="center">
<template slot-scope="scope">
<a v-if="scope.row.lx === '3'" :href="scope.row.wz" target="_blank"
style="color: #409EFF; text-decoration: underline;">
<dict-tag :options="dict.type.wjlx" :value="scope.row.lx" />
</a>
<span v-else>
<dict-tag :options="dict.type.wjlx" :value="scope.row.lx" />
</span>
</template>
</el-table-column>
<el-table-column label="附件" align="center" prop="fj">
<template slot-scope="scope">
{{ getFileName(scope.row.fj) || "未上传" }}
</template>
</el-table-column>
<el-table-column label="上传用户" align="center" prop="scyh" />
<el-table-column label="上传时间" align="center" prop="scsj" :formatter="dateFormat" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="medium" type="text" @click="getInfo(scope.row)"></el-button>
<el-button size="medium" type="text" @click="handleUpdate(scope.row)" style="color: #67c23a">编辑</el-button>
<el-button size="medium" type="text" @click="handleDelete(scope.row)" style="color: red;">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current" :limit.sync="queryParams.size"
@pagination="getList" />
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
height="100%"
@selection-change="handleSelectionChange"
>
<el-table-column label="文件名称" align="center" prop="name" />
<el-table-column label="类型" align="center">
<template slot-scope="scope">
<a
v-if="scope.row.lx === '3'"
:href="scope.row.wz"
target="_blank"
style="color: #409eff; text-decoration: underline"
>
<dict-tag :options="dict.type.wjlx" :value="scope.row.lx" />
</a>
<span v-else>
<dict-tag :options="dict.type.wjlx" :value="scope.row.lx" />
</span>
</template>
</el-table-column>
<el-table-column label="附件" align="center" prop="fj">
<template slot-scope="scope">
{{ getFileName(scope.row.fj) || "未上传" }}
</template>
</el-table-column>
<el-table-column label="上传用户" align="center" prop="scyh" />
<el-table-column
label="上传时间"
align="center"
prop="scsj"
:formatter="dateFormat"
/>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button size="medium" type="text" @click="getInfo(scope.row)"
>详情</el-button
>
<el-button
size="medium"
type="text"
@click="handleUpdate(scope.row)"
style="color: #67c23a"
>编辑</el-button
>
<el-button
size="medium"
type="text"
@click="handleDelete(scope.row)"
style="color: red"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
<!-- 添加或修改项目对话框 -->
@ -81,16 +157,33 @@
<el-input v-model="form.name" placeholder="请输入文件名称" />
</el-form-item>
<el-form-item label="类型" prop="lx">
<el-select v-model="form.lx" placeholder="请选择文件类型" style="width: 100%;" @change="handleTypeChange">
<el-option v-for="dict in dict.type.wjlx" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
<el-select
v-model="form.lx"
placeholder="请选择文件类型"
style="width: 100%"
@change="handleTypeChange"
>
<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 v-if="form.lx === '3'" label="网址" prop="wz">
<el-input v-model="form.wz" placeholder="请输入网址" class="input-with-select">
<el-input
v-model="form.wz"
placeholder="请输入网址"
class="input-with-select"
>
<template slot="prepend">
<el-select v-model="select" style="width: 5.7rem;" @change="handleProtocolChange">
<el-select
v-model="select"
style="width: 5.7rem"
@change="handleProtocolChange"
>
<el-option label="http" value="http"></el-option>
<el-option label="https" value="https"></el-option>
</el-select>
@ -102,8 +195,13 @@
<el-input v-model="form.scyh" placeholder="请输入上传用户" />
</el-form-item>
<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-date-picker
v-model="form.scsj"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
style="width: 100%"
/>
</el-form-item>
<el-form-item v-if="form.lx !== '3'" label="附件" prop="fj">
<fileload v-model="form.fj"></fileload>
@ -119,15 +217,33 @@
</el-dialog>
<!-- 详情项目对话框 -->
<el-dialog :title="title" :visible.sync="detailOpen" width="40rem" append-to-body>
<el-form ref="detailForm" :model="detailForm" label-width="7rem" :disabled="true">
<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
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 v-if="detailForm.lx === '3'" label="网址" prop="wz">
@ -137,8 +253,13 @@
<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-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" />
@ -151,16 +272,35 @@
</el-dialog>
<!-- 导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<el-dialog
:title="upload.title"
:visible.sync="upload.open"
width="400px"
append-to-body
>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
@click="importTemplate">下载模板</el-link>
<el-link
type="primary"
:underline="false"
style="font-size: 12px; vertical-align: baseline"
@click="importTemplate"
>下载模板</el-link
>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
@ -173,14 +313,20 @@
<script>
import { getToken } from "@/utils/auth";
import { getXmzskPage, addXmzsk, updateXmzsk, deleteXmzsk, getXmzskById } from "@/api/ManageApi/index";
import fileload from "@/components/FileUpload/index.vue"
import {
getXmzskPage,
addXmzsk,
updateXmzsk,
deleteXmzsk,
getXmzskById,
} from "@/api/ManageApi/index";
import fileload from "@/components/FileUpload/index.vue";
export default {
dicts: ['wjlx'],
dicts: ["wjlx"],
name: "Xmzsk",
components: {
fileload
fileload,
},
data() {
return {
@ -209,7 +355,7 @@ export default {
current: 1,
size: 10,
name: undefined,
lx: undefined
lx: undefined,
},
//
form: {
@ -225,7 +371,7 @@ export default {
createTime: undefined,
updateBy: undefined,
updateId: undefined,
updateTime: undefined
updateTime: undefined,
},
//
detailForm: {
@ -241,28 +387,24 @@ export default {
createTime: undefined,
updateBy: undefined,
updateId: undefined,
updateTime: undefined
updateTime: undefined,
},
//
rules: {
name: [
{ required: true, message: "文件名称不能为空", trigger: "blur" }
{ required: true, message: "文件名称不能为空", trigger: "blur" },
],
lx: [
{ required: true, message: "文件类型不能为空", trigger: "change" }
],
wz: [
{ required: true, message: "网址不能为空", trigger: "change" }
{ required: true, message: "文件类型不能为空", trigger: "change" },
],
wz: [{ required: true, message: "网址不能为空", trigger: "change" }],
scyh: [
{ required: true, message: "上传用户不能为空", trigger: "blur" }
{ required: true, message: "上传用户不能为空", trigger: "blur" },
],
scsj: [
{ required: true, message: "上传时间不能为空", trigger: "change" }
{ required: true, message: "上传时间不能为空", trigger: "change" },
],
fj: [
{ required: true, message: "附件不能为空", trigger: "blur" }
]
fj: [{ required: true, message: "附件不能为空", trigger: "blur" }],
},
//
// fileTypeMap: {
@ -271,7 +413,7 @@ export default {
// 3: "",
// 4: "",
// },
select: 'http', //
select: "http", //
//
upload: {
//
@ -298,24 +440,24 @@ export default {
if (cellValue) {
const date = new Date(cellValue);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
return `${year}-${month}-${day}`;
}
return '';
return "";
},
//
getFileName(filePath) {
if (filePath) {
return filePath.split('/').pop();
return filePath.split("/").pop();
}
return '';
return "";
},
querySearchAsync(queryString, cb) {
let results = [];
getXmzskPage({ name: queryString }).then(res => {
res.data.records.forEach(item => {
getXmzskPage({ name: queryString }).then((res) => {
res.data.records.forEach((item) => {
results.push({
value: item.name,
id: item.id,
@ -327,14 +469,16 @@ export default {
//
getList() {
this.loading = true;
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;
});
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;
});
},
//
cancel() {
@ -356,9 +500,9 @@ export default {
createTime: undefined,
updateBy: undefined,
updateId: undefined,
updateTime: undefined
updateTime: undefined,
};
this.select = 'https'; //
this.select = "https"; //
this.resetForm("form");
},
/** 搜索按钮操作 */
@ -373,7 +517,7 @@ export default {
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
@ -388,7 +532,7 @@ export default {
this.reset();
const catalogId = row.id;
this.form = { ...row };
this.setProtocolType(this.form.wz);
this.setProtocolType(this.form.wz);
this.$nextTick(() => {
this.handleTypeChange(); // DOM
});
@ -397,20 +541,24 @@ export default {
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate(valid => {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id !== undefined) {
updateXmzsk(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).catch();
updateXmzsk(this.form)
.then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
})
.catch();
} else {
addXmzsk(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).catch(error => { });
addXmzsk(this.form)
.then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
})
.catch((error) => {});
}
}
});
@ -419,50 +567,57 @@ export default {
handleDelete(row) {
const catalogIds = row.id || this.ids;
const getFileName = row.name; // pjys
this.$modal.confirm(`是否确认删除"${getFileName}"的数据项?`).then(() => {
return deleteXmzsk([catalogIds]);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => { });
this.$modal
.confirm(`是否确认删除"${getFileName}"的数据项?`)
.then(() => {
return deleteXmzsk([catalogIds]);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 详情按钮操作 */
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);
});
getXmzskById(catalogId)
.then((response) => {
this.detailForm = { ...response.data };
this.detailOpen = true;
this.title = "项目知识库详情";
})
.catch((error) => {
console.error("API Request Error:", error);
});
},
//
setProtocolType(url) {
if (url) {
if (url.startsWith('https://')) {
this.select = 'https';
} else if (url.startsWith('http://')) {
this.select = 'http';
if (url.startsWith("https://")) {
this.select = "https";
} else if (url.startsWith("http://")) {
this.select = "http";
} else {
this.select = 'http';
this.form.wz = 'http://' + url;
this.select = "http";
this.form.wz = "http://" + url;
}
} else {
this.select = 'http';
this.select = "http";
}
},
//
handleProtocolChange() {
if (this.form.wz && !this.form.wz.startsWith(this.select + '://')) {
this.form.wz = this.select + '://' + this.form.wz.replace(/(http|https):\/\//, '');
if (this.form.wz && !this.form.wz.startsWith(this.select + "://")) {
this.form.wz =
this.select + "://" + this.form.wz.replace(/(http|https):\/\//, "");
}
},
//
handleTypeChange() {
if (this.form.lx !== '3') {
if (this.form.lx !== "3") {
this.form.wz = undefined;
this.select = 'http';
this.select = "http";
// fj
this.rules.fj[0].required = true;
} else {
@ -471,7 +626,7 @@ export default {
this.rules.fj[0].required = false;
}
//
this.$refs.form.clearValidate('fj');
this.$refs.form.clearValidate("fj");
},
/**导出 */
@ -507,8 +662,8 @@ export default {
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
@ -518,42 +673,64 @@ export default {
submitFileForm() {
this.$refs.upload.submit();
},
}
},
};
</script>
<style scoped>
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.tablebox {
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: .5rem;
border-radius: 0.5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
overflow: hidden;
}
.tablehead {
.table-header {
margin-bottom: 1rem;
width: 99.7%;
display: flex;
justify-content: space-between;
align-items: center;
}
.headbtn {
display: flex;
.table-wrapper {
flex: 1;
min-height: 0;
overflow: hidden;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
width: 100%;
display: flex;
justify-content: space-between;
.el-table {
height: 100% !important;
}
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
</style>
</style>

@ -1,203 +1,281 @@
<template>
<div>
<!-- 单片材料管理 -->
<!-- 表单查询项 -->
<div v-if="!previewMode" class="headerbox">
<el-form size="small" :inline="true" label-width="200">
<el-row>
<el-col :span="5">
<el-form-item label="文件标题" style="width: 100%;">
<el-input v-model="queryParams.title" placeholder="请输入模板标题" clearable />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="发布时间">
<el-date-picker v-model="queryParams.startTime" type="date" placeholder="选择日期"
style="width: 100%;"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search"
@click="handleQuery">查询</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="container">
<!-- 单片材料管理 -->
<!-- 表单查询项 -->
<div v-if="!previewMode" class="headerbox">
<el-form size="small" :inline="true" label-width="200">
<el-row>
<el-col :span="5">
<el-form-item label="文件标题" style="width: 100%">
<el-input
v-model="queryParams.title"
placeholder="请输入模板标题"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="发布时间">
<el-date-picker
v-model="queryParams.startTime"
type="date"
placeholder="选择日期"
style="width: 100%"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
>查询</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div v-if="!previewMode" class="tablebox">
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="文件标题" align="center" prop="title" />
<el-table-column label="发布单位" align="center" prop="unit" />
<!-- <el-table-column label="发布人" align="center" prop="author" /> -->
<el-table-column label="发布时间" align="center" prop="createTime" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button type="text"
@click="handlePreview(scope.row)">预览</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current"
:limit.sync="queryParams.size" @pagination="getList" />
</div>
<!-- 表格内容区 -->
<div v-if="!previewMode" class="table-container">
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
height="100%"
>
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="文件标题" align="center" prop="title" />
<el-table-column label="发布单位" align="center" prop="unit" />
<!-- <el-table-column label="发布人" align="center" prop="author" /> -->
<el-table-column label="发布时间" align="center" prop="createTime" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button type="text" @click="handlePreview(scope.row)"
>预览</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
<!-- DOCX预览区域 -->
<div v-if="previewMode" class="previewbox">
<div class="previewhead">
<h3>{{ previewData.title }}</h3>
<div class="headtwo">
<el-button @click="previewMode = false">返回</el-button>
</div>
</div>
<div class="previewcontent">
<vue-office-docx :src="docxFileData"
style="width: 100%; height: calc(100vh - 250px); border: 1px solid #eee;"
@rendered="renderedHandler" />
</div>
<!-- DOCX预览区域 -->
<div v-if="previewMode" class="previewbox">
<div class="previewhead">
<h3>{{ previewData.title }}</h3>
<div class="headtwo">
<el-button @click="previewMode = false">返回</el-button>
</div>
</div>
<div class="previewcontent">
<vue-office-docx
:src="docxFileData"
style="
width: 100%;
height: calc(100vh - 250px);
border: 1px solid #eee;
"
@rendered="renderedHandler"
/>
</div>
</div>
</div>
</template>
<script>
import VueOfficeDocx from '@vue-office/docx'
import axios from 'axios'
import VueOfficeDocx from "@vue-office/docx";
import axios from "axios";
export default {
components: {
'vue-office-docx': VueOfficeDocx
},
data() {
return {
//
queryParams: {
current: 1,
size: 10,
title: undefined,
startTime: undefined
},
//
allPostList: [
{ id: 1, title: 'xxxx项目单体材料模板', unit: '经发委', author: '', createTime: '2024-08-20', fileUrl: 'docx/单体材料模板.docx' },
],
//
postList: [],
//
loading: false,
//
total: 0,
//
previewMode: false,
//
previewData: {},
// DOCX
docxFileData: null
components: {
"vue-office-docx": VueOfficeDocx,
},
data() {
return {
//
queryParams: {
current: 1,
size: 10,
title: undefined,
startTime: undefined,
},
//
allPostList: [
{
id: 1,
title: "xxxx项目单体材料模板",
unit: "经发委",
author: "",
createTime: "2024-08-20",
fileUrl: "docx/单体材料模板.docx",
},
],
//
postList: [],
//
loading: false,
//
total: 0,
//
previewMode: false,
//
previewData: {},
// DOCX
docxFileData: null,
};
},
created() {
this.getList();
},
methods: {
//
getList() {
this.loading = true;
//
let filteredData = this.allPostList.filter((item) => {
if (
this.queryParams.title &&
!item.title.includes(this.queryParams.title)
) {
return false;
}
if (
this.queryParams.startTime &&
new Date(item.createTime) < new Date(this.queryParams.startTime)
) {
return false;
}
return true;
});
//
const start = (this.queryParams.current - 1) * this.queryParams.size;
const end = start + this.queryParams.size;
this.postList = filteredData.slice(start, end);
this.total = filteredData.length;
this.loading = false;
},
created() {
this.getList()
//
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
methods: {
//
getList() {
this.loading = true;
//
let filteredData = this.allPostList.filter(item => {
if (this.queryParams.title && !item.title.includes(this.queryParams.title)) {
return false;
}
if (this.queryParams.startTime && new Date(item.createTime) < new Date(this.queryParams.startTime)) {
return false;
}
return true;
});
//
const start = (this.queryParams.current - 1) * this.queryParams.size;
const end = start + this.queryParams.size;
this.postList = filteredData.slice(start, end);
this.total = filteredData.length;
this.loading = false;
},
//
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
//
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
title: undefined,
startTime: undefined
};
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length !== 1
this.multiple = !selection.length
},
//
handlePreview(row) {
this.previewMode = true
this.previewData = row
this.loadDocxFile(row.fileUrl)
},
// DOCX
loadDocxFile(url) {
this.docxFileData = null
axios.get(url, { responseType: 'arraybuffer' })
.then(response => {
this.docxFileData = response.data
})
.catch(error => {
console.error('加载文档失败:', error)
this.$message.error('文档加载失败')
})
},
//
renderedHandler() {
console.log('文档渲染完成')
}
}
}
//
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
title: undefined,
startTime: undefined,
};
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
//
handlePreview(row) {
this.previewMode = true;
this.previewData = row;
this.loadDocxFile(row.fileUrl);
},
// DOCX
loadDocxFile(url) {
this.docxFileData = null;
axios
.get(url, { responseType: "arraybuffer" })
.then((response) => {
this.docxFileData = response.data;
})
.catch((error) => {
console.error("加载文档失败:", error);
this.$message.error("文档加载失败");
});
},
//
renderedHandler() {
console.log("文档渲染完成");
},
},
};
</script>
<style scoped>
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
border: 1px solid #eee;
overflow: hidden;
}
.tablebtntwo {
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 1rem;
margin-bottom: 1rem;
.table-header {
margin-bottom: 1rem;
width: 99.7%;
display: flex;
justify-content: space-between;
}
.table-wrapper {
flex: 1;
min-height: 0;
overflow: hidden;
}
.el-table {
height: 100% !important;
}
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
.previewbox {
width: 99%;
margin-left: 0.5%;
@ -233,5 +311,7 @@ export default {
.previewcontent {
margin-top: 1rem;
width: 100%;
height:100%;
overflow-y:auto
}
</style>
</style>

@ -1,201 +1,279 @@
<template>
<div>
<!-- 报告管理 -->
<!-- 表单查询项 -->
<div v-if="!previewMode" class="headerbox">
<el-form size="small" :inline="true" label-width="200">
<el-row>
<el-col :span="5">
<el-form-item label="文件标题" style="width: 100%;">
<el-input v-model="queryParams.title" placeholder="请输入模板标题" clearable />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="发布时间">
<el-date-picker v-model="queryParams.startTime" type="date" placeholder="选择日期"
style="width: 100%;"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search"
@click="handleQuery">查询</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="container">
<!-- 报告管理 -->
<!-- 表单查询项 -->
<div v-if="!previewMode" class="headerbox">
<el-form size="small" :inline="true" label-width="200">
<el-row>
<el-col :span="5">
<el-form-item label="文件标题" style="width: 100%">
<el-input
v-model="queryParams.title"
placeholder="请输入模板标题"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="发布时间">
<el-date-picker
v-model="queryParams.startTime"
type="date"
placeholder="选择日期"
style="width: 100%"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
>查询</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div v-if="!previewMode" class="tablebox">
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="文件标题" align="center" prop="title" />
<el-table-column label="发布单位" align="center" prop="unit" />
<el-table-column label="发布时间" align="center" prop="createTime" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button type="text"
@click="handlePreview(scope.row)">预览</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current"
:limit.sync="queryParams.size" @pagination="getList" />
</div>
<!-- 表格内容区 -->
<div v-if="!previewMode" class="table-container">
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
height="100%"
>
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="文件标题" align="center" prop="title" />
<el-table-column label="发布单位" align="center" prop="unit" />
<el-table-column label="发布时间" align="center" prop="createTime" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button type="text" @click="handlePreview(scope.row)"
>预览</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
<!-- DOCX预览区域 -->
<div v-if="previewMode" class="previewbox">
<div class="previewhead">
<h3>{{ previewData.title }}</h3>
<div class="headtwo">
<el-button @click="previewMode = false">返回</el-button>
</div>
</div>
<div class="previewcontent">
<vue-office-docx :src="docxFileData"
style="width: 100%; height: calc(100vh - 250px); border: 1px solid #eee;"
@rendered="renderedHandler" />
</div>
<!-- DOCX预览区域 -->
<div v-if="previewMode" class="previewbox">
<div class="previewhead">
<h3>{{ previewData.title }}</h3>
<div class="headtwo">
<el-button @click="previewMode = false">返回</el-button>
</div>
</div>
<div class="previewcontent">
<vue-office-docx
:src="docxFileData"
style="
width: 100%;
height: calc(100vh - 250px);
border: 1px solid #eee;
"
@rendered="renderedHandler"
/>
</div>
</div>
</div>
</template>
<script>
import VueOfficeDocx from '@vue-office/docx'
import axios from 'axios'
import VueOfficeDocx from "@vue-office/docx";
import axios from "axios";
export default {
components: {
'vue-office-docx': VueOfficeDocx
},
data() {
return {
//
queryParams: {
current: 1,
size: 10,
title: undefined,
startTime: undefined
},
//
allPostList: [
{ id: 1, title: '苏州工业园区总体报告模板', unit: '经发委', author: '', createTime: '2024-08-20', fileUrl: 'docx/苏州工业园区总体报告模板.docx' },
],
//
postList: [],
//
loading: false,
//
total: 0,
//
previewMode: false,
//
previewData: {},
// DOCX
docxFileData: null
components: {
"vue-office-docx": VueOfficeDocx,
},
data() {
return {
//
queryParams: {
current: 1,
size: 10,
title: undefined,
startTime: undefined,
},
//
allPostList: [
{
id: 1,
title: "苏州工业园区总体报告模板",
unit: "经发委",
author: "",
createTime: "2024-08-20",
fileUrl: "docx/苏州工业园区总体报告模板.docx",
},
],
//
postList: [],
//
loading: false,
//
total: 0,
//
previewMode: false,
//
previewData: {},
// DOCX
docxFileData: null,
};
},
created() {
this.getList();
},
methods: {
//
getList() {
this.loading = true;
//
let filteredData = this.allPostList.filter((item) => {
if (
this.queryParams.title &&
!item.title.includes(this.queryParams.title)
) {
return false;
}
if (
this.queryParams.startTime &&
new Date(item.createTime) < new Date(this.queryParams.startTime)
) {
return false;
}
return true;
});
//
const start = (this.queryParams.current - 1) * this.queryParams.size;
const end = start + this.queryParams.size;
this.postList = filteredData.slice(start, end);
this.total = filteredData.length;
this.loading = false;
},
created() {
this.getList()
//
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
methods: {
//
getList() {
this.loading = true;
//
let filteredData = this.allPostList.filter(item => {
if (this.queryParams.title && !item.title.includes(this.queryParams.title)) {
return false;
}
if (this.queryParams.startTime && new Date(item.createTime) < new Date(this.queryParams.startTime)) {
return false;
}
return true;
});
//
const start = (this.queryParams.current - 1) * this.queryParams.size;
const end = start + this.queryParams.size;
this.postList = filteredData.slice(start, end);
this.total = filteredData.length;
this.loading = false;
},
//
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
//
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
title: undefined,
startTime: undefined
};
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length !== 1
this.multiple = !selection.length
},
//
handlePreview(row) {
this.previewMode = true
this.previewData = row
this.loadDocxFile(row.fileUrl)
},
// DOCX
loadDocxFile(url) {
this.docxFileData = null
axios.get(url, { responseType: 'arraybuffer' })
.then(response => {
this.docxFileData = response.data
})
.catch(error => {
console.error('加载文档失败:', error)
this.$message.error('文档加载失败')
})
},
//
renderedHandler() {
console.log('文档渲染完成')
}
}
}
//
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
title: undefined,
startTime: undefined,
};
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
//
handlePreview(row) {
this.previewMode = true;
this.previewData = row;
this.loadDocxFile(row.fileUrl);
},
// DOCX
loadDocxFile(url) {
this.docxFileData = null;
axios
.get(url, { responseType: "arraybuffer" })
.then((response) => {
this.docxFileData = response.data;
})
.catch((error) => {
console.error("加载文档失败:", error);
this.$message.error("文档加载失败");
});
},
//
renderedHandler() {
console.log("文档渲染完成");
},
},
};
</script>
<style scoped>
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
border: 1px solid #eee;
overflow: hidden;
}
.tablebtntwo {
width: 100%;
display: flex;
justify-content: space-between;
margin-top: 1rem;
margin-bottom: 1rem;
.table-header {
margin-bottom: 1rem;
width: 99.7%;
display: flex;
justify-content: space-between;
}
.table-wrapper {
flex: 1;
min-height: 0;
overflow: hidden;
}
.el-table {
height: 100% !important;
}
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
.previewbox {
width: 99%;
margin-left: 0.5%;
@ -231,5 +309,7 @@ export default {
.previewcontent {
margin-top: 1rem;
width: 100%;
height:100%;
overflow-y:auto
}
</style>
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -3,19 +3,19 @@
<!-- 顶部信息 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>企业入驻信息</span>
</div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'">
<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="编辑"
<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="保存"
<img src="@/assets/images/detailsicon/icon-bj@2x.png" alt="保存"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
保存
</el-button>
@ -128,7 +128,7 @@
<span v-else>{{ scope.row.jyfw }}</span>
</template>
</el-table-column>
<el-table-column prop="zzjgdm" label='组织机构代码'>
<!-- <el-table-column prop="zzjgdm" label='组织机构代码'>
<template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model.number="scope.row.zzjgdm"></el-input>
<span v-else>{{ scope.row.zzjgdm }}</span>
@ -139,7 +139,7 @@
<el-input v-if="scope.row.isEditing" v-model.number="scope.row.swdjhm"></el-input>
<span v-else>{{ scope.row.swdjhm }}</span>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button v-if="scope.row.isEditing" size="medium" type="text" icon="el-icon-check"
@ -263,7 +263,7 @@ export default {
// tableData rzqys
this.form = {
...newVal,
rzqys: this.tableData.length //rzqys
rzqys: this.tableData.length
};
},
immediate: true,

@ -3,13 +3,13 @@
<!-- 顶部信息 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>现场实况</span>
</div>
<div class="topright" v-if="action === 'fill' || !action" style="visibility: hidden;">
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="">
<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,11 +21,11 @@
<img :src="image.src" alt="现场实况" class="image">
<!-- 播放按钮 -->
<div class="player-button">
<img src="../../../assets/images/detailsicon/icon-bf@2x (1).png" alt="">
<img src="@/assets/images/detailsicon/icon-bf@2x (1).png" alt="">
</div>
<!-- 关闭按钮 -->
<div class="close-button" @click="removeImage(index)">
<img src="../../../assets/images/detailsicon/icon-关闭@2x.png" alt="">
<img src="@/assets/images/detailsicon/icon-关闭@2x.png" alt="">
</div>
<!-- 是否在线 -->
<div v-if="image.isOnline" class="online-status online">线</div>

@ -3,13 +3,13 @@
<!-- 顶部信息 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>项目备忘录</span>
</div>
<div class="topright">
<el-button type="primary" size="medium" plain v-if="action === 'fill' || !action || action === 'okay'"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleAdd">
<img src="../../../assets/images/detailsicon/icon-xz@2x.png" alt="新增"
<img src="@/assets/images/detailsicon/icon-xz@2x.png" alt="新增"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增
</el-button>
@ -34,9 +34,9 @@
<div class="itemtwo">{{ memo.remark }}</div>
<div class="itemthree">记录人{{ memo.createBy }}</div>
<div class="iconguanbi" @click="handleDeleteMemo(memo.id)"> <img
src="../../../assets/images/icon-关闭-项目备忘录@2x.png" alt=""></div>
src="@/assets/images/icon-关闭-项目备忘录@2x.png" alt=""></div>
<div class="iconguanbi2" @click="handleEditMemo(memo)"> <img
src="../../../assets/images/detailsicon/icon-bj@2x.png" alt=""></div>
src="@/assets/images/detailsicon/icon-bj@2x.png" alt=""></div>
</div>
<div v-if="memos.length === 0" class="no-data"
style="width: 100%; display: flex;align-items: center;justify-content: center;color: gray;">

@ -3,13 +3,13 @@
<!-- 顶部信息 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>五要素模型信息</span>
</div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'">
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="toggleEditAll">
<img src="../../../assets/images/detailsicon/icon-bj@2x.png" alt="编辑"
<img src="@/assets/images/detailsicon/icon-bj@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
{{ isEditingAll ? '保存' : '编辑' }}
</el-button>

@ -3,19 +3,19 @@
<!-- 顶部信息 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>月度进展信息</span>
</div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'">
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleAdd">
<img src="../../../assets/images/detailsicon/icon-xz@2x.png" alt="新增"
<img src="@/assets/images/detailsicon/icon-xz@2x.png" alt="新增"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增
</el-button>
<el-button type="primary" size="medium" plain v-if="checkRole(['admin', 'common','gov'])"
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="导出"
<img src="@/assets/images/detailsicon/icon-dc@2x.png" alt="导出"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
</el-button>

@ -3,26 +3,26 @@
<!-- 顶部信息 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>其他信息</span>
</div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'">
<el-button type="primary" size="medium" plain v-if="checkRole(['admin', 'common','gov'])"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="openDialog('add')">
<img src="../../../assets/images/detailsicon/icon-bj@2x.png" alt="新增"
<img src="@/assets/images/detailsicon/icon-bj@2x.png" alt="新增"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增
</el-button>
<el-button type="primary" size="medium" plain v-if="action === 'fill' || !action || action === 'okay'"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="toggleEditMode"
:loading="saveLoading">
<img src="../../../assets/images/detailsicon/icon-bj@2x.png" alt="编辑"
<img src="@/assets/images/detailsicon/icon-bj@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
{{ isEditMode ? '保存' : '编辑' }}
</el-button>
<el-button type="primary" size="medium" plain v-if="checkRole(['admin', 'common','gov'])"
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="导出"
<img src="@/assets/images/detailsicon/icon-dc@2x.png" alt="导出"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
</el-button>

@ -3,25 +3,25 @@
<!-- 顶部信息 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>规划信息</span>
</div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'">
<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="编辑"
<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="保存"
<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 v-if="checkRole(['admin', 'common','gov'])"
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="导出"
<img src="@/assets/images/detailsicon/icon-dc@2x.png" alt="导出"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
</el-button>

@ -3,19 +3,19 @@
<!-- 顶部操作栏 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>项目图例</span>
</div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'">
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleAdd">
<img src="../../../assets/images/detailsicon/icon-xz@2x.png" alt="新增"
<img src="@/assets/images/detailsicon/icon-xz@2x.png" alt="新增"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增
</el-button>
<el-button type="primary" size="medium" plain v-if="action === 'fill' || !action || action === 'okay'"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleEdit">
<img src="../../../assets/images/detailsicon/icon-xz@2x.png" alt="编辑"
<img src="@/assets/images/detailsicon/icon-xz@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
编辑
</el-button>

@ -3,13 +3,13 @@
<!-- 顶部信息 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>项目巡礼</span>
</div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'">
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="openAddDialog">
<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,10 +21,10 @@
<div v-for="(item, index) in projectList" :key="index" class="image-box">
<img :src="baseUrl + item.img" alt="项目图片" class="image">
<div class="close-button" @click="removeImage(index)">
<img src="../../../assets/images/detailsicon/icon-关闭@2x.png" alt="">
<img src="@/assets/images/detailsicon/icon-关闭@2x.png" alt="">
</div>
<div class="iconguanbi2" @click="openEditDialog(item)"> <img
src="../../../assets/images/detailsicon/icon-bj@2x.png" alt=""></div>
src="@/assets/images/detailsicon/icon-bj@2x.png" alt=""></div>
<div class="dianjibox" @click="handleItemClick(item)"></div>
<div class="bottombox">
<div class="bottomtext"><span>{{ item.xmmc || '未命名项目' }}</span></div>

@ -3,7 +3,7 @@
<!-- 顶部信息 -->
<div class="containertop">
<div class="topleft">
<img src="../../../assets/images/detailsicon/1.png" alt="">
<img src="@/assets/images/detailsicon/1.png" alt="">
<span>项目画像</span>
</div>
<div class="topright" style="visibility: hidden;">

@ -4,7 +4,7 @@
<div class="tablebox">
<!-- 标签行 -->
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" stripe>
<el-table-column label="项目名称" align="center" prop="name" width="200" />
<el-table-column label="项目名称" align="center" prop="name" width="200" show-overflow-tooltip />
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.tbzt" :value="scope.row.status" />
@ -13,9 +13,9 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="text" @click="getInfo(scope.row, 'fill')"
v-if="statusMap[scope.row.status] === '待填报'">填报</el-button>
v-if="scope.row.status === 1">填报</el-button>
<el-button type="text" @click="getInfo(scope.row, 'detail')"
v-if="statusMap[scope.row.status] !== '待填报'">详情</el-button>
v-if="scope.row.status !== 1">详情</el-button>
</template>
</el-table-column>
</el-table>
@ -46,23 +46,6 @@ export default {
total: 0,
//
postList: [],
//
statusColors: {
'审核通过': '#6EDABE',
'待填报': '#FFBF6B',
'待审核': '#7693D8'
},
//
statusMap: {
1: '待填报',
2: '待审核',
3: '审核通过'
},
xzflMap: {
1: '已建',
2: '在建',
3: '拟建'
},
//
queryParams: {
pageNum: 1,

@ -6,7 +6,7 @@
<img :src="getIcon(scope.$index)" alt="icon" style="width: 2.19rem; height: 1.25rem;">
</template>
</el-table-column>
<el-table-column prop="name" width="300">
<el-table-column prop="name" width="300" show-overflow-tooltip>
<template slot-scope="scope">
<span :style="{ color: scope.row.isRead === 2 ? '#ccc' : 'inherit' }">
{{ scope.row.name }}

@ -6,7 +6,7 @@
<img :src="getIcon(scope.$index)" alt="icon" style="width: 2.19rem; height: 1.25rem;">
</template>
</el-table-column>
<el-table-column prop="name" width="300">
<el-table-column prop="name" width="300" show-overflow-tooltip>
<template slot-scope="scope">
<span :style="{ color: scope.row.isRead === 2 ? '#ccc' : 'inherit' }">
{{ scope.row.name }}

@ -49,10 +49,6 @@
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<!-- 标签行 -->
<!-- <div class="tablehead">
<div class="headtitle"><span>项目清单</span></div>
</div> -->
<!-- 导入弹窗 -->
<el-dialog title="导入" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
@ -69,12 +65,7 @@
<el-button type="primary" @click="submitFileForm" :loading="upload.isUploading">确定</el-button>
</span>
</el-dialog>
<!-- 导出行 -->
<div class="tablebtntwo">
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" stripe>
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.current - 1) * queryParams.size }}
@ -103,9 +94,9 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" >
<template slot-scope="scope">
<el-button size="medium" type="text" @click="getInfo(scope.row, 'fill')"
v-if="statusMap[scope.row.status] === '待填报'">填报</el-button>
v-if="scope.row.status === '待填报'">填报</el-button>
<el-button size="medium" type="text" @click="getInfo(scope.row, 'detail')"
v-if="statusMap[scope.row.status] !== '待填报'">详情</el-button>
v-if="scope.row.status !== '待填报'">详情</el-button>
</template>
</el-table-column>
</el-table>
@ -138,18 +129,6 @@ export default {
total: 0,
//
postList: [],
//
statusColors: {
'审核通过': '#6EDABE',
'待填报': '#FFBF6B',
'待审核': '#7693D8'
},
//
statusMap: {
1: '待填报',
2: '待审核',
3: '审核通过'
},
//
queryParams: {
current: 1,
@ -199,7 +178,6 @@ export default {
this.loading = false;
});
},
//
processDateRange() {
if (this.queryParams.dateRange && this.queryParams.dateRange.length === 2) {
@ -286,7 +264,7 @@ export default {
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
padding: 1rem 1rem 0 1rem;
margin: .5rem;
border: 1px solid #eee;
}

@ -1,387 +1,541 @@
<template>
<div>
<!-- 政务端页面 -->
<!-- 表单查询项 -->
<div class="headerbox">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="200">
<el-row>
<el-col :span="5">
<el-form-item label="项目名称" style="width: 100%;">
<el-input v-model="queryParams.name" placeholder="请输入项目名称" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="建设起止时间">
<el-date-picker v-model="queryParams.startTime" type="month" placeholder="开始月份"
value-format="yyyy-MM" style="width: 9rem;" :clearable="true">
</el-date-picker>
~
<el-date-picker v-model="queryParams.endTime" type="month" placeholder="结束月份"
value-format="yyyy-MM" style="width: 9rem;" :clearable="true">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select v-model="queryParams.xzfl" placeholder="请选择现状分类" clearable>
<el-option v-for="dict in dict.type.xzfl" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="项目法人单位">
<el-input v-model="queryParams.xmfrdwxz" placeholder="请输入项目名称" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="5">
<el-form-item label="当前状态">
<el-select v-model="queryParams.status" placeholder="选择当前状态" clearable>
<el-option v-for="dict in dict.type.tbzt" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<!-- 标签行 -->
<!-- <div class="tablehead">
<div class="headtitle"><span>项目清单</span></div>
</div> -->
<!-- 导入弹窗 -->
<el-dialog title="导入" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="upload.open = false">取消</el-button>
<el-button type="primary" @click="submitFileForm" :loading="upload.isUploading">确定</el-button>
</span>
</el-dialog>
<!-- 导出行 -->
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" @click="handleExport"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" @click="handleExporttwo">
单片材料导出
</el-button>
</el-col>
</el-row>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-download" @click="importTemplate"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" @click="handleImport"></el-button>
</el-col>
</el-row>
<div class="container">
<!-- 查询表单 -->
<div class="headerbox">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="200"
>
<el-row>
<el-col :span="5">
<el-form-item label="项目名称" style="width: 100%">
<el-input
v-model="queryParams.name"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="建设起止时间">
<el-date-picker
v-model="queryParams.startTime"
type="month"
placeholder="开始月份"
value-format="yyyy-MM"
style="width: 9rem"
:clearable="true"
></el-date-picker>
~
<el-date-picker
v-model="queryParams.endTime"
type="month"
placeholder="结束月份"
value-format="yyyy-MM"
style="width: 9rem"
:clearable="true"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select
v-model="queryParams.xzfl"
placeholder="请选择现状分类"
clearable
>
<el-option
v-for="dict in dict.type.xzfl"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="项目法人单位">
<el-input
v-model="queryParams.xmfrdwxz"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="5">
<el-form-item label="当前状态">
<el-select
v-model="queryParams.status"
placeholder="选择当前状态"
clearable
>
<el-option
v-for="dict in dict.type.tbzt"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
>查询</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" stripe>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.current - 1) * queryParams.size }}
</template>
</el-table-column>
<el-table-column label="项目名称" align="center" prop="name" width="200" />
<el-table-column label="现状分类" align="center" prop="xzfl">
<template slot-scope="scope">
<dict-tag :options="dict.type.xzfl" :value="scope.row.xzfl" />
</template>
</el-table-column>
<el-table-column label="项目法人单位" align="center" prop="xmfrdwxz" width="200" />
<el-table-column label="统一社会信用代码" align="center" prop="tyshxydm" width="200" />
<el-table-column label="项目建设起止时间" align="center" width="200">
<template slot-scope="scope">
{{ formatMonth(scope.row.begainTime) }} {{ formatMonth(scope.row.endTime) }}
</template>
</el-table-column>
<el-table-column label="总投资额(万元)" align="center" width="130" prop="ztze" />
<el-table-column label="总用地面积(平方米)" align="center" width="180" prop="zydmj" />
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.tbzt" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="text" @click="getAdd(scope.row, 'fill')"
v-if="scope.row.status === 2">审核</el-button>
<el-button type="text" @click="getAdd(scope.row, 'okay')"
v-if="scope.row.status === 3">编辑</el-button>
<el-button type="text" @click="getAdd(scope.row, 'detail')"
v-if="scope.row.status === 1">详情</el-button>
<el-button type="text" @click="handleDelete(scope.row)" style="color: #F25353;">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current"
:limit.sync="queryParams.size" @pagination="getList" />
</div>
<!-- 表格内容区 -->
<div class="table-container">
<!-- 按钮行 -->
<div class="table-header">
<el-row :gutter="10" >
<el-col :span="1.5">
<el-button type="primary" @click="handleExport"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" @click="handleExporttwo"
>单片材料导出</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-download"
@click="importTemplate"
>下载模板</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="primary" @click="handleImport"></el-button>
</el-col>
</el-row>
</div>
<!-- 表格区域 -->
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
stripe
height="100%"
style="width: 100%"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{
scope.$index + 1 + (queryParams.current - 1) * queryParams.size
}}
</template>
</el-table-column>
<el-table-column
label="项目名称"
align="center"
prop="name"
width="200"
show-overflow-tooltip
/>
<el-table-column label="现状分类" align="center" prop="xzfl">
<template slot-scope="scope">
<dict-tag :options="dict.type.xzfl" :value="scope.row.xzfl" />
</template>
</el-table-column>
<el-table-column
label="项目法人单位"
align="center"
prop="xmfrdwxz"
width="200"
show-overflow-tooltip
/>
<el-table-column
label="统一社会信用代码"
align="center"
prop="tyshxydm"
width="200"
/>
<el-table-column label="项目建设起止时间" align="center" width="200">
<template slot-scope="scope">
{{ formatMonth(scope.row.begainTime) }}
{{ formatMonth(scope.row.endTime) }}
</template>
</el-table-column>
<el-table-column
label="总投资额(万元)"
align="center"
width="130"
prop="ztze"
/>
<el-table-column
label="总用地面积(平方米)"
align="center"
width="180"
prop="zydmj"
/>
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.tbzt" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
type="text"
@click="getAdd(scope.row, 'fill')"
v-if="scope.row.status === 2"
>审核</el-button
>
<el-button
type="text"
@click="getAdd(scope.row, 'okay')"
v-if="scope.row.status === 3"
>编辑</el-button
>
<el-button
type="text"
@click="getAdd(scope.row, 'detail')"
v-if="scope.row.status === 1"
>详情</el-button
>
<el-button
type="text"
@click="handleDelete(scope.row)"
style="color: #f25353"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页区域 -->
<div class="pagination-wrapper">
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
</div>
<!-- 导入弹窗 -->
<el-dialog
title="导入"
:visible.sync="upload.open"
width="400px"
append-to-body
>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="upload.open = false">取消</el-button>
<el-button
type="primary"
@click="submitFileForm"
:loading="upload.isUploading"
>确定</el-button
>
</span>
</el-dialog>
</div>
</template>
<script>
import { getBasicInformationPage, deleteBasicInformation } from "@/api/ManageApi/index";
import {
getBasicInformationPage,
deleteBasicInformation,
} from "@/api/ManageApi/index";
import { getToken } from "@/utils/auth";
import { checkPermi, checkRole } from "@/utils/permission";
export default {
dicts: ["xzfl",'tbzt'],
data() {
return {
ids: [],
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
queryParams: {
current: 1,
size: 10,
xzfl: undefined,
name: undefined,
xmfrdwxz: undefined,
startTime: undefined,
endTime: undefined,
status: undefined
},
//
upload: {
open: false, //
isUploading: false, //
updateSupport: 0, //
headers: { Authorization: "Bearer " + getToken() }, //
url: process.env.VUE_APP_BASE_API + "/gysl/basicInformation/import", //
},
};
},
created() {
this.getList();
dicts: ["xzfl", "tbzt"],
data() {
return {
ids: [],
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
queryParams: {
current: 1,
size: 10,
xzfl: undefined,
name: undefined,
xmfrdwxz: undefined,
startTime: undefined,
endTime: undefined,
status: undefined,
},
//
upload: {
open: false, //
isUploading: false, //
updateSupport: 0, //
headers: { Authorization: "Bearer " + getToken() }, //
url: process.env.VUE_APP_BASE_API + "/gysl/basicInformation/import", //
},
};
},
created() {
this.getList();
},
methods: {
checkPermi,
checkRole,
/** 格式化月份显示 */
formatMonth(dateStr) {
if (!dateStr) return "";
// YYYY-MM
if (/^\d{4}-\d{2}$/.test(dateStr)) return dateStr;
// YYYY-MM-DD 7
if (/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) return dateStr.substring(0, 7);
return dateStr;
},
methods: {
checkPermi,
checkRole,
/** 格式化月份显示 */
formatMonth(dateStr) {
if (!dateStr) return '';
// YYYY-MM
if (/^\d{4}-\d{2}$/.test(dateStr)) return dateStr;
// YYYY-MM-DD 7
if (/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) return dateStr.substring(0, 7);
return dateStr;
},
/** 查询项目列表 */
getList() {
this.loading = true;
//
const params = {
...this.queryParams,
begainTime: this.formatMonth(this.queryParams.begainTime),
endTime: this.formatMonth(this.queryParams.endTime)
};
/** 查询项目列表 */
getList() {
this.loading = true;
//
const params = {
...this.queryParams,
begainTime: this.formatMonth(this.queryParams.begainTime),
endTime: this.formatMonth(this.queryParams.endTime),
};
// console.log(':', JSON.stringify(params, null, 2));
// console.log(':', JSON.stringify(params, null, 2));
getBasicInformationPage(params).then((response) => {
// console.log('API:', response);
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
}).catch(error => {
console.error('API请求错误:', error);
console.error('错误详情:', error.response);
this.loading = false;
});
},
/** 导入按钮操作 */
handleImport() {
this.upload.open = true;
},
getBasicInformationPage(params)
.then((response) => {
// console.log('API:', response);
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
})
.catch((error) => {
console.error("API请求错误:", error);
console.error("错误详情:", error.response);
this.loading = false;
});
},
/** 下载模板操作 */
importTemplate() {
this.download(
"/gysl/basicInformation/importTemplate",
{},
`项目导入模板${new Date().getTime()}.xlsx`
);
},
/** 导入按钮操作 */
handleImport() {
this.upload.open = true;
},
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 下载模板操作 */
importTemplate() {
this.download(
"/gysl/basicInformation/importTemplate",
{},
`项目导入模板${new Date().getTime()}.xlsx`
);
},
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
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();
},
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
submitFileForm() {
this.$refs.upload.submit();
},
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();
},
/** 导出按钮操作 */
handleExport() {
this.download(
"/gysl/basicInformation/exportInfo",
{
idList: this.ids
},
`基本信息${new Date().getTime()}.xlsx`
);
submitFileForm() {
this.$refs.upload.submit();
},
/** 导出按钮操作 */
handleExport() {
this.download(
"/gysl/basicInformation/exportInfo",
{
idList: this.ids,
},
`基本信息${new Date().getTime()}.xlsx`
);
},
/** 单片材料导出按钮操作 */
handleExporttwo() {
if (this.ids.length === 0) {
this.$message.warning('请选择要导出的项目');
return;
}
/** 单片材料导出按钮操作 */
handleExporttwo() {
if (this.ids.length === 0) {
this.$message.warning("请选择要导出的项目");
return;
}
this.download(
"/gysl/basicInformation/wordExport",
{
ids: this.ids.join(","),
},
`单片材料${new Date().getTime()}.zip`
);
this.download(
"/gysl/basicInformation/wordExport",
{
ids: this.ids.join(","),
},
`单片材料${new Date().getTime()}.zip`
);
},
/** 删除按钮操作 */
handleDelete(row) {
const projectName = row.name; //
const ids = row.id || this.ids;
this.$modal
.confirm(`是否确认删除项目"${projectName}"`)
.then(() => {
return deleteBasicInformation(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => { });
},
/** 删除按钮操作 */
handleDelete(row) {
const projectName = row.name; //
const ids = row.id || this.ids;
this.$modal
.confirm(`是否确认删除项目"${projectName}"`)
.then(() => {
return deleteBasicInformation(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 详情按钮操作 */
getAdd(row, type) {
this.$store.commit("SET_CRUMBS","项目详情");
const id = row.id || this.ids[0];
this.$router.push({ path: `/manage-add/${id}`, query: { action: type } });
},
/** 详情按钮操作 */
getAdd(row, type) {
this.$store.commit("SET_CRUMBS", "项目详情");
const id = row.id || this.ids[0];
this.$router.push({ path: `/manage-add/${id}`, query: { action: type } });
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
xzfl: undefined,
name: undefined,
xmfrdwxz: undefined,
begainTime: undefined,
endTime: undefined,
status: undefined,
};
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
xzfl: undefined,
name: undefined,
xmfrdwxz: undefined,
begainTime: undefined,
endTime: undefined,
status: undefined,
};
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
},
};
</script>
<style scoped>
.headtitle {
font-size: 1.25rem;
font-weight: 400;
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
border: 1px solid #eee;
overflow: hidden;
}
.table-header {
margin-bottom: 10px;
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
.table-wrapper {
flex: 1;
min-height: 0; /* 非常重要:允许 flex 子项压缩自身 */
overflow: hidden;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
.pagination-wrapper {
margin-top: 10px;
padding-top: 10px;
border-top: 1px solid #eee;
}
.headbtn {
display: flex;
.el-table {
height: 100% !important;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
width: 100%;
display: flex;
justify-content: space-between;
.el-table__body-wrapper {
overflow-y: auto !important;
}
</style>
</style>

@ -1,5 +1,5 @@
<template>
<div>
<div class="container">
<!-- 项目评价配置 -->
<div class="headerbox">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="200">
@ -18,31 +18,44 @@
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<!-- 标签行 -->
<div class="tablehead">
<div class="headbtn">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
</div>
<div class="table-container">
<div class="table-header">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
</div>
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
style="width: 100%"
height="100%">
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.current - 1) * queryParams.size }}
</template>
</el-table-column>
<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 type="text" @click="handleUpdate(scope.row)"></el-button>
<el-button type="text" style="color: red;" @click="handleDelete(scope.row)"></el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination-wrapper">
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList" />
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.current - 1) * queryParams.size }}
</template>
</el-table-column>
<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 type="text" @click="handleUpdate(scope.row)"></el-button>
<el-button type="text" style="color: red;" @click="handleDelete(scope.row)"></el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current" :limit.sync="queryParams.size"
@pagination="getList" />
</div>
<!-- 添加规则的弹窗 -->
@ -73,12 +86,12 @@ export default {
queryParams: {
current: 1,
size: 10,
pjys: '' // pjys
pjys: ''
},
//
postList: [],
//
total: 0, // total
total: 0,
//
showSearch: true,
//
@ -136,7 +149,7 @@ export default {
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id); // 使 id
this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
@ -149,7 +162,7 @@ export default {
//
handleUpdate(row) {
this.reset();
const postId = row.id || this.ids; // 使 id
const postId = row.id || this.ids;
this.form = { ...row };
this.open = true;
this.title = '编辑规则';
@ -191,7 +204,7 @@ export default {
//
handleDelete(row) {
const postIds = row.id || this.ids;
const pjys = row.pjys; // pjys
const pjys = row.pjys;
this.$modal.confirm(`是否确认删除"${pjys}"的数据项?`).then(() => {
return deleteProjectEvaluation(postIds);
}).then(() => {
@ -203,70 +216,61 @@ export default {
};
</script>
<style scoped>
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
padding: 10px;
box-sizing: border-box;
}
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: .5rem;
border: 1px solid #eee;
}
.tablebox {
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
overflow: hidden;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: .5rem
}
.headbtn {
display: flex;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
.table-header {
margin-bottom: 10px;
}
</style>
<style scoped>
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
.table-wrapper {
flex: 1;
overflow: hidden;
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
.el-table {
height: 100% !important;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: .5rem
.el-table__body-wrapper {
overflow-y: auto !important;
}
.headbtn {
display: flex;
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
</style>

@ -1,36 +1,78 @@
<template>
<div>
<div class="container">
<!-- 表单查询项 -->
<div class="headerbox">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="200">
<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="项目名称" style="width: 100%;">
<el-input v-model="queryParams.name" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery" />
<el-form-item label="项目名称" style="width: 100%">
<el-input
v-model="queryParams.name"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="建设起止时间">
<el-date-picker v-model="queryParams.begainTime" type="month" placeholder="开始月份" value-format="yyyy-MM"
style="width: 9rem;" :clearable="true">
<el-date-picker
v-model="queryParams.begainTime"
type="month"
placeholder="开始月份"
value-format="yyyy-MM"
style="width: 9rem"
:clearable="true"
>
</el-date-picker>
~
<el-date-picker v-model="queryParams.endTime" type="month" placeholder="结束月份" value-format="yyyy-MM"
style="width: 9rem;" :clearable="true">
<el-date-picker
v-model="queryParams.endTime"
type="month"
placeholder="结束月份"
value-format="yyyy-MM"
style="width: 9rem"
:clearable="true"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select v-model="queryParams.xzfl" placeholder="现状分类" clearable>
<el-option v-for="dict in dict.type.xzfl" :key="dict.value" :label="dict.label" :value="dict.value" />
<el-select
v-model="queryParams.xzfl"
placeholder="现状分类"
clearable
>
<el-option
v-for="dict in dict.type.xzfl"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="评价等级">
<el-select v-model="queryParams.pjdj" placeholder="请选择评价等级" clearable>
<el-option v-for="dict in dict.type.qdpjdj" :key="dict.value" :label="dict.label" :value="dict.value" />
<el-select
v-model="queryParams.pjdj"
placeholder="请选择评价等级"
clearable
>
<el-option
v-for="dict in dict.type.qdpjdj"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
@ -38,60 +80,103 @@
<el-row>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
>查询</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange"
@sort-change="handleSortChange">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.current - 1) * queryParams.size }}
</template>
</el-table-column>
<el-table-column label="项目名称" align="center" prop="name" />
<el-table-column label="现状分类" align="center">
<template slot-scope="scope">
<dict-tag :options="dict.type.xzfl" :value="scope.row.xzfl" />
</template>
</el-table-column>
<el-table-column label="项目法人单位" align="center" prop="xmfrdwxz" />
<el-table-column label="项目建设起止时间" align="center">
<template slot-scope="scope">
{{ scope.row.begainTime }} {{ scope.row.endTime }}
</template>
</el-table-column>
<el-table-column label="项目评价" align="center" width="130" sortable="custom" prop="pjdj">
<template slot-scope="scope">
{{ scope.row.pjdj }} / {{ scope.row.count }}
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="text" @click="handleInfo(scope.row, 'detail')">详情</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current" :limit.sync="queryParams.size"
@pagination="getList" />
<div class="table-container">
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
@sort-change="handleSortChange"
height="100%"
style="width: 100%"
>
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{
scope.$index + 1 + (queryParams.current - 1) * queryParams.size
}}
</template>
</el-table-column>
<el-table-column label="项目名称" align="center" prop="name" show-overflow-tooltip/>
<el-table-column label="现状分类" align="center">
<template slot-scope="scope">
<dict-tag :options="dict.type.xzfl" :value="scope.row.xzfl" />
</template>
</el-table-column>
<el-table-column
label="项目法人单位"
align="center"
prop="xmfrdwxz"
show-overflow-tooltip
/>
<el-table-column label="项目建设起止时间" align="center">
<template slot-scope="scope">
{{ scope.row.begainTime }} {{ scope.row.endTime }}
</template>
</el-table-column>
<el-table-column
label="项目评价"
align="center"
width="130"
sortable="custom"
prop="pjdj"
>
<template slot-scope="scope">
{{ scope.row.pjdj }} / {{ scope.row.count }}
</template>
</el-table-column>
<el-table-column
label="操作"
fixed="right"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button type="text" @click="handleInfo(scope.row, 'detail')"
>详情</el-button
>
</template>
</el-table-column>
</el-table>
<div class="pagination-wrapper">
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
</div>
</div>
</div>
</template>
<script>
import { getProjectEvaluationList, updateProjectEvaluationList } from '@/api/ManageApi/index.js';
import {
getProjectEvaluationList,
updateProjectEvaluationList,
} from "@/api/ManageApi/index.js";
import { checkPermi, checkRole } from "@/utils/permission";
export default {
dicts: [
'xzfl', 'qdpjdj'
],
dicts: ["xzfl", "qdpjdj"],
data() {
return {
postList: [],
@ -100,40 +185,40 @@ export default {
queryParams: {
current: 1,
size: 10,
name: '',
begainTime: '',
endTime: '',
xzfl: '',
pjdj: '',
qdpjdj: '',
name: "",
begainTime: "",
endTime: "",
xzfl: "",
pjdj: "",
qdpjdj: "",
},
showSearch: true,
dialogVisible: false,
editForm: {
id: '',
name: '',
dateRange: '',
xzfl: '',
pjdj: '',
xmfrdwxz: '',
id: "",
name: "",
dateRange: "",
xzfl: "",
pjdj: "",
xmfrdwxz: "",
},
infoDialogVisible: false,
infoForm: {
id: '',
name: '',
dateRange: '',
xzfl: '',
pjdj: '',
xmfrdwxz: '',
}
id: "",
name: "",
dateRange: "",
xzfl: "",
pjdj: "",
xmfrdwxz: "",
},
};
},
methods: {
checkPermi,
checkRole,
handleSortChange({ column, prop, order }) {
if (prop === 'pjdj') {
this.queryParams.sort = order === 'ascending' ? 1 : 2;
if (prop === "pjdj") {
this.queryParams.sort = order === "ascending" ? 1 : 2;
this.getList();
}
},
@ -144,11 +229,11 @@ export default {
this.queryParams = {
current: 1,
size: 10,
name: '',
begainTime: '',
endTime: '',
xzfl: '',
pjdj: ''
name: "",
begainTime: "",
endTime: "",
xzfl: "",
pjdj: "",
};
this.handleQuery();
},
@ -163,24 +248,23 @@ export default {
pjdj: this.queryParams.pjdj,
begainTime: this.queryParams.begainTime || null,
endTime: this.queryParams.endTime || null,
sort: this.queryParams.sort || 1 //
sort: this.queryParams.sort || 1, //
};
getProjectEvaluationList(params)
.then(response => {
.then((response) => {
this.postList = response.data?.records || [];
this.total = response.data?.total || 0;
})
.catch(error => {
console.error('获取项目评价失败:', error);
this.$message.error('数据加载失败');
.catch((error) => {
console.error("获取项目评价失败:", error);
this.$message.error("数据加载失败");
})
.finally(() => {
this.loading = false;
});
},
handleSelectionChange(selection) {
},
handleSelectionChange(selection) {},
handleInfo(row, type) {
this.$store.commit("SET_CRUMBS", "项目详情");
const id = row.id || this.ids[0];
@ -189,7 +273,7 @@ export default {
handleUpdate(row) {
this.editForm = {
...row,
dateRange: [row.begainTime, row.endTime]
dateRange: [row.begainTime, row.endTime],
};
this.dialogVisible = true;
},
@ -197,66 +281,75 @@ export default {
const formData = {
...this.editForm,
begainTime: this.editForm.dateRange[0],
endTime: this.editForm.dateRange[1]
endTime: this.editForm.dateRange[1],
};
updateProjectEvaluationList(formData)
.then(response => {
this.$message.success('修改成功');
.then((response) => {
this.$message.success("修改成功");
this.dialogVisible = false;
this.getList();
})
.catch(error => {
console.error('修改项目失败:', error);
this.$message.error('修改失败');
.catch((error) => {
console.error("修改项目失败:", error);
this.$message.error("修改失败");
});
},
handleDelete(row) {
//
},
formatMonthYear(date) {
// if (!date) return '';
return date;
// //
// const fullDate = date.includes('-') ? date : `${date}-01`; //
// return fullDate.split('-').slice(0, 2).join('-');
}
},
},
mounted() {
this.getList();
}
},
};
</script>
<style scoped>
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.tablebox {
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: .5rem;
border-radius: 0.5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
overflow: hidden;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
.table-wrapper {
flex: 1;
min-height: 0;
overflow: hidden;
}
.headbtn {
display: flex;
.el-table {
height: 90% !important;
}
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
</style>
</style>

@ -1,7 +1,7 @@
<template>
<div class="supervision-container">
<div class="supervision-container container">
<!-- 搜索区域 -->
<div class="search-area">
<div class="search-area headerbox">
<el-form :model="searchForm" inline>
<el-form-item label="提醒名称">
<el-input
@ -29,7 +29,7 @@
</el-form-item>
</el-form>
</div>
<div class="tablebox">
<div class="tablebox table-container">
<div class="operation-area">
<el-button
type="primary"
@ -38,92 +38,102 @@
>添加规则</el-button
>
</div>
<el-table
:data="tableData"
style="width: 100%"
@selection-change="handleSelectionChange"
>
<!-- <el-table-column type="selection" align="center" /> -->
<el-table-column label="序号" width="80" align="center">
<template slot-scope="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column
prop="rulesName"
label="提醒名称"
min-width="200"
align="center"
/>
<el-table-column
prop="alertType"
label="提醒类型"
min-width="150"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.alertType === 1"></span>
<span v-if="scope.row.alertType === 2">()</span>
<span v-if="scope.row.alertType === 3">()</span>
<span v-if="scope.row.alertType === 4"></span>
</template>
</el-table-column>
<el-table-column
prop="alertRecipients"
label="提醒对象"
min-width="120"
align="center"
<div class="table-wrapper">
<el-table
:data="tableData"
style="width: 100%"
height="100%"
@selection-change="handleSelectionChange"
>
<template slot-scope="scope">
<span v-if="scope.row.alertRecipients === 2"></span>
<span v-if="scope.row.alertRecipients === 1"></span>
</template>
</el-table-column>
<el-table-column
prop="alertManner"
label="提醒方式"
min-width="120"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.alertManner == 1"></span>
<span v-if="scope.row.alertManner == 2"></span>
</template>
</el-table-column>
<el-table-column
prop="alertTime"
label="提醒时间"
min-width="180"
align="center"
/>
<!-- <el-table-column type="selection" align="center" /> -->
<el-table-column label="序号" width="80" align="center">
<template slot-scope="scope">
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column
prop="rulesName"
label="提醒名称"
min-width="200"
align="center"
/>
<el-table-column
prop="alertType"
label="提醒类型"
min-width="150"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.alertType === 1"></span>
<span v-if="scope.row.alertType === 2">()</span>
<span v-if="scope.row.alertType === 3"
>项目即将建设完成(政务)</span
>
<span v-if="scope.row.alertType === 4"></span>
</template>
</el-table-column>
<el-table-column
prop="alertRecipients"
label="提醒对象"
min-width="120"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.alertRecipients === 2"></span>
<span v-if="scope.row.alertRecipients === 1"></span>
</template>
</el-table-column>
<el-table-column
prop="alertManner"
label="提醒方式"
min-width="120"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.alertManner == 1"></span>
<span v-if="scope.row.alertManner == 2"></span>
</template>
</el-table-column>
<el-table-column
prop="alertTime"
label="提醒时间"
min-width="180"
align="center"
/>
<!-- <el-table-column
<!-- <el-table-column
prop="createBy"
label="创建人"
min-width="120"
align="center"
/> -->
<el-table-column label="操作" width="200" fixed="right" align="center">
<template slot-scope="scope">
<el-button type="text" @click="handleDetail(scope.row)"
>详情</el-button
>
<el-button
type="text"
@click="handleEdit(scope.row)"
style="color: #67c23a"
>编辑</el-button
>
<el-button
type="text"
@click="handleDelete(scope.row)"
style="color: red"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<el-table-column
label="操作"
width="200"
fixed="right"
align="center"
>
<template slot-scope="scope">
<el-button type="text" @click="handleDetail(scope.row)"
>详情</el-button
>
<el-button
type="text"
@click="handleEdit(scope.row)"
style="color: #67c23a"
>编辑</el-button
>
<el-button
type="text"
@click="handleDelete(scope.row)"
style="color: red"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页 -->
<pagination
@ -260,7 +270,7 @@ export default {
pagination: {
total: 0,
current: 1,
size: 10,
size: 20,
},
selectedRows: [],
dialogVisible: false,
@ -638,4 +648,60 @@ export default {
}
}
}
.container {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
padding: 10px;
box-sizing: border-box;
}
.headerbox {
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
border: 1px solid #eee;
overflow: hidden;
}
.table-header {
margin-bottom: 10px;
}
.table-wrapper {
flex: 1;
overflow: hidden;
}
.el-table {
height: 100% !important;
}
.el-table__body-wrapper {
overflow-y: auto !important;
}
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
</style>

@ -203,7 +203,7 @@ export default {
window.location.href = 'https://qyt.sipac.gov.cn/sipsg-enterprise-mobile-manage/#/login'
},
handleEnterpriseLogin() {
// window.location.href = 'https://gysl.sipac.gov.cn';
location.href = process.env.VUE_APP_BASE_API + "/system/singlelogin/login";
}
}
}

@ -200,10 +200,10 @@ export default {
});
},
handleGovernmentLogin() {
window.location.href = 'https://qyt.sipac.gov.cn/sipsg-enterprise-mobile-manage/#/login'
location.href = 'https://qyt.sipac.gov.cn/sipsg-enterprise-mobile-manage/#/login'
},
handleEnterpriseLogin() {
window.location.href = 'https://gysl.sipac.gov.cn';
location.href = process.env.VUE_APP_BASE_API + "/system/singlelogin/login";
}
}
}

@ -64,7 +64,11 @@
</div>
<!-- 建筑信息 -->
<div id="buildings">
<Buildings :action="action" :xmId="projectId"></Buildings>
<Buildings
:action="action"
:xmId="projectId"
@has-building-data="hasBuildingData = $event"
></Buildings>
</div>
<!-- 要素模型信息 -->
<div id="models">
@ -195,6 +199,7 @@ export default {
},
data() {
return {
hasBuildingData: false,
activeSection: "basic",
sections: [
{ id: "basic", label: "基本信息" },
@ -214,7 +219,7 @@ export default {
isContainerVisible: true,
isSubmitted: false,
lastScrollTop: 0,
scrollDirection: 'down',
scrollDirection: "down",
scrollTimeout: null,
basicInformation: {
acceptanceTime: "",
@ -355,12 +360,12 @@ export default {
this.scrollTimeout = setTimeout(() => {
const scrollPosition = container.scrollTop;
if (scrollPosition > this.lastScrollTop) {
this.scrollDirection = 'down';
this.scrollDirection = "down";
} else {
this.scrollDirection = 'up';
this.scrollDirection = "up";
}
this.lastScrollTop = scrollPosition;
const offset = this.scrollDirection === 'down' ? 500 : 200;
const offset = this.scrollDirection === "down" ? 500 : 200;
const adjustedScrollPosition = scrollPosition + offset;
for (let i = this.sections.length - 1; i >= 0; i--) {
const element = document.getElementById(this.sections[i].id);
@ -368,7 +373,9 @@ export default {
const elementPosition = element.offsetTop - container.offsetTop;
if (elementPosition <= adjustedScrollPosition) {
if (this.activeSection !== this.sections[i].id) {
console.log(`切换到 ${this.sections[i].label},位置: ${elementPosition},偏移: ${offset}`);
console.log(
`切换到 ${this.sections[i].label},位置: ${elementPosition},偏移: ${offset}`
);
this.activeSection = this.sections[i].id;
}
break;
@ -435,6 +442,7 @@ export default {
},
//
async submitAll() {
//
const loading = this.$loading({
lock: true,
@ -443,6 +451,13 @@ export default {
background: "rgba(0, 0, 0, 0.7)",
});
//
if (!this.hasBuildingData) {
this.$message.error("请填写建筑信息");
loading.close();
return;
}
// wysmxInformations
if (
this.wysmxInformations.length === 0 ||
@ -574,7 +589,7 @@ export default {
},
handleMenuClick() {
if (this.$refs.menuRef) {
this.$refs.menuRef.$el.blur();
this.$refs.menuRef.$el.blur();
}
},
},

@ -1,35 +1,765 @@
<template>
<div>
<!-- 企业端 -->
<div v-if="showCompanySection">
<!-- <div> -->
<qiyeduan />
<div class="container">
<!-- 查询表单 -->
<!-- 政务端 -->
<div class="headerbox" v-if="checkRole(['common', 'gov'])">
<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="项目名称" style="width: 100%">
<el-input
v-model="queryParams.name"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="建设起止时间">
<el-date-picker
v-model="queryParams.startTime"
type="month"
placeholder="开始月份"
value-format="yyyy-MM"
style="width: 9rem"
:clearable="true"
></el-date-picker>
~
<el-date-picker
v-model="queryParams.endTime"
type="month"
placeholder="结束月份"
value-format="yyyy-MM"
style="width: 9rem"
:clearable="true"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select
v-model="queryParams.xzfl"
placeholder="请选择现状分类"
clearable
>
<el-option
v-for="dict in dict.type.xzfl"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="项目法人单位">
<el-input
v-model="queryParams.xmfrdwxz"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="5">
<el-form-item label="当前状态">
<el-select
v-model="queryParams.status"
placeholder="选择当前状态"
clearable
>
<el-option
v-for="dict in dict.type.tbzt"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
>查询</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 企业端的查询项 -->
<div class="headerbox" v-else>
<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="项目名称" style="width: 100%">
<el-input
v-model="queryParams.name"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="建设起止时间">
<el-date-picker
v-model="queryParams.startTime"
type="month"
placeholder="开始月份"
value-format="yyyy-MM"
style="width: 9rem"
:clearable="true"
>
</el-date-picker>
~
<el-date-picker
v-model="queryParams.endTime"
type="month"
placeholder="结束月份"
value-format="yyyy-MM"
style="width: 9rem"
:clearable="true"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select
v-model="queryParams.xzfl"
placeholder="现状分类"
clearable
>
<el-option
v-for="dict in dict.type.xzfl"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="medium"
@click="handleQuery"
>查询</el-button
>
<el-button
icon="el-icon-refresh"
size="medium"
@click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<!-- 政务端 -->
<div v-if="checkRole(['common','gov'])">
<zhengwuduan />
<div class="table-container" v-if="checkRole(['common', 'gov'])">
<!-- 按钮行 -->
<div class="table-header">
<el-row :gutter="4">
<el-col :span="1.5">
<el-button type="primary" @click="handleExport"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" @click="handleExporttwo"
>单片材料导出</el-button
>
</el-col>
</el-row>
<el-row :gutter="4">
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-download"
@click="importTemplate"
>下载模板</el-button
>
</el-col>
<el-col :span="1.5">
<el-button type="primary" @click="handleImport"></el-button>
</el-col>
</el-row>
</div>
<!-- 表格区域 -->
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
stripe
height="100%"
style="width: 100%"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{
scope.$index + 1 + (queryParams.current - 1) * queryParams.size
}}
</template>
</el-table-column>
<el-table-column
label="项目名称"
align="center"
prop="name"
width="200"
show-overflow-tooltip
/>
<el-table-column label="现状分类" align="center" prop="xzfl">
<template slot-scope="scope">
<dict-tag :options="dict.type.xzfl" :value="scope.row.xzfl" />
</template>
</el-table-column>
<el-table-column
label="项目法人单位"
align="center"
prop="xmfrdwxz"
width="200"
show-overflow-tooltip
/>
<el-table-column
label="统一社会信用代码"
align="center"
prop="tyshxydm"
width="200"
/>
<el-table-column label="项目建设起止时间" align="center" width="200">
<template slot-scope="scope">
{{ formatMonth(scope.row.begainTime) }}
{{ formatMonth(scope.row.endTime) }}
</template>
</el-table-column>
<el-table-column
label="总投资额(万元)"
align="center"
width="130"
prop="ztze"
/>
<el-table-column
label="总用地面积(平方米)"
align="center"
width="180"
prop="zydmj"
/>
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.tbzt" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
type="text"
@click="getAdd(scope.row, 'fill')"
v-if="scope.row.status === 2"
>审核</el-button
>
<el-button
type="text"
@click="getAdd(scope.row, 'okay')"
v-if="scope.row.status === 3"
>编辑</el-button
>
<el-button
type="text"
@click="getAdd(scope.row, 'detail')"
v-if="scope.row.status === 1"
>详情</el-button
>
<el-button
type="text"
@click="handleDelete(scope.row)"
style="color: #f25353"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页区域 -->
<div class="pagination-wrapper">
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
</div>
<!-- 企业端表格内容区 -->
<div class="table-container" v-else>
<!-- 导入弹窗 -->
<el-dialog
title="导入"
:visible.sync="upload.open"
width="400px"
append-to-body
>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="upload.open = false">取消</el-button>
<el-button
type="primary"
@click="submitFileForm"
:loading="upload.isUploading"
>确定</el-button
>
</span>
</el-dialog>
<!-- 表格区域 -->
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
stripe
>
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{
scope.$index + 1 + (queryParams.current - 1) * queryParams.size
}}
</template>
</el-table-column>
<el-table-column
label="项目名称"
align="center"
prop="name"
width="200"
show-overflow-tooltip
/>
<el-table-column label="现状分类" align="center" prop="xzfl">
<template slot-scope="scope">
<dict-tag :options="dict.type.xzfl" :value="scope.row.xzfl" />
</template>
</el-table-column>
<el-table-column
label="项目法人单位"
align="center"
prop="xmfrdwxz"
width="200"
show-overflow-tooltip
/>
<el-table-column
label="统一社会信用代码"
align="center"
prop="tyshxydm"
width="200"
/>
<el-table-column label="项目建设起止时间" align="center" width="200">
<template slot-scope="scope">
{{ scope.row.begainTime }} {{ scope.row.endTime }}
</template>
</el-table-column>
<el-table-column
label="总投资额(万元)"
align="center"
width="130"
prop="ztze"
/>
<el-table-column
label="总用地面积(平方米)"
align="center"
width="180"
prop="zydmj"
/>
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.tbzt" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
fixed="right"
>
<template slot-scope="scope">
<el-button
size="medium"
type="text"
@click="getInfo(scope.row, 'fill')"
v-if="scope.row.status === 1"
>填报</el-button
>
<el-button
size="medium"
type="text"
@click="getInfo(scope.row, 'detail')"
v-if="scope.row.status !== 1"
>详情</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页区域 -->
<div class="pagination-wrapper">
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
</div>
<!-- 导入按钮弹窗 -->
<el-dialog
title="导入"
:visible.sync="upload.open"
width="400px"
append-to-body
>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
</div>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="upload.open = false">取消</el-button>
<el-button
type="primary"
@click="submitFileForm"
:loading="upload.isUploading"
>确定</el-button
>
</span>
</el-dialog>
</div>
</template>
<script>
import qiyeduan from '@/views/components/qiyexinxi/qiyexinxi.vue'
import zhengwuduan from '@/views/components/zhengwuxinxi/zhengwuxinxi.vue'
import {
getBasicInformationPage,
deleteBasicInformation,
} from "@/api/ManageApi/index";
import { getToken } from "@/utils/auth";
import { checkPermi, checkRole } from "@/utils/permission";
export default {
components: { qiyeduan, zhengwuduan },
dicts: ["xzfl", "tbzt"],
data() {
return {
ids: [],
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
queryParams: {
current: 1,
size: 10,
xzfl: undefined,
name: undefined,
xmfrdwxz: undefined,
startTime: undefined,
endTime: undefined,
status: undefined,
},
//
upload: {
open: false, //
isUploading: false, //
updateSupport: 0, //
headers: { Authorization: "Bearer " + getToken() }, //
url: process.env.VUE_APP_BASE_API + "/gysl/basicInformation/import", //
},
};
},
created() {
this.getList();
},
methods: {
checkPermi,
checkRole
checkRole,
/** 格式化月份显示 */
formatMonth(dateStr) {
if (!dateStr) return "";
// YYYY-MM
if (/^\d{4}-\d{2}$/.test(dateStr)) return dateStr;
// YYYY-MM-DD 7
if (/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) return dateStr.substring(0, 7);
return dateStr;
},
/** 查询项目列表 */
getList() {
this.loading = true;
//
const params = {
...this.queryParams,
begainTime: this.formatMonth(this.queryParams.begainTime),
endTime: this.formatMonth(this.queryParams.endTime),
};
getBasicInformationPage(params)
.then((response) => {
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
})
.catch((error) => {
console.error("API请求错误:", error);
console.error("错误详情:", error.response);
this.loading = false;
});
},
/** 导入按钮操作 */
handleImport() {
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
this.download(
"/gysl/basicInformation/importTemplate",
{},
`项目导入模板${new Date().getTime()}.xlsx`
);
},
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
this.getList();
},
submitFileForm() {
this.$refs.upload.submit();
},
/** 导出按钮操作 */
handleExport() {
this.download(
"/gysl/basicInformation/exportInfo",
{
idList: this.ids,
},
`基本信息${new Date().getTime()}.xlsx`
);
},
/** 单片材料导出按钮操作 */
handleExporttwo() {
if (this.ids.length === 0) {
this.$message.warning("请选择要导出的项目");
return;
}
this.download(
"/gysl/basicInformation/wordExport",
{
ids: this.ids.join(","),
},
`单片材料${new Date().getTime()}.zip`
);
},
/** 删除按钮操作 */
handleDelete(row) {
const projectName = row.name;
const ids = row.id || this.ids;
this.$modal
.confirm(`是否确认删除项目"${projectName}"`)
.then(() => {
return deleteBasicInformation(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 详情按钮操作 */
getAdd(row, type) {
this.$store.commit("SET_CRUMBS", "项目详情");
const id = row.id || this.ids[0];
this.$router.push({ path: `/manage-add/${id}`, query: { action: type } });
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
xzfl: undefined,
name: undefined,
xmfrdwxz: undefined,
begainTime: undefined,
endTime: undefined,
status: undefined,
};
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
},
computed: {
showCompanySection() {
const isCompany = this.checkRole(['company']);
const isCommon = this.checkRole(['common','gov']);
//
return isCompany && !isCommon;
}
}
}
</script>
};
</script>
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
border: 1px solid #eee;
overflow: hidden;
}
.table-header {
margin-bottom: 1rem;
width: 99.7%;
display: flex;
justify-content: space-between;
}
.table-wrapper {
flex: 1;
min-height: 0;
overflow: hidden;
}
.el-table {
height: 100% !important;
}
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
</style>

@ -1,259 +1,394 @@
<template>
<div>
<!-- 负面清单 -->
<!-- 表单查询项 -->
<div class="headerbox">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="200">
<el-row>
<el-col :span="5">
<el-form-item label="项目名称" style="width: 100%;">
<el-input v-model="queryParams.name" placeholder="请输入项目名称" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="建设起止时间">
<el-date-picker v-model="queryParams.startTime" type="month" placeholder="开始月份"
value-format="yyyy-MM" style="width: 9rem;" :clearable="true">
</el-date-picker>
~
<el-date-picker v-model="queryParams.endTime" type="month" placeholder="结束月份"
value-format="yyyy-MM" style="width: 9rem;" :clearable="true">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select v-model="queryParams.xzfl" placeholder="现状分类" clearable>
<el-option v-for="dict in dict.type.xzfl" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="项目法人单位">
<el-input v-model="queryParams.xmfrdwxz" placeholder="请输入项目名称" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="5">
<el-form-item label="当前状态">
<el-select v-model="queryParams.status" placeholder="选择当前状态" clearable>
<el-option v-for="dict in dict.type.tbzt" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search"
@click="handleQuery">查询</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<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">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.current - 1) * queryParams.size }}
</template>
</el-table-column>
<el-table-column label="项目名称" align="center" prop="name" width="200" />
<el-table-column label="现状分类" align="center" prop="xzfl">
<template slot-scope="scope">
<dict-tag :options="dict.type.xzfl" :value="scope.row.xzfl" />
</template>
</el-table-column>
<el-table-column label="项目法人单位" align="center" prop="xmfrdwxz" width="200" />
<el-table-column label="统一信用代码" align="center" prop="tyshxydm" width="200" />
<el-table-column label="项目建设起止时间" align="center" width="200">
<template slot-scope="scope">
{{ scope.row.begainTime }} {{ scope.row.endTime }}
</template>
</el-table-column>
<el-table-column label="总投资额(万元)" align="center" width="130" prop="ztze" />
<el-table-column label="总用地面积(平方米)" align="center" width="180" prop="zydmj" />
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<span :style="{ color: statusColors[statusMap[scope.row.status]] }">{{
statusMap[scope.row.status] }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="text" @click="getAdd(scope.row, 'detail')">详情</el-button>
<el-button type="text" @click="handleDelete(scope.row)" v-if="checkRole(['admin'])"
style="color: #F25353;">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current"
:limit.sync="queryParams.size" @pagination="getList" />
</div>
<div class="container">
<!-- 负面清单 -->
<!-- 表单查询项 -->
<div class="headerbox">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="200"
>
<el-row>
<el-col :span="5">
<el-form-item label="项目名称" style="width: 100%">
<el-input
v-model="queryParams.name"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="建设起止时间">
<el-date-picker
v-model="queryParams.startTime"
type="month"
placeholder="开始月份"
value-format="yyyy-MM"
style="width: 9rem"
:clearable="true"
>
</el-date-picker>
~
<el-date-picker
v-model="queryParams.endTime"
type="month"
placeholder="结束月份"
value-format="yyyy-MM"
style="width: 9rem"
:clearable="true"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select
v-model="queryParams.xzfl"
placeholder="现状分类"
clearable
>
<el-option
v-for="dict in dict.type.xzfl"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="项目法人单位">
<el-input
v-model="queryParams.xmfrdwxz"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="5">
<el-form-item label="当前状态">
<el-select
v-model="queryParams.status"
placeholder="选择当前状态"
clearable
>
<el-option
v-for="dict in dict.type.tbzt"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
>查询</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="table-container">
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
stripe
height="100%"
>
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{
scope.$index + 1 + (queryParams.current - 1) * queryParams.size
}}
</template>
</el-table-column>
<el-table-column
label="项目名称"
align="center"
prop="name"
width="200"
show-overflow-tooltip
/>
<el-table-column label="现状分类" align="center" prop="xzfl">
<template slot-scope="scope">
<dict-tag :options="dict.type.xzfl" :value="scope.row.xzfl" />
</template>
</el-table-column>
<el-table-column
label="项目法人单位"
align="center"
prop="xmfrdwxz"
width="200"
show-overflow-tooltip
/>
<el-table-column
label="统一信用代码"
align="center"
prop="tyshxydm"
width="200"
/>
<el-table-column label="项目建设起止时间" align="center" width="200">
<template slot-scope="scope">
{{ scope.row.begainTime }} {{ scope.row.endTime }}
</template>
</el-table-column>
<el-table-column
label="总投资额(万元)"
align="center"
width="130"
prop="ztze"
/>
<el-table-column
label="总用地面积(平方米)"
align="center"
width="180"
prop="zydmj"
/>
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<span
:style="{ color: statusColors[statusMap[scope.row.status]] }"
>{{ statusMap[scope.row.status] }}</span
>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
fixed="right"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button type="text" @click="getAdd(scope.row, 'detail')"
>详情</el-button
>
<el-button
type="text"
@click="handleDelete(scope.row)"
v-if="checkRole(['admin'])"
style="color: #f25353"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
</div>
</template>
<script>
import { getBasicInformationPage, deleteBasicInformation } from "@/api/ManageApi/index";
import {
getBasicInformationPage,
deleteBasicInformation,
} from "@/api/ManageApi/index";
import { checkPermi, checkRole } from "@/utils/permission";
export default {
dicts: ["xzfl","tbzt"],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
statusColors: {
'审核通过': '#6EDABE',
'待填报': '#FFBF6B',
'待审核': '#7693D8'
},
//
statusMap: {
1: '待填报',
2: '待审核',
3: '审核通过'
},
//
queryParams: {
current: 1,
size: 10,
xzfl: undefined,
name: undefined,
xmfrdwxz: undefined,
startTime: undefined,
endTime: undefined,
status: undefined,
isFmqd: 1
}
};
},
created() {
this.getList();
},
methods: {
checkPermi,
checkRole,
/** 查询项目列表 */
getList() {
this.loading = true;
dicts: ["xzfl", "tbzt"],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
statusColors: {
审核通过: "#6EDABE",
待填报: "#FFBF6B",
待审核: "#7693D8",
},
//
statusMap: {
1: "待填报",
2: "待审核",
3: "审核通过",
},
//
queryParams: {
current: 1,
size: 10,
xzfl: undefined,
name: undefined,
xmfrdwxz: undefined,
startTime: undefined,
endTime: undefined,
status: undefined,
isFmqd: 1,
},
};
},
created() {
this.getList();
},
methods: {
checkPermi,
checkRole,
/** 查询项目列表 */
getList() {
this.loading = true;
// isFmqd=2
const params = {
...this.queryParams,
isFmqd: 1
};
// isFmqd=2
const params = {
...this.queryParams,
isFmqd: 1,
};
getBasicInformationPage(params).then((response) => {
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
}).catch(error => {
console.error('API请求错误:', error);
this.loading = false;
});
},
getBasicInformationPage(params)
.then((response) => {
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
})
.catch((error) => {
console.error("API请求错误:", error);
this.loading = false;
});
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除项目id为"' + ids + '"的数据项?')
.then(() => {
return deleteBasicInformation(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => { });
},
/** 详情按钮操作 */
getAdd(row, type) {
this.$store.commit("SET_CRUMBS", "项目详情");
const id = row.id || this.ids[0];
this.$router.push({ path: `/manage-add/${id}`, query: { action: type } });
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
xzfl: undefined,
name: undefined,
xmfrdwxz: undefined,
startTime: undefined,
endTime: undefined,
status: undefined,
isFmqd: 1
};
this.getList();
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除项目id为"' + ids + '"的数据项?')
.then(() => {
return deleteBasicInformation(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 详情按钮操作 */
getAdd(row, type) {
this.$store.commit("SET_CRUMBS", "项目详情");
const id = row.id || this.ids[0];
this.$router.push({ path: `/manage-add/${id}`, query: { action: type } });
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
xzfl: undefined,
name: undefined,
xmfrdwxz: undefined,
startTime: undefined,
endTime: undefined,
status: undefined,
isFmqd: 1,
};
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.current = 1;
this.getList();
}
}
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
},
};
</script>
<style scoped>
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
border: 1px solid #eee;
overflow: hidden;
}
.table-header {
margin-bottom: 1rem;
width: 99.7%;
display: flex;
justify-content: space-between;
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
.table-wrapper {
flex: 1;
min-height: 0;
overflow: hidden;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
.el-table {
height: 100% !important;
}
.headbtn {
display: flex;
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
</style>
</style>

@ -1,157 +1,235 @@
<template>
<div>
<!-- 产业标签 -->
<!-- 表单查询项 -->
<div class="headerbox">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="200">
<el-row>
<el-col :span="5">
<el-form-item label="企业名称" style="width: 100%;">
<el-input v-model="queryParams.name" placeholder="请输入企业名称" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="标签代码" style="width: 100%;">
<el-input v-model="queryParams.bqdm" placeholder="请输入标签代码" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="标签状态" style="width: 100%;">
<el-input v-model="queryParams.bqzt" placeholder="请输入标签状态" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="用户类型">
<el-input v-model="queryParams.yhlx" placeholder="请输入用户类型" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" stripe>
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.current - 1) * queryParams.size }}
</template>
</el-table-column>
<el-table-column label="企业名称" align="center" prop="name" width="200" />
<el-table-column label="统一信用代码" align="center" prop="tyshxydm" width="200" />
<el-table-column label="标签代码" align="center" prop="bqdm" />
<el-table-column label="有效状态" align="center" prop="state" width="200" />
<el-table-column label="用户类型" align="center" width="130" prop="yhlx" />
<el-table-column label="标签注释" align="center" width="180" prop="bqzs" />
<el-table-column label="标签状态" align="center" prop="bqzt" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
<template slot-scope="scope">
<el-button type="text" @click="getAdd(scope.row, 'detail')">详情</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current"
:limit.sync="queryParams.size" @pagination="getList" />
</div>
<div class="container">
<!-- 产业标签 -->
<!-- 表单查询项 -->
<div class="headerbox">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="200"
>
<el-row>
<el-col :span="5">
<el-form-item label="企业名称" style="width: 100%">
<el-input
v-model="queryParams.name"
placeholder="请输入企业名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="标签代码" style="width: 100%">
<el-input
v-model="queryParams.bqdm"
placeholder="请输入标签代码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="标签状态" style="width: 100%">
<el-input
v-model="queryParams.bqzt"
placeholder="请输入标签状态"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="用户类型">
<el-input
v-model="queryParams.yhlx"
placeholder="请输入用户类型"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
>查询</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="table-container">
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
stripe
height="100%"
>
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{
scope.$index + 1 + (queryParams.current - 1) * queryParams.size
}}
</template>
</el-table-column>
<el-table-column
label="企业名称"
align="center"
prop="name"
width="200"
/>
<el-table-column
label="统一信用代码"
align="center"
prop="tyshxydm"
width="200"
/>
<el-table-column label="标签代码" align="center" prop="bqdm" />
<el-table-column
label="有效状态"
align="center"
prop="state"
width="200"
/>
<el-table-column
label="用户类型"
align="center"
width="130"
prop="yhlx"
/>
<el-table-column
label="标签注释"
align="center"
width="180"
prop="bqzs"
/>
<el-table-column label="标签状态" align="center" prop="bqzt" />
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
fixed="right"
>
<template slot-scope="scope">
<el-button type="text" @click="getAdd(scope.row, 'detail')"
>详情</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination-wrapper">
<pagination
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
</div>
<!-- 详情弹窗 -->
<el-dialog title="详情" :visible.sync="dialogVisible" width="50%">
<el-form :model="detailData" label-width="200px">
<el-row>
<el-col :span="12">
<el-form-item label="企业名称:">
<span>{{ detailData.name }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="统一信用代码:">
<span>{{ detailData.tyshxydm }}</span>
</el-form-item>
</el-col>
</el-row>
<!-- 详情弹窗 -->
<el-dialog title="详情" :visible.sync="dialogVisible" width="50%">
<el-form :model="detailData" label-width="200px">
<el-row>
<el-col :span="12">
<el-form-item label="企业名称:">
<span>{{ detailData.name }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="统一信用代码:">
<span>{{ detailData.tyshxydm }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="标签标记场景代码:">
<span>{{ detailData.bqdm }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标签代码:">
<span>{{ detailData.state }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="标签标记场景代码:">
<span>{{ detailData.bqdm }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标签代码:">
<span>{{ detailData.state }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="标签值编码:">
<span>{{ detailData.bqzbm }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="有效状态:">
<span>{{ detailData.state }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="标签值编码:">
<span>{{ detailData.bqzbm }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="有效状态:">
<span>{{ detailData.state }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="标签注释:">
<span>{{ detailData.bqzs }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户类型:">
<span>{{ detailData.yhlx }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="标签注释:">
<span>{{ detailData.bqzs }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户类型:">
<span>{{ detailData.yhlx }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="标签标记用户:">
<span>{{ detailData.bqzt }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标签标记单位:">
<span>{{ detailData.bqbjdw }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="标签标记用户:">
<span>{{ detailData.bqzt }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标签标记单位:">
<span>{{ detailData.bqbjdw }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="标签状态:">
<span>{{ detailData.bqzt }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="数据来源名称:">
<span>{{ detailData.sjlymc }}</span>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">关闭</el-button>
</span>
</el-dialog>
</div>
<el-row>
<el-col :span="12">
<el-form-item label="标签状态:">
<span>{{ detailData.bqzt }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="数据来源名称:">
<span>{{ detailData.sjlymc }}</span>
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">关闭</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
@ -159,133 +237,162 @@ import { getCybqInformationPage, getSpanById } from "@/api/ManageApi/index";
import { checkPermi, checkRole } from "@/utils/permission";
export default {
dicts: ["xzfl"],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
queryParams: {
current: 1,
size: 10,
bqdm: undefined,
bqzt: undefined,
yhlx: undefined,
name: undefined,
startTime: undefined,
endTime: undefined,
status: undefined,
},
//
dialogVisible: false,
//
detailData: {}
};
},
created() {
this.getList();
},
methods: {
checkPermi,
checkRole,
/** 查询项目列表 */
getList() {
this.loading = true;
dicts: ["xzfl"],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
queryParams: {
current: 1,
size: 10,
bqdm: undefined,
bqzt: undefined,
yhlx: undefined,
name: undefined,
startTime: undefined,
endTime: undefined,
status: undefined,
},
//
dialogVisible: false,
//
detailData: {},
};
},
created() {
this.getList();
},
methods: {
checkPermi,
checkRole,
/** 查询项目列表 */
getList() {
this.loading = true;
//api
getCybqInformationPage(this.queryParams).then((response) => {
this.postList = [...response.data.records];
this.total = response.data.total;
this.loading = false;
}).catch();
},
//api
getCybqInformationPage(this.queryParams)
.then((response) => {
this.postList = [...response.data.records];
this.total = response.data.total;
this.loading = false;
})
.catch();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 详情按钮操作 */
/** 详情按钮操作 */
getAdd(row) {
this.loading = true;
getSpanById(row.id).then((response) => {
this.detailData = response.data;
this.dialogVisible = true;
this.loading = false;
}).catch((error) => {
this.$message.error("获取详情失败:" + error.message);
this.loading = false;
});
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
bqdm: undefined,
bqzt: undefined,
yhlx: undefined,
name: undefined,
startTime: undefined,
endTime: undefined,
status: undefined,
};
this.getList();
},
/** 详情按钮操作 */
/** 详情按钮操作 */
getAdd(row) {
this.loading = true;
getSpanById(row.id)
.then((response) => {
this.detailData = response.data;
this.dialogVisible = true;
this.loading = false;
})
.catch((error) => {
this.$message.error("获取详情失败:" + error.message);
this.loading = false;
});
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
bqdm: undefined,
bqzt: undefined,
yhlx: undefined,
name: undefined,
startTime: undefined,
endTime: undefined,
status: undefined,
};
this.getList();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.current = 1;
this.getList();
}
}
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
},
};
</script>
<style scoped>
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
border: 1px solid #eee;
overflow: hidden;
}
.table-header {
margin-bottom: 1rem;
width: 99.7%;
display: flex;
justify-content: space-between;
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
.table-wrapper {
flex: 1;
min-height: 0;
overflow: hidden;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
.el-table {
height: 100% !important;
}
.headbtn {
display: flex;
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
</style>
</style>

@ -1,5 +1,5 @@
<template>
<div>
<div class="container">
<!-- 表单查询项 -->
<div class="headerbox">
<el-form
@ -77,17 +77,17 @@
</div>
<!-- 表格内容区 -->
<div class="tablebox">
<div class="table-container">
<!-- 导出行 -->
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<div class="table-header">
<el-row :gutter="4" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"
>新增</el-button
>
</el-col>
</el-row>
<el-row :gutter="10" class="mb8">
<el-row :gutter="4" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
@ -106,10 +106,12 @@
</el-col>
</el-row>
</div>
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
height="100%"
>
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" width="60" align="center">
@ -153,6 +155,8 @@
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination-wrapper">
<pagination
v-show="total > 0"
:total="total"
@ -160,6 +164,7 @@
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
</div>
<!-- 添加或修改项目对话框 -->
@ -524,38 +529,60 @@ export default {
};
</script>
<style scoped>
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
margin: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.tablebox {
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
margin: 0.5rem;
border: 1px solid #eee;
overflow: hidden;
}
.tablehead {
.table-header {
margin-bottom: 1rem;
width: 99.7%;
display: flex;
justify-content: space-between;
align-items: center;
}
.headbtn {
display: flex;
.table-wrapper {
flex: 1;
min-height: 0;
overflow: hidden;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
width: 100%;
display: flex;
justify-content: space-between;
.el-table {
height: 100% !important;
}
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
</style>
</style>

@ -1,429 +1,593 @@
<template>
<div>
<!-- 细分产业管理 -->
<!-- 表单查询项 -->
<div class="headerbox">
<el-form ref="queryForm" :model="queryParams" size="small" label-width="100px" style="margin-left: -30px;">
<el-row>
<el-col :span="5">
<el-form-item label="产业类别" prop="cylb">
<el-select v-model="queryParams.cylb" placeholder="请选择产业类别">
<el-option v-for="dict in dict.type.cylb" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="产业细分" prop="cyxf" style="width: 100%;">
<el-input v-model="queryParams.cyxf" placeholder="请输入产业细分"
:fetch-suggestions="querySearchAsync" @keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="上楼适应性" prop="slsyx">
<el-select v-model="queryParams.slsyx" placeholder="请选择上楼适应性" clearable
style="width: 20rem;">
<el-option v-for="dict in dict.type.slsyx" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="更新时间" prop="updateTime">
<el-date-picker v-model="queryParams.startTime" type="datetime" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss" :style="{ width: '18rem' }" placeholder="选择日期时间"
clearable />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item style="margin-left: -70px;">
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @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" icon="el-icon-plus" @click="handleAdd"></el-button>
</el-col>
</el-row>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-download" @click="handleImport"></el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-upload2" @click="handleExport"></el-button>
</el-col>
</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="序号" width="60" align="center">
<template slot-scope="scope">
{{ (queryParams.current - 1) * queryParams.size + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="产业类别" align="center" prop="cylb">
<template slot-scope="scope">
<dict-tag :options="dict.type.cylb" :value="scope.row.cylb" />
</template>
</el-table-column>
<el-table-column label="产业细分" align="center" prop="cyxf" />
<el-table-column label="原材料及生产环节" align="center" prop="ycljschj" />
<el-table-column label="上楼适应性" align="center" prop="slsyx">
<template slot-scope="scope">
<dict-tag :options="dict.type.slsyx" :value="scope.row.slsyx" />
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" >
<template slot-scope="scope">
<el-button type="text" @click="handleUpdate(scope.row)"></el-button>
<el-button type="text" @click="handleDelete(scope.row)" style="color: red;">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current"
:limit.sync="queryParams.size" @pagination="getList" />
</div>
<!-- 添加或修改项目对话框 -->
<el-dialog :title="title" :visible.sync="open" width="40rem" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="160px">
<el-form-item label="产业类别" prop="cylb" style="width: 100%;">
<el-select v-model="form.cylb" placeholder="请选择产业类别" style="width: 100%;">
<el-option v-for="dict in dict.type.cylb" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="产业细分" prop="cyxf">
<el-input v-model="form.cyxf" placeholder="请输入产业细分" />
</el-form-item>
<el-form-item label="原材料及生产环节" prop="ycljschj">
<el-input v-model="form.ycljschj" placeholder="请输入原材料及生产环节" />
</el-form-item>
<el-form-item label="上楼适应性" prop="slsyx">
<el-select v-model="form.slsyx" placeholder="请选择上楼适应性" style="width: 100%;">
<el-option v-for="dict in dict.type.slsyx" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)"></el-option>
</el-select>
</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>
<div class="container">
<!-- 细分产业管理 -->
<!-- 表单查询项 -->
<div class="headerbox">
<el-form
ref="queryForm"
:model="queryParams"
size="small"
label-width="100px"
style="margin-left: -30px"
>
<el-row>
<el-col :span="5">
<el-form-item label="产业类别" prop="cylb">
<el-select
v-model="queryParams.cylb"
placeholder="请选择产业类别"
>
<el-option
v-for="dict in dict.type.cylb"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="产业细分" prop="cyxf" style="width: 100%">
<el-input
v-model="queryParams.cyxf"
placeholder="请输入产业细分"
:fetch-suggestions="querySearchAsync"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="上楼适应性" prop="slsyx">
<el-select
v-model="queryParams.slsyx"
placeholder="请选择上楼适应性"
clearable
style="width: 20rem"
>
<el-option
v-for="dict in dict.type.slsyx"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="更新时间" prop="updateTime">
<el-date-picker
v-model="queryParams.startTime"
type="datetime"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
:style="{ width: '18rem' }"
placeholder="选择日期时间"
clearable
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item style="margin-left: -70px">
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
>查询</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 表格内容区 -->
<div class="table-container">
<!-- 导出行 -->
<div class="table-header">
<el-row :gutter="4" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"
>新增</el-button
>
</el-col>
</el-row>
<el-row :gutter="5" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-download"
@click="handleImport"
>导入</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
icon="el-icon-upload2"
@click="handleExport"
>全量导出</el-button
>
</el-col>
</el-row>
</div>
<div class="table-wrapper">
<el-table
v-loading="loading"
:data="postList"
height="100%"
@selection-change="handleSelectionChange"
>
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column label="序号" width="60" align="center">
<template slot-scope="scope">
{{
(queryParams.current - 1) * queryParams.size + scope.$index + 1
}}
</template>
</el-table-column>
<el-table-column label="产业类别" align="center" prop="cylb">
<template slot-scope="scope">
<dict-tag :options="dict.type.cylb" :value="scope.row.cylb" />
</template>
</el-table-column>
<el-table-column label="产业细分" align="center" prop="cyxf" />
<el-table-column
label="原材料及生产环节"
align="center"
prop="ycljschj"
/>
<el-table-column label="上楼适应性" align="center" prop="slsyx">
<template slot-scope="scope">
<dict-tag :options="dict.type.slsyx" :value="scope.row.slsyx" />
</template>
</el-table-column>
<el-table-column
label="更新时间"
align="center"
prop="updateTime"
width="180"
/>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
fixed="right"
>
<template slot-scope="scope">
<el-button type="text" @click="handleUpdate(scope.row)"
>编辑</el-button
>
<el-button
type="text"
@click="handleDelete(scope.row)"
style="color: red"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<div class="pagination-wrapper">
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
</div>
<!-- 导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"
@click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
<!-- 添加或修改项目对话框 -->
<el-dialog :title="title" :visible.sync="open" width="40rem" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="160px">
<el-form-item label="产业类别" prop="cylb" style="width: 100%">
<el-select
v-model="form.cylb"
placeholder="请选择产业类别"
style="width: 100%"
>
<el-option
v-for="dict in dict.type.cylb"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="产业细分" prop="cyxf">
<el-input v-model="form.cyxf" placeholder="请输入产业细分" />
</el-form-item>
<el-form-item label="原材料及生产环节" prop="ycljschj">
<el-input
v-model="form.ycljschj"
placeholder="请输入原材料及生产环节"
/>
</el-form-item>
<el-form-item label="上楼适应性" prop="slsyx">
<el-select
v-model="form.slsyx"
placeholder="请选择上楼适应性"
style="width: 100%"
>
<el-option
v-for="dict in dict.type.slsyx"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</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>
</div>
<!-- 导入对话框 -->
<el-dialog
:title="upload.title"
:visible.sync="upload.open"
width="400px"
append-to-body
>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<span>仅允许导入xlsxlsx格式文件</span>
<el-link
type="primary"
:underline="false"
style="font-size: 12px; vertical-align: baseline"
@click="importTemplate"
>下载模板</el-link
>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getToken } from "@/utils/auth";
import { getXfcyglPage, addXfcygl, updateXfcygl, deleteXfcygl } from "@/api/ManageApi/index";
import fileload from "@/components/FileUpload/index.vue"
import {
getXfcyglPage,
addXfcygl,
updateXfcygl,
deleteXfcygl,
} from "@/api/ManageApi/index";
import fileload from "@/components/FileUpload/index.vue";
export default {
dicts: ['cylb', 'slsyx'],
components: {
fileload
dicts: ["cylb", "slsyx"],
components: {
fileload,
},
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
title: "",
//
open: false,
//
detailOpen: false,
//
queryParams: {
current: 1,
size: 10,
cyxf: undefined,
cylb: undefined,
slsyx: undefined,
},
//
form: {
cyxf: undefined,
cylb: undefined,
ycljschj: undefined,
slsyx: undefined,
endTime: undefined,
startTime: undefined,
},
//
rules: {
cyxf: [
{ required: true, message: "产业细分不能为空", trigger: "blur" },
],
cylb: [
{ required: true, message: "产业类别不能为空", trigger: "change" },
],
slsyx: [
{ required: true, message: "上楼适应性不能为空", trigger: "blur" },
],
ycljschj: [
{
required: true,
message: "原材料及生产环节不能为空",
trigger: "change",
},
],
},
upload: {
//
open: false,
//
title: "细分产业导入",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/gysl/xfcygl/imporXfcy",
},
};
},
created() {
this.getList();
},
methods: {
/**导出 */
handleExport() {
this.download(
"/gysl/xfcygl/exportXfcy",
{
...this.form,
},
`细分产业管理${new Date().getTime()}.xlsx`
);
},
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
title: "",
//
open: false,
//
detailOpen: false,
//
queryParams: {
current: 1,
size: 10,
cyxf: undefined,
cylb: undefined,
slsyx: undefined,
},
//
form: {
cyxf: undefined,
cylb: undefined,
ycljschj: undefined,
slsyx: undefined,
endTime: undefined,
startTime: undefined
},
//
rules: {
cyxf: [
{ required: true, message: "产业细分不能为空", trigger: "blur" }
],
cylb: [
{ required: true, message: "产业类别不能为空", trigger: "change" }
],
slsyx: [
{ required: true, message: "上楼适应性不能为空", trigger: "blur" }
],
ycljschj: [
{ required: true, message: "原材料及生产环节不能为空", trigger: "change" }
]
},
upload: {
//
open: false,
//
title: "细分产业导入",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/gysl/xfcygl/imporXfcy",
},
};
querySearchAsync(queryString, cb) {
let results = [];
getXfcyglPage({ cyxf: queryString }).then((res) => {
res.data.records.forEach((item) => {
results.push({
value: item.cyxf,
id: item.id,
});
});
});
cb(results);
},
created() {
this.getList();
//
getList() {
this.loading = true;
getXfcyglPage(this.queryParams)
.then((response) => {
this.postList = response.data.records.map((item) => ({
...item,
}));
this.total = response.data.total;
this.loading = false;
})
.catch((error) => {
console.error("API Request Error:", error);
this.loading = false;
});
},
methods: {
/**导出 */
handleExport() {
this.download(
"/gysl/xfcygl/exportXfcy",
{
...this.form,
},
`细分产业管理${new Date().getTime()}.xlsx`
);
},
querySearchAsync(queryString, cb) {
let results = [];
getXfcyglPage({ cyxf: queryString }).then(res => {
res.data.records.forEach(item => {
results.push({
value: item.cyxf,
id: item.id,
});
});
});
cb(results);
},
//
getList() {
this.loading = true;
getXfcyglPage(this.queryParams).then(response => {
this.postList = response.data.records.map(item => ({
...item,
}));
this.total = response.data.total;
this.loading = false;
}).catch(error => {
console.error('API Request Error:', error);
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: undefined,
cyxf: undefined,
cylb: undefined,
ycljschj: undefined,
slsyx: undefined,
createBy: undefined,
createId: undefined,
createTime: undefined,
updateBy: undefined,
updateId: undefined,
updateTime: undefined,
startTime: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "新增细分产业";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const catalogId = row.id;
this.form = { ...row };
this.open = true;
this.title = "编辑细分产业";
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id !== undefined) {
updateXfcygl(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).catch(error => {
console.error('API Request Error:', error);
});
} else {
addXfcygl(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).catch(error => {
console.error('API Request Error:', error);
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const catalogIds = row.id || this.ids;
this.$modal.confirm('是否确认删除该数据项?').then(() => {
return deleteXfcygl([catalogIds]);
}).then(() => {
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: undefined,
cyxf: undefined,
cylb: undefined,
ycljschj: undefined,
slsyx: undefined,
createBy: undefined,
createId: undefined,
createTime: undefined,
updateBy: undefined,
updateId: undefined,
updateTime: undefined,
startTime: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.current = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "新增细分产业";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const catalogId = row.id;
this.form = { ...row };
this.open = true;
this.title = "编辑细分产业";
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id !== undefined) {
updateXfcygl(this.form)
.then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => { });
},
//
handleImport() {
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
this.download(
"/gysl/xfcygl/importTemplate",
{},
`细分产业模板${new Date().getTime()}.xlsx`
);
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
this.getList();
},
//
submitFileForm() {
this.$refs.upload.submit();
},
}
})
.catch((error) => {
console.error("API Request Error:", error);
});
} else {
addXfcygl(this.form)
.then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
})
.catch((error) => {
console.error("API Request Error:", error);
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const catalogIds = row.id || this.ids;
this.$modal
.confirm("是否确认删除该数据项?")
.then(() => {
return deleteXfcygl([catalogIds]);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
//
handleImport() {
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
this.download(
"/gysl/xfcygl/importTemplate",
{},
`细分产业模板${new Date().getTime()}.xlsx`
);
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
this.getList();
},
//
submitFileForm() {
this.$refs.upload.submit();
},
},
};
</script>
<style scoped>
<style scoped lang="scss">
.container {
display: flex;
flex-direction: column;
height: 100%;
padding: 10px;
box-sizing: border-box;
overflow: hidden;
}
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem 1rem 0rem 1rem;
margin-bottom: 0.5rem;
border: 1px solid #eee;
}
.table-container {
flex: 1;
display: flex;
flex-direction: column;
background-color: #fff;
border-radius: 0.5rem;
padding: 1rem;
border: 1px solid #eee;
overflow: hidden;
}
.table-header {
margin-bottom: 1rem;
width: 99.7%;
display: flex;
justify-content: space-between;
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
.table-wrapper {
flex: 1;
min-height: 0;
overflow: hidden;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
.el-table {
height: 100% !important;
}
.headbtn {
display: flex;
/* 隐藏滚动条但保留功能 */
.table-container ::-webkit-scrollbar {
width: 0 !important;
height: 0 !important;
display: none;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
width: 100%;
display: flex;
justify-content: space-between;
/* 兼容 Firefox */
.table-container {
scrollbar-width: none;
}
</style>
</style>

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

@ -40,13 +40,13 @@ module.exports = {
// webpack-dev-server 相关配置
devServer: {
host: '0.0.0.0',
// public:'192.168.0.119',
public:'192.168.0.119',
port: port,
open: true,
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
// target: `http://192.168.0.109:7071/`,
target: `http://192.168.0.108:7071/`,
// target: `http://39.101.188.84:7071/`,
changeOrigin: true,
pathRewrite: {

Loading…
Cancel
Save