YZProjectCloud/yanzhu-ui-vue3/src/views/device/towerProjectConfig/index.vue

481 lines
21 KiB
Vue
Raw Normal View History

2025-03-19 21:59:22 +08:00
<template>
<div class="app-container tower-project-config">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="68px">
<el-form-item label="项目名称" prop="projectId">
<el-select v-model="queryParams.projectId" :disabled="currentPrjId ? true : false" filterable
placeholder="请选择所属项目" style="width: 200px">
<el-option v-for="item in projects" :key="item.id" :label="item.projectName" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="queryParams.deviceName" placeholder="请输入设备名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="设备序号" prop="deviceSn">
<el-input v-model="queryParams.deviceSn" placeholder="请输入设备序列号" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="small" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" size="small" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="small" @click="handleAdd"
v-hasPermi="['device:towerProjectConfig:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="small" :disabled="single"
@click="handleUpdate" v-hasPermi="['device:towerProjectConfig:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="small" :disabled="multiple"
@click="handleDelete" v-hasPermi="['device:towerProjectConfig:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="small" @click="handleExport"
v-hasPermi="['device:towerProjectConfig:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="towerProjectConfigList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="项目名称" align="center" prop="projectName" width="150"
v-if="currentPrjId ? false : true" />
<el-table-column label="设备名称" align="center" prop="deviceName" width="150" />
<el-table-column label="设备序号" align="center" prop="deviceSn" width="150" />
<el-table-column label="塔机类型" align="center" prop="towerType">
<template #default="scope">
<dict-tag :options="dict.device_tower_type" :value="scope.row.towerType" />
</template>
</el-table-column>
<el-table-column label="设备厂商" align="center" prop="deviceSource" />
<el-table-column label="塔机坐标x" align="center" prop="coordinateX" width="100" />
<el-table-column label="塔机坐标y" align="center" prop="coordinateY" width="100" />
<el-table-column label="前臂长度" align="center" prop="frontBrachium" />
<el-table-column label="平衡臂长度" align="center" prop="afterBrachium" width="100" />
<el-table-column label="塔身高度" align="center" prop="towerBodyHeight" />
<el-table-column label="塔帽高度" align="center" prop="towerCapHeight" />
<el-table-column label="塔节高度" align="center" prop="towerSectionHeight" />
<el-table-column label="司机" align="center">
<template #default="scope">
<div>{{ scope.row.driName }}</div>
<div>{{ scope.row.driPhone }}</div>
</template>
</el-table-column>
<el-table-column label="安全员" align="center">
<template #default="scope">
<div>{{ scope.row.safName }}</div>
<div>{{ scope.row.safPhone }}</div>
</template>
</el-table-column>
<el-table-column label="塔机状态" align="center" prop="online">
<template #default="scope">
<dict-tag :options="dict.project_video_signal_state" :value="scope.row.online" />
</template>
</el-table-column>
<el-table-column label="启用状态" align="center" prop="isDel" width="80">
<template #default="scope">
<el-switch v-model="scope.row.isDel" active-value="0" inactive-value="1"
@change="setStatus(scope.row, $event)"></el-switch>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="160">
<template #default="scope">
<span>{{ parseTime(scope.row.updateTime, "{y}-{m}-{d} {h}:{i}") }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100" fixed="right">
<template #default="scope">
<el-button size="small" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['device:towerProjectConfig:edit']">修改</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page="queryParams.pageNum" :limit="queryParams.pageSize"
@pagination="getList" />
<!-- 添加或修改塔基检测配置对话框 -->
<el-dialog :title="title" v-model="open" width="960px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="12">
<el-form-item label="所属项目" prop="projectId">
<el-select v-model="form.projectId" :disabled="currentPrjId ? true : false" filterable
placeholder="请选择所属项目" style="width: 100%">
<el-option v-for="item in projects" :key="item.id" :label="item.projectName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="form.deviceName" placeholder="请输入设备名称" maxlength="32" show-word-limit />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="设备序列号" prop="deviceSn">
<el-input v-model="form.deviceSn" placeholder="请输入设备序列号" maxlength="32" show-word-limit />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备厂商" prop="deviceSource">
<el-input v-model="form.deviceSource" placeholder="请输入设备厂商" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="塔机司机" prop="driName">
<el-input v-model="form.driName" placeholder="请输入塔机司机" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="司机电话" prop="driPhone">
<el-input v-model="form.driPhone" placeholder="请输入司机电话" />
</el-form-item>
</el-col></el-row>
<el-row>
<el-col :span="12">
<el-form-item label="安全员" prop="safName">
<el-input v-model="form.safName" placeholder="请输入安全员" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="安全员电话" prop="safPhone">
<el-input v-model="form.safPhone" placeholder="请输入安全员电话" />
</el-form-item>
</el-col>
</el-row>
<el-alert title="温馨提示:" type="warning" description="以下数据在设备运行过程中,不定时更新。无需填写,填写后会被定时覆盖!!!" show-icon>
</el-alert>
<el-row>
<el-col :span="12">
<el-form-item label="塔机类型" prop="towerType" style="margin-top: 16px;">
<el-select v-model="form.towerType" placeholder="请选择塔机类型" style="width:100%">
<el-option v-for="dict in dict.device_tower_type" :key="dict.value" :label="dict.label"
:value="parseInt(dict.value)"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="塔机坐标x" prop="coordinateX">
<el-input v-model="form.coordinateX" placeholder="请输入塔机坐标x" />
</el-form-item>
</el-col></el-row>
<el-row>
<el-col :span="12">
<el-form-item label="塔机坐标y" prop="coordinateY">
<el-input v-model="form.coordinateY" placeholder="请输入塔机坐标y" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="前臂长度" prop="frontBrachium">
<el-input v-model="form.frontBrachium" placeholder="请输入前臂长度" />
</el-form-item>
</el-col></el-row>
<el-row>
<el-col :span="12">
<el-form-item label="平衡臂长度" prop="afterBrachium">
<el-input v-model="form.afterBrachium" placeholder="请输入平衡臂长度" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="塔身高度" prop="towerBodyHeight">
<el-input v-model="form.towerBodyHeight" placeholder="请输入塔身高度" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="塔帽高度" prop="towerCapHeight">
<el-input v-model="form.towerCapHeight" placeholder="请输入塔帽高度" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="塔节高度" prop="towerSectionHeight">
<el-input v-model="form.towerSectionHeight" placeholder="请输入塔节高度" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot-slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
listTowerProjectConfig,
getTowerProjectConfig,
delTowerProjectConfig,
addTowerProjectConfig,
updateTowerProjectConfig,
} from "@/api/device/towerProjectConfig";
import useUserStore from '@/store/modules/user'
import { findMyProjectList } from "@/api/publics";
export default {
name: "TowerProjectConfig",
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 塔基检测配置表格数据
towerProjectConfigList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
projectId: null,
projectName: null,
comtId: null,
comName: null,
deviceSn: null,
deviceSource: null,
towerType: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
projectId: [{ required: true, message: "请选择所属项目", trigger: "change" }],
deptId: [{ required: true, message: "请选择所属单位", trigger: "change" }],
deviceName: [
{ required: true, message: "设备名称不能为空", trigger: "blur" },
],
deviceSn: [
{ required: true, message: "设备序列表不能为空", trigger: "blur" },
{ max: 64, message: "最多输入64个字符" },
],
},
projectOptions: [],
deptOptions: [],
dict: {
sys_common_isdel: [],
device_tower_type: [],
project_video_signal_state: []
},
userStore: {},
isAdmin: false,
projects: [],
currentPrjId: null,
};
},
created() {
this.getList();
this.dict = this.useDict('sys_common_isdel', 'device_tower_type', 'project_video_signal_state');
this.userStore = useUserStore()
this.isAdmin = this.userStore.isAdmin;
this.queryParams.projectId = this.userStore.currentPrjId;
this.queryParams.comId = this.userStore.currentComId;
this.currentPrjId = this.userStore.currentPrjId;
this.getProjectList();
},
methods: {
/** 查询项目列表 */
getProjectList() {
findMyProjectList({ pageNum: 1, pageSize: 100 }).then(response => {
this.projects = response.rows;
});
},
projectChange(val) {
this.form.deptId = null;
// 根据项目查询总包单位
this.initDept(val);
},
initDept(val) {
this.$api.publics
.queryUnitList({
projectId: val,
unitType: 2,
})
.then((d) => {
this.deptOptions = d.rows;
if (d.rows.length > 0) {
// 有总包单位
} else {
this.$message.error("当前项目未分配总包单位!");
}
});
},
/** 查询塔基检测配置列表 */
getList() {
this.loading = true;
listTowerProjectConfig(this.queryParams).then((response) => {
this.towerProjectConfigList = response.rows;
this.total = response.total;
setTimeout(() => {
this.loading = false;
}, 800);
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
projectId: null,
deptId: null,
deviceSn: null,
deviceSource: null,
towerType: null,
coordinateX: null,
coordinateY: null,
frontBrachium: null,
afterBrachium: null,
towerBodyHeight: null,
towerCapHeight: null,
towerSectionHeight: null,
driName: null,
driPhone: null,
safName: null,
safPhone: null,
isDel: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.form.comId = this.userStore.currentComId;
this.form.projectId = this.userStore.currentPrjId;
this.open = true;
this.title = "添加塔基检测配置";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids;
getTowerProjectConfig(id).then((response) => {
this.form = response.data;
this.form.towerType = this.form.towerType ? 1 * this.form.towerType : '';
this.open = true;
this.title = "修改塔基检测配置";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != null) {
updateTowerProjectConfig(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addTowerProjectConfig(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除塔基检测配置编号为"' + ids + '"的数据项?')
.then(function () {
return delTowerProjectConfig(ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => { });
},
/** 导出按钮操作 */
handleExport() {
this.download(
"device/towerProjectConfig/export",
{
...this.queryParams,
},
`towerProjectConfig_${new Date().getTime()}.xlsx`
);
},
//修改塔吊配置状态
setStatus(row, val) {
if (this.loading) {
return
}
this.$confirm(`是否确认${val == 0 ? "启用" : "停用"}当前数据配置?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(async () => {
delTowerProjectConfig(row.id).then((response) => {
this.$modal.msgSuccess("修改成功");
this.getList();
});
})
.catch(() => {
// 取消时恢复原始开关状态
if (val == "0") {
row.isDel = "1";
} else {
row.isDel = "0";
}
});
},
},
}
</script>
<style lang="scss">
.tower-project-config {}
</style>