| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505 |
- <template>
- <!-- 筛选条件 -->
- <div class="app-container">
- <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
- <el-form-item label="设备名" prop="equipmentName">
- <el-input v-model="queryParams.equipmentName" placeholder="请输入设备名" clearable @keyup.enter="handleQuery" />
- </el-form-item>
- <el-form-item label="标识码" prop="code">
- <el-input v-model="queryParams.code" placeholder="请输入标识码" clearable @keyup.enter="handleQuery" />
- </el-form-item>
- <el-form-item label="设备种类" prop="equipmentType">
- <el-select v-model="queryParams.equipmentType" placeholder="请选择设备种类" clearable style="width: 150px;">
- <el-option v-for="dict in equipment_type" :key="dict.value" :label="dict.label" :value="dict.value" />
- </el-select>
- </el-form-item>
- <el-form-item label="PLC选择" prop="plcId">
- <el-select v-model="queryParams.plcId" placeholder="请选择PLC" clearable style="width: 150px;">
- <el-option v-for="dict in plcOptions" :key="dict.plcId" :label="dict.plcName" :value="dict.plcId" />
- </el-select>
- </el-form-item>
- <el-form-item label="通讯协议" prop="protocolId">
- <el-select v-model="queryParams.protocolId" placeholder="请选择通讯协议" clearable style="width: 150px;">
- <el-option v-for="dict in commProtocolOptions" :key="dict.protocolId" :label="dict.protocolName"
- :value="dict.protocolId" />
- </el-select>
- </el-form-item>
- <el-form-item label="流程选择" prop="flowIds">
- <el-select v-model="queryParams.flowIds" placeholder="请选择对应流程" clearable style="width: 150px;">
- <el-option v-for="dict in flowOptions" :key="dict.flowId" :label="dict.flowName" :value="dict.flowId" />
- </el-select>
- </el-form-item>
- <el-form-item label="页面选择" prop="pageIds">
- <el-select v-model="queryParams.pageIds" placeholder="请选择对应页面" clearable style="width: 150px;">
- <el-option v-for="dict in pageOptions" :key="dict.pageId" :label="dict.pageName" :value="dict.pageId" />
- </el-select>
- </el-form-item>
- <el-form-item label="状态" prop="status">
- <el-select v-model="queryParams.status" placeholder="状态" clearable style="width: 150px">
- <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
- </el-select>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
- <el-button icon="Refresh" @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="Plus" @click="handleAdd"
- v-hasPermi="['hnyz:equipment:add']">新增</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
- v-hasPermi="['hnyz:equipment:edit']">修改</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
- v-hasPermi="['hnyz:equipment:remove']">删除</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button type="warning" plain icon="Download" @click="handleExport"
- v-hasPermi="['hnyz:equipment:export']">导出</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button type="info" plain icon="Upload" @click="handleImport" v-hasPermi="['system:user:import']">导入</el-button>
- </el-col>
- <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
- </el-row>
- <!-- 表单列表 -->
- <el-table v-loading="loading" :data="equipmentList" @selection-change="handleSelectionChange">
- <el-table-column type="selection" width="55" align="center" />
- <!-- <el-table-column label="设备id" align="center" prop="equipmentId" /> -->
- <el-table-column label="设备名" align="center" prop="equipmentName" />
- <el-table-column label="标题" align="center" prop="title" />
- <!-- <el-table-column label="流程归属" align="center" prop="flowName" :show-overflow-tooltip="true" /> -->
- <el-table-column label="页面归属" align="center" prop="pageName" :show-overflow-tooltip="true" />
- <el-table-column label="标识码" align="center" prop="code" />
- <el-table-column label="设备种类" align="center" prop="equipmentType">
- <template #default="scope">
- <dict-tag :options="equipment_type" :value="scope.row.equipmentType" />
- </template>
- </el-table-column>
- <!-- <el-table-column label="plc名称" align="center" prop="plcName" />
- <el-table-column label="通讯协议" align="center" prop="protocolName" /> -->
- <el-table-column label="启用状态" align="center" width="100">
- <template #default="scope">
- <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
- @change="handleStatusChange(scope.row)"></el-switch>
- </template>
- </el-table-column>
- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
- <template #default="scope">
- <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
- v-hasPermi="['hnyz:equipment:edit']">修改</el-button>
- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
- v-hasPermi="['hnyz:equipment:remove']">删除</el-button>
- <el-button link type="primary" icon="View" @click="toDetail(scope.row.code)">
- 详情
- </el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
- v-model:limit="queryParams.pageSize" @pagination="getList" />
- <!-- 添加或修改设备管理对话框 -->
- <el-dialog :title="title" v-model="open" width="500px" append-to-body>
- <el-form ref="equipmentRef" :model="form" :rules="rules" label-width="80px">
- <el-form-item label="设备名" prop="equipmentName">
- <el-input v-model="form.equipmentName" placeholder="请输入设备名" />
- </el-form-item>
- <el-form-item label="标题名" prop="title">
- <el-input v-model="form.title" placeholder="请输入标题名" />
- </el-form-item>
- <el-form-item label="标识码" prop="code">
- <el-input v-model="form.code" placeholder="请输入标识码" />
- </el-form-item>
- <el-form-item label="设备种类" prop="equipmentType">
- <el-select v-model="form.equipmentType" placeholder="请选择设备种类" clearable>
- <el-option v-for="dict in equipment_type" :key="dict.value" :label="dict.label"
- :value="dict.value"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="流程分配" prop="flowIds">
- <el-select v-model="form.flowIds" multiple placeholder="请选择对应流程" clearable>
- <el-option v-for="dict in flowOptions" :key="dict.flowId" :label="dict.flowName"
- :value="dict.flowId"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="页面分配" prop="pageIds">
- <el-select v-model="form.pageIds" multiple placeholder="请选择对应页面" clearable>
- <el-option v-for="dict in pageOptions" :key="dict.pageId" :label="dict.pageName"
- :value="dict.pageId"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="PLC" prop="plcId">
- <el-select v-model="form.plcId" placeholder="请选择plc" clearable>
- <el-option v-for="dict in plcOptions" :key="dict.plcId" :label="dict.plcName"
- :value="dict.plcId"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="通讯协议" prop="protocolId">
- <el-select v-model="form.protocolId" placeholder="请选择通讯协议" clearable :disabled="form.plcId != null">
- <el-option v-for="dict in commProtocolOptions" :key="dict.protocolId" :label="dict.protocolName"
- :value="dict.protocolId"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="通信地址" prop="ipAddress">
- <el-input v-model="form.ipAddress" placeholder="请输入通信地址" :disabled="form.plcId != null" />
- </el-form-item>
- <el-form-item label="通信端口" prop="port">
- <el-input v-model="form.port" placeholder="请输入通信端口" :disabled="form.plcId != null" />
- </el-form-item>
- <el-form-item label="备注" prop="remark">
- <el-input v-model="form.remark" placeholder="请输入备注" />
- </el-form-item>
- <el-form-item label="启用状态">
- <el-radio-group v-model="form.status">
- <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">{{ dict.label
- }}</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-form>
- <template #footer>
- <div class="dialog-footer">
- <el-button type="primary" @click="submitForm">确 定</el-button>
- <el-button @click="cancel">取 消</el-button>
- </div>
- </template>
- </el-dialog>
- <!-- 设备导入对话框 -->
- <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
- <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
- <el-icon class="el-icon--upload"><upload-filled /></el-icon>
- <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
- <template #tip>
- <div class="el-upload__tip text-center">
- <div class="el-upload__tip">
- <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的设备数据
- </div>
- <span>仅允许导入xls、xlsx格式文件。</span>
- <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板</el-link>
- </div>
- </template>
- </el-upload>
- <template #footer>
- <div class="dialog-footer">
- <el-button type="primary" @click="submitFileForm">确 定</el-button>
- <el-button @click="upload.open = false">取 消</el-button>
- </div>
- </template>
- </el-dialog>
- </div>
- </template>
- <script setup name="Equipment">
- import { getToken } from "@/utils/auth";
- import { changeStatus, listEquipment, getEquipment, delEquipment, addEquipment, updateEquipment } from "@/api/hnyz/equipment";
- import { getFlowList } from "@/api/hnyz/flow";
- import { getPlcList } from "@/api/hnyz/plcInfo";
- import { getCommProtocolList } from "@/api/hnyz/commProtocol";
- import { getPageList } from '@/api/hnyz/pageControl'
- import { onMounted } from "vue";
- import { useRouter } from 'vue-router'
- /*** 设备导入参数 */
- const upload = reactive({
- // 是否显示弹出层(设备导入)
- open: false,
- // 弹出层标题(设备导入)
- title: "",
- // 是否禁用上传
- isUploading: false,
- // 是否更新已经存在的用户数据
- updateSupport: 0,
- // 设置上传的请求头部
- headers: { Authorization: "Bearer " + getToken() },
- // 上传的地址
- url: import.meta.env.VITE_APP_BASE_API + "/hnyz/equipment/importData"
- });
- /** 导入按钮操作 */
- function handleImport() {
- upload.title = "设备导入";
- upload.open = true;
- };
- /** 下载模板操作 */
- function importTemplate() {
- proxy.download("/hnyz/equipment/importTemplate", {
- }, `equipment_template_${new Date().getTime()}.xlsx`);
- };
- /**文件上传中处理 */
- const handleFileUploadProgress = (event, file, fileList) => {
- upload.isUploading = true;
- };
- /** 文件上传成功处理 */
- const handleFileSuccess = (response, file, fileList) => {
- upload.open = false;
- upload.isUploading = false;
- proxy.$refs["uploadRef"].handleRemove(file);
- proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
- getList();
- };
- /** 提交上传文件 */
- function submitFileForm() {
- proxy.$refs["uploadRef"].submit();
- };
- const router = useRouter()
- onMounted(() => {
- getOptions();
- });
- // 获取所有下拉树结构
- function getOptions() {
- getPageOptions();
- getFlowOptions();
- getPlcOptions();
- getCommProtocolOptions();
- }
- const flowOptions = ref([]);// 流程下拉树结构
- /** 获取流程列表 */
- function getFlowOptions() {
- const params = {
- // flowType: '1',// 1: 普通流程
- };
- getFlowList(params).then(response => {
- flowOptions.value = response.data;
- });
- }
- const pageOptions = ref([]);// 页面下拉树结构
- /** 获取页面列表 */
- function getPageOptions() {
- getPageList({}).then(response => {
- pageOptions.value = response.data;
- });
- }
- const plcOptions = ref([]);// plc下拉树结构
- /** 获取plc列表 */
- function getPlcOptions() {
- getPlcList().then(response => {
- plcOptions.value = response.data;
- });
- }
- const commProtocolOptions = ref([]);// 通讯协议下拉树结构
- /** 获取通讯协议列表 */
- function getCommProtocolOptions() {
- getCommProtocolList().then(response => {
- commProtocolOptions.value = response.data;
- });
- }
- const { proxy } = getCurrentInstance();
- const { equipment_type } = proxy.useDict('equipment_type');
- const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
- const equipmentList = ref([]);
- const open = ref(false);
- const loading = ref(true);
- const showSearch = ref(true);
- const ids = ref([]);
- const single = ref(true);
- const multiple = ref(true);
- const total = ref(0);
- const title = ref("");
- const data = reactive({
- form: {},
- queryParams: {
- pageNum: 1,
- pageSize: 10,
- equipmentName: null,
- flowIds: null,
- code: null,
- equipmentType: null,
- plcId: null,
- protocolId: null,
- status: null,
- remark: null
- },
- rules: {
- equipmentName: [
- { required: true, message: "请输入设备名", trigger: "blur" },
- { min: 1, max: 50, message: "长度在 1 到 50 个字符", trigger: "blur" }
- ],
- flowIds: [
- { required: true, message: "请选择对应流程", trigger: "blur" }
- ],
- code: [
- { required: true, message: "请输入标识码", trigger: "blur" },
- ],
- equipmentType: [
- { required: true, message: "请选择设备类型", trigger: "blur" }
- ],
- }
- });
- const { queryParams, form, rules } = toRefs(data);
- /** 查询设备管理列表 */
- function getList() {
- loading.value = true;
- listEquipment(queryParams.value).then(response => {
- equipmentList.value = response.rows;
- total.value = response.total;
- loading.value = false;
- });
- }
- // 取消按钮
- function cancel() {
- open.value = false;
- reset();
- }
- // 表单重置
- function reset() {
- form.value = {
- equipmentId: null,
- equipmentName: null,
- flowIds: null,
- pageIds: null,
- code: null,
- equipmentType: null,
- plcId: null,
- plcName: null,
- protocolId: null,
- status: "0",
- remark: null,
- };
- proxy.resetForm("equipmentRef");
- }
- /** 状态修改 */
- function handleStatusChange(row) {
- let text = row.status == "0" ? "启用" : "停用";
- proxy.$modal.confirm('确认要"' + text + '"设备名为"' + row.equipmentName + '"的数据项吗?').then(function () {
- return changeStatus(row.equipmentId, row.status);
- }).then(() => {
- proxy.$modal.msgSuccess(text + "成功");
- }).catch(function () {
- row.status = row.status == "0" ? "1" : "0";
- });
- }
- /** 搜索按钮操作 */
- function handleQuery() {
- queryParams.value.pageNum = 1;
- getList();
- }
- /** 重置按钮操作 */
- function resetQuery() {
- proxy.resetForm("queryRef");
- handleQuery();
- }
- // 多选框选中数据
- function handleSelectionChange(selection) {
- ids.value = selection.map(item => item.equipmentId);
- single.value = selection.length != 1;
- multiple.value = !selection.length;
- }
- /** 新增按钮操作 */
- function handleAdd() {
- reset();
- open.value = true;
- title.value = "添加设备管理";
- }
- /** 修改按钮操作 */
- function handleUpdate(row) {
- reset();
- const _equipmentId = row.equipmentId || ids.value
- getEquipment(_equipmentId).then(response => {
- form.value = response.data;
- //字符串转整型数组
- if (form.value.flowIds) {
- form.value.flowIds = form.value.flowIds.split(',').map(Number);
- }
- if (form.value.pageIds) {
- form.value.pageIds = form.value.pageIds.split(',').map(Number);
- }
- open.value = true;
- title.value = "修改设备管理";
- });
- }
- /** 提交按钮 */
- function submitForm() {
- proxy.$refs["equipmentRef"].validate(valid => {
- if (valid) {
- // 处理 flowIds:数组转字符串
- if (form.value.flowIds) {
- form.value.flowIds = form.value.flowIds.join(',');
- }
- // 处理 pageIds:数组转字符串
- if (form.value.pageIds) {
- form.value.pageIds = form.value.pageIds.join(',');
- }
- if (form.value.equipmentId != null) {
- updateEquipment(form.value).then(response => {
- proxy.$modal.msgSuccess("修改成功");
- open.value = false;
- getList();
- }).catch(error => {
- form.value.flowIds = form.value.flowIds.split(',').map(Number);
- form.value.pageIds = form.value.pageIds.split(',').map(Number);
- });
- } else {
- addEquipment(form.value).then(response => {
- proxy.$modal.msgSuccess("新增成功");
- open.value = false;
- getList();
- }).catch(error => {
- console.log(error);
- form.value.flowIds = form.value.flowIds.split(',').map(Number);
- form.value.pageIds = form.value.pageIds.split(',').map(Number);
- });
- }
- }
- });
- }
- /** 删除按钮操作 */
- function handleDelete(row) {
- const _equipmentIds = row.equipmentId || ids.value;
- proxy.$modal.confirm('是否确认删除设备管理编号为"' + _equipmentIds + '"的数据项?').then(function () {
- return delEquipment(_equipmentIds);
- }).then(() => {
- getList();
- proxy.$modal.msgSuccess("删除成功");
- }).catch(() => { });
- }
- /** 导出按钮操作 */
- function handleExport() {
- proxy.download('hnyz/equipment/export', {
- ...queryParams.value
- }, `equipment_${new Date().getTime()}.xlsx`)
- }
- // 详情按钮操作
- function toDetail(code) {
- console.log(code)
- router.push({
- path: '/index',
- query: { code }
- })
- }
- getList();
- </script>
|