You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							485 lines
						
					
					
						
							14 KiB
						
					
					
				
			
		
		
	
	
							485 lines
						
					
					
						
							14 KiB
						
					
					
				<template> | 
						|
  <div class="app-container"> | 
						|
    <div class="btn-condition"> | 
						|
      <div class="condition-left" v-show="showSearch"> | 
						|
        <el-form | 
						|
          :model="queryParams" | 
						|
          ref="queryForm" | 
						|
          size="small" | 
						|
          :inline="true" | 
						|
        > | 
						|
          <el-form-item label="仪表类型" prop="mtType"> | 
						|
            <el-select | 
						|
              v-model="queryParams.mtType" | 
						|
              placeholder="请选择仪表类型" | 
						|
              clearable | 
						|
              filterable | 
						|
            > | 
						|
              <el-option | 
						|
                v-for="dict in dict.type.sys_mt_type" | 
						|
                :key="dict.value" | 
						|
                :label="dict.label" | 
						|
                :value="dict.value" | 
						|
              /> | 
						|
            </el-select> | 
						|
          </el-form-item> | 
						|
        </el-form> | 
						|
        <div class="primary-btn"> | 
						|
          <el-button | 
						|
            type="primary" | 
						|
            icon="el-icon-search" | 
						|
            size="mini" | 
						|
            @click="handleQuery" | 
						|
            >搜索</el-button | 
						|
          > | 
						|
        </div> | 
						|
        <div class="cancel-btn"> | 
						|
          <el-button | 
						|
            type="cancel" | 
						|
            icon="el-icon-refresh" | 
						|
            size="mini" | 
						|
            @click="resetQuery" | 
						|
            >重置</el-button | 
						|
          > | 
						|
        </div> | 
						|
      </div> | 
						|
    </div> | 
						|
 | 
						|
    <el-row :gutter="10" class="mb8"> | 
						|
      <el-col :span="1.5"> | 
						|
        <div class="primary-btn" v-hasPermi="['device:cmp:add']"> | 
						|
          <el-button | 
						|
            type="primary" | 
						|
            icon="el-icon-plus" | 
						|
            size="mini" | 
						|
            @click="handleAdd" | 
						|
            >新增</el-button | 
						|
          > | 
						|
        </div> | 
						|
      </el-col> | 
						|
      <el-col :span="1.5"> | 
						|
        <div class="success-btn" v-hasPermi="['device:cmp:edit']"> | 
						|
          <el-button | 
						|
            type="success" | 
						|
            icon="el-icon-edit" | 
						|
            size="mini" | 
						|
            :disabled="single" | 
						|
            @click="handleUpdate" | 
						|
            >修改</el-button | 
						|
          > | 
						|
        </div> | 
						|
      </el-col> | 
						|
      <el-col :span="1.5"> | 
						|
        <div class="delete-btn" v-hasPermi="['device:cmp:remove']"> | 
						|
          <el-button | 
						|
            type="delete" | 
						|
            icon="el-icon-delete" | 
						|
            size="mini" | 
						|
            :disabled="multiple" | 
						|
            @click="handleDelete" | 
						|
            >删除</el-button | 
						|
          > | 
						|
        </div> | 
						|
      </el-col> | 
						|
      <!-- <el-col :span="1.5"> | 
						|
        <div class="warning-btn" v-hasPermi="['system:post:export']"> | 
						|
          <el-button | 
						|
            type="warning" | 
						|
            icon="el-icon-download" | 
						|
            size="mini" | 
						|
            @click="handleExport" | 
						|
            >导出</el-button | 
						|
          > | 
						|
        </div> | 
						|
      </el-col> --> | 
						|
      <right-toolbar | 
						|
        :showSearch.sync="showSearch" | 
						|
        @queryTable="getList" | 
						|
      ></right-toolbar> | 
						|
    </el-row> | 
						|
 | 
						|
    <el-table | 
						|
      v-loading="loading" | 
						|
      :data="postList" | 
						|
      @selection-change="handleSelectionChange" | 
						|
      stripe | 
						|
    > | 
						|
      <el-table-column type="selection" width="55" align="center" /> | 
						|
      <el-table-column label="仪表类型" align="center" prop="mtType"> | 
						|
        <template slot-scope="scope"> | 
						|
          <dict-tag | 
						|
            :options="dict.type.sys_mt_type" | 
						|
            :value="scope.row.mtType" | 
						|
          /> | 
						|
        </template> | 
						|
      </el-table-column> | 
						|
      <el-table-column label="波特率" align="center" prop="baudRate" /> | 
						|
      <el-table-column label="数据位" align="center" prop="dataBit" /> | 
						|
      <el-table-column label="停止位" align="center" prop="stopBit" /> | 
						|
      <el-table-column label="校验位" align="center" prop="parity" /> | 
						|
      <el-table-column label="创建时间" align="center" prop="createTime"> | 
						|
        <template slot-scope="scope"> | 
						|
          <span>{{ parseTime(scope.row.createTime) }}</span> | 
						|
        </template> | 
						|
      </el-table-column> | 
						|
      <el-table-column | 
						|
        label="更新时间" | 
						|
        align="center" | 
						|
        prop="updateTime" | 
						|
        width="180" | 
						|
      > | 
						|
        <template slot-scope="scope"> | 
						|
          <span>{{ parseTime(scope.row.updateTime) }}</span> | 
						|
        </template> | 
						|
      </el-table-column> | 
						|
      <el-table-column label="备注" align="center" prop="remark" /> | 
						|
      <el-table-column | 
						|
        label="操作" | 
						|
        align="center" | 
						|
        class-name="small-padding fixed-width" | 
						|
      > | 
						|
        <template slot-scope="scope"> | 
						|
          <el-button | 
						|
            size="mini" | 
						|
            type="text" | 
						|
            icon="el-icon-edit" | 
						|
            @click="handleUpdate(scope.row)" | 
						|
            v-hasPermi="['device:cmp:edit']" | 
						|
            >修改</el-button | 
						|
          > | 
						|
          <el-button | 
						|
            size="mini" | 
						|
            type="text" | 
						|
            icon="el-icon-delete" | 
						|
            @click="handleDelete(scope.row)" | 
						|
            v-hasPermi="['device:cmp:remove']" | 
						|
            >删除</el-button | 
						|
          > | 
						|
        </template> | 
						|
      </el-table-column> | 
						|
    </el-table> | 
						|
 | 
						|
    <pagination | 
						|
      v-show="total > 0" | 
						|
      :total="total" | 
						|
      :page.sync="queryParams.pageNum" | 
						|
      :limit.sync="queryParams.pageSize" | 
						|
      @pagination="getList" | 
						|
    /> | 
						|
 | 
						|
    <!-- 添加或修改设备参数对话框 --> | 
						|
    <el-dialog :title="title" :visible.sync="open" append-to-body> | 
						|
      <el-form ref="form" :model="form" :rules="rules"> | 
						|
        <el-row type="flex" justify="center"> | 
						|
          <el-col :span="12"> | 
						|
            <el-form-item label="仪表类型" prop="mtType"> | 
						|
              <el-select | 
						|
                v-model="form.mtType" | 
						|
                placeholder="请选择仪表类型" | 
						|
                clearable | 
						|
                filterable | 
						|
              > | 
						|
                <el-option | 
						|
                  v-for="dict in dict.type.sys_mt_type" | 
						|
                  :key="dict.value" | 
						|
                  :label="dict.label" | 
						|
                  :value="dict.value" | 
						|
                /> | 
						|
              </el-select> | 
						|
            </el-form-item> | 
						|
          </el-col> | 
						|
          <el-col :span="12"> | 
						|
            <el-form-item label="波特率" prop="baudRate"> | 
						|
              <el-select | 
						|
                clearable | 
						|
                filterable | 
						|
                placeholder="请选择波特率" | 
						|
                v-model="form.baudRate" | 
						|
              > | 
						|
                <el-option label="1200" value="1200"></el-option> | 
						|
                <el-option label="2400" value="2400"></el-option> | 
						|
                <el-option label="4800" value="4800"></el-option> | 
						|
                <el-option label="9600" value="9600"></el-option> | 
						|
                <el-option label="115200" value="115200"></el-option> | 
						|
              </el-select> | 
						|
            </el-form-item> | 
						|
          </el-col> | 
						|
        </el-row> | 
						|
        <el-row type="flex" justify="center"> | 
						|
          <el-col :span="12"> | 
						|
            <el-form-item label="数据位" prop="dataBit"> | 
						|
              <el-select | 
						|
                clearable | 
						|
                filterable | 
						|
                placeholder="请选择数据位" | 
						|
                v-model="form.dataBit" | 
						|
              > | 
						|
                <el-option label="5" value="5"></el-option> | 
						|
                <el-option label="7" value="7"></el-option> | 
						|
                <el-option label="8" value="8"></el-option> | 
						|
              </el-select> </el-form-item | 
						|
          ></el-col> | 
						|
          <el-col :span="12"> | 
						|
            <el-form-item label="停止位" prop="stopBit"> | 
						|
              <el-select | 
						|
                clearable | 
						|
                filterable | 
						|
                placeholder="请选择停止位" | 
						|
                v-model="form.stopBit" | 
						|
              > | 
						|
                <el-option label="1" value="1"></el-option> | 
						|
                <el-option label="1.5" value="1.5"></el-option> | 
						|
                <el-option | 
						|
                  label="2" | 
						|
                  value="2" | 
						|
                ></el-option> </el-select></el-form-item | 
						|
          ></el-col> | 
						|
        </el-row> | 
						|
        <el-row type="flex" justify="center"> | 
						|
          <el-col :span="12"> | 
						|
            <el-form-item label="校验位" prop="parity"> | 
						|
              <el-select | 
						|
                clearable | 
						|
                filterable | 
						|
                placeholder="请选择校验位" | 
						|
                v-model="form.parity" | 
						|
              > | 
						|
                <el-option label="none" value="none"></el-option> | 
						|
                <el-option label="even" value="even"></el-option> | 
						|
                <el-option label="edd" value="odd"></el-option> | 
						|
              </el-select> | 
						|
            </el-form-item> | 
						|
          </el-col> | 
						|
          <el-col :span="12"> | 
						|
            <el-form-item label="备注" prop="remark"> | 
						|
              <el-input | 
						|
                v-model="form.remark" | 
						|
                type="textarea" | 
						|
                placeholder="请输入内容" | 
						|
              /> </el-form-item | 
						|
          ></el-col> | 
						|
        </el-row> | 
						|
      </el-form> | 
						|
      <div slot="footer" class="dialog-footer"> | 
						|
        <el-button @click="cancel">取 消</el-button> | 
						|
        <el-button type="primary" @click="submitForm">确 定</el-button> | 
						|
      </div> | 
						|
    </el-dialog> | 
						|
  </div> | 
						|
</template> | 
						|
 | 
						|
<script> | 
						|
import { cmpList, getCMP, delCMP, addCMP, updateCMP } from "@/api/device/comm"; | 
						|
 | 
						|
export default { | 
						|
  name: "comm", | 
						|
  dicts: ["sys_mt_type"], | 
						|
  data() { | 
						|
    return { | 
						|
      // 遮罩层 | 
						|
      loading: true, | 
						|
      // 选中数组 | 
						|
      ids: [], | 
						|
      // 非单个禁用 | 
						|
      single: true, | 
						|
      // 非多个禁用 | 
						|
      multiple: true, | 
						|
      // 显示搜索条件 | 
						|
      showSearch: true, | 
						|
      // 总条数 | 
						|
      total: 0, | 
						|
      // 设备参数表格数据 | 
						|
      postList: [], | 
						|
      // 弹出层标题 | 
						|
      title: "", | 
						|
      // 是否显示弹出层 | 
						|
      open: false, | 
						|
      // 查询参数 | 
						|
      queryParams: { | 
						|
        pageNum: 1, | 
						|
        pageSize: 10, | 
						|
        mtType: "", | 
						|
      }, | 
						|
      // 表单参数 | 
						|
      form: {}, | 
						|
      // 表单校验 | 
						|
      rules: { | 
						|
        mtType: [ | 
						|
          { required: true, message: "请选择仪表类型", trigger: "blur" }, | 
						|
        ], | 
						|
        baudRate: [ | 
						|
          { required: true, message: "请选择波特率", trigger: "blur" }, | 
						|
        ], | 
						|
        dataBit: [{ required: true, message: "请选择数据位", trigger: "blur" }], | 
						|
        stopBit: [{ required: true, message: "请选择停止位", trigger: "blur" }], | 
						|
        parity: [{ required: true, message: "请选择校验位", trigger: "blur" }], | 
						|
      }, | 
						|
    }; | 
						|
  }, | 
						|
  created() { | 
						|
    this.getList(); | 
						|
  }, | 
						|
  methods: { | 
						|
    /** 查询设备参数列表 */ | 
						|
    getList() { | 
						|
      this.loading = true; | 
						|
      cmpList(this.queryParams).then((response) => { | 
						|
        this.postList = response.rows; | 
						|
        this.total = response.total; | 
						|
        this.loading = false; | 
						|
      }); | 
						|
    }, | 
						|
    // 取消按钮 | 
						|
    cancel() { | 
						|
      this.open = false; | 
						|
      this.reset(); | 
						|
      this.form.id = ""; | 
						|
    }, | 
						|
    // 表单重置 | 
						|
    reset() { | 
						|
      this.form = { | 
						|
        mtType: "", | 
						|
        baudRate: "", | 
						|
        dataBit: "", | 
						|
        stopBit: "", | 
						|
        parity: "", | 
						|
        remark: "", | 
						|
      }; | 
						|
      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.open = true; | 
						|
      this.title = "添加设备参数信息"; | 
						|
    }, | 
						|
    /** 修改按钮操作 */ | 
						|
    handleUpdate(row) { | 
						|
      this.reset(); | 
						|
      this.form.id = ""; | 
						|
      const cpmId = row.id || this.ids; | 
						|
      console.log("row", row); | 
						|
      getCMP(cpmId).then((response) => { | 
						|
        console.log("打印结果", response.data); | 
						|
        // this.form = response.data; | 
						|
        this.form = { | 
						|
          id: response.data.id, | 
						|
          mtType: response.data.mtType, | 
						|
          baudRate: | 
						|
            response.data.baudRate !== null | 
						|
              ? response.data.baudRate.toString() | 
						|
              : null, | 
						|
          dataBit: | 
						|
            response.data.dataBit !== null | 
						|
              ? response.data.dataBit.toString() | 
						|
              : null, | 
						|
          stopBit: | 
						|
            response.data.stopBit !== null | 
						|
              ? response.data.stopBit.toString() | 
						|
              : null, | 
						|
          parity: | 
						|
            response.data.parity !== null | 
						|
              ? response.data.parity.toString() | 
						|
              : null, | 
						|
          remark: response.data.remark, | 
						|
        }; | 
						|
        this.open = true; | 
						|
        this.title = "修改设备参数信息"; | 
						|
      }); | 
						|
    }, | 
						|
    /** 提交按钮 */ | 
						|
    submitForm: function () { | 
						|
      this.$refs["form"].validate((valid) => { | 
						|
        if (valid) { | 
						|
          if (this.form.id != undefined) { | 
						|
            updateCMP(this.form).then((response) => { | 
						|
              this.$modal.msgSuccess("修改成功"); | 
						|
              this.open = false; | 
						|
              this.getList(); | 
						|
            }); | 
						|
          } else { | 
						|
            console.log("新增参数", this.form); | 
						|
            addCMP(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 delCMP(Ids); | 
						|
        }) | 
						|
        .then(() => { | 
						|
          this.getList(); | 
						|
          this.$modal.msgSuccess("删除成功"); | 
						|
        }) | 
						|
        .catch(() => {}); | 
						|
    }, | 
						|
    /** 导出按钮操作 */ | 
						|
    handleExport() { | 
						|
      this.download( | 
						|
        "device/gateway/export", | 
						|
        { | 
						|
          ...this.queryParams, | 
						|
        }, | 
						|
        `post_${new Date().getTime()}.xlsx` | 
						|
      ); | 
						|
    }, | 
						|
  }, | 
						|
}; | 
						|
</script> | 
						|
<style scoped lang="scss"> | 
						|
/* 媒体查询,适配大于2000px分辨率的大屏样式 - element样式 */ | 
						|
@media (max-width: 2000px) { | 
						|
  ::v-deep .el-dialog { | 
						|
    width: 700px !important; | 
						|
  } | 
						|
 | 
						|
  ::v-deep .el-dialog .el-form-item__label { | 
						|
    width: 110px !important; | 
						|
  } | 
						|
  ::v-deep .el-dialog .el-form-item { | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
  } | 
						|
} | 
						|
@media (min-width: 2000px) { | 
						|
  ::v-deep .el-dialog { | 
						|
    width: 7.5rem !important; | 
						|
  } | 
						|
 | 
						|
  ::v-deep .el-dialog .el-form-item__label { | 
						|
    width: 1.1rem !important; | 
						|
  } | 
						|
  ::v-deep .el-dialog .el-form-item { | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
  } | 
						|
} | 
						|
</style> | 
						|
 | 
						|
 |