新增培训:实现空间资源P0能力

This commit is contained in:
wangzhibiao committed 2026-09-14 11:57:38 +08:00
1 parent 7fcaea29b8
commit 7fb47716d1
22 files changed
+1299 -469

No files matched your search

+74 -106
View File
@@ -1,6 +1,6 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true" label-width="68px">
<el-form-item label="教室名称" prop="roomName">
<el-input
v-model="queryParams.roomName"
@@ -17,21 +17,12 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="容纳人数" prop="capacity">
<el-input
v-model="queryParams.capacity"
placeholder="请输入容纳人数"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="创建管理员账号" prop="createUser">
<el-input
v-model="queryParams.createUser"
placeholder="请输入创建管理员账号"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item label="教室状态" prop="roomStatus">
<el-select v-model="queryParams.roomStatus" placeholder="教室状态" clearable>
<el-option label="正在使用" :value="0" />
<el-option label="可用空闲" :value="1" />
<el-option label="维护中" :value="2" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -42,74 +33,55 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['train:classroom:edit']"
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['train:info:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['train:classroom:edit']"
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['train:info:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['train:info:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['train:info:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
</el-row>
<el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" :data="classroomList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="教室ID主键" align="center" prop="classRoomId" />
<el-table-column label="教室ID" align="center" prop="classRoomId" :show-overflow-tooltip="true" />
<el-table-column label="教室名称" align="center" prop="roomName" />
<el-table-column label="教室位置" align="center" prop="roomLocation" />
<el-table-column label="容纳人数" align="center" prop="capacity" />
<el-table-column label="0 正在使用 1 可用,空闲 2 其他" align="center" prop="roomStatus" />
<el-table-column label="创建管理员账号" align="center" prop="createUser" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="核定容纳人数" align="center" prop="capacity">
<template slot-scope="scope">
<el-tag type="info">{{ scope.row.capacity }} 人</el-tag>
</template>
</el-table-column>
<el-table-column label="教室状态" align="center" prop="roomStatus">
<template slot-scope="scope">
<el-tag v-if="scope.row.roomStatus === 1" type="success">可用空闲</el-tag>
<el-tag v-else-if="scope.row.roomStatus === 0" type="danger">正在使用</el-tag>
<el-tag v-else type="info">维护中</el-tag>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['train:classroom:edit']"
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['train:info:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['train:info:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
@@ -123,22 +95,26 @@
/>
<!-- 添加或修改教室信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-dialog :title="title" :visible.sync="open" width="520px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="教室名称" prop="roomName">
<el-input v-model="form.roomName" placeholder="请输入教室名称" />
<el-input v-model="form.roomName" placeholder="请输入教室名称" maxlength="60" />
</el-form-item>
<el-form-item label="教室位置" prop="roomLocation">
<el-input v-model="form.roomLocation" placeholder="请输入教室位置" />
<el-input v-model="form.roomLocation" placeholder="请输入教室位置" maxlength="100" />
</el-form-item>
<el-form-item label="容纳人数" prop="capacity">
<el-input v-model="form.capacity" placeholder="请输入容纳人数" />
<el-input-number v-model="form.capacity" :min="1" :max="10000" placeholder="容纳人数" style="width: 100%" />
</el-form-item>
<el-form-item label="创建管理员账号" prop="createUser">
<el-input v-model="form.createUser" placeholder="请输入创建管理员账号" />
<el-form-item label="教室状态" prop="roomStatus">
<el-radio-group v-model="form.roomStatus">
<el-radio :label="1">可用空闲</el-radio>
<el-radio :label="0">正在使用</el-radio>
<el-radio :label="2">维护中</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" maxlength="500" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -150,10 +126,10 @@
</template>
<script>
import { listInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/train/info"
import { listClassroom, getClassroom, addClassroom, updateClassroom } from '@/api/train/classroom'
export default {
name: "Info",
name: 'Classroom',
data() {
return {
// 遮罩层
@@ -169,9 +145,9 @@ export default {
// 总条数
total: 0,
// 教室信息表格数据
infoList: [],
classroomList: [],
// 弹出层标题
title: "",
title: '',
// 是否显示弹出层
open: false,
// 查询参数
@@ -181,19 +157,30 @@ export default {
roomName: null,
roomLocation: null,
capacity: null,
roomStatus: null,
createUser: null,
roomStatus: null
},
// 表单参数
form: {},
// 表单校验
rules: {
roomName: [
{ required: true, message: "教室名称不能为空", trigger: "blur" }
],
createUser: [
{ required: true, message: "创建管理员账号不能为空", trigger: "blur" }
{ required: true, message: '教室名称不能为空', trigger: 'blur' }
],
capacity: [
{ required: true, message: '容纳人数不能为空', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback(new Error('容纳人数不能为空'))
} else if (Number(value) <= 0) {
callback(new Error('容纳人数必须大于0'))
} else {
callback()
}
},
trigger: ['blur', 'change']
}
]
}
}
},
@@ -204,8 +191,8 @@ export default {
/** 查询教室信息列表 */
getList() {
this.loading = true
listInfo(this.queryParams).then(response => {
this.infoList = response.rows
listClassroom(this.queryParams).then(response => {
this.classroomList = response.rows
this.total = response.total
this.loading = false
})
@@ -221,14 +208,11 @@ export default {
classRoomId: null,
roomName: null,
roomLocation: null,
capacity: null,
roomStatus: null,
createUser: null,
createTime: null,
updateTime: null,
capacity: 50,
roomStatus: 1,
remark: null
}
this.resetForm("form")
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
@@ -237,66 +221,50 @@ export default {
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm")
this.resetForm('queryForm')
this.handleQuery()
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.classRoomId)
this.single = selection.length!==1
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
this.open = true
this.title = "添加教室信息"
this.title = '添加教室信息'
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const classRoomId = row.classRoomId || this.ids
getInfo(classRoomId).then(response => {
getClassroom(classRoomId).then(response => {
this.form = response.data
this.open = true
this.title = "修改教室信息"
this.title = '修改教室信息'
})
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.classRoomId != null) {
updateInfo(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
updateClassroom(this.form).then(response => {
this.$modal.msgSuccess('修改成功')
this.open = false
this.getList()
})
} else {
addInfo(this.form).then(response => {
this.$modal.msgSuccess("新增成功")
addClassroom(this.form).then(response => {
this.$modal.msgSuccess('新增成功')
this.open = false
this.getList()
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const classRoomIds = row.classRoomId || this.ids
this.$modal.confirm('是否确认删除教室信息编号为"' + classRoomIds + '"的数据项?').then(function() {
return delInfo(classRoomIds)
}).then(() => {
this.getList()
this.$modal.msgSuccess("删除成功")
}).catch(() => {})
},
/** 导出按钮操作 */
handleExport() {
this.download('train/info/export', {
...this.queryParams
}, `info_${new Date().getTime()}.xlsx`)
}
}
}
+68 -104
View File
@@ -1,7 +1,7 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="实训场地名称" prop="siteName">
<el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true" label-width="68px">
<el-form-item label="场地名称" prop="siteName">
<el-input
v-model="queryParams.siteName"
placeholder="请输入实训场地名称"
@@ -17,21 +17,11 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="最大容纳人数" prop="capacity">
<el-input
v-model="queryParams.capacity"
placeholder="请输入最大容纳人数"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="创建管理员账号" prop="createUser">
<el-input
v-model="queryParams.createUser"
placeholder="请输入创建管理员账号"
clearable
@keyup.enter.native="handleQuery"
/>
<el-form-item label="场地状态" prop="siteStatus">
<el-select v-model="queryParams.siteStatus" placeholder="场地状态" clearable>
<el-option label="可用" :value="1" />
<el-option label="停用" :value="0" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@@ -42,75 +32,55 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['train:site:edit']"
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['train:site:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['train:site:edit']"
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['train:site:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['train:site:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['train:site:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
</el-row>
<el-table v-loading="loading" :data="siteList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="实训场地ID主键" align="center" prop="siteId" />
<el-table-column label="场地ID" align="center" prop="siteId" :show-overflow-tooltip="true" />
<el-table-column label="实训场地名称" align="center" prop="siteName" />
<el-table-column label="场地位置" align="center" prop="siteLocation" />
<el-table-column label="最大容纳人数" align="center" prop="capacity" />
<el-table-column label="场地配套设备:VR、3D拆解、3D巡检设备" align="center" prop="siteDevice" />
<el-table-column label="0 停用 1 可用" align="center" prop="siteStatus" />
<el-table-column label="创建管理员账号" align="center" prop="createUser" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="最大容纳人数" align="center" prop="capacity">
<template slot-scope="scope">
<el-tag type="info">{{ scope.row.capacity }} 人</el-tag>
</template>
</el-table-column>
<el-table-column label="配套设备描述" align="center" prop="siteDevice" :show-overflow-tooltip="true" />
<el-table-column label="场地状态" align="center" prop="siteStatus">
<template slot-scope="scope">
<el-tag v-if="scope.row.siteStatus === 1" type="success">可用</el-tag>
<el-tag v-else type="danger">停用</el-tag>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
v-hasPermi="['train:site:edit']"
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['train:site:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['train:site:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
@@ -124,25 +94,28 @@
/>
<!-- 添加或修改实训场地对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-dialog :title="title" :visible.sync="open" width="520px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-form-item label="实训场地名称" prop="siteName">
<el-input v-model="form.siteName" placeholder="请输入实训场地名称" />
<el-input v-model="form.siteName" placeholder="请输入实训场地名称 (如 VR演练区)" maxlength="80" />
</el-form-item>
<el-form-item label="场地位置" prop="siteLocation">
<el-input v-model="form.siteLocation" placeholder="请输入场地位置" />
<el-input v-model="form.siteLocation" placeholder="请输入场地位置" maxlength="100" />
</el-form-item>
<el-form-item label="最大容纳人数" prop="capacity">
<el-input v-model="form.capacity" placeholder="请输入最大容纳人数" />
<el-input-number v-model="form.capacity" :min="1" :max="10000" placeholder="最大容纳人数" style="width: 100%" />
</el-form-item>
<el-form-item label="场地配套设备:VR、3D拆解、3D巡检设备" prop="siteDevice">
<el-input v-model="form.siteDevice" type="textarea" placeholder="请输入内容" />
<el-form-item label="场地配套设备" prop="siteDevice">
<el-input v-model="form.siteDevice" type="textarea" placeholder="例如:VR头显12套、3D数字孪生演练台等" :rows="3" />
</el-form-item>
<el-form-item label="创建管理员账号" prop="createUser">
<el-input v-model="form.createUser" placeholder="请输入创建管理员账号" />
<el-form-item label="场地状态" prop="siteStatus">
<el-radio-group v-model="form.siteStatus">
<el-radio :label="1">可用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" maxlength="500" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -154,10 +127,10 @@
</template>
<script>
import { listSite, getSite, delSite, addSite, updateSite } from "@/api/train/site"
import { listSite, getSite, addSite, updateSite } from '@/api/train/site'
export default {
name: "Site",
name: 'TrainingSite',
data() {
return {
// 遮罩层
@@ -175,7 +148,7 @@ export default {
// 实训场地表格数据
siteList: [],
// 弹出层标题
title: "",
title: '',
// 是否显示弹出层
open: false,
// 查询参数
@@ -185,20 +158,30 @@ export default {
siteName: null,
siteLocation: null,
capacity: null,
siteDevice: null,
siteStatus: null,
createUser: null,
siteStatus: null
},
// 表单参数
form: {},
// 表单校验
rules: {
siteName: [
{ required: true, message: "实训场地名称不能为空", trigger: "blur" }
],
createUser: [
{ required: true, message: "创建管理员账号不能为空", trigger: "blur" }
{ required: true, message: '实训场地名称不能为空', trigger: 'blur' }
],
capacity: [
{ required: true, message: '最大容纳人数不能为空', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (value === undefined || value === null || value === '') {
callback(new Error('最大容纳人数不能为空'))
} else if (Number(value) <= 0) {
callback(new Error('最大容纳人数必须大于0'))
} else {
callback()
}
},
trigger: ['blur', 'change']
}
]
}
}
},
@@ -226,15 +209,12 @@ export default {
siteId: null,
siteName: null,
siteLocation: null,
capacity: null,
capacity: 30,
siteDevice: null,
siteStatus: null,
createUser: null,
createTime: null,
updateTime: null,
siteStatus: 1,
remark: null
}
this.resetForm("form")
this.resetForm('form')
},
/** 搜索按钮操作 */
handleQuery() {
@@ -243,20 +223,20 @@ export default {
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm")
this.resetForm('queryForm')
this.handleQuery()
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.siteId)
this.single = selection.length!==1
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
this.open = true
this.title = "添加实训场地"
this.title = '添加实训场地'
},
/** 修改按钮操作 */
handleUpdate(row) {
@@ -265,44 +245,28 @@ export default {
getSite(siteId).then(response => {
this.form = response.data
this.open = true
this.title = "修改实训场地"
this.title = '修改实训场地'
})
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.siteId != null) {
updateSite(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.$modal.msgSuccess('修改成功')
this.open = false
this.getList()
})
} else {
addSite(this.form).then(response => {
this.$modal.msgSuccess("新增成功")
this.$modal.msgSuccess('新增成功')
this.open = false
this.getList()
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const siteIds = row.siteId || this.ids
this.$modal.confirm('是否确认删除实训场地编号为"' + siteIds + '"的数据项?').then(function() {
return delSite(siteIds)
}).then(() => {
this.getList()
this.$modal.msgSuccess("删除成功")
}).catch(() => {})
},
/** 导出按钮操作 */
handleExport() {
this.download('train/site/export', {
...this.queryParams
}, `site_${new Date().getTime()}.xlsx`)
}
}
}