清单bug更改

xuhongjie
严飞永 4 weeks ago
parent 049812229f
commit 75e0dca397

@ -8,13 +8,14 @@ export function getBasicInformationPage(params) {
params
})
}
// 企业--基本信息==展示
// 通过主键查询单条所有数据
export function getBasicInformationById(id) {
return request({
url: `/gysl/basicInformation/${id}`,
url: `/gysl/basicInformation/stagingInfo/${id}`,
method: 'get'
});
}
// 企业端提交填报
export function fillBasicInformation(data) {
return request({
@ -23,6 +24,14 @@ export function fillBasicInformation(data) {
data: data
})
}
//企业端暂存数据
export function tempBasicInformation(data) {
return request({
url: '/gysl/basicInformation/staging',
method: 'post',
data: data
})
}
// 政务端审核通过
export function auditBasicInformation(data) {
return request({
@ -483,7 +492,7 @@ export function deletexmqt(idList) {
return request({
url:'/gysl/projectOtherInfo/delete',
method:'delete',
params:{idList}
params: { idList: idList.join(',') }
})
}
//修改数据
@ -728,7 +737,7 @@ export function getMessageCount() {
}
//智能提醒
// 已读智能提醒
//已读提醒
export function markSmartReminderAsRead(id) {
return request({
url: `/gysl/jSmartReminders/isRead/${id}`,

@ -1,12 +1,13 @@
import request from '@/utils/request'
// 登录方法
export function login(username, password, code, uuid) {
export function login(username, password, code, uuid,loginRole) {
const data = {
username,
password,
code,
uuid
uuid,
loginRole
}
return request({
url: '/login',

@ -11,10 +11,10 @@
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper">
<div v-if="checkRole(['common'])">
<span>{{ username }}</span>
<span>{{ name }}</span>
</div>
<div v-if="showCompanySection">
<span>{{ username }}</span>
<span>{{ name }}</span>
</div>
<i class="el-icon-caret-bottom" />
</div>
@ -32,107 +32,64 @@
import { mapGetters } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import TopNav from '@/components/TopNav'
import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull'
import SizeSelect from '@/components/SizeSelect'
import Search from '@/components/HeaderSearch'
import RuoYiGit from '@/components/RuoYi/Git'
import RuoYiDoc from '@/components/RuoYi/Doc'
import bearicon from '@/components/bearicon'
import { checkPermi, checkRole } from "@/utils/permission";
import { getMessageCount } from '@/api/ManageApi/index'
import { checkPermi, checkRole } from "@/utils/permission"
import { name } from 'mars2d'
export default {
components: {
Breadcrumb,
TopNav,
Hamburger,
Screenfull,
SizeSelect,
Search,
RuoYiGit,
RuoYiDoc,
bearicon
components: {
Breadcrumb,
TopNav,
bearicon
},
data() {
return {
username: "",
messages: [],
counts: 0 //
}
},
computed: {
...mapGetters(["avatar", "name", "sidebarRouters", "nickName"]),
//
showCompanySection() {
const isCompany = this.checkRole(['company'])
const isCommon = this.checkRole(['common'])
return isCompany && !isCommon
},
data() {
return {
messages: [],
}
topNav: {
get() {
return this.$store.state.settings.topNav
}
},
computed: {
...mapGetters([
'sidebar',
'avatar',
'device',
'name' // Make sure this getter exists in your Vuex store
]),
username() {
// Return the username from Vuex store or localStorage
return this.name || localStorage.getItem('username') || '账号名称';
},
showCompanySection() {
const isCompany = this.checkRole(['company']);
const isCommon = this.checkRole(['common']);
//
return isCompany && !isCommon;
},
setting: {
get() {
return this.$store.state.settings.showSettings
},
set(val) {
this.$store.dispatch('settings/changeSetting', {
key: 'showSettings',
value: val
})
}
},
topNav: {
get() {
return this.$store.state.settings.topNav
}
},
unreadMessages() {
return this.messages.length
}
unreadMessages() {
return this.messages.length
}
},
mounted() {
this.username = this.$store.state.user.nickName
},
methods: {
checkPermi,
checkRole,
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
},
mounted() {
this.getCounts();
logout() {
this.$confirm('确定注销并退出系统吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$store.dispatch('LogOut').then(() => {
this.$router.replace('/login')
})
}).catch(() => {})
},
methods: {
checkPermi,
checkRole,
//
async getCounts() {
try {
const response = await getMessageCount();
if (response && response.code === 200) {
this.counts = response.data; // counts
} else {
console.error('获取数据失败:', response);
}
} catch (error) {
console.error('获取数据失败:', error);
}
},
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
},
async logout() {
this.$confirm('确定注销并退出系统吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$store.dispatch('LogOut').then(() => {
this.$router.replace('/login')
})
}).catch(() => { });
},
handleCommand(command) {
this.$message('点击了: ' + command)
}
handleCommand(command) {
this.$message('点击了: ' + command)
}
}
}
</script>

@ -8,6 +8,7 @@ const getters = {
token: state => state.user.token,
avatar: state => state.user.avatar,
name: state => state.user.name,
nickName: state => state.user.nickName,
introduction: state => state.user.introduction,
roles: state => state.user.roles,
permissions: state => state.user.permissions,

@ -41,8 +41,9 @@ const user = {
const password = userInfo.password
const code = userInfo.code
const uuid = userInfo.uuid
const loginRole = userInfo.loginRole
return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => {
login(username, password, code, uuid,loginRole).then(res => {
setToken(res.token)
commit('SET_TOKEN', res.token)
resolve()
@ -68,7 +69,9 @@ const user = {
commit('SET_ROLES', ['ROLE_DEFAULT'])
}
commit('SET_ID', user.userId)
commit('SET_NAME', user.userName)
commit('SET_NAME', user.nickName)
commit('SET_AVATAR', avatar)
resolve(res)
}).catch(error => {

@ -13,19 +13,19 @@
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
编辑
</el-button>
<!-- <el-button type="primary" size="medium" plain
<el-button type="primary" size="medium" plain v-if="action === 'fill' || !action"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleExport">
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
</el-button> -->
</el-button>
</div>
</div>
<!-- 内容展示区 -->
<div class="content">
<div class="picturediv">
<!-- 图片展示 -->
<img v-if="basicInfo.fj" :src="basicInfo.fj" alt="项目代表性照片">
<img v-if="basicInfo.fj" :src="baseUrl + basicInfo.fj" alt="项目代表性照片">
</div>
<div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="3" border>
@ -232,6 +232,7 @@ export default {
},
data() {
return {
baseUrl: process.env.VUE_APP_BASE_API,
descriptions: [],
dialogImageUrl: '',
dialogVisibletwo: false,

@ -13,8 +13,8 @@
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
新增
</el-button>
<el-button
type="primary" size="medium" plain v-if="buildings.length !== 0 && (action === 'fill' || !action)"
<el-button type="primary" size="medium" plain
v-if="buildings.length !== 0 && (action === 'fill' || !action)"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;"
@click="handleEdit(selectedBuilding)">
<img src="../../../assets/images/detailsicon/icon-bj@2x.png" alt="编辑"
@ -22,16 +22,12 @@
编辑
</el-button>
<el-button type="primary" size="medium" plain v-if="action === 'fill' || !action"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;"
@click="handleImport"
>
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleImport">
<i class="el-icon-download" style="width: 0.6rem; height: 0.6rem; margin-right: 4px;"></i>
导入
</el-button>
<el-button type="primary" size="medium" plain v-if="action === 'fill' || !action"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;"
@click="handleExport"
>
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleExport">
<img src="../../../assets/images/detailsicon/icon-dc@2x.png" alt="导出"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
@ -112,16 +108,16 @@
</div>
</div>
<!-- 新增楼栋弹窗 -->
<el-dialog title="新增楼栋" :visible.sync="dialogVisible" width="65%">
<el-form :model="buildingForm" label-width="230px">
<el-dialog title="新增楼栋" :visible.sync="dialogVisible" width="68%">
<el-form :model="buildingForm" :rules="rules" ref="buildingFormRef" label-width="260px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="楼栋名称:">
<el-form-item label="楼栋名称:" prop="name">
<el-input v-model="buildingForm.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否为重要楼栋:">
<el-form-item label="是否为重要楼栋:" prop="sfwzyld">
<el-select v-model="buildingForm.sfwzyld" placeholder="请选择" style="width: 22.5rem;">
<el-option v-for="dict in dict.type.isno" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)"></el-option>
@ -131,60 +127,60 @@
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="首层高度(米):">
<el-form-item label="首层高度(米):" prop="scgd">
<el-input v-model="buildingForm.scgd"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="层数:">
<el-form-item label="层数:" prop="floor">
<el-input v-model="buildingForm.floor"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="4层以上层高">
<el-form-item label="4层以上层高" prop="fourYscg">
<el-input v-model="buildingForm.fourYscg"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="柱距:">
<el-form-item label="柱距:" prop="zj">
<el-input v-model="buildingForm.zj"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="2至4层层高">
<el-form-item label="2至4层层高" porp="twoAndFourCg">
<el-input v-model="buildingForm.twoAndFourCg"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="总建筑高度(米):">
<el-form-item label="总建筑高度(米):" prop="totalBuildingHeight">
<el-input v-model="buildingForm.totalBuildingHeight"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="首层地面荷载(吨/平方米):">
<el-form-item label="首层地面荷载(吨/平方米):" prop="scdmhz">
<el-input v-model="buildingForm.scdmhz"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="二至三层楼面荷载(吨/平方米):">
<el-form-item label="二至三层楼面荷载(吨/平方米):" prop="twoAndThreeLmhz">
<el-input v-model="buildingForm.twoAndThreeLmhz"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="标准层面积(千平方米):">
<el-form-item label="标准层面积(千平方米):" prop="bzcmj">
<el-input v-model="buildingForm.bzcmj"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否有汽车盘道:">
<el-form-item label="是否有汽车盘道:" prop="sfyqcpd">
<el-select v-model="buildingForm.sfyqcpd" placeholder="请选择" style="width: 22.5rem;">
<el-option v-for="dict in dict.type.isno" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)"></el-option>
@ -194,7 +190,7 @@
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否有吊装口:">
<el-form-item label="是否有吊装口:" prop="sfydzk">
<el-select v-model="buildingForm.sfydzk" placeholder="请选择" style="width: 22.5rem;">
<el-option v-for="dict in dict.type.isno" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)"></el-option>
@ -202,7 +198,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="四层及以上楼面荷载(吨/平方米):">
<el-form-item label="四层及以上楼面荷载(吨/平方米):" prop="fourYslmhz">
<el-input v-model="buildingForm.fourYslmhz"></el-input>
</el-form-item>
</el-col>
@ -213,11 +209,31 @@
<el-button type="primary" @click="handleAddBuilding"> </el-button>
</span>
</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>
<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 { getjzxxinformationByxmId, getjzxxById, addjzxx, updatejzxx, deletejzxx } from '@/api/ManageApi/index';
import { getToken } from "@/utils/auth";
import { getjzxxinformationByxmId, addjzxx, updatejzxx, deletejzxx } from '@/api/ManageApi/index';
export default {
dicts: ['isno'],
@ -264,13 +280,103 @@ export default {
xmId: 0,
zj: 0
},
rules:[]
//
upload: {
//
open: false,
//
title: "web资产导入",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: location.origin + "/gysl/buildingInformation/importProjectBuilding",
},
rules: {
name: [
{ required: true, message: '请输入楼栋名称', trigger: 'blur' },
],
sfwzyld: [
{ required: true, message: '请选择是否为重要楼栋', trigger: 'change' }
],
floor: [
{ required: true, message: '请输入层数', trigger: 'blur' },
{ type: 'number', message: '层数必须是数字', trigger: 'blur' },
],
totalBuildingHeight: [
{ required: true, message: '请输入总建筑高度(米)', trigger: 'blur' },
{ type: 'number', message: '总建筑高度(米)必须是数字', trigger: 'blur' },
],
scgd: [
{ required: true, message: '请输入首层高度(米)', trigger: 'blur' },
{ type: 'number', message: '首层高度(米)必须是数字', trigger: 'blur' },
],
twoAndFourCg: [
{ required: true, message: '请输入2至4层层高', trigger: 'blur' },
{ type: 'number', message: '2至4层层高必须是数字', trigger: 'blur' },
],
scdmhz: [
{ required: true, message: '请输入首层地面荷载(吨/平方米)', trigger: 'blur' },
{ type: 'number', message: '首层地面荷载(吨/平方米)必须是数字', trigger: 'blur' },
],
bzcmj: [
{ required: true, message: '请输入标准层面积(千平方米)', trigger: 'blur' },
{ type: 'number', message: '标准层面积(千平方米)必须是数字', trigger: 'blur' },
]
}
};
},
created() {
this.fetchBuildings();
},
methods: {
/** 导出 */
handleExport() {
this.download(
"/tc/assetCurrent/export",
{
...this.formInline,
},
`建筑信息${new Date().getTime()}.xlsx`
);
},
//
handleImport() {
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
this.download(
"/tc/assetCurrent/importTemplate",
{},
`web资产导入模板${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();
},
//12
getTextForBoolean(value) {
return value === 1 ? '是' : '否';

@ -126,10 +126,6 @@ export default {
} else {
this.$message.error(response.msg || '查询失败');
}
})
.catch(error => {
console.error("查询失败:", error);
this.$message.error('查询失败');
});
},
// fetchMemos
@ -336,8 +332,9 @@ export default {
display: flex;
height: 8rem;
margin-top: -1rem;
gap: 1rem;
gap: 2rem;
flex-wrap: wrap;
overflow: auto;
}
.descriptionditem {

@ -26,12 +26,6 @@
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
导出
</el-button>
<el-button type="primary" size="medium" plain v-if="checkRole(['admin', 'common'])"
style="border: none;background-color: rgba(242,83,83,0.1);color: #F25353;" @click="deleteData">
<img src="../../../assets/images/detailsicon/icon-delet@2x.png" alt="删除"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;">
删除
</el-button>
</div>
</div>
@ -41,11 +35,14 @@
<el-descriptions class="margin-top" :column="4" border>
<el-descriptions-item v-for="(item, index) in anotherInfo" :key="index" :label="item.zdname">
<template v-if="isEditMode">
<el-input v-model="item.zdinfor" size="small" @change="handleFieldChange(item)"></el-input>
<el-input v-model="item.zdinfor" size="small" @change="handleFieldChange(item)"
style="width:8rem;"></el-input>
</template>
<template v-else>
{{ item.zdinfor }}
</template>
<el-button v-if="isEditMode" type="text" size="small" @click="handleDeleteField(item)"
style="margin-left: 1rem;color: #F25353;">删除</el-button>
</el-descriptions-item>
</el-descriptions>
</div>
@ -71,6 +68,7 @@
<script>
import { checkPermi, checkRole } from "@/utils/permission";
import { addxmqt, deletexmqt } from "@/api/ManageApi";
export default {
props: {
@ -83,7 +81,7 @@ export default {
type: String,
required: true
},
xmId:{
xmId: {
type: Number,
default: 0
}
@ -168,24 +166,69 @@ export default {
"/gysl/projectOtherInfo/export",
{
xmId: this.xmId,
...this.anotherInfo,
},
`其他信息${new Date().getTime()}.xlsx`
);
},
//
async handleDeleteField(item) {
this.$confirm(`确定要删除字段 "${item.zdname}" 吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
try {
// API
await deletexmqt([item.id]);
// editedData
if (this.isEditMode) {
this.editedData = this.editedData.filter(i => i.id !== item.id);
}
//
this.$emit('delete-info', item.id);
this.$message.success('删除成功');
location.reload(); //
} catch (error) {
this.$message.error('删除失败: ' + (error.message || '请检查网络连接'));
}
}).catch(() => {
this.$message.info('已取消删除');
});
},
//
submitForm() {
const newItem = {
zdname: this.form.zdname,
zdinfor: this.form.zdinfor,
createTime: new Date().toISOString(),
//
};
async submitForm() {
if (!this.form.zdname || !this.form.zdinfor) {
this.$message.warning('请填写完整的字段名称和内容');
return;
}
try {
// xmId
console.log('当前项目ID:', this.xmId);
//
this.$emit('add-info', newItem);
//
const requestData = {
xmId: this.xmId, // 使ID
zdname: this.form.zdname,
zdinfor: this.form.zdinfor,
// 使
createBy: "",
createId: 0,
createTime: "",
updateBy: "",
updateId: 0,
updateTime: ""
};
this.dialogVisible = false;
// API
const response = await addxmqt(requestData);
console.log('新增成功:', response);
this.dialogVisible = false;
this.$message.success('新增成功');
location.reload(); //
} catch (error) { }
},
//
@ -267,6 +310,8 @@ export default {
width: 100%;
margin-left: 1rem;
height: auto;
display: flex;
justify-content: space-between;
}
.two-row-item {

@ -93,12 +93,18 @@
</el-descriptions-item>
<el-descriptions-item label="规划文件">
<div v-if="isEditing">
<span v-if="form.ghwj">{{ form.ghwj }}</span>
<span v-if="form.ghwj">{{ form.ghwj.split('/').pop() }}</span>
<el-tooltip class="item" effect="dark" content="支持pdf或word文件大小不得超过50MB" placement="top-start">
<el-button type="text" icon="el-icon-upload" @click="showFileDialog"></el-button>
<el-button type="text" icon="el-icon-upload" @click="showFileDialog">
<span v-if="form.ghwj"></span>
<span v-else></span>
</el-button>
</el-tooltip>
</div>
<span v-else>{{ form.ghwj }}</span>
<span v-else>
<a v-if="form.ghwj" :href="form.ghwj" target="_blank">{{ form.ghwj.split('/').pop() }}</a>
<span v-else></span>
</span>
</el-descriptions-item>
</el-descriptions>
</div>
@ -135,6 +141,7 @@ export default {
},
data() {
return {
baseUrl: process.env.VUE_APP_BASE_API,
isEditing: false,
dialogVisible: false,
form: {
@ -164,22 +171,7 @@ export default {
updateTime: null,
},
rules: {
// zydmj: [{ required: true, message: '', trigger: 'blur' }],
// rjl: [{ required: true, message: '', trigger: 'blur' }],
// zjzmj: [{ required: true, message: '', trigger: 'blur' }],
// bzcjzmj: [{ required: true, message: '', trigger: 'blur' }],
// jrjljzmj: [{ required: true, message: '', trigger: 'blur' }],
// jzmd: [{ required: true, message: '', trigger: 'blur' }],
// ldl: [{ required: true, message: '绿', trigger: 'blur' }],
// jzds: [{ required: true, message: '', trigger: 'blur' }],
// dsjzmj: [{ required: true, message: '', trigger: 'blur' }],
// dxjzmj: [{ required: true, message: '', trigger: 'blur' }],
// zgjzcs: [{ required: true, message: '', trigger: 'blur' }],
// zgjzgd: [{ required: true, message: '', trigger: 'blur' }],
// jdctcw: [{ required: true, message: '', trigger: 'blur' }],
// fjdctcw: [{ required: true, message: '', trigger: 'blur' }],
// fhdj: [{ required: true, message: '', trigger: 'blur' }],
// ghwj: [{ required: true, message: '', trigger: 'blur' }]
}
};
},
@ -244,7 +236,7 @@ export default {
},
//
handleFileUploaded(fileName) {
this.form.ghwj = fileName;
this.form.ghwj = `${this.baseUrl}/${fileName}`; // baseURL
}
}
};

@ -26,14 +26,18 @@
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
<el-form :model="form" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label="类型" prop="imgType">
<el-select v-model="form.imgType" placeholder="请选择类型" @change="handleTypeChange">
<el-option v-for="dict in dict.type.tplx" :key="dict.value" :label="dict.label"
<el-select
v-model="form.imgType" placeholder="请选择类型" @change="handleTypeChange">
<el-option v-for="dict in dict.type.tplx" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)">
</el-option>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="图片上传" prop="img">
<ImageUpload v-model="form.img" :file-list="currentTypeFileList" :multiple="true" />
<ImageUpload
v-model="form.img"
:file-list="currentTypeFileList"
:multiple="true" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@ -42,7 +46,7 @@
</span>
</el-dialog>
<!-- 图片展示- 默认轮播图样式 -->
<!-- 图片展示 -->
<div class="longbox">
<div class="main-content">
<template v-if="legendsData && legendsData.length > 0">
@ -50,29 +54,27 @@
style="display: flex;flex-direction: column;gap: 1rem;">
<!-- 类型1轮播图 -->
<div v-if="legend.type1 && legend.type1.images && legend.type1.images.length > 0">
<div class="fixed-carousel-container">
<el-carousel height="12.44rem" indicator-position="outside" class="fixed-carousel">
<el-carousel-item v-for="(img, imgIndex) in legend.type1.images"
:key="'type1-' + imgIndex">
<div class="carousel-item-wrapper">
<img :src="img" :alt="'外部图片' + imgIndex" class="fixed-carousel-image">
<img :src="baseUrl + img" :alt="'外部图片' + imgIndex" class="fixed-carousel-image">
<div class="classify">外部</div>
</div>
</el-carousel-item>
</el-carousel>
</div>
</div>
<!-- 类型2轮播图 -->
<div v-if="legend.type2 && legend.type2.images && legend.type2.images.length > 0">
<div class="fixed-carousel-container">
<el-carousel height="12.44rem" indicator-position="outside" class="fixed-carousel">
<el-carousel-item v-for="(img, imgIndex) in legend.type2.images"
:key="'type2-' + imgIndex">
<div class="carousel-item-wrapper">
<img :src="img" :alt="'内部图片' + imgIndex" class="fixed-carousel-image">
<img :src="baseUrl + img" :alt="'内部图片' + imgIndex" class="fixed-carousel-image">
<div class="classify">内部</div>
</div>
</el-carousel-item>
@ -112,6 +114,7 @@ export default {
},
data() {
return {
baseUrl: process.env.VUE_APP_BASE_API,
dialogVisible: false,
dialogTitle: '新增图例',
legendsData: [],
@ -151,13 +154,8 @@ export default {
if (response.code === 200) {
this.legendsData = response.data || [];
} else {
this.$message.error(response.msg || '获取图例数据失败');
}
} catch (error) {
console.error('获取图例数据失败:', error);
this.$message.error('获取图例数据失败');
}
} else {}
} catch (error) {}
},
updateCurrentTypeFileList() {
@ -168,6 +166,7 @@ export default {
const firstLegend = this.legendsData[0];
//
let images = [];
if (this.form.imgType === 1 && firstLegend.type1) {
images = firstLegend.type1.images || [];
@ -175,6 +174,7 @@ export default {
images = firstLegend.type2.images || [];
}
//
this.currentTypeFileList = images.map(url => ({
url: url,
name: url.split('/').pop(),
@ -257,10 +257,7 @@ export default {
} else {
this.$message.error(response.msg || '操作失败');
}
} catch (error) {
this.$message.error('操作失败,请重试');
console.error('操作失败:', error);
} finally {
} catch (error) {} finally {
loading.close();
}
}

@ -1,59 +1,53 @@
<template>
<div class="container">
<!-- 顶部信息 -->
<div class="containertop">
<h3>THI SIP高端装备工业港</h3>
</div>
<!-- 顶部信息 -->
<div class="containertop">
<h3>{{ form.name }}</h3>
</div>
</div>
</template>
<script>
import { getBasicInformationById } from '@/api/ManageApi/index';
export default {
</template>
<script>
export default {
props: {
size: {
type: String,
default: 'mini'
},
id: {
type: [Number, String],
required: true
}
size: {
type: String,
default: ''
},
basicInfo: {
type: Object,
required: true
},
},
data() {
return {
name: ''
};
return {
form: {
name: '',
},
descriptions: []
};
},
created() {
this.fetchData();
watch: {
basicInfo: {
handler(newVal) {
if (newVal && newVal.name) {
this.form = {
...this.form,
name: newVal.name,
begainTime: newVal.begainTime ? new Date(newVal.begainTime) : '',
endTime: newVal.endTime ? new Date(newVal.endTime) : '',
};
}
},
immediate: true,
deep: true
}
},
methods: {
fetchData() {
getBasicInformationById(this.id)
.then(response => {
const data = response.data;
this.name = data.name;
})
.catch(error => {
console.error('There was an error fetching the data!', error);
});
},
edit() {
this.dialogVisible = true;
},
exportData() {
//
},
}
};
</script>
<style scoped>
.containertop {
text-align: center;
margin-bottom: 1rem;
}
</style>
}
};
</script>
<style scoped>
</style>

@ -1,6 +1,6 @@
<template>
<div class="container">
<el-table :data="tableData" style="width: 100%" :show-header="false">
<el-table :data="tableData" style="width: 100%" :show-header="false" @row-click="handleRowClick">
<el-table-column width="80">
<template slot-scope="scope">
<img :src="getIcon(scope.$index)" alt="icon" style="width: 2.19rem; height: 1.25rem;">
@ -11,17 +11,37 @@
<el-table-column prop="date" width="100">
</el-table-column>
</el-table>
<!-- 详情弹窗 -->
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="40%">
<div>
<p><strong>时间:</strong> {{ selectedMessage.date }}</p>
<p><strong>内容:</strong> {{ selectedMessage.name }}</p>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleConfirm"></el-button>
<el-button @click="dialogVisible = false">关闭</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getAllMessagestwo } from '@/api/ManageApi/index';
import { markSmartReminderAsRead } from '@/api/ManageApi/index';
export default {
name: 'MessageTable',
data() {
return {
tableData: []
tableData: [],
dialogVisible: false,
selectedMessage: {
id: '',
name: '',
date: ''
},
dialogTitle: '消息详情'
};
},
mounted() {
@ -36,6 +56,7 @@ export default {
},
processData(data) {
return data.map(item => ({
id: item.id, // id
name: item.content,
date: this.formatDate(item.createTime)
}));
@ -45,17 +66,42 @@ export default {
},
formatDate(dateString) {
if (!dateString) {
// dateString undefined
return '';
}
const date = new Date(dateString);
if (isNaN(date.getTime())) {
return '';
return '';
}
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
},
handleRowClick(row) {
this.selectedMessage = row;
this.dialogVisible = true;
},
handleConfirm() {
if (this.selectedMessage.id) {
markSmartReminderAsRead(this.selectedMessage.id)
.then(response => {
if (response && response.code === 200) {
this.$message.success('消息已标记为已读');
this.dialogVisible = false;
//
this.getData(); //
} else {
this.$message.error('标记为已读失败');
}
})
.catch(error => {
console.error('标记为已读失败:', error);
this.$message.error('标记为已读失败');
});
} else {
this.$message.error('消息 ID 不存在');
this.dialogVisible = false;
}
}
}
};

@ -128,6 +128,8 @@ export default {
<style scoped>
.tablebox {
height: 16rem;
overflow: auto;
background-color: #fff;
border-radius: .5rem;
margin: .5rem;

@ -7,8 +7,8 @@
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="项目名称" prop="name" style="width: 100%;">
<el-input v-model="queryParams.name" placeholder="请输入项目名称" clearable style="width: 15rem;"
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
@ -29,14 +29,14 @@
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="5">
<el-form-item label="项目法人单位">
<el-input v-model="queryParams.xmfrdwxz" placeholder="请输入项目法人单位" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini"
@ -80,7 +80,11 @@
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" stripe>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.pageNum - 1) * queryParams.pageSize }}
</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">
@ -95,7 +99,7 @@
</template>
</el-table-column>
<el-table-column label="总投资额(万元)" align="center" width="130" prop="ztze" />
<el-table-column label="总用地面积(平方米)" align="center" prop="zydmj" />
<el-table-column label="总用地面积(平方米)" align="center" width="180" prop="zydmj" />
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<span :style="{ color: statusColors[statusMap[scope.row.status]] }">{{
@ -107,8 +111,7 @@
<el-button size="mini" type="text" @click="getInfo(scope.row, 'fill')"
v-if="statusMap[scope.row.status] === '待填报'">填报</el-button>
<el-button size="mini" type="text" @click="getInfo(scope.row, 'detail')"
v-if="statusMap[scope.row.status] !== '待填报'"
>详情</el-button>
v-if="statusMap[scope.row.status] !== '待填报'">详情</el-button>
</template>
</el-table-column>
</el-table>
@ -187,16 +190,16 @@ export default {
/** 查询项目列表 */
getList() {
this.loading = true;
//
const params = {
...this.queryParams,
begainTime: this.queryParams.dateRange ? this.queryParams.dateRange[0] : undefined,
endTime: this.queryParams.dateRange ? this.queryParams.dateRange[1] : undefined
};
console.log('【查询参数】', params); //
getBasicInformationPage(params).then((response) => {
this.postList = response.data.records;
this.total = response.data.total;

@ -8,7 +8,7 @@
<el-row>
<el-col :span="5">
<el-form-item label="项目名称" prop="name" style="width: 100%;">
<el-input v-model="queryParams.name" placeholder="请输入项目名称" clearable
<el-input v-model="queryParams.name" placeholder="请输入项目名称" clearable style="width: 15rem;"
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
@ -29,14 +29,14 @@
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="5">
<el-form-item label="项目法人单位">
<el-input v-model="queryParams.xmfrdwxz" placeholder="请输入项目法人单位" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini"
@ -96,7 +96,11 @@
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" stripe>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.pageNum - 1) * queryParams.pageSize }}
</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">
@ -111,7 +115,7 @@
</template>
</el-table-column>
<el-table-column label="总投资额(万元)" align="center" width="130" prop="ztze" />
<el-table-column label="总用地面积(平方米)" align="center" prop="zydmj" />
<el-table-column label="总用地面积(平方米)" align="center" width="180" prop="zydmj" />
<el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<span :style="{ color: statusColors[statusMap[scope.row.status]] }">{{
@ -120,7 +124,12 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="getInfo(scope.row)"></el-button>
<el-button size="mini" type="text" @click="getInfo(scope.row, 'fill')"
v-if="statusMap[scope.row.status] === '待审核'">详情</el-button>
<el-button size="mini" type="text" @click="getInfo(scope.row, 'fill')"
v-if="statusMap[scope.row.status] === '审核通过'">详情</el-button>
<el-button size="mini" type="text" @click="getInfo(scope.row, 'detail')"
v-if="statusMap[scope.row.status] === '待填报'">详情</el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)"
style="color: #F25353;">删除</el-button>
</template>
@ -264,7 +273,7 @@ export default {
this.$modal
.confirm('是否确认删除项目id为"' + ids + '"的数据项?')
.then(() => {
return deleteBasicInformation(ids);
return deleteBasicInformation(ids);
})
.then(() => {
this.getList();
@ -272,11 +281,11 @@ export default {
})
.catch(() => { });
},
/** 详情按钮操作 */
getInfo(row) {
/** 详情按钮操作 */
getInfo(row, type) {
this.$store.commit("SET_CRUMBS", this.$route.meta.title + "详情");
const id = row.id || this.ids[0];
this.$router.push({ path: `/manage-info/${id}` });
this.$router.push({ path: `/manage-info/${id}`, query: { action: type } });
},
/** 重置按钮操作 */
resetQuery() {

@ -6,8 +6,7 @@
<el-row>
<el-col :span="5">
<el-form-item label="评价要素" prop="pjys" style="width: 100%;">
<el-input v-model="queryParams.pjys" placeholder="请输入评价要素" clearable
@keyup.enter.native="handleQuery" />
<el-input v-model="queryParams.pjys" placeholder="请输入评价要素" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -28,12 +27,16 @@
</div>
</div>
<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="pjys" />
<el-table-column label="评价规则" align="center" prop="pfgz" />
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.pageNum - 1) * queryParams.pageSize }}
</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 size="mini" type="text" @click="handleUpdate(scope.row)"></el-button>
<el-button size="mini" type="text" @click="handleUpdate(scope.row)"></el-button>
<el-button size="mini" type="text" style="color: red;" @click="handleDelete(scope.row)"></el-button>
</template>
</el-table-column>
@ -45,11 +48,11 @@
<!-- 添加规则的弹窗 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="评价要素" prop="postName">
<el-input v-model="form.pjys" placeholder="请输入评价要素" />
<el-form-item label="评价要素" prop="pjys">
<el-input v-model="form.pjys" placeholder="请输入评价要素" />
</el-form-item>
<el-form-item label="评分规则" prop="postCode">
<el-input v-model="form.pfgz" placeholder="请输入评分规则" />
<el-form-item label="评分规则" prop="pfgz">
<el-input v-model="form.pfgz" placeholder="请输入评分规则" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -70,7 +73,7 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
postName: ''
pjys: '' // pjys
},
//
postList: [],
@ -85,13 +88,17 @@ export default {
//
open: false,
//
form: {},
form: {
id: undefined,
pjys: undefined,
pfgz: undefined
},
//
rules: {
postName: [
pjys: [
{ required: true, message: '评价要素不能为空', trigger: 'blur' }
],
postCode: [
pfgz: [
{ required: true, message: '评分规则不能为空', trigger: 'blur' }
]
}
@ -123,7 +130,6 @@ export default {
},
//
handleQuery() {
this.queryParams.postName = this.queryParams.pjys;
this.queryParams.pageNum = 1;
this.getList();
},
@ -148,7 +154,6 @@ export default {
handleUpdate(row) {
this.reset();
const postId = row.id || this.ids; // 使 id
//
this.form = { ...row };
this.open = true;
this.title = '修改规则';
@ -195,7 +200,7 @@ export default {
}).then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
}).catch(() => {});
}).catch(() => { });
}
}
};
@ -233,5 +238,38 @@ export default {
margin-top: 1rem;
margin-bottom: 1rem;
}
</style>
<style scoped>
.headerbox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
}
.tablebox {
background-color: #fff;
border-radius: .5rem;
padding: 1rem;
margin: .5rem;
border: 1px solid #eee;
}
.tablehead {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: .5rem
}
.headbtn {
display: flex;
}
.tablebtntwo {
margin-top: 1rem;
margin-bottom: 1rem;
}
</style>

@ -50,7 +50,11 @@
<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" prop="id" />
<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">
@ -76,8 +80,13 @@
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.current" :limit.sync="queryParams.size"
@pagination="getList" />
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
<!-- 详情对话框 -->
@ -168,11 +177,10 @@ export default {
current: 1,
size: 10,
name: '',
dateRange: '',
begainTime: '',
endTime: '',
xzfl: '',
pjdj: '',
begainTime: null,
endTime: null
pjdj: ''
},
showSearch: true,
dialogVisible: false,
@ -215,8 +223,8 @@ export default {
current: 1,
size: 10,
name: '',
begainTime: '',
endTime: '',
begainTime: '',
endTime: '',
xzfl: '',
pjdj: ''
};

@ -63,6 +63,7 @@
import { getCodeImg } from '@/api/login'
import Cookies from 'js-cookie'
import { encrypt, decrypt } from '@/utils/jsencrypt'
import { active } from 'sortablejs'
export default {
name: 'Login',
data() {
@ -74,7 +75,8 @@ export default {
password: 'admin123',
rememberMe: false,
code: '',
uuid: ''
uuid: '',
loginRole: 2
},
loginRules: {
username: [
@ -96,6 +98,14 @@ export default {
watch: {
$route(route) {
this.redirect = route.query && route.query.redirect
},
activeName(newVal) {
if (newVal === 'first') {
this.loginForm.loginRole = 2;
} else if (newVal === 'second') {
this.loginForm.loginRole = 1;
}
}
},
computed: {
@ -111,12 +121,6 @@ export default {
this.getCookie()
},
methods: {
handleGovernmentLogin() {
window.location.href = 'https://qyt.sipac.gov.cn/';
},
handleEnterpriseLogin() {
window.location.href = 'https://qytt.sipac.gov.cn/ecobrainportal/login.html';
},
getCode() {
getCodeImg().then((res) => {
this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled
@ -141,28 +145,40 @@ export default {
handleLogin() {
this.$refs.loginForm.validate((valid) => {
if (valid) {
this.loading = true
this.loading = true;
if (this.loginForm.rememberMe) {
Cookies.set('username', this.loginForm.username, { expires: 30 })
Cookies.set('password', encrypt(this.loginForm.password), { expires: 30 })
Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 })
Cookies.set('username', this.loginForm.username, { expires: 30 });
Cookies.set('password', encrypt(this.loginForm.password), { expires: 30 });
Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
} else {
Cookies.remove('username')
Cookies.remove('password')
Cookies.remove('rememberMe')
Cookies.remove('username');
Cookies.remove('password');
Cookies.remove('rememberMe');
}
this.$store.dispatch('Login', this.loginForm).then(() => {
this.$router.push({ path: this.redirect || '/' }).catch(() => { })
}).catch((error) => {
this.loading = false
if (this.captchaEnabled) {
this.getCode()
}
console.error('登录失败:', error)
})
const loginData = {
username: this.loginForm.username,
password: this.loginForm.password,
code: this.loginForm.code,
uuid: this.loginForm.uuid,
loginRole: this.activeName === 'first' ? 2 : 1
};
this.$store.dispatch('Login', loginData)
.then(() => {
this.$router.push({ path: this.redirect || '/' }).catch(() => { });
})
.catch((error) => {
this.loading = false;
if (this.captchaEnabled) {
this.getCode();
}
console.error('登录失败:', error);
});
}
})
}
});
},
}
}
</script>

@ -1,94 +1,104 @@
<template>
<div class="bigone">
<!-- 标题 -->
<div class="containerheadone" id="listtop">
<Title :id="projectId"></Title>
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="goBack">
返回
</el-button>
</div>
<div style="display: flex;justify-content: center;">
<el-button type="primary" v-if="isSubmitted" disabled>已提交</el-button>
</div>
<div class="containerbody" v-if="isContainerVisible">
<!-- 目录 -->
<div class="containerhead">
<el-menu :default-active="activeSection" mode="horizontal" @select="scrollToSection"
class="custom-menu">
<el-menu-item v-for="(item, index) in sections" :key="index" :index="item.id"
class="custom-menu-item">
{{ item.label }}
</el-menu-item>
</el-menu>
</div>
<!-- 基本信息 -->
<div id="basic">
<Basic :action="action" :basicInfo="basicInformation"
@update-data="handleDataUpdate('basicInformation', $event)">
</Basic>
</div>
<!-- 规划信息 -->
<div id="programme">
<Programme :action="action" :planInfo="planInformation"
@update-data="handleDataUpdate('planInformation', $event)">
</Programme>
</div>
<!-- 建筑信息 -->
<div id="buildings">
<Buildings :action="action" :xmId="projectId"></Buildings>
</div>
<!-- 要素模型信息 -->
<div id="models">
<Models :action="action" :wysmxInfo="wysmxInformations"
@updata-data="handleDataUpdate('wysmxInformations', $event)">
</Models>
</div>
<!-- 月度进展信息 -->
<div id="months">
<Months :action="action"></Months>
</div>
<!-- 企业入驻信息 -->
<div id="companyenter">
<Companyenter :id="projectId" :action="action" :qyrzInfo="qyrzInformation"
@update-data="handleDataUpdate('qyrzInformation', $event)">
</Companyenter>
</div>
<!-- 项目画像 -->
<div id="projectpicture">
<Projectpicture :action="action" :id="projectId"></Projectpicture>
</div>
<!-- 项目图例 -->
<div id="projectpicturetwo">
<Projectpicturetwo22 :action="action" :xmId="projectId"> </Projectpicturetwo22>
<div>
<!-- 企业端 -->
<div class="bigone" v-if="showCompanySection">
<!-- 标题 -->
<div class="containerheadone" id="listtop">
<Title :basicInfo="basicInformation"></Title>
<el-button type="primary" size="medium" plain
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="goBack">
返回
</el-button>
</div>
<!-- 项目巡礼 -->
<div id="projectgift">
<Projectgift :action="action" :xmId="projectId"></Projectgift>
<div style="display: flex;justify-content: center;">
<el-button type="primary" v-if="isSubmitted" disabled>已提交</el-button>
</div>
<!-- 现场实况 -->
<div id="liver">
<Liver :action="action"></Liver>
</div>
<!-- 项目备忘录 -->
<div id="memo">
<Memo :action="action" :xmId="projectId"></Memo>
</div>
<!-- 其他信息 -->
<div class="bottombox" id="others">
<Others :action="action" :xmId="projectId" :anotherInfo="projectOtherInfos"
@update-data="handleDataUpdate('projectOtherInfos', $event)">
</Others>
</div>
<div class="footer">
<el-button type="primary" v-if="checkRole(['admin', 'common'])" @click="aduitAll"></el-button>
<el-button type="primary"
v-if="(checkRole(['company']) && !isSubmitted && action === 'fill') || action === 'fill'"
@click="submitAll">提交审核</el-button>
<div class="containerbody" v-if="isContainerVisible">
<!-- 目录 -->
<div class="containerhead">
<el-menu :default-active="activeSection" mode="horizontal" @select="scrollToSection"
class="custom-menu">
<el-menu-item v-for="(item, index) in sections" :key="index" :index="item.id"
class="custom-menu-item">
{{ item.label }}
</el-menu-item>
</el-menu>
</div>
<!-- 基本信息 -->
<div id="basic">
<Basic :action="action" :basicInfo="basicInformation"
@update-data="handleDataUpdate('basicInformation', $event)">
</Basic>
</div>
<!-- 规划信息 -->
<div id="programme">
<Programme :action="action" :planInfo="planInformation"
@update-data="handleDataUpdate('planInformation', $event)">
</Programme>
</div>
<!-- 建筑信息 -->
<div id="buildings">
<Buildings :action="action" :xmId="projectId"></Buildings>
</div>
<!-- 要素模型信息 -->
<div id="models">
<Models :action="action" :wysmxInfo="wysmxInformations"
@updata-data="handleDataUpdate('wysmxInformations', $event)">
</Models>
</div>
<!-- 月度进展信息 -->
<div id="months">
<Months :action="action"></Months>
</div>
<!-- 企业入驻信息 -->
<div id="companyenter">
<Companyenter :id="projectId" :action="action" :qyrzInfo="qyrzInformation"
@update-data="handleDataUpdate('qyrzInformation', $event)">
</Companyenter>
</div>
<!-- 项目画像 -->
<div id="projectpicture">
<Projectpicture :action="action" :id="projectId"></Projectpicture>
</div>
<!-- 项目图例 -->
<div id="projectpicturetwo">
<Projectpicturetwo22 :action="action" :xmId="projectId"> </Projectpicturetwo22>
</div>
<!-- 项目巡礼 -->
<div id="projectgift">
<Projectgift :action="action" :xmId="projectId"></Projectgift>
</div>
<!-- 现场实况 -->
<div id="liver">
<Liver :action="action"></Liver>
</div>
<!-- 项目备忘录 -->
<div id="memo">
<Memo :action="action" :xmId="projectId"></Memo>
</div>
<!-- 其他信息 -->
<div class="bottombox" id="others">
<Others :action="action" :xmId="projectId" :anotherInfo="projectOtherInfos"
@update-data="handleDataUpdate('projectOtherInfos', $event)">
</Others>
</div>
<div class="footer">
<el-button type="primary" v-if="checkRole(['admin', 'common'])" @click="aduitAll"></el-button>
<el-button type="primary"
v-if="(checkRole(['company']) && !isSubmitted && action === 'fill') || action === 'fill'"
@click="submitAll">提交审核</el-button>
<el-button type="primary"
v-if="(checkRole(['company']) && !isSubmitted && action === 'fill') || action === 'fill'"
@click="saveAll">暂存</el-button>
</div>
</div>
<!-- 返回顶部 -->
<el-button icon="el-icon-caret-top" circle id="back-to-top" @click="scrollToTop" plain></el-button>
</div>
<!-- 政务端 -->
<div class="bigone" v-if="checkRole(['common'])">
123
</div>
<!-- 返回顶部按钮 -->
<el-button icon="el-icon-caret-top" circle id="back-to-top" @click="scrollToTop" plain></el-button>
</div>
</template>
@ -107,7 +117,7 @@ import Projectpicture from '@/views/components/ProjectDetails/Projectpicture.vue
import Projectpicturetwo22 from '@/views/components/ProjectDetails/Projectpicturetwo22.vue';
import Others from '@/views/components/ProjectDetails/Others.vue';
import { checkPermi, checkRole } from "@/utils/permission";
import { getBasicInformationById, fillBasicInformation, auditBasicInformation } from '@/api/ManageApi/index';
import { getBasicInformationById, fillBasicInformation, auditBasicInformation, tempBasicInformation } from '@/api/ManageApi/index';
export default {
components: {
@ -212,7 +222,6 @@ export default {
xmId: 0,
yczmj: 0
},
// buildingInformation: [],
projectRemarks: [],
loading: false,
};
@ -223,6 +232,14 @@ export default {
this.loadData();
this.action = this.$route.query.action;
},
computed: {
showCompanySection() {
const isCompany = this.checkRole(['company']);
const isCommon = this.checkRole(['common']);
//
return isCompany && !isCommon;
}
},
methods: {
checkPermi,
checkRole,
@ -232,12 +249,10 @@ export default {
const data = response.data;
this.basicInformation = data.basicInformation;
this.planInformation = data.planInformation;
// this.buildingInformation = data.buildingInformation;
this.projectOtherInfos = data.projectOtherInfos;
this.wysmxInformations = data.wysmxResponses;
this.qyrzInformation = data.qyrzInformation;
this.projectRemarks = data.projectRemarks
console.log(data);
});
},
scrollToSection(id) {
@ -269,34 +284,60 @@ export default {
}
console.log(`接收到 ${dataKey} 更新:`, updatedData);
},
//
isDefault(obj, defaultObj) {
for (const key in defaultObj) {
if (obj[key] !== defaultObj[key]) {
return false;
}
}
return true;
},
//
saveAll() {
this.loading = true;
const tempData = this.prepareSubmitData(); //
tempBasicInformation(tempData)
.then(response => {
this.$message.success('暂存成功');
console.log('暂存数据:', response);
})
.catch(error => {
this.$message.error('暂存失败');
console.error('暂存错误:', error);
})
.finally(() => {
this.loading = false;
});
},
//
submitAll() {
this.loading = true; //
const submitData = this.prepareSubmitData();
this.loading = true;
const submitData = this.prepareSubmitData(); //
// 便
console.log('提交的数据结构:', JSON.stringify(submitData, null, 2));
//
if (this.isDefault(this.planInformation, this.defaultPlanInformation)) {
this.$message.error('规划信息未填写');
this.scrollToSection('programme');
this.loading = false;
return;
}
// fillBasicInformation
fillBasicInformation(submitData)
.then(response => {
console.log('提交成功:', response);
this.$message.success('数据提交成功');
this.isContainerVisible = false;
this.$message.success('提交成功');
this.isSubmitted = true;
this.$router.push('/manage');
})
.catch(error => {
console.error('提交失败:', error);
this.$message.error('数据提交失败');
this.$router.push('/manage');
})
.finally(() => {
this.loading = false;
this.loading = false;
});
},
//
aduitAll() {
this.loading = true;
const submitData = this.prepareSubmitData();
auditBasicInformation(submitData)
@ -305,42 +346,37 @@ export default {
this.$message.success('审核通过');
this.isContainerVisible = false;
this.isSubmitted = true;
his.$router.push('/manage');
})
},
//
//
prepareSubmitData() {
const submitData = {
return {
basicInformation: this.basicInformation,
planInformation: this.planInformation,
projectOtherInfos: this.projectOtherInfos,
qyrzInformation: this.qyrzInformation
qyrzInformation: this.qyrzInformation,
wysmxInformations: this.formatWysmxData() //
};
},
// wysmxInformations 使
const formattedWysmxInformations = [];
this.wysmxInformations.forEach(item => {
item.list.forEach(listItem => {
formattedWysmxInformations.push({
createBy: "",
createId: 0,
createTime: this.formatDate(new Date()), //
id: 0, // 0
updateBy: "",
updateId: 0,
updateTime: this.formatDate(new Date()), //
xmId: item.xmId,
ysmc: item.ysmc,
zdinfor: listItem.zdinfor,
zdname: listItem.zdname
});
});
});
// submitData
submitData.wysmxInformations = formattedWysmxInformations;
return submitData;
//
formatWysmxData() {
return this.wysmxInformations.flatMap(item =>
item.list.map(listItem => ({
createTime: this.formatDate(new Date()),
updateTime: this.formatDate(new Date()),
xmId: this.projectId,
ysmc: item.ysmc,
zdinfor: listItem.zdinfor,
zdname: listItem.zdname,
id: 0, // 0
createBy: "",
updateBy: "",
createId: 0,
updateId: 0
}))
);
},
//
@ -397,7 +433,7 @@ export default {
.custom-menu-item {
color: #3D424C;
width: 7.25rem;
width: auto;
height: 2rem;
background: #F4F7FE;
border-radius: 0.25rem 0.25rem 0.25rem 0.25rem;

@ -1,13 +1,13 @@
<template>
<div>
<!-- 负面清单管理 -->
<!-- 企业端页面 -->
<!-- 表单查询项 -->
<div class="headerbox">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="200">
<el-row>
<el-col :span="5">
<el-form-item label="项目名称" prop="postName" style="width: 100%;">
<el-input v-model="queryParams.postName" placeholder="请输入项目名称" clearable
<el-form-item label="项目名称" prop="name" style="width: 100%;">
<el-input v-model="queryParams.name" placeholder="请输入项目名称" clearable style="width: 15rem;"
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
@ -22,19 +22,19 @@
</el-col>
<el-col :span="5">
<el-form-item label="现状分类">
<el-select v-model="queryParams.postCode" placeholder="现状分类" clearable>
<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-row>
<el-row>
<el-col :span="5">
<el-form-item label="项目法人单位">
<el-input v-model="queryParams.xmfrdwxz" placeholder="请输入项目法人单位" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
@ -47,9 +47,6 @@
<!-- 表格内容区 -->
<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"
@ -68,15 +65,19 @@
</el-dialog>
<!-- 导出行 -->
<div class="tablebtntwo">
<el-row :gutter="10" class="mb8">
<!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<!-- <el-button type="primary" icon="el-icon-upload2" size="medium" @click="handleExport"></el-button> -->
<el-button type="primary" icon="el-icon-upload2" size="medium" @click="handleExport"></el-button>
</el-col>
</el-row>
</el-row> -->
</div>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange" stripe>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="id" />
<el-table-column label="序号" align="center">
<template slot-scope="scope">
{{ (scope.$index + 1) + (queryParams.pageNum - 1) * queryParams.pageSize }}
</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">
@ -84,6 +85,7 @@
</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 }}
@ -91,10 +93,18 @@
</el-table-column>
<el-table-column label="总投资额(万元)" align="center" width="130" prop="ztze" />
<el-table-column label="总用地面积(平方米)" align="center" prop="zydmj" />
<!-- <el-table-column label="当前状态" align="center" prop="status">
<template slot-scope="scope">
<span :style="{ color: statusColors[statusMap[scope.row.status]] }">{{
statusMap[scope.row.status] }}</span>
</template>
</el-table-column> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" @click="getInfo(scope.row)"></el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)" style="color: #F25353;">删除</el-button>
<el-button v-if="checkRole(['admin'])" size="mini" type="text" @click="handleDelete(scope.row)"
style="color: #F25353;">删除</el-button>
</template>
</el-table-column>
</el-table>
@ -148,11 +158,11 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
postCode: undefined,
postName: undefined,
xmfrdwxz: undefined,
dateRange: [],
status: undefined
xzfl: '',
name: '',
xmfrdwxz: '',
dateRange: '', //
status: ''
},
//
upload: {
@ -173,13 +183,37 @@ export default {
/** 查询项目列表 */
getList() {
this.loading = true;
getBasicInformationPage(this.queryParams).then((response) => {
//
const params = {
...this.queryParams,
begainTime: this.queryParams.dateRange ? this.queryParams.dateRange[0] : undefined,
endTime: this.queryParams.dateRange ? this.queryParams.dateRange[1] : undefined
};
console.log('【查询参数】', params); //
getBasicInformationPage(params).then((response) => {
this.postList = response.data.records;
this.total = response.data.total;
this.loading = false;
}).catch(error => {
console.error('查询失败:', error);
this.loading = false;
});
},
//
processDateRange() {
if (this.queryParams.dateRange && this.queryParams.dateRange.length === 2) {
return {
begainTime: this.queryParams.dateRange[0],
endTime: this.queryParams.dateRange[1]
};
}
return {};
},
/** 导入按钮操作 */
handleImport() {
this.upload.open = true;
@ -230,7 +264,15 @@ export default {
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.queryParams = {
pageNum: 1,
pageSize: 10,
xzfl: '',
name: '',
xmfrdwxz: '',
dateRange: '',
status: ''
};
this.handleQuery();
},

@ -8,13 +8,13 @@
<el-col :span="6">
<el-form-item label="关键要素" style="width: 100%;">
<el-input placeholder="请输入关键要素" clearable style="width: 14rem;"
v-model="searchForm.keyElement" />
v-model="searchForm.name" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="具体指标" style="width: 100%;">
<el-input placeholder="请输入具体指标" clearable style="width: 14rem;"
v-model="searchForm.specificIndicator" />
v-model="searchForm.jtzb" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -33,7 +33,7 @@
@click="dialogVisible = true; resetForm()">新增要素</el-button>
<!-- 渲染所有要素 -->
<div v-for="(element, index) in tableData" :key="index" class="tablebox">
<div v-for="(element, elementIndex) in tableData" :key="elementIndex" class="tablebox">
<div class="boxheader">
<div class="headerone">
<div>{{ element.type == 1 ? '关键要素' : '重要要素' }}</div>
@ -41,14 +41,14 @@
</div>
<div class="headertwo">
<el-button type="primary" icon="el-icon-edit" size="mini"
@click="handleDeleteElement(element)">删除要素</el-button>
@click="handleDeleteElement(element, elementIndex)">删除要素</el-button>
<el-button type="primary" icon="el-icon-edit" size="mini"
@click="handleUpdate(element)">编辑要素</el-button>
<el-button type="primary" icon="el-icon-plus"
@click="showAddIndicatorDialog(element)">新增指标</el-button>
</div>
</div>
<el-table :data="element.indicators" style="width: 100%">
<el-table :data="element.list" style="width: 100%">
<el-table-column label="序号" width="180">
<template slot-scope="scope">
{{ scope.$index + 1 }}
@ -60,7 +60,8 @@
<template slot-scope="scope">
<el-button size="mini" type="text"
@click="handleUpdateIndicator(element, scope.row)">编辑指标</el-button>
<el-button size="mini" type="text" @click="handleDelete(element, scope.row)"
<el-button size="mini" type="text"
@click="handleDelete(element, scope.row, elementIndex, scope.$index)"
style="color: #F25353;">删除指标</el-button>
</template>
</el-table-column>
@ -70,36 +71,36 @@
<!-- 新增/编辑要素弹窗 -->
<el-dialog :title="form.id ? '编辑要素' : '新增要素'" :visible.sync="dialogVisible" width="30%">
<el-form :model="form" label-width="80px">
<el-form-item label="类型">
<el-form :model="form" :rules="rules" ref="elementForm" label-width="80px">
<el-form-item label="类型" prop="type">
<el-select v-model="form.type" placeholder="请选择类型">
<el-option v-for="dict in dict.type.yslx" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="名称">
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" placeholder="请输入名称"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="handleAddElement"> </el-button>
<el-button type="primary" @click="submitElementForm"> </el-button>
</span>
</el-dialog>
<!-- 新增/编辑指标弹窗 -->
<el-dialog :title="indicatorForm.id ? '编辑指标' : '新增指标'" :visible.sync="indicatorDialogVisible" width="30%">
<el-form :model="indicatorForm" label-width="80px">
<el-form-item label="具体指标">
<el-form :model="indicatorForm" :rules="rules" ref="indicatorForm" label-width="80px">
<el-form-item label="具体指标" prop="jtzb">
<el-input v-model="indicatorForm.jtzb" placeholder="请输入具体指标"></el-input>
</el-form-item>
<el-form-item label="详细要求">
<el-form-item label="详细要求" prop="xxyq">
<el-input v-model="indicatorForm.xxyq" placeholder="请输入详细要求"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="indicatorDialogVisible = false"> </el-button>
<el-button type="primary" @click="handleAddIndicator"> </el-button>
<el-button type="primary" @click="submitIndicatorForm"> </el-button>
</span>
</el-dialog>
</div>
@ -121,8 +122,8 @@ export default {
data() {
return {
searchForm: {
keyElement: '',
specificIndicator: ''
name: '',
jtzb: ''
},
tableData: [],
dialogVisible: false,
@ -136,8 +137,16 @@ export default {
id: 0,
jtzb: '',
xxyq: '',
elementId: 0
},
currentElement: null
currentElement: null,
currentElementIndex: -1,
rules: {
type: [{ required: true, message: '请选择要素类型', trigger: 'change' }],
name: [{ required: true, message: '请输入要素名称', trigger: 'blur' }],
jtzb: [{ required: true, message: '请输入具体指标', trigger: 'blur' }],
xxyq: [{ required: true, message: '请输入详细要求', trigger: 'blur' }]
}
};
},
methods: {
@ -157,18 +166,24 @@ export default {
//
fetchElements() {
getAllElements(this.searchForm).then(response => {
this.tableData = response.data.map(item => ({
...item,
indicators: item.list || []
}));
})
if (response.code === 200) {
this.tableData = response.data.map(item => ({
...item,
list: item.list || []
}));
} else {
this.$message.error(response.msg || '获取数据失败');
}
}).catch(error => {
this.$message.error('获取数据失败: ' + (error.message || '未知错误'));
});
},
//
resetSearchForm() {
this.searchForm = {
keyElement: '',
specificIndicator: ''
name: '',
jtzb: ''
};
this.fetchElements();
},
@ -180,6 +195,11 @@ export default {
type: '',
name: ''
};
this.$nextTick(() => {
if (this.$refs.elementForm) {
this.$refs.elementForm.clearValidate();
}
});
},
//
@ -188,11 +208,38 @@ export default {
id: 0,
jtzb: '',
xxyq: '',
elementId: 2
elementId: 0
};
this.$nextTick(() => {
if (this.$refs.indicatorForm) {
this.$refs.indicatorForm.clearValidate();
}
});
},
//
//
submitElementForm() {
this.$refs.elementForm.validate(valid => {
if (valid) {
this.handleAddElement();
} else {
return false;
}
});
},
//
submitIndicatorForm() {
this.$refs.indicatorForm.validate(valid => {
if (valid) {
this.handleAddIndicator();
} else {
return false;
}
});
},
//
handleAddElement() {
const user = this.getUserInfo();
const payload = {
@ -205,9 +252,11 @@ export default {
const api = this.form.id ? editElemention : addElement;
api(payload).then(response => {
this.$message.success(this.form.id ? '编辑成功' : '新增成功');
this.dialogVisible = false;
this.fetchElements();
if (response.code === 200) {
this.$message.success(this.form.id ? '要素编辑成功' : '要素新增成功');
this.dialogVisible = false;
this.fetchElements();
} else {}
})
},
@ -215,7 +264,6 @@ export default {
handleUpdate(element) {
this.currentElement = element;
this.form = {
id: element.id,
type: element.type,
name: element.name
};
@ -223,21 +271,43 @@ export default {
},
//
handleDeleteElement(element) {
this.$confirm('确定删除该要素及其所有指标吗?', '警告', {
//
handleDeleteElement(element, elementIndex) {
this.$confirm(`确定删除要素"${element.name}"及其所有指标吗?`, '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// ID2
deleteElemention(2).then(() => {
this.$message.success('删除成功');
this.fetchElements(); //
// IDID + ID
const idList = [element.id];
if (element.list && element.list.length > 0) {
element.list.forEach(indicator => {
if (indicator.id) { // ID
idList.push(indicator.id);
}
});
}
//
console.log('删除要素请求参数:', {
idList: idList.join(','),
elementIndex
});
// API
deleteElemention(idList).then(response => {
if (response.code === 200) {
this.$message.success('删除成功');
//
this.tableData.splice(elementIndex, 1);
} else {
this.$message.error(response.msg || '删除失败');
}
}).catch(error => {
console.error('删除失败:', error);
this.$message.error('删除失败: ' + (error.message || '未知错误'));
});
}).catch(() => {
//
this.$message.info('已取消删除');
});
},
@ -266,9 +336,13 @@ export default {
const api = this.indicatorForm.id ? editElemention : addElement;
api(payload).then(response => {
this.$message.success(this.indicatorForm.id ? '指标编辑成功' : '指标新增成功');
this.indicatorDialogVisible = false;
this.fetchElements();
if (response.code === 200) {
this.$message.success(this.indicatorForm.id ? '指标编辑成功' : '指标新增成功');
this.indicatorDialogVisible = false;
this.fetchElements();
} else {
this.$message.error(response.msg || '操作失败');
}
}).catch(error => {
this.$message.error('操作失败: ' + (error.message || '未知错误'));
});
@ -284,18 +358,32 @@ export default {
this.indicatorDialogVisible = true;
},
//
handleDelete(element, indicator) {
handleDelete(element, indicator, elementIndex, indicatorIndex) {
this.$confirm('确定删除该指标吗?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteElemention([indicator.id]).then(() => {
this.$message.success('删除成功');
this.fetchElements();
})
console.log('删除指标请求参数:', {
idList: [indicator.id].join(','),
elementIndex,
indicatorIndex
});
deleteElemention([indicator.id]).then(response => {
if (response.code === 200) {
this.$message.success('删除成功');
// list
this.tableData[elementIndex].list.splice(indicatorIndex, 1);
} else {
this.$message.error(response.msg || '删除失败');
}
}).catch(error => {
this.$message.error('删除失败: ' + (error.message || '未知错误'));
});
}).catch(() => {
this.$message.info('已取消删除');
});
}
},

@ -20,7 +20,7 @@
</el-col>
<el-col :span="7">
<el-form-item label="产业" prop="cy" style="width: 100%;">
<el-input v-model="queryParams.cy" placeholder="请输入产业" clearable style="width: 20.5rem;"
<el-input v-model="queryParams.cy" placeholder="请输入产业" style="width: 20.5rem;"
@keyup.enter.native="handleQuery" />
</el-form-item>
</el-col>
@ -192,12 +192,6 @@ export default {
slmllb: [
{ required: true, message: "上楼目录类别不能为空", trigger: "change" }
],
scyh: [
{ required: true, message: "上传用户不能为空", trigger: "blur" }
],
scsj: [
{ required: true, message: "上传时间不能为空", trigger: "change" }
]
},
//
fileTypeMap: {
@ -247,7 +241,7 @@ export default {
getAllCatalogs(this.queryParams).then(response => {
this.postList = response.data.records.map(item => ({
...item,
updateTime: item.updateTime ? item.updateTime.split(' ')[0] : ''
// updateTime: item.updateTime ? item.updateTime.split(' ')[0] : ''
}));
this.total = response.data.total;
this.loading = false;

@ -128,29 +128,30 @@
</div>
</el-dialog>
<!-- 导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<!-- 导入对话框 -->
<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>
<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>
</div>
</template>
<script>
import { getToken } from "@/utils/auth";
import { getXfcyglPage, addXfcygl, updateXfcygl, deleteXfcygl } from "@/api/ManageApi/index";
import fileload from "@/components/FileUpload/index.vue"
@ -191,17 +192,12 @@ export default {
},
//
form: {
id: undefined,
cyxf: undefined,
cylb: undefined,
ycljschj: undefined,
slsyx: undefined,
createBy: undefined,
createId: undefined,
createTime: undefined,
updateBy: undefined,
updateId: undefined,
updateTime: undefined
endTime:undefined,
startTime:undefined
},
//
rules: {
@ -245,7 +241,7 @@ export default {
headers: { Authorization: "Bearer " + getToken() },
//
// url: process.env.VUE_APP_BASE_API + "/tc/assetCurrent/import"
url: location.origin + "/gysl/xfcygl/exportXfcy",
url: location.origin + "/gysl/xfcygl/imporXfcy",
},
};
},
@ -253,6 +249,16 @@ export default {
this.getList();
},
methods: {
/**导出 */
handleExport() {
this.download(
"/gysl/xfcygl/exportXfcy",
{
...this.form,
},
`细分产业管理${new Date().getTime()}.xlsx`
);
},
querySearchAsync(queryString, cb) {
let results = [];

@ -15,12 +15,7 @@
<Message2 />
</div>
</div>
<div class="grid-item item-1">
<!-- 整体项目情况 -->
<div class="allarea">
</div>
</div>
<div class="grid-item item-2 bottombox">
<div class="grid-item bottombox">
<!-- 关联项目 -->
<div class="itemhead">
<span>关联项目</span>
@ -43,7 +38,7 @@
</div>
</div>
<div class="grid-item item-2">
<!-- 消息通知 -->
<!-- 我的待办 -->
<div class="itemhead">
<span>我的待办</span>
</div>
@ -104,9 +99,9 @@ export default {
},
getStatusClass(status) {
const statusClasses = {
1: 'status-red', //
2: 'status-yellow', //
3: 'status-green' //
1: 'status-red',
2: 'status-yellow',
3: 'status-green'
};
return statusClasses[status] || '';
},
@ -129,7 +124,7 @@ export default {
<style scoped>
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-columns: repeat(2, 1fr);
/* 三列 */
grid-template-rows: auto auto auto;
/* 三行 */
@ -144,8 +139,10 @@ export default {
border-radius: 0.5rem 0.5rem 0.5rem 0.5rem;
}
.item-2{
width: auto;
}
.itemhead {
width: 100%;
border-left: 0.25rem solid #2B62F1;
margin: 0.94rem 0;
height: 1.25rem;
@ -182,8 +179,8 @@ export default {
}
.allarea {
width: 80rem;
height: 14.5rem;
width: auto;
height: auto;
padding: 1rem 1.5rem;
}

@ -31,14 +31,14 @@ 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.112:7071/`,
target: `http://39.101.188.84:7071/`,
target: `http://192.168.0.112:7071/`,
// target: `http://39.101.188.84:7071/`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''

Loading…
Cancel
Save