提交 92be75d4 authored 作者: 刘佳星-公司's avatar 刘佳星-公司

去除警告

上级 1e443c8e
......@@ -22,8 +22,8 @@
"vue": "^3.5.13",
"vue-router": "^4.5.0",
"vuedraggable": "4.1.0",
"vxe-pc-ui": "^4.8.20",
"vxe-table": "^4.15.9"
"vxe-pc-ui": "~4.8.20",
"vxe-table": "~4.15.9"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.2.1",
......
......@@ -57,7 +57,7 @@ export const constantRoutes = [
component: () => import('@/views/error/401.vue'),
hidden: true
},
{
path: '',
component: Layout,
......@@ -75,7 +75,7 @@ export const constantRoutes = [
component: () => import('../views/buildManage/index.vue'),
name: 'BuildManage',
meta: { title: '建筑管理', icon: 'dashboard', affix: true },
},
{
path: '/uavManage',
......@@ -109,75 +109,75 @@ export const constantRoutes = [
meta: { title: '分析页面', icon: 'dashboard', affix: true }
},
{
path: '/workBenchPage',
component: () => import('../views/dashboard/workbench/index.vue'),
name: 'WorkbenchPage',
meta: { title: '工作台', icon: 'dashboard', affix: true }
},
{
path: '/usermanage',
component: () => import('../views/systemmanage/staffManage/index.vue'),
name: 'systemManage',
meta: { title: '人员管理', icon: 'dashboard', affix: true }
},
{
path: '/areabuildmanage',
component: () => import('../views/areabuildmanage/index.vue'),
name: 'areaBuildmanage',
meta: { title: '建筑管理', icon: 'dashboard', affix: true }
},
{
path: '/uavdispatch',
component: () => import('../views/uavshowdate/index.vue'),
name: 'uavDispatch',
meta: { title: '无人机调度', icon: 'dashboard', affix: true }
},
{
path: '/firesurveillance',
component: () => import('../views/areafiremanage/firesurveillance/index.vue'),
name: 'fireSurveillance',
meta: { title: '历史火情', icon: 'dashboard', affix: true }
},
{
path: '/historyfire',
component: () => import('../views/areafiremanage/historyfire/index.vue'),
name: 'historyFire',
meta: { title: '当前火情', icon: 'dashboard', affix: true },
},
{
path: '/floordetaildate',
component: () => import('../views/areafiremanage/historyfire/components/floordetail.vue'),
name: 'floorDetailDate',
meta: { title: '详细楼层火情', icon: 'dashboard', affix: true }
},
{
path: '/buildingdetaildate',
component: () => import('../views/areabuildmanage/components/showdetaildate.vue'),
name: 'buildingDetailDate',
meta: { title: '楼详细建筑数据', icon: 'dashboard', affix: true }
},
{
path: '/onefloorbuildingdetaildate',
component: () => import('../views/areabuildmanage/onefloor/index.vue'),
name: 'oneFloorBuildingDetailDate',
meta: { title: '层详细建筑数据', icon: 'dashboard', affix: true }
},
{
path: '/uavdetaildate',
component: () => import('../views/uavshowdate/uavmanage/index.vue'),
name: 'uavDetailDate',
meta: { title: '无人机管理', icon: 'dashboard', affix: true }
},
path: '/workBenchPage',
component: () => import('../views/dashboard/workbench/index.vue'),
name: 'WorkbenchPage',
meta: { title: '工作台', icon: 'dashboard', affix: true }
},
{
path: '/usermanage',
component: () => import('../views/systemmanage/staffManage/index.vue'),
name: 'systemManage',
meta: { title: '人员管理', icon: 'dashboard', affix: true }
},
{
path: '/areabuildmanage',
component: () => import('../views/areabuildmanage/index.vue'),
name: 'areaBuildmanage',
meta: { title: '建筑管理', icon: 'dashboard', affix: true }
},
{
path: '/uavdispatch',
component: () => import('../views/uavshowdate/index.vue'),
name: 'uavDispatch',
meta: { title: '无人机调度', icon: 'dashboard', affix: true }
},
{
path: '/firesurveillance',
component: () => import('../views/areafiremanage/firesurveillance/index.vue'),
name: 'fireSurveillance',
meta: { title: '历史火情', icon: 'dashboard', affix: true }
},
{
path: '/historyfire',
component: () => import('../views/areafiremanage/historyfire/index.vue'),
name: 'historyFire',
meta: { title: '当前火情', icon: 'dashboard', affix: true },
},
{
path: '/floordetaildate',
component: () => import('../views/areafiremanage/historyfire/components/floordetail.vue'),
name: 'floorDetailDate',
meta: { title: '详细楼层火情', icon: 'dashboard', affix: true }
},
{
path: '/buildingdetaildate',
component: () => import('../views/areabuildmanage/components/showdetaildate.vue'),
name: 'buildingDetailDate',
meta: { title: '楼详细建筑数据', icon: 'dashboard', affix: true }
},
{
path: '/onefloorbuildingdetaildate',
component: () => import('../views/areabuildmanage/onefloor/index.vue'),
name: 'oneFloorBuildingDetailDate',
meta: { title: '层详细建筑数据', icon: 'dashboard', affix: true }
},
{
path: '/uavdetaildate',
component: () => import('../views/uavshowdate/uavmanage/index.vue'),
name: 'uavDetailDate',
meta: { title: '无人机管理', icon: 'dashboard', affix: true }
},
{
path: '/recordfireinfo',
component: () => import('../views/areafiremanage/firerecord/index.vue'),
name: 'recordFireInfo',
meta: { title: '火情记录管理', icon: 'dashboard', affix: true }
},
{
path: '/recordfireinfo',
component: () => import('../views/areafiremanage/firerecord/index.vue'),
name: 'recordFireInfo',
meta: { title: '火情记录管理', icon: 'dashboard', affix: true }
},
]
},
......
......@@ -3,13 +3,13 @@
<main class="main-content">
<!-- 左侧区域 -->
<div class="left-section">
<!-- 左侧下部分:统计区域 -->
<div class="info-card stats-alerts">
<div class="card-table">
<onefloorbuildingdetaildate></onefloorbuildingdetaildate>
</div>
......@@ -17,7 +17,7 @@
</div>
</main>
</div>
</template>
......@@ -33,9 +33,9 @@ import { message } from 'ant-design-vue';
// import Operation from 'ant-design-vue/es/transfer/operation';
// 定义一个名为searchShowData的ref变量,它是一个数组,数组中的每个元素都是一个对象,对象中包含了label、placeholder、type、content和options等属性
const searchShowData = ref([
{ label: '用户姓名', placeholder: "请输入", type: 'input',content:'' ,isShow: false },
{ label: '用户状态', placeholder: "请选择", type: 'select',content:'' ,isShow: false, options: [{label:'启用', value:'启用'}, {label:'禁用', value:'禁用'}] },
{ label: '用户角色', placeholder: "请选择", type: 'select', content:'' ,isShow: false,options: [{label:'管理员', value:'管理员'}, {label:'巡查员', value:'巡查员'}]},
{ label: '用户姓名', placeholder: "请输入", type: 'input', content: '', isShow: false },
{ label: '用户状态', placeholder: "请选择", type: 'select', content: '', isShow: false, options: [{ label: '启用', value: '启用' }, { label: '禁用', value: '禁用' }] },
{ label: '用户角色', placeholder: "请选择", type: 'select', content: '', isShow: false, options: [{ label: '管理员', value: '管理员' }, { label: '巡查员', value: '巡查员' }] },
])
// 响应式布局配置
const layoutConfig = reactive({
......@@ -76,7 +76,7 @@ const editData = (data) => {
// 设置要编辑的数据
rowData.value = data
console.log("000000-------1-----0000000000",data)
console.log("000000-------1-----0000000000", data)
}
/**
......@@ -85,7 +85,7 @@ const editData = (data) => {
* 显示确认对话框,用户确认后执行删除操作
*/
const deleteData = (data) => {
console.log("000000---2---------0000000000",data)
console.log("000000---2---------0000000000", data)
ElMessageBox.confirm(
'删除操作不可逆,是否继续?',
'删除',
......@@ -97,20 +97,20 @@ const deleteData = (data) => {
}
)
.then(() => {
console.log("000000---1-456464564------0000000000","我是确认")
try {
const res = staffRemoveInfoApi({id:data.id});
if (res.code === 200) {
ElMessage({ type: 'success', message: '已删除' });
tableDataRefresh();
} else {
ElMessage({ type: 'error', message: '删除失败:' + res.msg });
}
} catch (err) {
// API 请求失败时在此捕获,不向上冒泡
ElMessage({ type: 'error', message: '删除失败(网络错误)' });
// console.error('删除接口失败:', err);
}
console.log("000000---1-456464564------0000000000", "我是确认")
try {
const res = staffRemoveInfoApi({ id: data.id });
if (res.code === 200) {
ElMessage({ type: 'success', message: '已删除' });
tableDataRefresh();
} else {
ElMessage({ type: 'error', message: '删除失败:' + res.msg });
}
} catch (err) {
// API 请求失败时在此捕获,不向上冒泡
ElMessage({ type: 'error', message: '删除失败(网络错误)' });
// console.error('删除接口失败:', err);
}
})
.catch(() => {
......@@ -143,73 +143,73 @@ const isResetPasswordDialogVisible = ref(false); // 控制重置密码弹窗的
const resetPasswordData = ref({});
const resetData = (data) => {
console.log("000000-----3-------0000000000",data)
console.log("000000-----3-------0000000000", data)
isResetPasswordDialogVisible.value = true;
resetPasswordData.value = data;
}
const showuserinfodata = ref({})
const userData = (data) => {
console.log("000000------4------0000000000",data)
console.log("000000------4------0000000000", data)
isUserInfoDialogVisible.value = true
showuserinfodata.value = data
}
const tableShowData = ref([{
tableHeader:[
{label: '姓名', prop: 'name'},
{label: '电话', prop: 'phone'},
{label: '是否可用', prop: 'status'},
{label: '用户权限', prop: 'role'},
{label: '创建时间', prop: 'createTime'},
{label: '更新时间', prop: 'updateTime'},
{label: '操作', prop: 'Operation'}
],
tableBody:[
tableHeader: [
{ label: '姓名', prop: 'name' },
{ label: '电话', prop: 'phone' },
{ label: '是否可用', prop: 'status' },
{ label: '用户权限', prop: 'role' },
{ label: '创建时间', prop: 'createTime' },
{ label: '更新时间', prop: 'updateTime' },
{ label: '操作', prop: 'Operation' }
],
tableBody: [
]
}
])
const Operation = ref( [ { label: '编辑', type: 'primary', icon: 'EditPen', click: editData },
{ label: '删除', type: 'danger', icon: 'Delete', click: deleteData },
{ label: '用户信息', type: 'primary', icon: 'EditPen', click: userData },
{ label: '重置密码', type: 'primary', icon: 'EditPen', click: resetData }]
)
const initTableData = () => {
const Operation = ref([{ label: '编辑', type: 'primary', icon: 'EditPen', click: editData },
{ label: '删除', type: 'danger', icon: 'Delete', click: deleteData },
{ label: '用户信息', type: 'primary', icon: 'EditPen', click: userData },
{ label: '重置密码', type: 'primary', icon: 'EditPen', click: resetData }]
)
const initTableData = () => {
staffGetPageInfoApi({
"currentPageNum": 1,
"currentPageSize": 10,
}).then(res => {
if(res.code === 200){
let tempData = res.data.list
tableShowData.value[0].tableBody = []
//获取未逻辑删除的数据
console.log(res.data,"--------999999999----")
tempData = tempData.filter(element => {
return element.isDeleted === 0;
});
tempData.forEach(element => {
element.Operation = [...Operation.value]
});
tableShowData.value[0].tableBody = tempData
tableShowData.value[0].total = res.data.total
tableShowData.value[0].pageSize = res.data.pageSize
console.log(tableShowData.value, '展示数据');
}
}).catch(err => {
ElMessage.error(err.message)
}).then(res => {
if (res.code === 200) {
let tempData = res.data.list
tableShowData.value[0].tableBody = []
//获取未逻辑删除的数据
console.log(res.data, "--------999999999----")
tempData = tempData.filter(element => {
return element.isDeleted === 0;
});
})
tempData.forEach(element => {
element.Operation = [...Operation.value]
});
tableShowData.value[0].tableBody = tempData
tableShowData.value[0].total = res.data.total
tableShowData.value[0].pageSize = res.data.pageSize
console.log(tableShowData.value, '展示数据');
}
}).catch(err => {
ElMessage.error(err.message)
})
}
onMounted(() => {
onMounted(() => {
// console.log(tableShowData.value, '错误');
initTableData()
})
......@@ -242,7 +242,7 @@ const containerStyle = computed(() => ({
flex-direction: column;
gap: var(--card-spacing);
height: 100%;
}
.left-top {
......@@ -287,24 +287,28 @@ const containerStyle = computed(() => ({
padding: 10px;
}
.title{
.title {
width: 70%;
}
.card-actions {
display: flex;
flex: 1;
justify-content: space-between;
align-items: center;
/* margin-bottom: 1rem; */
height: 8%;
height: 8%;
padding: 1.5rem;
}
.operation-button {
width: 15%;
}
.card-tabs-footer {
display: flex;
......@@ -320,30 +324,36 @@ const containerStyle = computed(() => ({
justify-content: flex-end;
align-items: center;
}
/* 文本样式 */
.page-text {
color: #606266;
font-size: 14px;
white-space: nowrap; /* 防止文本换行 */
white-space: nowrap;
/* 防止文本换行 */
}
/* 修复 Element Plus 分页组件默认的块级布局问题 */
:deep .el-pagination {
:deep(.el-pagination) {
display: flex;
align-items: center;
margin: 0; /* 清除默认外边距 */
margin: 0;
/* 清除默认外边距 */
}
.pagination-block{
.pagination-block {
height: 8%;
}
.card-table{
.card-table {
width: 100%;
/* display: flex; */
/* background-color: #000000; */
flex:1;
flex: 1;
overflow: hidden;
border-radius: 8PX;
}
......@@ -353,7 +363,7 @@ const containerStyle = computed(() => ({
.left-top {
flex-direction: column;
}
.region-overview {
width: 100%;
flex: none;
......
......@@ -7,39 +7,37 @@
<div class="left-top">
<!-- 区域信息概览 -->
<div class="info-card region-overview">
<div class="card-tabs">
<span class="title" >历史火情详情</span>
</div>
<div class="first-card-content">
<img src="https://picsum.photos/300/200" alt="">
</div>
<div class="card-tabs">
<span class="title">历史火情详情</span>
</div>
<div class="first-card-content">
<img src="https://picsum.photos/300/200" alt="">
</div>
</div>
</div>
<!-- 左侧下部分:统计区域 -->
<div class="info-card stats-alerts">
<div class="card-tabs">
<span class="title" >火情汇报列表</span>
<span class="title">火情汇报列表</span>
<div class="card-actions">
<!-- <el-button type="danger" plain>Danger</el-button> -->
<el-button class="operation-button" type="danger" plain @click="fireInfoDataDeleteFn" >撤销归档</el-button>
<el-button class="operation-button" type="danger" plain @click="fireInfoDataDeleteFn" >删除</el-button>
<el-button class="operation-button" type="primary" @click="addFireInfoDataImportFn" >新增</el-button>
<el-button class="operation-button" type="danger" plain @click="fireInfoDataDeleteFn">撤销归档</el-button>
<el-button class="operation-button" type="danger" plain @click="fireInfoDataDeleteFn">删除</el-button>
<el-button class="operation-button" type="primary" @click="addFireInfoDataImportFn">新增</el-button>
</div>
</div>
<div class="card-table">
<!-- 表格 -->
<Tableshowdetail :tableShowData="tableShowData" @fireInfoDataImportBackcallFn="fireInfoDataImportBackcallFn"></Tableshowdetail>
<Tableshowdetail :tableShowData="tableShowData"
@fireInfoDataImportBackcallFn="fireInfoDataImportBackcallFn"></Tableshowdetail>
</div>
</div>
</div>
</main>
<!-- 新增添加框 -->
<el-drawer
v-model="addFireInfoDataImportFndrawer"
:with-header="false"
>
<el-drawer v-model="addFireInfoDataImportFndrawer" :with-header="false">
<addFireInfo></addFireInfo>
</el-drawer>
</div>
......@@ -56,39 +54,39 @@ import addFireInfo from './addFireInfo.vue';
import Tableshowdetail from './tableshowdetail.vue';
const addFireInfoDataImportFndrawer = ref(false);
const addFireInfoDataImportFn = () => {
const addFireInfoDataImportFn = () => {
addFireInfoDataImportFndrawer.value = true
}
const fireInfoDataImport = ref(null);
const fireInfoDataImportBackcallFn = (info) => {
const fireInfoDataImportBackcallFn = (info) => {
fireInfoDataImport.value = info
}
const fireInfoDataDeleteFn = () => {
if ( fireInfoDataImport ===undefined ||fireInfoDataImport.value===null || fireInfoDataImport.value.length<=0 ) {
const fireInfoDataDeleteFn = () => {
if (fireInfoDataImport === undefined || fireInfoDataImport.value === null || fireInfoDataImport.value.length <= 0) {
ElMessage.warning("没有勾选数据")
}else {
console.log("删除数据",fireInfoDataImport.value)
} else {
console.log("删除数据", fireInfoDataImport.value)
fireInfoDataImport.value = null
}
}
const fireInfoDataImportFn = () => {
if ( fireInfoDataImport ===undefined ||fireInfoDataImport.value===null || fireInfoDataImport.value.length<=0 ) {
const fireInfoDataImportFn = () => {
if (fireInfoDataImport === undefined || fireInfoDataImport.value === null || fireInfoDataImport.value.length <= 0) {
ElMessage.warning("没有勾选数据")
}else {
console.log("导入数据",fireInfoDataImport.value)
} else {
console.log("导入数据", fireInfoDataImport.value)
fireInfoDataImport.value = null
}
}
// import Operation from 'ant-design-vue/es/transfer/operation';
// 定义一个名为searchShowData的ref变量,它是一个数组,数组中的每个元素都是一个对象,对象中包含了label、placeholder、type、content和options等属性
const searchShowData = ref([
{ label: '用户姓名', placeholder: "请输入", type: 'input',content:'' ,isShow: true},
{ label: '用户状态', placeholder: "请选择", type: 'select',content:'' ,isShow: true, options: [{label:'启用', value:'启用'}, {label:'禁用', value:'禁用'}] },
{ label: '用户角色', placeholder: "请选择", type: 'select', content:'' ,isShow: true,options: [{label:'管理员', value:'管理员'}, {label:'巡查员', value:'巡查员'}]},
{ label: '用户姓名', placeholder: "请输入", type: 'input', content: '', isShow: true },
{ label: '用户状态', placeholder: "请选择", type: 'select', content: '', isShow: true, options: [{ label: '启用', value: '启用' }, { label: '禁用', value: '禁用' }] },
{ label: '用户角色', placeholder: "请选择", type: 'select', content: '', isShow: true, options: [{ label: '管理员', value: '管理员' }, { label: '巡查员', value: '巡查员' }] },
])
// 响应式布局配置
const layoutConfig = reactive({
......@@ -132,7 +130,7 @@ const editData = (data) => {
// 设置要编辑的数据
rowData.value = data
console.log("000000-------1-----0000000000",data)
console.log("000000-------1-----0000000000", data)
}
/**
......@@ -141,7 +139,7 @@ const editData = (data) => {
* 显示确认对话框,用户确认后执行删除操作
*/
const deleteData = (data) => {
console.log("000000---2---------0000000000",data)
console.log("000000---2---------0000000000", data)
ElMessageBox.confirm(
'删除操作不可逆,是否继续?',
'删除',
......@@ -153,20 +151,20 @@ const deleteData = (data) => {
}
)
.then(() => {
console.log("000000---1-456464564------0000000000","我是确认")
try {
const res = staffRemoveInfoApi({id:data.id});
if (res.code === 200) {
ElMessage({ type: 'success', message: '已删除' });
tableDataRefresh();
} else {
ElMessage({ type: 'error', message: '删除失败:' + res.msg });
}
} catch (err) {
// API 请求失败时在此捕获,不向上冒泡
ElMessage({ type: 'error', message: '删除失败(网络错误)' });
// console.error('删除接口失败:', err);
}
console.log("000000---1-456464564------0000000000", "我是确认")
try {
const res = staffRemoveInfoApi({ id: data.id });
if (res.code === 200) {
ElMessage({ type: 'success', message: '已删除' });
tableDataRefresh();
} else {
ElMessage({ type: 'error', message: '删除失败:' + res.msg });
}
} catch (err) {
// API 请求失败时在此捕获,不向上冒泡
ElMessage({ type: 'error', message: '删除失败(网络错误)' });
// console.error('删除接口失败:', err);
}
})
.catch(() => {
......@@ -201,53 +199,53 @@ const closeResetPasswordDialogFn = () => {
}
const resetPasswordData = ref({});
const resetData = (data) => {
console.log("000000-----3-------0000000000",data)
console.log("000000-----3-------0000000000", data)
isResetPasswordDialogVisible.value = true;
resetPasswordData.value = data;
}
const showuserinfodata = ref({})
const userData = (data) => {
console.log("000000------4------0000000000",data)
console.log("000000------4------0000000000", data)
isUserInfoDialogVisible.value = true
showuserinfodata.value = data
}
const tableShowData =[ {
id: 1,
fireNo:12,
updataTime:'2016-05-04',
name: 'Aleyna Kutzner',
floorcount: 'Lohrbergstr. 86c, Süd Lilli, Saarland',
reporter:"张三",
discription: 'Lorem ipsum dolor sit ametisl nisl nisl nisl nisl nisl nisl nisl nis',
fireLevel: '1级',
firePoint: '厨房',
},
{
id: 1,
fireNo:12,
updataTime:'2016-05-04',
name: 'Aleyna Kutzner',
floorcount: 'Lohrbergstr. 86c, Süd Lilli, Saarland',
reporter:"张三",
discription: 'Lorem ipsum dolor sit ametisl nisl nisl nisl nisl nisl nisl nisl nis',
fireLevel: '1级',
firePoint: '厨房',
}]
const Operation = ref( [ { label: '编辑', type: 'primary', icon: 'EditPen', click: editData },
{ label: '删除', type: 'danger', icon: 'Delete', click: deleteData },
{ label: '用户信息', type: 'primary', icon: 'EditPen', click: userData },
{ label: '重置密码', type: 'primary', icon: 'EditPen', click: resetData }]
)
const initTableData = () => {
const tableShowData = [{
id: 1,
fireNo: 12,
updataTime: '2016-05-04',
name: 'Aleyna Kutzner',
floorcount: 'Lohrbergstr. 86c, Süd Lilli, Saarland',
reporter: "张三",
discription: 'Lorem ipsum dolor sit ametisl nisl nisl nisl nisl nisl nisl nisl nis',
fireLevel: '1级',
firePoint: '厨房',
},
{
id: 1,
fireNo: 12,
updataTime: '2016-05-04',
name: 'Aleyna Kutzner',
floorcount: 'Lohrbergstr. 86c, Süd Lilli, Saarland',
reporter: "张三",
discription: 'Lorem ipsum dolor sit ametisl nisl nisl nisl nisl nisl nisl nisl nis',
fireLevel: '1级',
firePoint: '厨房',
}]
const Operation = ref([{ label: '编辑', type: 'primary', icon: 'EditPen', click: editData },
{ label: '删除', type: 'danger', icon: 'Delete', click: deleteData },
{ label: '用户信息', type: 'primary', icon: 'EditPen', click: userData },
{ label: '重置密码', type: 'primary', icon: 'EditPen', click: resetData }]
)
const initTableData = () => {
// staffGetPageInfoApi({
// "currentPageNum": 1,
// "currentPageSize": 10,
// }).then(res => {
// if(res.code === 200){
// let tempData = res.data.list
......@@ -257,26 +255,26 @@ const initTableData = () => {
// tempData = tempData.filter(element => {
// return element.isDeleted === 0;
// });
// tempData.forEach(element => {
// element.Operation = [...Operation.value]
// });
// tableShowData.value[0].tableBody = tempData
// tableShowData.value[0].total = res.data.total
// tableShowData.value[0].pageSize = res.data.pageSize
// console.log(tableShowData.value, '展示数据');
// }
// }).catch(err => {
// message.error(err.message)
// })
}
onMounted(() => {
onMounted(() => {
// console.log(tableShowData.value, '错误');
initTableData()
})
......@@ -354,32 +352,37 @@ const containerStyle = computed(() => ({
padding: 1rem;
}
.first-card-content{
.first-card-content {
width: 100%;
height: 100%;
padding-top: 1rem ;
padding-top: 1rem;
}
.title{
.title {
/* width: 100%; */
/* background-color: #000000; */
}
.card-actions {
display: flex;
/* flex: 1; */
justify-content: end;
align-items: center;
background-color: aqua;
height: 8%;
height: 8%;
padding: 1.5rem;
}
.operation-button {
/* width: 15%; */
width: 100%;
}
.card-tabs-footer {
display: flex;
......@@ -395,27 +398,33 @@ const containerStyle = computed(() => ({
justify-content: flex-end;
align-items: center;
}
/* 文本样式 */
.page-text {
color: #606266;
font-size: 14px;
white-space: nowrap; /* 防止文本换行 */
white-space: nowrap;
/* 防止文本换行 */
}
/* 修复 Element Plus 分页组件默认的块级布局问题 */
:deep .el-pagination {
:deep(.el-pagination) {
display: flex;
align-items: center;
margin: 0; /* 清除默认外边距 */
margin: 0;
/* 清除默认外边距 */
}
.pagination-block{
.pagination-block {
height: 8%;
}
.card-table{
.card-table {
width: 100%;
/* display: flex; */
/* background-color: #000000; */
/* flex:1; */
......@@ -429,7 +438,7 @@ const containerStyle = computed(() => ({
.left-top {
flex-direction: column;
}
.region-overview {
width: 100%;
flex: none;
......
......@@ -5,20 +5,21 @@
<div class="contenterTitle" style="height: 95%;">
<div class="title">
<div class="title1">国际花园小区鸟瞰图</div>
<el-button type="primary" size="large" style="width: 15px;height: 15px; margin-left: 4%; color: #fff;" color="#06B0E1" @click="buildAerialView">更换</el-button>
<el-button type="primary" size="large" style="width: 15px;height: 15px; margin-left: 4%; color: #fff;"
color="#06B0E1" @click="buildAerialView">更换</el-button>
</div>
<div class="container" >
<div class="container">
<div class="titleimg" >
<img class="titleimg1" @click="bigImgFn" src="../../static/image/loginback.png" alt="">
<div class="titleimg">
<img class="titleimg1" @click="bigImgFn" src="../../static/image/loginback.png" alt="">
</div>
<div style="width: 100%;height: 100%;">
<!-- <div style="background-color: aquamarine; display: flex; flex-direction: column; justify-content: center; align-items: center;width: 100%;height: 100%;overflow: hidden;">
-->
<SearchInfo style="width: 95%;height: 100%;" :build="build"></SearchInfo>
<!-- <div style="margin-bottom: 10px; display: flex; align-items: center;margin-left: -19.5%;margin-bottom: 5%;">
<SearchInfo style="width: 95%;height: 100%;" :build="build"></SearchInfo>
<!-- <div style="margin-bottom: 10px; display: flex; align-items: center;margin-left: -19.5%;margin-bottom: 5%;">
<span style="margin-right: 10px; min-width: 80px; text-align: right; margin-right: 10px;">建筑名称:</span>
<el-select
class="buildf1t2 select__"
......@@ -31,8 +32,8 @@
</el-select>
</div> -->
<!-- 第二个选择框组 -->
<!-- <div style="display: flex; align-items: center;">
<!-- 第二个选择框组 -->
<!-- <div style="display: flex; align-items: center;">
<span style="margin-right: 10px; min-width: 80px; text-align: right;margin-left: -16%;margin-right: 10px;">建筑楼层:</span>
<el-select
class="buildf1t2 select__"
......@@ -45,13 +46,17 @@
</el-select>
</div>
</div> -->
<!-- </div> -->
</div>
<div style="width: 20%;height: 100%; display: flex; flex-direction: column; justify-content: center;" >
<el-button type="primary" class="query-btn" size="large" style="width: 100%;height: 15%; color: #fff;margin-top: 65%;" color="#06B0E1" @click="detailBuildListShow" >查询</el-button>
<el-button type="primary" class="add-btn" size="large" style="width: 100%;height: 15%; color: #fff;margin-top: 40%;" color="#06B0E1" @click="updateBuildInfoFn()">新增建筑</el-button>
<div style="width: 20%;height: 100%; display: flex; flex-direction: column; justify-content: center;">
<el-button type="primary" class="query-btn" size="large"
style="width: 100%;height: 15%; color: #fff;margin-top: 65%;" color="#06B0E1"
@click="detailBuildListShow">查询</el-button>
<el-button type="primary" class="add-btn" size="large"
style="width: 100%;height: 15%; color: #fff;margin-top: 40%;" color="#06B0E1"
@click="updateBuildInfoFn()">新增建筑</el-button>
</div>
<!-- <div class="buildfilter" >
<div class="buildf1" >
......@@ -81,20 +86,20 @@
</div>
</div> -->
</div>
<div style="margin: 20px 0 10px 0;" >详细建筑列表</div>
<el-table stripe :data="buildData" width="1000" class="table___"
element-loading-background="rgba(0, 0, 0, 0.3)" :max-height="360" :row-style="{ height: '5px' }" style="overflow: auto">
<el-table-column label="建筑名称" align="center">
<div style="margin: 20px 0 10px 0;">详细建筑列表</div>
<el-table stripe :data="buildData" width="1000" class="table___" element-loading-background="rgba(0, 0, 0, 0.3)"
:max-height="360" :row-style="{ height: '5px' }" style="overflow: auto">
<el-table-column label="建筑名称" align="center">
<template #default="scope">
<div style="color: #fff;">{{ scope.row.aaa0 }}</div>
</template>
</el-table-column>
<el-table-column label="建筑层数" align="center">
<el-table-column label="建筑层数" align="center">
<template #default="scope">
{{ scope.row.aaa1 }}
</template>
......@@ -102,9 +107,9 @@
<el-table-column label="内部结构" align="center">
<template #default="scope">
<div @click="showBuildInfoFn(scope)" class="build_view">查看</div>
<div @click="showBuildInfoFn(scope)" class="build_view">查看</div>
</template>
</el-table-column>
<el-table-column label="建筑描述" align="center">
......@@ -112,36 +117,28 @@
{{ scope.row.aaa3 }}
</template>
</el-table-column>
<el-table-column property="btn" label="操作" width="200" align="center">
<template #default="scope">
<div >
<div>
<div style="display: flex; align-items: center; ;">
<el-button type="primary" size="large" style="width: 40%; color: #fff;" color="#06B0E1">查看详情</el-button>
<el-button type="primary" size="large" style="width: 10% ;color: #fff;" color="#06B0E1" @click="updateBuildInfoFn(scope)">修改</el-button>
<el-button type="primary" size="large" style="width: 40%; color: #fff;"
color="#06B0E1">查看详情</el-button>
<el-button type="primary" size="large" style="width: 10% ;color: #fff;" color="#06B0E1"
@click="updateBuildInfoFn(scope)">修改</el-button>
<!-- <el-button type="danger" size="large" style="width: 10%;height: 1px; color: #fff;" color="#06B0E1">删除</el-button> -->
<el-popconfirm
:icon="InfoFilled"
icon-color="red"
title="确定要删除这条记录吗?"
@cancel="onCancel"
>
<template #reference>
<el-button style="width: 20%;color: #fff;height: 42px;" color="#06B0E1">删除</el-button>
</template>
<template #actions="{ confirm, cancel }">
<el-button size="small" @click="deleteCancel(cancel)">取消</el-button>
<el-button
type="danger"
size="small"
@click="deleteConfirm(confirm)"
>
确认
</el-button>
</template>
</el-popconfirm>
<el-popconfirm :icon="InfoFilled" icon-color="red" title="确定要删除这条记录吗?" @cancel="onCancel">
<template #reference>
<el-button style="width: 20%;color: #fff;height: 42px;" color="#06B0E1">删除</el-button>
</template>
<template #actions="{ confirm, cancel }">
<el-button size="small" @click="deleteCancel(cancel)">取消</el-button>
<el-button type="danger" size="small" @click="deleteConfirm(confirm)">
确认
</el-button>
</template>
</el-popconfirm>
</div>
</div>
......@@ -155,146 +152,98 @@
</div>
<fireShow v-if="imgShow" @click="imgShow = ! imgShow" :images="images" :videos="videos"/>
<fireShow v-if="imgShow" @click="imgShow = !imgShow" :images="images" :videos="videos" />
<!-- 更换鸟瞰图 -->
<el-dialog
v-model="isChangeBuildAerialView"
title="更换鸟瞰图"
width="500px"
:before-close="handleClose"
>
<updataImgInfo :file="aerialViewUrl" @changeAerialView="changeAerialView" :updataImageCount="1" ></updataImgInfo>
</el-dialog>
<!-- 展示鸟瞰图 -->
<el-dialog
v-model="isShowAerialView"
width="900px"
custom-class="left-slide-dialog"
style="background-color: rgba(0, 0, 0, 0)"
>
<div>
<img style="width: 100%;height: auto;" :src="aerialViewUrl" alt="加载失败">
</div>
</el-dialog>
<el-dialog v-model="isChangeBuildAerialView" title="更换鸟瞰图" width="500px" :before-close="handleClose">
<updataImgInfo :file="aerialViewUrl" @changeAerialView="changeAerialView" :updataImageCount="1"></updataImgInfo>
</el-dialog>
<!-- 展示鸟瞰图 -->
<el-dialog v-model="isShowAerialView" width="900px" custom-class="left-slide-dialog"
style="background-color: rgba(0, 0, 0, 0)">
<div>
<img style="width: 100%;height: auto;" :src="aerialViewUrl" alt="加载失败">
</div>
</el-dialog>
<!-- 展示修改信息 -->
<el-dialog
v-model="isShowChangeInfo"
width="900px"
custom-class="left-slide-dialog"
style="background-color: rgba(0, 0, 0, 0);
margin-top: 5%;"
@close="showChangeInfohandleClose"
>
<el-form
:model="updataFormData"
:rules="updataFormRules"
ref="updataFormRef"
>
<div class="building-form-container">
<el-collapse v-model="activeNames" class="transparent-collapse">
<!-- 移除 accordion 属性,并设置 activeNames 包含所有项 -->
<!-- 建筑名称 -->
<el-collapse-item title="建筑名称" name="1" >
<div class="form-item">
<el-form-item prop="name">
<el-input
v-model="updataFormData.name"
placeholder="请输入建筑名称"
clearable
/>
</el-form-item>
</div>
</el-collapse-item>
<!-- 建筑层数 -->
<el-collapse-item title="建筑层数" name="2">
<div class="form-item">
<el-form-item prop="floors">
<el-input-number
v-model="updataFormData.floors"
:min="1"
:max="100"
controls-position="right"
/>
</el-form-item>
<span class="unit"></span>
</div>
</el-collapse-item>
<!-- 内部结构 -->
<el-collapse-item title="内部结构" name="3">
<div class="image-uploader">
<div class="image-preview-container">
<div
v-for="(img, index) in updataFormData.images"
:key="index"
class="image-preview"
>
<el-image
:src="img.url"
fit="cover"
class="preview-image"
/>
<div class="image-actions">
<el-button
type="danger"
size="small"
circle
@click="removeImage(index)"
>
<el-icon><Delete /></el-icon>
</el-button>
</div>
<el-dialog v-model="isShowChangeInfo" width="900px" custom-class="left-slide-dialog" style="background-color: rgba(0, 0, 0, 0);
margin-top: 5%;" @close="showChangeInfohandleClose">
<el-form :model="updataFormData" :rules="updataFormRules" ref="updataFormRef">
<div class="building-form-container">
<el-collapse v-model="activeNames" class="transparent-collapse">
<!-- 移除 accordion 属性,并设置 activeNames 包含所有项 -->
<!-- 建筑名称 -->
<el-collapse-item title="建筑名称" name="1">
<div class="form-item">
<el-form-item prop="name">
<el-input v-model="updataFormData.name" placeholder="请输入建筑名称" clearable />
</el-form-item>
</div>
</el-collapse-item>
<!-- 建筑层数 -->
<el-collapse-item title="建筑层数" name="2">
<div class="form-item">
<el-form-item prop="floors">
<el-input-number v-model="updataFormData.floors" :min="1" :max="100" controls-position="right" />
</el-form-item>
<span class="unit"></span>
</div>
</el-collapse-item>
<!-- 内部结构 -->
<el-collapse-item title="内部结构" name="3">
<div class="image-uploader">
<div class="image-preview-container">
<div v-for="(img, index) in updataFormData.images" :key="index" class="image-preview">
<el-image :src="img.url" fit="cover" class="preview-image" />
<div class="image-actions">
<el-button type="danger" size="small" circle @click="removeImage(index)">
<el-icon>
<Delete />
</el-icon>
</el-button>
</div>
</div>
<el-upload
action="#"
list-type="picture-card"
:auto-upload="false"
:on-change="handleImageChange"
:show-file-list="false"
>
<el-icon><Plus /></el-icon>
</el-upload>
</div>
</el-collapse-item>
<!-- 建筑描述 -->
<el-collapse-item title="建筑描述" name="4">
<div class="form-item">
<el-form-item prop="description" style="background-color: blue;">
<el-input
v-model="updataFormData.description"
type="textarea"
:rows="4"
placeholder="请输入建筑描述(5-500字)"
:minlength="10"
:maxlength="500"
show-word-limit
/>
</el-form-item>
</div>
</el-collapse-item>
</el-collapse>
<div class="form-actions">
<el-button v-if="!isAddBuild" type="primary" @click="handleSubmit('update')">
<el-icon><Edit /></el-icon>确认修改
</el-button>
<el-button v-else type="success" @click="handleSubmit('create')">
<el-icon><Plus /></el-icon>确认新增
</el-button>
</div>
<el-upload action="#" list-type="picture-card" :auto-upload="false" :on-change="handleImageChange"
:show-file-list="false">
<el-icon>
<Plus />
</el-icon>
</el-upload>
</div>
</el-collapse-item>
<!-- 建筑描述 -->
<el-collapse-item title="建筑描述" name="4">
<div class="form-item">
<el-form-item prop="description" style="background-color: blue;">
<el-input v-model="updataFormData.description" type="textarea" :rows="4" placeholder="请输入建筑描述(5-500字)"
:minlength="10" :maxlength="500" show-word-limit />
</el-form-item>
</div>
</el-collapse-item>
</el-collapse>
<div class="form-actions">
<el-button v-if="!isAddBuild" type="primary" @click="handleSubmit('update')">
<el-icon>
<Edit />
</el-icon>确认修改
</el-button>
<el-button v-else type="success" @click="handleSubmit('create')">
<el-icon>
<Plus />
</el-icon>确认新增
</el-button>
</div>
</el-form>
</el-dialog>
</div>
</el-form>
</el-dialog>
</div>
</template>
......@@ -307,7 +256,7 @@ import imgupload from '../../components/ImageUpload/index.vue'
import { InfoFilled } from '@element-plus/icons-vue'
import updataImgInfo from './updataImgInfo.vue';
import { Delete, Plus, Edit } from '@element-plus/icons-vue'
import { staffAerialViewApi } from '../../api/build'
// import { staffAerialViewApi } from '../../api/build'
import SearchInfo from './searchInfo.vue';
onMounted(() => {
......@@ -323,15 +272,15 @@ onMounted(() => {
})
const changeAerialView = (url)=>{
const changeAerialView = (url) => {
//通过子组件调用了父组件的funcToSon()方法,获取服务器的返回地址,更新到aerialViewUrl中
console.log("子组件调用了父组件的funcToSon()方法",url)
aerialViewUrl.value = url
console.log("子组件调用了父组件的funcToSon()方法", url)
aerialViewUrl.value = url
isChangeBuildAerialView.value = false
}
const isAddBuild = ref(false) // 是否是新增建筑按钮
const activeNames = ref(['1','2', '3', '4' ]) // 默认展开第一项
const activeNames = ref(['1', '2', '3', '4']) // 默认展开第一项
const updataFormData = reactive({
name: '',
......@@ -406,29 +355,29 @@ const showChangeInfohandleClose = (done) => {
// 通过新增或者修改的方式更新建筑列表信息
const updateBuildInfoFn = (info) => {
isShowChangeInfo.value = true
console.log("------------可获取到当前的需要修改的建筑信息",info);
console.log("------------可获取到当前的需要修改的建筑信息", info);
if (info === '' || info === undefined) {
isAddBuild.value = true
console.log("------------我是新增",);
} else{
} else {
// 修改这里的info和formData的字段不一致的问题
updataFormData.value= info,
isAddBuild.value = false
updataFormData.value = info,
isAddBuild.value = false
console.log("------------我是修改",);
}
// 获取到当前建筑信息的数据,需要更新到中fromData中
}
const buildAerialView = () => {
const buildAerialView = () => {
isChangeBuildAerialView.value = true
}
const imgUrl = ref('')//图片地址
const images = ref([])
const bigImgFn = () => {
isShowAerialView.value = true
aerialViewUrl.value ='../../static/image/loginback.png'
aerialViewUrl.value = '../../static/image/loginback.png'
console.log(aerialViewUrl.value)
}
const aerialViewUrl = ref('')//展示的鸟瞰图url
......@@ -444,17 +393,17 @@ const showBuildInfoFn = () => {
const deleteCancel = (cancel) => {
cancel()
ElMessage({
message: '取消删除',
type: 'info',
})
message: '取消删除',
type: 'info',
})
deleteClicked.value = false
}
const deleteConfirm = (confirm) => {
confirm()
ElMessage({
message: '执行删除操作',
type: 'success',
})
message: '执行删除操作',
type: 'success',
})
deleteClicked.value = false
}
......@@ -477,9 +426,9 @@ const detailBuildListShow = () => {
type: 'warning',
})
} else {
console.log('detailBuildListShow',build)
console.log('detailBuildListShow', build)
}
}
const build = ref({
unitName: '',
......@@ -487,7 +436,7 @@ const build = ref({
})
// 用于展示查询建筑列表的条件信息
const buildList = ref([{ name: '建筑1', value: '1' }, { name: '建筑2', value: '2' }])
const floorList = ref([{ name: '一层', value: '1' },{ name: '二层', value: '2'}])
const floorList = ref([{ name: '一层', value: '1' }, { name: '二层', value: '2' }])
const buildData = ref([
{
aaa0: '建筑1',
......@@ -572,16 +521,20 @@ const buildchangeFn = () => {
font-family: SourceHanSansCN, SourceHanSansCN;
font-weight: bold;
font-size: 16px;
color: #FFFFFF ;
color: #FFFFFF;
}
.container {
/* background-color: #06a0cf; */
height: 36%;
display: flex;
/* 可选的对齐方式 */
align-items: center; /* 垂直居中对齐 */
gap: 10px; /* 两个div之间的间距 */
align-items: center;
/* 垂直居中对齐 */
gap: 10px;
/* 两个div之间的间距 */
}
.titleimg {
width: 30vw;
height: 30vh;
......@@ -598,19 +551,24 @@ const buildchangeFn = () => {
display: flex;
width: 60%;
/* height: 100%; */
flex-direction: row; /* 垂直排列 */
flex-direction: row;
/* 垂直排列 */
}
.buildButton {
display: flex;
flex-direction: column; /* 垂直排列 */
gap: 75%;
width: 200px; /* 给容器一个宽度 */
flex-direction: column;
/* 垂直排列 */
gap: 75%;
width: 200px;
/* 给容器一个宽度 */
}
.query-btn {
width: 100%;
margin-top: 30%;
margin-left: -15%;
margin-left: -15%;
color: #fff;
}
......@@ -619,9 +577,10 @@ const buildchangeFn = () => {
margin-left: -16%;
color: #fff;
}
.button2_container{
.button2_container {
width: 40%;
position: absolute;
/* 如果是相对于整个页面的右下角 */
/* bottom: 20px;
......@@ -634,15 +593,18 @@ const buildchangeFn = () => {
display: flex;
margin-left: 10%;
/* align-items: center; */
flex-direction: column; /* 垂直排列 */
flex-direction: column;
/* 垂直排列 */
}
.form_row {
margin-bottom: 5%;
width: 70%;
display: flex;
align-items: center; /* 垂直居中 */
justify-content: left; /* 水平居中 */
align-items: center;
/* 垂直居中 */
justify-content: left;
/* 水平居中 */
/* gap: 12px; 元素间距 */
}
......@@ -653,8 +615,7 @@ const buildchangeFn = () => {
text-align: center;
}
.buildf2 {
}
.buildf2 {}
/*
......@@ -794,7 +755,7 @@ const buildchangeFn = () => {
margin-left: 5px;
}
.left-slide-dialog{
.left-slide-dialog {
background-color: #072547;
}
......
......@@ -2,65 +2,32 @@
<div class="fire-search-container">
<div class="search-row">
<!-- 火情描述输入框 -->
<div class="search-item" v-for="(items, index) in searchShowData" :key="index" >
<label class="search-label">{{items.label}}</label>
<el-input v-if="items.type === 'input'"
v-model="items.content"
clearable
:disabled="!isShow"
:placeholder="items.placeholder"
/>
<el-select v-else-if="items.type === 'select'"
v-model="items.content"
:placeholder="items.placeholder"
clearable
>
<el-option
v-for="building in items.options"
:key="building.value"
:label="building.label"
:value="building.value"
/>
</el-select>
<el-autocomplete v-else-if="items.type === 'autocomplete'"
v-model="items.content"
:fetch-suggestions="querySearch"
:trigger-on-focus="false"
clearable
class="inline-input w-50"
placeholder="请输入"
@input="getAllListInfoFn(items)"
/>
<el-date-picker v-else
v-model="items.content"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-value="defaultDateRange"
@change="getAllListInfoFn"
:disabled-date="disableFutureDates"
style="max-width: 220px;"
/>
<div class="search-item" v-for="(items, index) in searchShowData" :key="index">
<label class="search-label">{{ items.label }}</label>
<el-input v-if="items.type === 'input'" v-model="items.content" clearable :disabled="!isShow"
:placeholder="items.placeholder" />
<el-select v-else-if="items.type === 'select'" v-model="items.content" :placeholder="items.placeholder"
clearable>
<el-option v-for="building in items.options" :key="building.value" :label="building.label"
:value="building.value" />
</el-select>
<el-autocomplete v-else-if="items.type === 'autocomplete'" v-model="items.content"
:fetch-suggestions="querySearch" :trigger-on-focus="false" clearable class="inline-input w-50"
placeholder="请输入" @input="getAllListInfoFn(items)" />
<el-date-picker v-else v-model="items.content" type="daterange" start-placeholder="开始日期" end-placeholder="结束日期"
:default-value="defaultDateRange" @change="getAllListInfoFn" :disabled-date="disableFutureDates"
style="max-width: 220px;" />
</div>
</div>
<div class="operation-buttons" v-if="isShow">
<!-- 操作按钮组 -->
<!-- 操作按钮组 -->
<div class="search-buttons">
<el-button
type="default"
style="width: 45%;"
@click="resetSearchForm"
>
<el-button type="default" style="width: 45%;" @click="resetSearchForm">
重置
</el-button>
<el-button
type="primary"
style="width: 45%;"
@click="submitSearch"
>
<el-button type="primary" style="width: 45%;" @click="submitSearch">
查询
</el-button>
</div>
......@@ -71,21 +38,21 @@
<script setup>
import { computed, reactive, ref, watch } from 'vue';
import { ElInput, ElSelect, ElOption, ElButton, ElMessage, dayjs } from 'element-plus';
import { buildingGetBuildCodeListApi,buildingGetBuildListByBuildNameApi,buildingGetTotalFloorNumListApi,buildingGetBuildNameListApi } from '../../../api/build'
import { buildingGetBuildCodeListApi, buildingGetBuildListByBuildNameApi, buildingGetTotalFloorNumListApi, buildingGetBuildNameListApi } from '../../../api/build'
import { floorGetFloorNoListAPI } from '../../../api/floor'
import useAppStore from '../../../store/module/app';
import useAppStore from '../../../store/module/app';
const useAppStoreInstance = useAppStore()
const props = defineProps(["searchShowData"])
const isShow = computed(() => {
console.log("按钮操作显示标识",props.searchShowData)
console.log("按钮操作显示标识", props.searchShowData)
if (props.searchShowData.length > 0) {
return props.searchShowData[0].isShow
}else{
} else {
ElMessage.error('按钮操作显示标识错误')
}
})
})
const Year = dayjs(Date.now()).format('YYYY')
const Month = dayjs(Date.now()).format('MM')
const Day = dayjs(Date.now()).format('DD')
......@@ -117,11 +84,11 @@ const createFilter = (queryString) => {
return (restaurant) => {
// 确保 restaurant 和 restaurant.value 存在
if (!restaurant?.value) return false;
// 确保 queryString 是字符串
const searchText = String(queryString || '').toLowerCase();
const itemText = String(restaurant.value).toLowerCase();
return itemText.includes(searchText); // 或 startsWith()
}
}
......@@ -131,7 +98,7 @@ const handleSelect = (item) => {
restaurants.value = item.options
}
const getAllListInfoFn = (item) => {
const getAllListInfoFn = (item) => {
// console.log(item.click,'-*--*-*-*-*-*-')
switch (item.click) {
case 'buildingGetBuildListByBuildNameFn':
......@@ -154,59 +121,59 @@ const getAllListInfoFn = (item) => {
break;
}
}
const buildingGetBuildListByBuildNameFn = (item) => {
const buildingGetBuildListByBuildNameFn = (item) => {
// console.log(item,'buildingGetBuildCodeListFn被触发')
buildingGetBuildListByBuildNameApi({buildName:item.content}).then(res => {
buildingGetBuildListByBuildNameApi({ buildName: item.content }).then(res => {
// console.log(res,'buildingGetBuildCodeListFn返回数据')
if(res.code == 200) {
if (res.code == 200) {
restaurants.value = res.data
// console.log(restaurants.value,'buildingGetBuildCodeListFn8999999999999返回数据')
}
})
};
const buildCodeTraverse = (item)=>{
const buildCodeTraverse = (item) => {
let buildCodeList = []
item.forEach(item => {
item.forEach(item => {
// console.log(item,'buildCodeTraverse被触发')
buildCodeList.push({value:item})
buildCodeList.push({ value: item })
})
return buildCodeList
}
const buildingGetBuildCodeListApiFn = (item) => {
buildingGetBuildCodeListApi({buildCode:item.content}).then(res => {
const buildingGetBuildCodeListApiFn = (item) => {
buildingGetBuildCodeListApi({ buildCode: item.content }).then(res => {
// console.log(res,'buildingGetBuildCodeListFn返回数据')
if(res.code == 200) {
if (res.code == 200) {
restaurants.value = buildCodeTraverse(res.data)
// console.log(restaurants.value,'buildingGetBuildCodeListFn8999999999999返回数据')
}
})
};
// 返回的数据不对应当[楼层数]不是【建筑名称】
const buildingGetTotalFloorNumListFn = (item) => {
buildingGetTotalFloorNumListApi({totalFloorNum:item.content}).then(res => {
console.log(res,'buildingGetTotalFloorNumListFn返回数据')
if(res.code == 200) {
const buildingGetTotalFloorNumListFn = (item) => {
buildingGetTotalFloorNumListApi({ totalFloorNum: item.content }).then(res => {
console.log(res, 'buildingGetTotalFloorNumListFn返回数据')
if (res.code == 200) {
restaurants.value = buildCodeTraverse(res.data)
console.log(restaurants.value,'buildingGetTotalFloorNumListFn8999999999999返回数据')
console.log(restaurants.value, 'buildingGetTotalFloorNumListFn8999999999999返回数据')
}
})
}
const buildingGetBuildNameListFn = (item) => {
buildingGetBuildNameListApi({buildName:item.content}).then(res => {
const buildingGetBuildNameListFn = (item) => {
buildingGetBuildNameListApi({ buildName: item.content }).then(res => {
// console.log(res,'buildingGetBuildNameListFn返回数据')
if(res.code == 200) {
if (res.code == 200) {
restaurants.value = buildCodeTraverse(res.data)
// console.log(restaurants.value,'buildingGetBuildNameListFn8999999999999返回数据')
}
})
}
const floorGetFloorNoListFn = (item) => {
floorGetFloorNoListAPI({buildId: useAppStoreInstance.PUSHPARAMETER.buildId,floorNo:item.content}).then(res => {
const floorGetFloorNoListFn = (item) => {
floorGetFloorNoListAPI({ buildId: useAppStoreInstance.PUSHPARAMETER.buildId, floorNo: item.content }).then(res => {
// console.log(res,'floorGetFloorNoListFn返回数据')
if(res.code == 200) {
if (res.code == 200) {
restaurants.value = buildCodeTraverse(res.data)
// console.log(restaurants.value,'floorGetFloorNoListFn8999999999999返回数据')
}
......@@ -226,11 +193,11 @@ const submitSearch = () => {
};
// 定义一个重置搜索表单的函数
const resetSearchForm = () => {
// 遍历props.searchShowData数组
props.searchShowData.forEach(item => {
// 将每个item的content属性置为空字符串
item.content = ''
})
// 遍历props.searchShowData数组
props.searchShowData.forEach(item => {
// 将每个item的content属性置为空字符串
item.content = ''
})
}
</script>
......@@ -249,8 +216,8 @@ const resetSearchForm = () => {
}
.search-row {
/* background-color: #606266; */
/* background-color: #606266; */
display: flex;
flex: 1;
align-items: center;
......@@ -261,7 +228,7 @@ const resetSearchForm = () => {
}
.search-item {
/* background-color: #606266; */
/* background-color: #606266; */
display: flex;
align-items: center;
flex: 1;
......@@ -269,7 +236,7 @@ const resetSearchForm = () => {
.search-label {
width: 90px;
margin-right: 8px;
color: #606266;
......@@ -277,8 +244,8 @@ const resetSearchForm = () => {
}
/* 使用深度选择器覆盖Element Plus默认样式 */
:deep .el-input__wrapper,
:deep .el-select__wrapper {
:deep(.el-input__wrapper),
:deep(.el-select__wrapper) {
border-radius: 4px;
}
......@@ -289,13 +256,14 @@ const resetSearchForm = () => {
display: flex;
align-items: center;
justify-content: space-between;
}
.operation-buttons {
width: 20%;
padding-left: 5%;
width: 20%;
padding-left: 5%;
}
/* 响应式适配 */
......@@ -304,7 +272,7 @@ padding-left: 5%;
flex-direction: column;
align-items: flex-start;
}
.search-buttons {
margin-left: 0;
margin-top: 10px;
......
......@@ -7,25 +7,30 @@
<div class="left-top">
<!-- 区域信息概览 -->
<div class="info-card region-overview">
<searchtop :searchShowData="searchShowData" ></searchtop>
<searchtop :searchShowData="searchShowData"></searchtop>
</div>
</div>
<!-- 左侧下部分:统计区域 -->
<div class="info-card stats-alerts">
<div class="card-tabs">
<span class="title" >用户列表</span>
<span class="title">用户列表</span>
<div class="card-actions">
<el-button class="operation-button" type="primary" size="small" style="width: 15%;">导入</el-button>
<el-button class="operation-button" type="primary" size="small" style="width: 15%;">导入</el-button>
<el-button class="operation-button" type="primary" size="small">导出</el-button>
<el-button class="operation-button" type="primary" size="small" @click="handleAddInfoFn">新增</el-button>
<el-button class="operation-button" type="primary" size="small" @click="tableDataRefresh"><el-icon><RefreshRight /></el-icon></el-button>
<el-button class="operation-button" type="primary" size="small"><el-icon><FullScreen /></el-icon></el-button>
<el-button class="operation-button" type="primary" size="small" @click="tableDataRefresh"><el-icon>
<RefreshRight />
</el-icon></el-button>
<el-button class="operation-button" type="primary" size="small"><el-icon>
<FullScreen />
</el-icon></el-button>
</div>
</div>
<div class="card-table">
<tabledata :tableShowData="tableShowData" :Operation="Operation" @getPageCommonAPI="initTableData" @tableDataRefresh="tableDataRefresh"></tabledata>
<tabledata :tableShowData="tableShowData" :Operation="Operation" @getPageCommonAPI="initTableData"
@tableDataRefresh="tableDataRefresh"></tabledata>
</div>
</div>
......@@ -33,32 +38,25 @@
</main>
<!-- 新增用户 -->
<el-drawer v-model="isAddDrawer" title="添加用户信息" :with-header="false" style="height: 100%;" :before-close="beforCloseAddDrawer">
<el-drawer v-model="isAddDrawer" title="添加用户信息" :with-header="false" style="height: 100%;"
:before-close="beforCloseAddDrawer">
<AddInfo @closeAddDrawer="closeAddDrawer" @tableDataRefresh="tableDataRefresh"></AddInfo>
</el-drawer>
</el-drawer>
<!-- 修改弹窗 -->
<el-drawer v-model="isEditDrawer" title="修改用户信息" :with-header="false" style="height: 100%;" :before-close="beforCloseAddDrawer">
<editinfo :rowData="rowData" @closeEditDrawer="closeEditDrawer" @tableDataRefresh="tableDataRefresh"></editinfo>
</el-drawer>
<!-- 用户信息弹窗 -->
<el-dialog
v-model="isUserInfoDialogVisible"
title="用户信息"
width="800"
>
<userinfo :userInfo="showuserinfodata" :isUserInfoDialogVisible="isUserInfoDialogVisible"></userinfo>
</el-dialog>
<!-- 重置密码弹窗 -->
<el-dialog
v-model="isResetPasswordDialogVisible"
title="重置密码"
width="800"
close="beforCloseAddDrawer"
:close-on-click-modal = false
:show-close = 'false'
>
<resetpassword :userInfo="resetPasswordData" @closeResetPasswordDialogFn="closeResetPasswordDialogFn" :isResetPasswordDialogVisible="isResetPasswordDialogVisible"></resetpassword>
</el-dialog>
<el-drawer v-model="isEditDrawer" title="修改用户信息" :with-header="false" style="height: 100%;"
:before-close="beforCloseAddDrawer">
<editinfo :rowData="rowData" @closeEditDrawer="closeEditDrawer" @tableDataRefresh="tableDataRefresh"></editinfo>
</el-drawer>
<!-- 用户信息弹窗 -->
<el-dialog v-model="isUserInfoDialogVisible" title="用户信息" width="800">
<userinfo :userInfo="showuserinfodata" :isUserInfoDialogVisible="isUserInfoDialogVisible"></userinfo>
</el-dialog>
<!-- 重置密码弹窗 -->
<el-dialog v-model="isResetPasswordDialogVisible" title="重置密码" width="800" close="beforCloseAddDrawer"
:close-on-click-modal=false :show-close='false'>
<resetpassword :userInfo="resetPasswordData" @closeResetPasswordDialogFn="closeResetPasswordDialogFn"
:isResetPasswordDialogVisible="isResetPasswordDialogVisible"></resetpassword>
</el-dialog>
</div>
</template>
......@@ -71,7 +69,7 @@ import resetpassword from '../components/resetpassword.vue'
import editinfo from '../components/editinfo.vue';
import { ElMessage, ElMessageBox } from 'element-plus'
import AddInfo from '../components/addInfo.vue';
import { staffGetPageInfoApi,staffRemoveInfoApi } from "../../../api/staff.js"
import { staffGetPageInfoApi, staffRemoveInfoApi } from "../../../api/staff.js"
import { message } from 'ant-design-vue';
import { useRoute } from 'vue-router';
import useAppStore from '../../../store/module/app.js';
......@@ -81,9 +79,9 @@ const route = useRoute()
// import Operation from 'ant-design-vue/es/transfer/operation';
// 定义一个名为searchShowData的ref变量,它是一个数组,数组中的每个元素都是一个对象,对象中包含了label、placeholder、type、content和options等属性
const searchShowData = ref([
{ label: '用户姓名', placeholder: "请输入", type: 'input',content:'' ,isShow: true},
{ label: '用户状态', placeholder: "请选择", type: 'select',content:'' ,isShow: true, options: [{label:'启用', value:'启用'}, {label:'禁用', value:'禁用'}] },
{ label: '用户角色', placeholder: "请选择", type: 'select', content:'',isShow: true ,options: [{label:'管理员', value:'管理员'}, {label:'巡查员', value:'巡查员'}]},
{ label: '用户姓名', placeholder: "请输入", type: 'input', content: '', isShow: true },
{ label: '用户状态', placeholder: "请选择", type: 'select', content: '', isShow: true, options: [{ label: '启用', value: '启用' }, { label: '禁用', value: '禁用' }] },
{ label: '用户角色', placeholder: "请选择", type: 'select', content: '', isShow: true, options: [{ label: '管理员', value: '管理员' }, { label: '巡查员', value: '巡查员' }] },
])
// 响应式布局配置
const layoutConfig = reactive({
......@@ -100,7 +98,7 @@ const isUserInfoDialogVisible = ref(false); // 控制用户信息弹窗的显示
* 控制添加抽屉的显示状态
* @type {Ref<boolean>} - 响应式布尔值,用于控制添加抽屉的显示
*/
const isAddDrawer= ref(false)
const isAddDrawer = ref(false)
const closeAddDrawer = () => {
console.log("000000-------3-----0000000000")
// 关闭添加抽屉
......@@ -119,8 +117,8 @@ const beforCloseAddDrawer = () => {
const tableDataRefresh = () => {
initTableData({
currentPageNum: useAppStoreInstance.pageCountInfo.currentPageNum,
currentPageSize:useAppStoreInstance.pageCountInfo.currentPageSize,
currentPageSize: useAppStoreInstance.pageCountInfo.currentPageSize,
})
console.log("000000-------2-----0000000000,这里获取到最新的数据")
......@@ -141,14 +139,14 @@ const rowData = ref([])
*/
const editData = (data) => {
try {
if(useAppStoreInstance.chackCurPersionOpition()){
// 打开编辑抽屉
isEditDrawer.value = true
// 设置要编辑的数据
rowData.value = data
console.log("000000-------1-----0000000000",data)
}else{
if (useAppStoreInstance.chackCurPersionOpition()) {
// 打开编辑抽屉
isEditDrawer.value = true
// 设置要编辑的数据
rowData.value = data
console.log("000000-------1-----0000000000", data)
} else {
ElMessage.error("没有权限打开编辑抽屉")
}
} catch (error) {
......@@ -160,7 +158,7 @@ const editData = (data) => {
* 调用后将关闭编辑抽屉并重置相关状态
*/
const closeEditDrawer = () => {
console.log("000000-------23-----0000000000")
// 关闭编辑抽屉
isEditDrawer.value = false
......@@ -174,24 +172,24 @@ const closeEditDrawer = () => {
const deleteData = (data) => {
try {
if(useAppStoreInstance.chackCurPersionOpition()){
console.log("000000---2---------0000000000",data)
ElMessageBox.confirm(
'删除操作不可逆,是否继续?',
'删除',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
draggable: true,
}
)
.then(() => {
if (useAppStoreInstance.chackCurPersionOpition()) {
console.log("000000---2---------0000000000", data)
ElMessageBox.confirm(
'删除操作不可逆,是否继续?',
'删除',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
draggable: true,
}
)
.then(() => {
// console.log("000000---1-456464564------0000000000","我是确认",data.id)
try {
let submitData = {id:data.id};
let submitData = { id: data.id };
staffRemoveInfoApi(submitData).then(res => {
if (res.code === 200) {
ElMessage({ type: 'success', message: '已删除' });
......@@ -205,13 +203,13 @@ const deleteData = (data) => {
ElMessage({ type: 'error', message: `删除失败(网络错误)err:${err}` });
}
}).catch(() => {
ElMessage({
type: 'info',
message: '取消删除',
}).catch(() => {
ElMessage({
type: 'info',
message: '取消删除',
})
})
})
}else{
} else {
ElMessage.error("没有权限打开编辑抽屉")
}
} catch (error) {
......@@ -219,7 +217,7 @@ const deleteData = (data) => {
}
}
......@@ -230,16 +228,16 @@ const closeResetPasswordDialogFn = () => {
}
const resetPasswordData = ref({});
const resetData = (data) => {
if(useAppStoreInstance.userInfo.id === data.id){
if (useAppStoreInstance.userInfo.id === data.id) {
ElMessage.error("不能重置自己的密码")
}else{
try {
console.log(useAppStoreInstance.chackCurPersionOpition(),"********useAppStoreInstance.chackCurPersionOpition()***************")
if(useAppStoreInstance.chackCurPersionOpition() ){
console.log("000000-----3-------0000000000",data)
} else {
try {
console.log(useAppStoreInstance.chackCurPersionOpition(), "********useAppStoreInstance.chackCurPersionOpition()***************")
if (useAppStoreInstance.chackCurPersionOpition()) {
console.log("000000-----3-------0000000000", data)
isResetPasswordDialogVisible.value = true;
resetPasswordData.value = data;
}else{
} else {
ElMessage.error("没有权限打开重置密码抽屉")
}
} catch (error) {
......@@ -250,71 +248,71 @@ const resetData = (data) => {
const showuserinfodata = ref({})
const userData = (data) => {
console.log("000000------4------0000000000",data)
console.log("000000------4------0000000000", data)
isUserInfoDialogVisible.value = true
showuserinfodata.value = data
}
const tableShowData = ref([{
tableHeader:[
{label: '姓名', prop: 'name'},
{label: '电话', prop: 'phone'},
{label: '是否可用', prop: 'status'},
{label: '用户权限', prop: 'role'},
{label: '创建时间', prop: 'createTime'},
{label: '更新时间', prop: 'updateTime'},
{label: '操作', prop: 'Operation'}
],
tableBody:[
tableHeader: [
{ label: '姓名', prop: 'name' },
{ label: '电话', prop: 'phone' },
{ label: '是否可用', prop: 'status' },
{ label: '用户权限', prop: 'role' },
{ label: '创建时间', prop: 'createTime' },
{ label: '更新时间', prop: 'updateTime' },
{ label: '操作', prop: 'Operation' }
],
tableBody: [
]
}
])
const Operation = ref( [ { label: '编辑', type: 'primary', icon: 'EditPen', click: editData },
{ label: '删除', type: 'danger', icon: 'Delete', click: deleteData },
{ label: '用户信息', type: 'primary', icon: 'EditPen', click: userData },
{ label: '重置密码', type: 'primary', icon: 'EditPen', click: resetData }]
)
const initTableData = (parameter) => {
const Operation = ref([{ label: '编辑', type: 'primary', icon: 'EditPen', click: editData },
{ label: '删除', type: 'danger', icon: 'Delete', click: deleteData },
{ label: '用户信息', type: 'primary', icon: 'EditPen', click: userData },
{ label: '重置密码', type: 'primary', icon: 'EditPen', click: resetData }]
)
const initTableData = (parameter) => {
staffGetPageInfoApi({
currentPageNum: parameter.currentPageNum,
currentPageSize: parameter.currentPageSize,
}).then(res => {
if(res.code === 200){
let tempData = res.data.list
tableShowData.value[0].tableBody = []
//获取未逻辑删除的数据
console.log(res.data,"--------999999999----")
tempData = tempData.filter(element => {
return element.isDeleted === 0;
});
tempData.forEach(element => {
element.status = element.status === 0 ? true : false;
element.Operation = [...Operation.value]
});
tableShowData.value[0].tableBody = tempData
tableShowData.value[0].total = res.data.total
tableShowData.value[0].pageSize = res.data.pageSize
console.log(tableShowData.value, '展示数据');
}
}).catch(err => {
message.error(err.message)
}).then(res => {
if (res.code === 200) {
let tempData = res.data.list
tableShowData.value[0].tableBody = []
//获取未逻辑删除的数据
console.log(res.data, "--------999999999----")
tempData = tempData.filter(element => {
return element.isDeleted === 0;
});
tempData.forEach(element => {
element.status = element.status === 0 ? true : false;
element.Operation = [...Operation.value]
});
tableShowData.value[0].tableBody = tempData
tableShowData.value[0].total = res.data.total
tableShowData.value[0].pageSize = res.data.pageSize
console.log(tableShowData.value, '展示数据');
}
})
}).catch(err => {
message.error(err.message)
})
}
onMounted(() => {
onMounted(() => {
// console.log(tableShowData.value, '错误');
initTableData({
currentPageNum: 1,
currentPageSize: 10,
})
})
......@@ -401,24 +399,28 @@ watch(route, () => {
padding: 10px;
}
.title{
.title {
width: 70%;
}
.card-actions {
display: flex;
flex: 1;
justify-content: space-between;
align-items: center;
/* margin-bottom: 1rem; */
height: 8%;
height: 8%;
padding: 1.5rem;
}
.operation-button {
width: 15%;
}
.card-tabs-footer {
display: flex;
......@@ -434,30 +436,36 @@ watch(route, () => {
justify-content: flex-end;
align-items: center;
}
/* 文本样式 */
.page-text {
color: #606266;
font-size: 14px;
white-space: nowrap; /* 防止文本换行 */
white-space: nowrap;
/* 防止文本换行 */
}
/* 修复 Element Plus 分页组件默认的块级布局问题 */
:deep .el-pagination {
:deep(.el-pagination) {
display: flex;
align-items: center;
margin: 0; /* 清除默认外边距 */
margin: 0;
/* 清除默认外边距 */
}
.pagination-block{
.pagination-block {
height: 8%;
}
.card-table{
.card-table {
width: 100%;
/* display: flex; */
/* background-color: #000000; */
flex:1;
flex: 1;
overflow: hidden;
border-radius: 8PX;
}
......@@ -467,7 +475,7 @@ watch(route, () => {
.left-top {
flex-direction: column;
}
.region-overview {
width: 100%;
flex: none;
......
......@@ -8,21 +8,21 @@
<!-- 区域信息概览 -->
<div class="info-card region-overview">
<div class="card-tabs">
<span class="tab-btn">历史火情统计</span>
</div>
<div class="content" >
<Uavcard :drone="drones"></Uavcard>
<span class="tab-btn">历史火情统计</span>
</div>
<div class="content">
<Uavcard :drone="drones"></Uavcard>
</div>
</div>
</div>
</div>
</main>
</div>
</template>
......@@ -96,11 +96,11 @@ const drones = ref([
// import Operation from 'ant-design-vue/es/transfer/operation';
// 定义一个名为searchShowData的ref变量,它是一个数组,数组中的每个元素都是一个对象,对象中包含了label、placeholder、type、content和options等属性
const searchShowData = ref([
{ label: '火情描述', placeholder: "请输入", type: 'input',content:'' ,isShow: true},
{ label: '火情描述', placeholder: "请输入", type: 'input',content:'' ,isShow: true},
{ label: '火情编号', placeholder: "请输入", type: 'input', content:'' ,isShow: true},
{ label: '建筑名称', placeholder: "请选择", type: 'select',content:'' ,isShow: true, options: [{label:'火灾', value:'烟雾'}, {label:'烟雾', value:'火灾'}, {label:'烟雾', value:'火灾'}] },
{ label: '建筑名称', placeholder: "请选择", type: 'select', content:'' ,isShow: true,options: [{label:'火灾1', value:'烟雾1'}, {label:'烟雾1', value:'火灾1'}, {label:'烟雾1', value:'火灾1'}] },
{ label: '火情描述', placeholder: "请输入", type: 'input', content: '', isShow: true },
{ label: '火情描述', placeholder: "请输入", type: 'input', content: '', isShow: true },
{ label: '火情编号', placeholder: "请输入", type: 'input', content: '', isShow: true },
{ label: '建筑名称', placeholder: "请选择", type: 'select', content: '', isShow: true, options: [{ label: '火灾', value: '烟雾' }, { label: '烟雾', value: '火灾' }, { label: '烟雾', value: '火灾' }] },
{ label: '建筑名称', placeholder: "请选择", type: 'select', content: '', isShow: true, options: [{ label: '火灾1', value: '烟雾1' }, { label: '烟雾1', value: '火灾1' }, { label: '烟雾1', value: '火灾1' }] },
])
// 响应式布局配置
const layoutConfig = reactive({
......@@ -117,7 +117,7 @@ const isUserInfoDialogVisible = ref(false); // 控制用户信息弹窗的显示
* 控制添加抽屉的显示状态
* @type {Ref<boolean>} - 响应式布尔值,用于控制添加抽屉的显示
*/
const isAddDrawer= ref(false)
const isAddDrawer = ref(false)
const closeAddDrawer = () => {
console.log("000000-------3-----0000000000")
// 关闭添加抽屉
......@@ -134,7 +134,7 @@ const beforCloseAddDrawer = () => {
* 当调用此方法时,会触发表格数据的重新加载
*/
const tableDataRefresh = () => {
console.log("000000-------2-----0000000000",这里获取到最新的数据)
console.log("000000-------2-----0000000000", 这里获取到最新的数据)
}
/**
* 控制编辑抽屉的显示状态
......@@ -155,7 +155,7 @@ const editData = (data) => {
isEditDrawer.value = true
// 设置要编辑的数据
rowData.value = data
console.log("000000-------1-----0000000000",data)
console.log("000000-------1-----0000000000", data)
}
/**
* 关闭编辑抽屉的方法
......@@ -172,7 +172,7 @@ const closeEditDrawer = () => {
* 显示确认对话框,用户确认后执行删除操作
*/
const deleteData = (data) => {
console.log("000000---2---------0000000000",data)
console.log("000000---2---------0000000000", data)
ElMessageBox.confirm(
'是否删除该用户?此操作将无法撤销',
'删除',
......@@ -199,42 +199,42 @@ const deleteData = (data) => {
const isResetPasswordDialogVisible = ref(false); // 控制重置密码弹窗的显示状态
const resetPasswordData = ref({});
const resetData = (data) => {
console.log("000000-----3-------0000000000",data)
console.log("000000-----3-------0000000000", data)
isResetPasswordDialogVisible.value = true;
resetPasswordData.value = data;
}
const showuserinfodata = ref({})
const userData = (data) => {
console.log("000000------4------0000000000",data)
console.log("000000------4------0000000000", data)
isUserInfoDialogVisible.value = true
showuserinfodata.value = data
}
const tableShowData = ref([{
tableHeader:[
{label: '姓名', prop: 'userName'},
{label: '电话', prop: 'phone'},
{label: '是否可用', prop: 'isUse'},
{label: '用户权限', prop: 'userPermission'},
{label: '创建时间', prop: 'createTime'},
{label: '更新时间', prop: 'updataTime'},
{label: '操作', prop: 'Operation'}
],
tableBody:[
{userName: '张三',password:"123456", phone: "15736985235",gender:'man' , isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(),remarks:"",Operation:[ {label:'编辑', type:'primary', icon:'EditPen', click:editData}, {label:'删除', type:'danger', icon:'Delete', click:deleteData}, {label:'用户信息', type:'primary', icon:'EditPen', click:userData}, {label:'重置密码', type:'primary', icon:'EditPen', click:resetData}]},
{userName: '李四',password:"123456", phone: "15736985235",gender:'man', isUse: false, userPermission: false, createTime: Date.now(), updataTime: Date.now(), remarks:"",Operation:[ {label:'编辑', type:'primary', icon:'EditPen', click:editData}, {label:'删除', type:'danger', icon:'Delete', click:deleteData}, {label:'用户信息', type:'primary', icon:'EditPen', click:userData}, {label:'重置密码', type:'primary', icon:'EditPen', click:resetData}]},
{userName: '王五',password:"123456", phone: "15736985235",gender:'man', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '赵六',password:"123456", phone: "15736985235",gender:'man', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '钱七',password:"123456", phone: "15736985235", gender:'female', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '孙八',password:"123456", phone: "15736985235", gender:'female', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '周九',password:"123456", phone: "15736985235", gender:'female' ,isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '张三', phone: "15736985235", gender:'male' ,isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '李四', phone: "15736985235", gender:'male' ,isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '王五', phone: "15736985235", gender:'male' , isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '赵六', phone: "15736985235", gender:'male' , isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '钱七', phone: "15736985235", gender:'male' ,isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '孙八', phone: "15736985235", gender:'male' ,isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
{userName: '周九', phone: "15736985235", gender:'male', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks:"" ,Operation:[]},
tableHeader: [
{ label: '姓名', prop: 'userName' },
{ label: '电话', prop: 'phone' },
{ label: '是否可用', prop: 'isUse' },
{ label: '用户权限', prop: 'userPermission' },
{ label: '创建时间', prop: 'createTime' },
{ label: '更新时间', prop: 'updataTime' },
{ label: '操作', prop: 'Operation' }
],
tableBody: [
{ userName: '张三', password: "123456", phone: "15736985235", gender: 'man', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [{ label: '编辑', type: 'primary', icon: 'EditPen', click: editData }, { label: '删除', type: 'danger', icon: 'Delete', click: deleteData }, { label: '用户信息', type: 'primary', icon: 'EditPen', click: userData }, { label: '重置密码', type: 'primary', icon: 'EditPen', click: resetData }] },
{ userName: '李四', password: "123456", phone: "15736985235", gender: 'man', isUse: false, userPermission: false, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [{ label: '编辑', type: 'primary', icon: 'EditPen', click: editData }, { label: '删除', type: 'danger', icon: 'Delete', click: deleteData }, { label: '用户信息', type: 'primary', icon: 'EditPen', click: userData }, { label: '重置密码', type: 'primary', icon: 'EditPen', click: resetData }] },
{ userName: '王五', password: "123456", phone: "15736985235", gender: 'man', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '赵六', password: "123456", phone: "15736985235", gender: 'man', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '钱七', password: "123456", phone: "15736985235", gender: 'female', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '孙八', password: "123456", phone: "15736985235", gender: 'female', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '周九', password: "123456", phone: "15736985235", gender: 'female', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '张三', phone: "15736985235", gender: 'male', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '李四', phone: "15736985235", gender: 'male', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '王五', phone: "15736985235", gender: 'male', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '赵六', phone: "15736985235", gender: 'male', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '钱七', phone: "15736985235", gender: 'male', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '孙八', phone: "15736985235", gender: 'male', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
{ userName: '周九', phone: "15736985235", gender: 'male', isUse: true, userPermission: true, createTime: Date.now(), updataTime: Date.now(), remarks: "", Operation: [] },
]
}
])
......@@ -287,31 +287,33 @@ const containerStyle = computed(() => ({
}
.region-overview {
height: 79%;
/* background-color: #000000; */
min-width: 200px;
}
.card-title{
height: 5%;
background-color:#0b07ff;
border-radius: 8px 0;
display: flex;
align-items: center;
padding: 0 1rem;
color: #ffffff;
font-size: 1.2rem;
font-weight: bold;
border-bottom: #606266 1px solid;
}
.content{
height: 95%;
background-color: #000000;
display: flex;
flex-direction: column;
gap: 1rem;
padding: 0.5rem;
overflow: auto;
height: 79%;
/* background-color: #000000; */
min-width: 200px;
}
.card-title {
height: 5%;
background-color: #0b07ff;
border-radius: 8px 0;
display: flex;
align-items: center;
padding: 0 1rem;
color: #ffffff;
font-size: 1.2rem;
font-weight: bold;
border-bottom: #606266 1px solid;
}
.content {
height: 95%;
background-color: #000000;
display: flex;
flex-direction: column;
gap: 1rem;
padding: 0.5rem;
overflow: auto;
}
/* 统计卡片样式 */
......@@ -351,24 +353,28 @@ const containerStyle = computed(() => ({
padding: 10px;
}
.title{
.title {
width: 70%;
}
.card-actions {
display: flex;
flex: 1;
justify-content: space-between;
align-items: center;
/* margin-bottom: 1rem; */
height: 8%;
height: 8%;
padding: 1.5rem;
}
.operation-button {
width: 15%;
}
.card-tabs-footer {
display: flex;
......@@ -384,30 +390,36 @@ const containerStyle = computed(() => ({
justify-content: flex-end;
align-items: center;
}
/* 文本样式 */
.page-text {
color: #606266;
font-size: 14px;
white-space: nowrap; /* 防止文本换行 */
white-space: nowrap;
/* 防止文本换行 */
}
/* 修复 Element Plus 分页组件默认的块级布局问题 */
:deep .el-pagination {
:deep(.el-pagination) {
display: flex;
align-items: center;
margin: 0; /* 清除默认外边距 */
margin: 0;
/* 清除默认外边距 */
}
.pagination-block{
.pagination-block {
height: 8%;
}
.card-table{
.card-table {
width: 100%;
/* display: flex; */
/* background-color: #000000; */
flex:1;
flex: 1;
overflow: hidden;
border-radius: 8PX;
}
......@@ -417,7 +429,7 @@ const containerStyle = computed(() => ({
.left-top {
flex-direction: column;
}
.region-overview {
width: 100%;
flex: none;
......
......@@ -7,21 +7,25 @@
<div class="left-top">
<!-- 区域信息概览 -->
<div class="info-card region-overview">
<searchtop :searchShowData="searchShowData" ></searchtop>
<searchtop :searchShowData="searchShowData"></searchtop>
</div>
</div>
<!-- 左侧下部分:统计区域 -->
<div class="info-card stats-alerts">
<div class="card-tabs">
<span class="title" >用户列表</span>
<span class="title">用户列表</span>
<div class="card-actions">
<el-button class="operation-button" type="primary" size="small" style="width: 15%;">导入</el-button>
<el-button class="operation-button" type="primary" size="small" style="width: 15%;">导入</el-button>
<el-button class="operation-button" type="primary" size="small">导出</el-button>
<el-button class="operation-button" type="primary" size="small" @click="handleAddInfoFn">新增</el-button>
<el-button class="operation-button" type="primary" size="small" @click="tableDataRefresh"><el-icon><RefreshRight /></el-icon></el-button>
<el-button class="operation-button" type="primary" size="small"><el-icon><FullScreen /></el-icon></el-button>
<el-button class="operation-button" type="primary" size="small" @click="tableDataRefresh"><el-icon>
<RefreshRight />
</el-icon></el-button>
<el-button class="operation-button" type="primary" size="small"><el-icon>
<FullScreen />
</el-icon></el-button>
</div>
</div>
<div class="card-table">
......@@ -32,7 +36,7 @@
</div>
</main>
</div>
</template>
......@@ -48,9 +52,9 @@ import { message } from 'ant-design-vue';
// import Operation from 'ant-design-vue/es/transfer/operation';
// 定义一个名为searchShowData的ref变量,它是一个数组,数组中的每个元素都是一个对象,对象中包含了label、placeholder、type、content和options等属性
const searchShowData = ref([
{ label: '用户姓名', placeholder: "请输入", type: 'input',content:'',isShow: true },
{ label: '用户状态', placeholder: "请选择", type: 'select',content:'' ,isShow: true, options: [{label:'启用', value:'启用'}, {label:'禁用', value:'禁用'}] },
{ label: '用户角色', placeholder: "请选择", type: 'select', content:'',isShow: true ,options: [{label:'管理员', value:'管理员'}, {label:'巡查员', value:'巡查员'}]},
{ label: '用户姓名', placeholder: "请输入", type: 'input', content: '', isShow: true },
{ label: '用户状态', placeholder: "请选择", type: 'select', content: '', isShow: true, options: [{ label: '启用', value: '启用' }, { label: '禁用', value: '禁用' }] },
{ label: '用户角色', placeholder: "请选择", type: 'select', content: '', isShow: true, options: [{ label: '管理员', value: '管理员' }, { label: '巡查员', value: '巡查员' }] },
])
// 响应式布局配置
const layoutConfig = reactive({
......@@ -67,7 +71,7 @@ const isUserInfoDialogVisible = ref(false); // 控制用户信息弹窗的显示
* 控制添加抽屉的显示状态
* @type {Ref<boolean>} - 响应式布尔值,用于控制添加抽屉的显示
*/
const isAddDrawer= ref(false)
const isAddDrawer = ref(false)
const closeAddDrawer = () => {
console.log("000000-------3-----0000000000")
// 关闭添加抽屉
......@@ -106,7 +110,7 @@ const editData = (data) => {
// 设置要编辑的数据
rowData.value = data
console.log("000000-------1-----0000000000",data)
console.log("000000-------1-----0000000000", data)
}
/**
* 关闭编辑抽屉的方法
......@@ -124,7 +128,7 @@ const closeEditDrawer = () => {
* 显示确认对话框,用户确认后执行删除操作
*/
const deleteData = (data) => {
console.log("000000---2---------0000000000",data)
console.log("000000---2---------0000000000", data)
ElMessageBox.confirm(
'删除操作不可逆,是否继续?',
'删除',
......@@ -136,20 +140,20 @@ const deleteData = (data) => {
}
)
.then(() => {
console.log("000000---1-456464564------0000000000","我是确认")
try {
const res = staffRemoveInfoApi({id:data.id});
if (res.code === 200) {
ElMessage({ type: 'success', message: '已删除' });
tableDataRefresh();
} else {
ElMessage({ type: 'error', message: '删除失败:' + res.msg });
}
} catch (err) {
// API 请求失败时在此捕获,不向上冒泡
ElMessage({ type: 'error', message: '删除失败(网络错误)' });
// console.error('删除接口失败:', err);
}
console.log("000000---1-456464564------0000000000", "我是确认")
try {
const res = staffRemoveInfoApi({ id: data.id });
if (res.code === 200) {
ElMessage({ type: 'success', message: '已删除' });
tableDataRefresh();
} else {
ElMessage({ type: 'error', message: '删除失败:' + res.msg });
}
} catch (err) {
// API 请求失败时在此捕获,不向上冒泡
ElMessage({ type: 'error', message: '删除失败(网络错误)' });
// console.error('删除接口失败:', err);
}
})
.catch(() => {
......@@ -184,20 +188,20 @@ const closeResetPasswordDialogFn = () => {
}
const resetPasswordData = ref({});
const resetData = (data) => {
console.log("000000-----3-------0000000000",data)
console.log("000000-----3-------0000000000", data)
isResetPasswordDialogVisible.value = true;
resetPasswordData.value = data;
}
const showuserinfodata = ref({})
const userData = (data) => {
console.log("000000------4------0000000000",data)
console.log("000000------4------0000000000", data)
isUserInfoDialogVisible.value = true
showuserinfodata.value = data
}
const uavseedetails = (data) => {
console.log(data,'---------5---------')
const uavseedetails = (data) => {
console.log(data, '---------5---------')
// router.push({
// path: '/dialog_infoShow_img_vid/uavseedetails',
// query: { data: JSON.stringify(data) },
......@@ -205,29 +209,29 @@ const uavseedetails = (data) => {
}
const tableShowData = ref([{
tableHeader:[
{label: '序号', prop: 'id'},
{label: '无人机编号', prop: 'uavid'},
{label: '无人机机型', prop: 'uavtype'},
{label: '无人机状态', prop: 'uavstate'},
{label: '无人机载弹数量', prop: 'uavpayloadcapacity'},
{label: '上次维护时间', prop: 'premaintenancetime'},
{label: '弹药信息', prop: 'ammunitioninfo'},
{label: '操作', prop: 'Operation'}
],
tableBody:[
{id: 1, uavid: 'UAV-0001', uavtype: 'UAV-M100', uavstate: '正常', uavpayloadcapacity: '10', premaintenancetime: '2023-05-01', ammunitioninfo: '弹药数量:1000',Operation:[ { label: '查看详情', type: 'primary', icon: 'EditPen', click: uavseedetails }]}
tableHeader: [
{ label: '序号', prop: 'id' },
{ label: '无人机编号', prop: 'uavid' },
{ label: '无人机机型', prop: 'uavtype' },
{ label: '无人机状态', prop: 'uavstate' },
{ label: '无人机载弹数量', prop: 'uavpayloadcapacity' },
{ label: '上次维护时间', prop: 'premaintenancetime' },
{ label: '弹药信息', prop: 'ammunitioninfo' },
{ label: '操作', prop: 'Operation' }
],
tableBody: [
{ id: 1, uavid: 'UAV-0001', uavtype: 'UAV-M100', uavstate: '正常', uavpayloadcapacity: '10', premaintenancetime: '2023-05-01', ammunitioninfo: '弹药数量:1000', Operation: [{ label: '查看详情', type: 'primary', icon: 'EditPen', click: uavseedetails }] }
]
}
])
const Operation = ref( [ { label: '查看详情', type: 'primary', icon: 'EditPen', click: uavseedetails }])
const initTableData = () => {
const Operation = ref([{ label: '查看详情', type: 'primary', icon: 'EditPen', click: uavseedetails }])
const initTableData = () => {
// 这里要使用无人机列表接口
// staffGetPageInfoApi({
// "currentPageNum": 1,
// "currentPageSize": 10,
// }).then(res => {
// if(res.code === 200){
// let tempData = res.data.list
......@@ -237,26 +241,26 @@ const initTableData = () => {
// tempData = tempData.filter(element => {
// return element.isDeleted === 0;
// });
// tempData.forEach(element => {
// element.Operation = [...Operation.value]
// });
// tableShowData.value[0].tableBody = tempData
// tableShowData.value[0].total = res.data.total
// tableShowData.value[0].pageSize = res.data.pageSize
// console.log(tableShowData.value, '展示数据');
// }
// }).catch(err => {
// message.error(err.message)
// })
}
onMounted(() => {
onMounted(() => {
// console.log(tableShowData.value, '错误');
initTableData()
})
......@@ -332,24 +336,28 @@ const containerStyle = computed(() => ({
padding: 10px;
}
.title{
.title {
width: 70%;
}
.card-actions {
display: flex;
flex: 1;
justify-content: space-between;
align-items: center;
/* margin-bottom: 1rem; */
height: 8%;
height: 8%;
padding: 1.5rem;
}
.operation-button {
width: 15%;
}
.card-tabs-footer {
display: flex;
......@@ -365,30 +373,36 @@ const containerStyle = computed(() => ({
justify-content: flex-end;
align-items: center;
}
/* 文本样式 */
.page-text {
color: #606266;
font-size: 14px;
white-space: nowrap; /* 防止文本换行 */
white-space: nowrap;
/* 防止文本换行 */
}
/* 修复 Element Plus 分页组件默认的块级布局问题 */
:deep .el-pagination {
:deep(.el-pagination) {
display: flex;
align-items: center;
margin: 0; /* 清除默认外边距 */
margin: 0;
/* 清除默认外边距 */
}
.pagination-block{
.pagination-block {
height: 8%;
}
.card-table{
.card-table {
width: 100%;
/* display: flex; */
/* background-color: #000000; */
flex:1;
flex: 1;
overflow: hidden;
border-radius: 8PX;
}
......@@ -398,7 +412,7 @@ const containerStyle = computed(() => ({
.left-top {
flex-direction: column;
}
.region-overview {
width: 100%;
flex: none;
......
......@@ -5,7 +5,7 @@ import AutoImport from 'unplugin-auto-import/vite';
// https://vite.dev/config/
export default defineConfig({
plugins: [vue(),
AutoImport({
dts: './auto-imports.d.ts', // 项目根目录生成auto-imports.d.ts配置文件
......@@ -25,7 +25,7 @@ export default defineConfig({
open: true,//自动在默认浏览器上打开
proxy: {
'/api': {
target: 'http://117.89.29.251:18083/api', //test----------------------尾部214,2,31,12,11都可以,登不上时换个试试
target: 'http://117.89.29.251:18083/api', //
// target: 'http://172.16.34.76:18088',
ws: false,//代理websocked
changeOrigin: true, //是否跨域
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论