<template> 
 | 
  <div class="app-container"> 
 | 
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> 
 | 
      <el-form-item label="外设代码" prop="code"> 
 | 
        <el-input 
 | 
          v-model="queryParams.code" 
 | 
          placeholder="请输入外设代码" 
 | 
          clearable 
 | 
          size="small" 
 | 
          @keyup.enter.native="handleQuery" 
 | 
        /> 
 | 
      </el-form-item> 
 | 
      <el-form-item label="外设名称" prop="name"> 
 | 
        <el-input 
 | 
          v-model="queryParams.name" 
 | 
          placeholder="请输入外设名称" 
 | 
          clearable 
 | 
          size="small" 
 | 
          @keyup.enter.native="handleQuery" 
 | 
        /> 
 | 
      </el-form-item> 
 | 
      <el-form-item label="规格型号" prop="model"> 
 | 
        <el-input 
 | 
          v-model="queryParams.model" 
 | 
          placeholder="请输入规格型号" 
 | 
          clearable 
 | 
          size="small" 
 | 
          @keyup.enter.native="handleQuery" 
 | 
        /> 
 | 
      </el-form-item> 
 | 
      <el-form-item label="生产厂商" prop="manufacturer"> 
 | 
        <el-select v-model="queryParams.manufacturer" placeholder="请选择生产厂商" clearable size="small"> 
 | 
          <el-option 
 | 
            v-for="item in manufacturerList" 
 | 
            :key="item.id" 
 | 
            :label="item.name" 
 | 
            :value="item.id" 
 | 
          /> 
 | 
        </el-select> 
 | 
      </el-form-item> 
 | 
<!--      <el-form-item label="厂商代码" prop="vendorCode">--> 
 | 
<!--        <el-input--> 
 | 
<!--          v-model="queryParams.vendorCode"--> 
 | 
<!--          placeholder="请输入厂商代码"--> 
 | 
<!--          clearable--> 
 | 
<!--          size="small"--> 
 | 
<!--          @keyup.enter.native="handleQuery"--> 
 | 
<!--        />--> 
 | 
<!--      </el-form-item>--> 
 | 
      <el-form-item label="波特率" prop="baudRate"> 
 | 
        <el-select v-model="queryParams.baudRate" placeholder="请选择波特率" clearable size="small"> 
 | 
          <el-option 
 | 
            v-for="dict in dict.type.DICT103" 
 | 
            :key="dict.value" 
 | 
            :label="dict.label" 
 | 
            :value="dict.value" 
 | 
          /> 
 | 
        </el-select> 
 | 
      </el-form-item> 
 | 
      <el-form-item> 
 | 
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> 
 | 
        <el-button icon="el-icon-refresh" size="mini" @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="mini" 
 | 
          @click="handleAdd" 
 | 
          v-hasPermi="['oa:peripheralUnit:add']" 
 | 
        >新增 
 | 
        </el-button> 
 | 
      </el-col> 
 | 
      <el-col :span="1.5"> 
 | 
        <el-button 
 | 
          type="success" 
 | 
          plain 
 | 
          icon="el-icon-edit" 
 | 
          size="mini" 
 | 
          :disabled="single" 
 | 
          @click="handleUpdate" 
 | 
          v-hasPermi="['oa:peripheralUnit: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="['oa:peripheralUnit: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="['oa:peripheralUnit:export']"--> 
 | 
      <!--        >导出</el-button>--> 
 | 
      <!--      </el-col>--> 
 | 
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> 
 | 
    </el-row> 
 | 
  
 | 
    <el-table v-loading="loading" :data="peripheralUnitList" @selection-change="handleSelectionChange"> 
 | 
      <el-table-column type="selection" width="55" align="center"/> 
 | 
      <el-table-column label="序号" align="center" width="50"> 
 | 
        <template slot-scope="scope"> 
 | 
          <span>{{ scope.$index + (queryParams.pageNum - 1) * queryParams.pageSize + 1 }} </span> 
 | 
        </template> 
 | 
      </el-table-column> 
 | 
      <el-table-column label="外设代码" width="80" align="center" prop="code"/> 
 | 
      <el-table-column label="外设名称" align="center" prop="name" show-overflow-tooltip/> 
 | 
      <el-table-column label="规格型号" align="center" prop="model" min-width="120"/> 
 | 
      <el-table-column label="生产厂商" align="center" prop="manufacturer_dictText"/> 
 | 
      <el-table-column label="厂商代码" width="100" align="center" prop="vendorCode_dictText"/> 
 | 
      <el-table-column label="波特率" width="100" align="center" prop="baudRate"> 
 | 
        <template slot-scope="scope"> 
 | 
          <dict-tag :options="dict.type.DICT103" :value="scope.row.baudRate"/> 
 | 
        </template> 
 | 
      </el-table-column> 
 | 
      <el-table-column label="问询指令" align="center" width="180" prop="readInstruction"/> 
 | 
      <el-table-column label="返回长度" width="80" align="center" prop="loopLength"/> 
 | 
      <el-table-column label="功能描述" align="center" min-width="300" show-overflow-tooltip prop="description"/> 
 | 
      <el-table-column label="操作" align="center" fixed="right" width="240" class-name="small-padding fixed-width"> 
 | 
        <template slot-scope="scope"> 
 | 
          <el-button 
 | 
            size="mini" 
 | 
            type="text" 
 | 
            icon="el-icon-view" 
 | 
            @click="handleInfo(scope.row)" 
 | 
            v-hasPermi="['oa:peripheralUnit:info']" 
 | 
          >查看 
 | 
          </el-button> 
 | 
          <el-button 
 | 
            size="mini" 
 | 
            type="text" 
 | 
            icon="el-icon-edit" 
 | 
            @click="handleUpdate(scope.row)" 
 | 
            v-hasPermi="['oa:peripheralUnit:edit']" 
 | 
          >修改 
 | 
          </el-button> 
 | 
          <el-button 
 | 
            size="mini" 
 | 
            type="text" 
 | 
            icon="el-icon-document" 
 | 
            @click="handleUpload(scope.row)" 
 | 
          >附件 
 | 
          </el-button> 
 | 
          <el-button 
 | 
            size="mini" 
 | 
            type="text" 
 | 
            icon="el-icon-delete" 
 | 
            class="del-btn" 
 | 
            @click="handleDelete(scope.row)" 
 | 
            v-hasPermi="['oa:peripheralUnit: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" 
 | 
    /> 
 | 
  
 | 
    <!-- 添加或修改外设单元对话框 --> 
 | 
    <Dialog :title="title" :visible.sync="open" width="50%" append-to-body> 
 | 
      <el-form ref="form" :model="form" :rules="rules" label-width="80px"> 
 | 
        <el-form-item label="外设代码" prop="code"> 
 | 
          <el-input v-model="form.code" placeholder="请输入外设代码" :disabled="disabled"/> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="外设名称" prop="name"> 
 | 
          <el-input v-model="form.name" placeholder="请输入外设名称" :disabled="disabled"/> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="规格型号" prop="model"> 
 | 
          <el-input v-model="form.model" placeholder="请输入规格型号" :disabled="disabled"/> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="生产厂商" prop="manufacturer"> 
 | 
          <el-select v-model="form.manufacturer" placeholder="请选择生产厂商" clearable size="small" :disabled="disabled"> 
 | 
            <el-option 
 | 
              v-for="item in manufacturerList" 
 | 
              :key="item.id" 
 | 
              :label="item.name" 
 | 
              :value="item.id" 
 | 
            /> 
 | 
          </el-select> 
 | 
        </el-form-item> 
 | 
<!--        <el-form-item label="厂商代码" prop="vendorCode">--> 
 | 
<!--          <el-input v-model="form.vendorCode" placeholder="请输入厂商代码" :disabled="disabled"/>--> 
 | 
<!--        </el-form-item>--> 
 | 
        <el-form-item label="波特率" prop="baudRate"> 
 | 
          <el-select v-model="form.baudRate" placeholder="请选择波特率" :disabled="disabled"> 
 | 
            <el-option 
 | 
              v-for="dict in dict.type.DICT103" 
 | 
              :key="dict.value" 
 | 
              :label="dict.label" 
 | 
              :value="dict.value" 
 | 
            ></el-option> 
 | 
          </el-select> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="问询指令" prop="readInstruction"> 
 | 
          <el-input v-model="form.readInstruction" placeholder="请输入问询指令" :disabled="disabled"/> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="返回长度" prop="loopLength"> 
 | 
          <el-input v-model="form.loopLength" placeholder="请输入返回长度" :disabled="disabled"/> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="功能描述" prop="description"> 
 | 
          <el-input v-model="form.description" type="textarea" placeholder="请输入内容" :disabled="disabled"/> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="附件"> 
 | 
          <fileUpload v-model="form.filePath" :disabled="disabled"/> 
 | 
        </el-form-item> 
 | 
      </el-form> 
 | 
      <div slot="footer" class="dialog-footer"> 
 | 
        <el-button :loading="buttonLoading" type="primary" @click="submitForm" :disabled="disabled">确 定</el-button> 
 | 
        <el-button @click="cancel">取 消</el-button> 
 | 
      </div> 
 | 
    </Dialog> 
 | 
  
 | 
    <!-- 附件窗体 --> 
 | 
    <Dialog :title="title" :visible.sync="uploadFlag" width="500px" append-to-body> 
 | 
      <el-form ref="form" :model="form" :rules="rules" label-width="80px"> 
 | 
        <el-form-item label="附件"> 
 | 
          <fileUpload v-model="form.filePath" :limit="1"/> 
 | 
        </el-form-item> 
 | 
      </el-form> 
 | 
      <div slot="footer" class="dialog-footer"> 
 | 
        <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> 
 | 
        <el-button @click="cancel">取 消</el-button> 
 | 
      </div> 
 | 
    </Dialog> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import { 
 | 
  listPeripheralUnit, 
 | 
  getPeripheralUnit, 
 | 
  delPeripheralUnit, 
 | 
  addPeripheralUnit, 
 | 
  updatePeripheralUnit 
 | 
} from "@/api/oa/peripheralUnit"; 
 | 
import {Base64} from 'js-base64'; 
 | 
import { listManufacturer } from "@/api/common/common" 
 | 
  
 | 
export default { 
 | 
  name: "PeripheralUnit", 
 | 
  dicts: ['DICT103'], 
 | 
  data() { 
 | 
    var validateModel = (rule, value, callback) => { 
 | 
      if (!value) { 
 | 
        callback(new Error('规格型号不能为空')); 
 | 
        return 
 | 
      } 
 | 
      if (value.length > 32) { 
 | 
        callback(new Error('最多输入32个字符')); 
 | 
        return 
 | 
      } 
 | 
      // if (!(/^[A-Za-z]+$/.test(value))) { 
 | 
      //   callback(new Error('只能输入英文字符')); 
 | 
      //   return 
 | 
      // } 
 | 
      callback(); 
 | 
    }; 
 | 
    return { 
 | 
      // 按钮loading 
 | 
      buttonLoading: false, 
 | 
      // 遮罩层 
 | 
      loading: true, 
 | 
      // 选中数组 
 | 
      ids: [], 
 | 
      // 非单个禁用 
 | 
      single: true, 
 | 
      // 非多个禁用 
 | 
      multiple: true, 
 | 
      // 显示搜索条件 
 | 
      showSearch: true, 
 | 
      // 总条数 
 | 
      total: 0, 
 | 
      // 外设单元表格数据 
 | 
      peripheralUnitList: [], 
 | 
      // 弹出层标题 
 | 
      title: "", 
 | 
      // 是否显示弹出层 
 | 
      open: false, 
 | 
      uploadFlag: false, 
 | 
      // 查询参数 
 | 
      queryParams: { 
 | 
        pageNum: 1, 
 | 
        pageSize: 10, 
 | 
        code: undefined, 
 | 
        name: undefined, 
 | 
        model: undefined, 
 | 
        manufacturer: undefined, 
 | 
        vendorCode: undefined, 
 | 
        baudRate: undefined 
 | 
      }, 
 | 
      // 表单参数 
 | 
      form: {}, 
 | 
      // 表单校验 
 | 
      rules: { 
 | 
        id: [ 
 | 
          {required: true, message: "id不能为空", trigger: "blur"} 
 | 
        ], 
 | 
        code: [ 
 | 
          {required: true, message: "外设代码不能为空", trigger: "blur"} 
 | 
        ], 
 | 
        name: [ 
 | 
          {required: true, message: "外设名称不能为空", trigger: "blur"}, 
 | 
          {max: 32, message: '最多输入32个字符', trigger: 'blur' } 
 | 
        ], 
 | 
        model: [ 
 | 
          {required: true, validator: validateModel, trigger: "blur"} 
 | 
        ], 
 | 
        manufacturer: [ 
 | 
          {required: true, message: "生产厂商不能为空", trigger: "blur"} 
 | 
        ], 
 | 
        vendorCode: [ 
 | 
          {required: true, message: "厂商代码不能为空", trigger: "blur"}, 
 | 
          {max: 32, message: '最多输入32个字符', trigger: 'blur' } 
 | 
        ], 
 | 
        baudRate: [ 
 | 
          {required: true, message: "波特率不能为空", trigger: "change"} 
 | 
        ], 
 | 
        readInstruction: [ 
 | 
          {required: true, message: "问询指令不能为空", trigger: "blur"}, 
 | 
          {max: 128, message: '最多输入128个字符', trigger: 'blur' } 
 | 
        ], 
 | 
        loopLength: [ 
 | 
          {required: true, message: "返回长度不能为空", trigger: "blur"} 
 | 
        ], 
 | 
        filePath: [ 
 | 
          {required: true, message: "附件不能为空", trigger: "blur"} 
 | 
        ], 
 | 
        description: [ 
 | 
          {max: 128, message: '最多输入128个字符', trigger: 'blur' } 
 | 
        ] 
 | 
      }, 
 | 
      disabled: false, 
 | 
      // 生产厂商 
 | 
      manufacturerList: [] 
 | 
    }; 
 | 
  }, 
 | 
  created() { 
 | 
    this.getList(); 
 | 
  
 | 
  }, 
 | 
  methods: { 
 | 
    getManufacturerList() { 
 | 
      listManufacturer().then(res => { 
 | 
        this.manufacturerList = res.data; 
 | 
      }) 
 | 
    }, 
 | 
    /** 查询外设单元列表 */ 
 | 
    getList() { 
 | 
      this.loading = true; 
 | 
      listPeripheralUnit(this.queryParams).then(response => { 
 | 
        this.peripheralUnitList = response.rows; 
 | 
        this.total = response.total; 
 | 
        this.loading = false; 
 | 
        this.getManufacturerList(); 
 | 
      }); 
 | 
    }, 
 | 
    // 取消按钮 
 | 
    cancel() { 
 | 
      this.open = false; 
 | 
      this.uploadFlag = false; 
 | 
      this.reset(); 
 | 
    }, 
 | 
    // 表单重置 
 | 
    reset() { 
 | 
      this.form = { 
 | 
        id: undefined, 
 | 
        code: undefined, 
 | 
        name: undefined, 
 | 
        model: undefined, 
 | 
        manufacturer: undefined, 
 | 
        vendorCode: undefined, 
 | 
        baudRate: undefined, 
 | 
        readInstruction: undefined, 
 | 
        loopLength: undefined, 
 | 
        description: undefined, 
 | 
        filePath: undefined, 
 | 
        createBy: undefined, 
 | 
        createTime: undefined, 
 | 
        updateBy: undefined, 
 | 
        updateTime: undefined, 
 | 
        delFlag: undefined, 
 | 
        version: undefined 
 | 
      }; 
 | 
      this.resetForm("form"); 
 | 
    }, 
 | 
    /** 搜索按钮操作 */ 
 | 
    handleQuery() { 
 | 
      this.queryParams.pageNum = 1; 
 | 
      this.getManufacturerList(); 
 | 
      this.getList(); 
 | 
    }, 
 | 
    /** 重置按钮操作 */ 
 | 
    resetQuery() { 
 | 
      this.resetForm("queryForm"); 
 | 
      this.getManufacturerList(); 
 | 
      this.handleQuery(); 
 | 
    }, 
 | 
    // 多选框选中数据 
 | 
    handleSelectionChange(selection) { 
 | 
      this.ids = selection.map(item => item.id) 
 | 
      this.single = selection.length !== 1 
 | 
      this.multiple = !selection.length 
 | 
    }, 
 | 
    /** 新增按钮操作 */ 
 | 
    handleAdd() { 
 | 
      this.reset(); 
 | 
      this.getManufacturerList(); 
 | 
      this.form.baudRate = '04' 
 | 
      this.disabled = false 
 | 
      this.open = true; 
 | 
      this.title = "添加外设单元"; 
 | 
    }, 
 | 
    handleInfo(row) { 
 | 
      this.loading = true; 
 | 
      this.reset(); 
 | 
      this.disabled = true 
 | 
      const id = row.id || this.ids 
 | 
      getPeripheralUnit(id).then(response => { 
 | 
        this.loading = false; 
 | 
        this.form = response.data; 
 | 
        this.open = true; 
 | 
        this.title = "查看外设单元"; 
 | 
      }); 
 | 
    }, 
 | 
    /** 修改按钮操作 */ 
 | 
    handleUpdate(row) { 
 | 
      this.loading = true; 
 | 
      this.disabled = false 
 | 
      this.reset(); 
 | 
      //this.getManufacturerList(); 
 | 
      const id = row.id || this.ids 
 | 
      getPeripheralUnit(id).then(response => { 
 | 
        this.loading = false; 
 | 
        this.form = response.data; 
 | 
        this.form.manufacturer = parseInt(this.form.manufacturer); 
 | 
        this.open = true; 
 | 
        this.title = "修改外设单元"; 
 | 
      }); 
 | 
    }, 
 | 
    /** 提交按钮 */ 
 | 
    submitForm() { 
 | 
      this.$refs["form"].validate(valid => { 
 | 
        if (valid) { 
 | 
          if(this.uploadFlag){ 
 | 
            if(!this.form.filePath){ 
 | 
              this.$modal.msgWarning("请选择上传附件"); 
 | 
              return; 
 | 
            } 
 | 
          } 
 | 
          this.buttonLoading = true; 
 | 
          if (this.form.id != null) { 
 | 
            updatePeripheralUnit(this.form).then(response => { 
 | 
              this.$modal.msgSuccess("修改成功"); 
 | 
              this.open = false; 
 | 
              this.uploadFlag = false; 
 | 
              this.getList(); 
 | 
            }).finally(() => { 
 | 
              this.buttonLoading = false; 
 | 
            }); 
 | 
          } else { 
 | 
            addPeripheralUnit(this.form).then(response => { 
 | 
              this.$modal.msgSuccess("新增成功"); 
 | 
              this.open = false; 
 | 
              this.getList(); 
 | 
            }).finally(() => { 
 | 
              this.buttonLoading = false; 
 | 
            }); 
 | 
          } 
 | 
        } 
 | 
      }); 
 | 
    }, 
 | 
    /** 删除按钮操作 */ 
 | 
    handleDelete(row) { 
 | 
      const ids = row.id || this.ids; 
 | 
      this.$modal.confirm(`是否确认删除外设代码为${row.code}的外设单元?`).then(() => { 
 | 
        this.loading = true; 
 | 
        return delPeripheralUnit(ids); 
 | 
      }).then(() => { 
 | 
        this.loading = false; 
 | 
        this.getList(); 
 | 
        this.$modal.msgSuccess("删除成功"); 
 | 
      }).finally(() => { 
 | 
        this.loading = false; 
 | 
      }); 
 | 
    }, 
 | 
    handleUpload(row) { 
 | 
      this.loading = true; 
 | 
      this.reset(); 
 | 
      const id = row.id || this.ids 
 | 
      getPeripheralUnit(id).then(response => { 
 | 
        this.loading = false; 
 | 
        this.form = response.data; 
 | 
        this.uploadFlag = true; 
 | 
        this.title = "上传附件"; 
 | 
      }); 
 | 
    }, 
 | 
    /** 导出按钮操作 */ 
 | 
    handleExport() { 
 | 
      this.download('oa/peripheralUnit/export', { 
 | 
        ...this.queryParams 
 | 
      }, `peripheralUnit_${new Date().getTime()}.xlsx`) 
 | 
    } 
 | 
  } 
 | 
}; 
 | 
</script> 
 |