唐耀东
2021-12-09 3da12323ba999d0af15646e2384a4c18fb414683
提交代码
4个文件已修改
6个文件已添加
1737 ■■■■■ 已修改文件
src/api/common/common.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/oa/batch.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/oa/equipment.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/oa/peripheralUnit.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/FileUpload/index.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/device/batch/index.vue 323 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/device/equipment/index.vue 516 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/device/peripheralUnit/index.vue 473 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dept/index.vue 155 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/index.vue 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/common/common.js
@@ -15,3 +15,35 @@
    method: 'get'
  })
}
// 高校下拉列表
export function listSchool() {
  return request({
    url: '/oa/school/select',
    method: 'get'
  })
}
// 生产批次下拉列表
export function listBatch() {
  return request({
    url: '/oa/batch/select',
    method: 'get'
  })
}
// 用户下拉列表
export function listUser() {
  return request({
    url: '/system/user/select',
    method: 'get'
  })
}
// 通过部门id获取用户表格
export function listUserDept(p) {
  return request({
    url: `/system/user/byDept?deptId=${p.deptId}&pageNum=${p.pageNum}&pageSize=${p.pageSize}`,
    method: 'get'
  })
}
src/api/oa/batch.js
New file
@@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询生产批次列表
export function listBatch(query) {
  return request({
    url: '/oa/batch/list',
    method: 'get',
    params: query
  })
}
// 查询生产批次详细
export function getBatch(id) {
  return request({
    url: '/oa/batch/' + id,
    method: 'get'
  })
}
// 新增生产批次
export function addBatch(data) {
  return request({
    url: '/oa/batch',
    method: 'post',
    data: data
  })
}
// 修改生产批次
export function updateBatch(data) {
  return request({
    url: '/oa/batch',
    method: 'put',
    data: data
  })
}
// 删除生产批次
export function delBatch(id) {
  return request({
    url: '/oa/batch/' + id,
    method: 'delete'
  })
}
src/api/oa/equipment.js
New file
@@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询智控设备列表
export function listEquipment(query) {
  return request({
    url: '/oa/equipment/list',
    method: 'get',
    params: query
  })
}
// 查询智控设备详细
export function getEquipment(id) {
  return request({
    url: '/oa/equipment/' + id,
    method: 'get'
  })
}
// 新增智控设备
export function addEquipment(data) {
  return request({
    url: '/oa/equipment',
    method: 'post',
    data: data
  })
}
// 修改智控设备
export function updateEquipment(data) {
  return request({
    url: '/oa/equipment',
    method: 'put',
    data: data
  })
}
// 删除智控设备
export function delEquipment(id) {
  return request({
    url: '/oa/equipment/' + id,
    method: 'delete'
  })
}
src/api/oa/peripheralUnit.js
New file
@@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询外设单元列表
export function listPeripheralUnit(query) {
  return request({
    url: '/oa/peripheralUnit/list',
    method: 'get',
    params: query
  })
}
// 查询外设单元详细
export function getPeripheralUnit(id) {
  return request({
    url: '/oa/peripheralUnit/' + id,
    method: 'get'
  })
}
// 新增外设单元
export function addPeripheralUnit(data) {
  return request({
    url: '/oa/peripheralUnit',
    method: 'post',
    data: data
  })
}
// 修改外设单元
export function updatePeripheralUnit(data) {
  return request({
    url: '/oa/peripheralUnit',
    method: 'put',
    data: data
  })
}
// 删除外设单元
export function delPeripheralUnit(id) {
  return request({
    url: '/oa/peripheralUnit/' + id,
    method: 'delete'
  })
}
src/components/FileUpload/index.vue
@@ -1,6 +1,7 @@
<template>
  <div class="upload-file">
    <el-upload
      :disabled="disabled"
      :action="uploadFileUrl"
      :before-upload="handleBeforeUpload"
      :file-list="fileList"
@@ -31,7 +32,7 @@
          <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
        </el-link>
        <div class="ele-upload-list__item-content-action">
          <el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link>
          <el-link :underline="false" @click="handleDelete(index)" type="danger" :disabled="disabled">删除</el-link>
        </div>
      </li>
    </transition-group>
@@ -65,6 +66,10 @@
    isShowTip: {
      type: Boolean,
      default: true
    },
    disabled: {
      type: Boolean,
      default: false
    }
  },
  data() {
src/views/device/batch/index.vue
New file
@@ -0,0 +1,323 @@
<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
      <el-form-item label="生产批次" prop="batch">
        <el-input
          v-model="queryParams.batch"
          placeholder="请输入生产批次"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="下单日期" prop="orderDate">
        <el-date-picker clearable size="small"
          v-model="queryParams.orderDate"
          type="date"
          value-format="yyyy-MM-dd"
          placeholder="选择下单日期">
        </el-date-picker>
      </el-form-item>
      <el-form-item label="到货日期" prop="arrivalDate">
        <el-date-picker clearable size="small"
          v-model="queryParams.arrivalDate"
          type="date"
          value-format="yyyy-MM-dd"
          placeholder="选择到货日期">
        </el-date-picker>
      </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:batch: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:batch: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:batch:remove']"
        >删除</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
    <el-table v-loading="loading" :data="batchList" @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="生产批次" align="center" prop="batch" />
      <el-table-column label="下单日期" align="center" prop="orderDate" width="180">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.orderDate, '{y}-{m}-{d}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="到货日期" align="center" prop="arrivalDate" width="180">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.arrivalDate, '{y}-{m}-{d}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="批次说明" align="center" prop="illustrate" />
      <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="['oa:batch:edit']"
          >修改</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['oa:batch: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" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="生产批次" prop="batch">
          <el-input v-model="form.batch" placeholder="请输入生产批次" />
        </el-form-item>
        <el-form-item label="下单日期" prop="orderDate">
          <el-date-picker clearable size="small"
            v-model="form.orderDate"
            type="date"
            value-format="yyyy-MM-dd"
            placeholder="选择下单日期">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="到货日期" prop="arrivalDate">
          <el-date-picker clearable size="small"
            v-model="form.arrivalDate"
            type="date"
            value-format="yyyy-MM-dd"
            placeholder="选择到货日期">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="批次说明" prop="illustrate">
          <el-input v-model="form.illustrate" type="textarea" placeholder="请输入内容" />
        </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>
    </el-dialog>
  </div>
</template>
<script>
import { listBatch, getBatch, delBatch, addBatch, updateBatch } from "@/api/oa/batch";
export default {
  name: "Batch",
  data() {
    return {
      // 按钮loading
      buttonLoading: false,
      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 生产批次表格数据
      batchList: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        batch: undefined,
        orderDate: undefined,
        arrivalDate: undefined,
        illustrate: undefined,
      },
      // 表单参数
      form: {},
      // 表单校验
      rules: {
        batch: [
          { required: true, message: "生产批次不能为空", trigger: "blur" }
        ],
        orderDate: [
          { required: true, message: "下单日期不能为空", trigger: "blur" }
        ],
        arrivalDate: [
          { required: true, message: "到货日期不能为空", trigger: "blur" }
        ],
        // illustrate: [
        //   { required: true, message: "批次说明不能为空", trigger: "blur" }
        // ],
      }
    };
  },
  created() {
    this.getList();
  },
  methods: {
    /** 查询生产批次列表 */
    getList() {
      this.loading = true;
      listBatch(this.queryParams).then(response => {
        this.batchList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    // 取消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    // 表单重置
    reset() {
      this.form = {
        id: undefined,
        batch: undefined,
        orderDate: undefined,
        arrivalDate: undefined,
        illustrate: undefined,
        createBy: undefined,
        createTime: undefined,
        updateBy: undefined,
        updateTime: undefined,
        delFlag: undefined,
        version: undefined
      };
      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.loading = true;
      this.reset();
      const id = row.id || this.ids
      getBatch(id).then(response => {
        this.loading = false;
        this.form = response.data;
        this.open = true;
        this.title = "修改生产批次";
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          this.buttonLoading = true;
          if (this.form.id != null) {
            updateBatch(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            }).finally(() => {
              this.buttonLoading = false;
            });
          } else {
            addBatch(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('是否确认删除生产批次编号为"' + ids + '"的数据项?').then(() => {
        this.loading = true;
        return delBatch(ids);
      }).then(() => {
        this.loading = false;
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).finally(() => {
        this.loading = false;
      });
    },
    /** 导出按钮操作 */
    handleExport() {
      this.download('oa/batch/export', {
        ...this.queryParams
      }, `batch_${new Date().getTime()}.xlsx`)
    }
  }
};
</script>
src/views/device/equipment/index.vue
New file
@@ -0,0 +1,516 @@
<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
      <el-form-item label="设备类型" prop="type">
        <el-select v-model="queryParams.type" placeholder="请选择设备类型" clearable size="small">
          <el-option
            v-for="dict in dict.type.DICT101"
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="硬件序列码" prop="sequenceCode">
        <el-input
          v-model="queryParams.sequenceCode"
          placeholder="请输入序列码"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="版本" prop="edition">
        <el-input
          v-model="queryParams.edition"
          placeholder="请输入版本"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="高校" prop="schoolId">
        <el-select v-model="queryParams.schoolId" placeholder="请选择高校" clearable size="small">
          <el-option
            v-for="item in querySchoolList"
            :key="item.id"
            :label="item.name"
            :value="item.id"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="主机ID" prop="hostId">
        <el-input
          v-model="queryParams.hostId"
          placeholder="请输入主机ID"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="β网络ID" prop="networkId">
        <el-input
          v-model="queryParams.networkId"
          placeholder="请输入β网络ID"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="β工作频段" prop="frequencyBand">
        <el-select v-model="queryParams.frequencyBand" placeholder="请选择β工作频段" clearable size="small">
          <el-option
            v-for="dict in dict.type.DICT102"
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="在用状态" prop="useStatus">
        <el-select v-model="queryParams.useStatus" placeholder="请选择在用状态" clearable size="small">
          <el-option
            v-for="dict in dict.type.DICT104"
            :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:equipment: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:equipment: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:equipment: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:equipment:export']"-->
      <!--        >导出</el-button>-->
      <!--      </el-col>-->
      <right-toolbar :showSearch.sync="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="序号" 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="设备类型" align="center" prop="type">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.DICT101" :value="scope.row.type"/>
        </template>
      </el-table-column>
      <el-table-column label="硬件序列码" align="center" prop="sequenceCode"/>
      <el-table-column label="软件版本" align="center" prop="edition"/>
      <el-table-column label="学校名称" align="center" prop="schoolId_dictText"/>
      <el-table-column label="主机ID" align="center" prop="hostId"/>
      <el-table-column label="β网络ID" align="center" prop="networkId"/>
      <el-table-column label="β工作频段" align="center" prop="frequencyBand">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.DICT102" :value="scope.row.frequencyBand"/>
        </template>
      </el-table-column>
      <el-table-column label="生产批次" align="center" prop="batchId_dictText"/>
      <el-table-column label="在用" align="center" prop="useStatus">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.DICT104" :value="scope.row.useStatus"/>
        </template>
      </el-table-column>
      <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="['oa:equipment:edit']"
          >修改
          </el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['oa:equipment: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" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="90px">
        <el-form-item label="序列号" prop="serialNumber">
          <el-input v-model="form.serialNumber" :disabled="disabled" placeholder="请输入序列号"/>
        </el-form-item>
        <el-form-item label="设备类型" prop="type">
          <el-select v-model="form.type" placeholder="请选择设备类型" :disabled="disabled">
            <el-option
              v-for="dict in dict.type.DICT101"
              :key="dict.value"
              :label="dict.label"
              :value="parseInt(dict.value)"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="序列码" prop="sequenceCode">
          <el-input v-model="form.sequenceCode" :disabled="disabled" placeholder="请输入序列码"/>
        </el-form-item>
        <el-form-item label="版本" prop="edition">
          <el-input v-model="form.edition" :disabled="disabled" placeholder="请输入版本"/>
        </el-form-item>
        <el-form-item label="高校" prop="schoolId">
          <el-select v-model="form.schoolId" :disabled="disabled" placeholder="请选择高校" clearable size="small">
            <el-option
              v-for="item in formSchoolList"
              :key="item.id"
              :label="item.name"
              :value="item.id"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="主机ID" prop="hostId">
          <el-input v-model="form.hostId" :disabled="disabled" placeholder="请输入主机ID"/>
        </el-form-item>
        <el-form-item label="β网络ID" prop="networkId">
          <el-input v-model="form.networkId" :disabled="disabled" placeholder="请输入β网络ID"/>
        </el-form-item>
        <el-form-item label="β工作频段" prop="frequencyBand">
          <el-select v-model="form.frequencyBand" :disabled="disabled" placeholder="请选择β工作频段" clearable size="small">
            <el-option
              v-for="dict in dict.type.DICT102"
              :key="dict.value"
              :label="dict.label"
              :value="dict.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="生产批次" prop="batchId">
          <el-select v-model="form.batchId" placeholder="请选生产批次" clearable size="small">
            <el-option
              v-for="item in formBatchList"
              :key="item.id"
              :label="item.batch"
              :value="item.id"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="在用状态" prop="useStatus">
          <el-select v-model="form.useStatus" placeholder="请选择在用状态" clearable size="small">
            <el-option
              v-for="dict in dict.type.DICT104"
              :key="dict.value"
              :label="dict.label"
              :value="dict.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="备注" prop="remarks">
          <el-input v-model="form.remarks" type="textarea" placeholder="请输入备注"/>
        </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>
    </el-dialog>
  </div>
</template>
<script>
import {listEquipment, getEquipment, delEquipment, addEquipment, updateEquipment} from "@/api/oa/equipment";
import {listSchool, listBatch} from "@/api/common/common";
export default {
  name: "Equipment",
  dicts: ['DICT101', 'DICT102', 'DICT104'],
  data() {
    return {
      // 按钮loading
      buttonLoading: false,
      // 遮罩层
      loading: true,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 智控设备表格数据
      equipmentList: [],
      // 弹出层标题
      title: "",
      // 是否显示弹出层
      open: false,
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        serialNumber: undefined,
        type: undefined,
        sequenceCode: undefined,
        edition: undefined,
        schoolId: undefined,
        hostId: undefined,
        networkId: undefined,
        frequencyBand: undefined,
        useStatus: undefined,
      },
      // 表单参数
      form: {},
      // 表单校验
      rules: {
        id: [
          {required: true, message: "id不能为空", trigger: "blur"}
        ],
        serialNumber: [
          {required: true, message: "序列号不能为空", trigger: "blur"}
        ],
        type: [
          {required: true, message: "设备类型不能为空", trigger: "change"}
        ],
        sequenceCode: [
          {required: true, message: "序列码不能为空", trigger: "blur"}
        ],
        edition: [
          {required: true, message: "版本不能为空", trigger: "blur"}
        ],
        schoolId: [
          {required: true, message: "学校id不能为空", trigger: "blur"}
        ],
        hostId: [
          {required: true, message: "主机ID不能为空", trigger: "blur"}
        ],
        networkId: [
          {required: true, message: "β网络ID不能为空", trigger: "blur"}
        ],
        frequencyBand: [
          {required: true, message: "β工作频段不能为空", trigger: "blur"}
        ],
        batchId: [
          {required: true, message: "生产批次不能为空", trigger: "blur"}
        ],
        useStatus: [
          {required: true, message: "在用状态不能为空", trigger: "blur"}
        ],
      },
      querySchoolList: [],
      queryBatchList: [],
      formSchoolList: [],
      formBatchList: [],
      disabled: false
    };
  },
  created() {
    this.getList();
    this.getSchool()
    this.getBatch()
  },
  methods: {
    /** 查询智控设备列表 */
    getList() {
      this.loading = true;
      listEquipment(this.queryParams).then(response => {
        this.equipmentList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    // 学校
    getSchool() {
      listSchool().then(res => {
        this.querySchoolList = res.data
      })
    },
    // 批次
    getBatch() {
      listBatch().then(res => {
        this.queryBatchList = res.data
      })
    },
    // 取消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    // 表单重置
    reset() {
      this.form = {
        id: undefined,
        serialNumber: undefined,
        type: undefined,
        sequenceCode: undefined,
        edition: undefined,
        schoolId: undefined,
        hostId: undefined,
        networkId: undefined,
        frequencyBand: undefined,
        batchId: undefined,
        useStatus: undefined,
        remarks: undefined,
        createBy: undefined,
        createTime: undefined,
        updateBy: undefined,
        updateTime: undefined,
        delFlag: undefined,
        version: undefined
      };
      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
    },
    // 学校
    getFormSchool() {
      listSchool().then(res => {
        this.formSchoolList = res.data
      })
    },
    // 批次
    getFormBatch() {
      listBatch().then(res => {
        this.formBatchList = res.data
      })
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.getFormSchool()
      this.getFormBatch()
      this.reset();
      this.open = true;
      this.disabled = false;
      this.title = "添加智控设备";
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.loading = true;
      this.getFormSchool()
      this.getFormBatch()
      this.reset();
      this.disabled = true;
      const id = row.id || this.ids
      getEquipment(id).then(response => {
        this.loading = false;
        this.form = response.data;
        this.open = true;
        this.title = "修改智控设备";
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          this.buttonLoading = true;
          if (this.form.id != null) {
            updateEquipment(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            }).finally(() => {
              this.buttonLoading = false;
            });
          } else {
            addEquipment(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('是否确认删除智控设备编号为"' + ids + '"的数据项?').then(() => {
        this.loading = true;
        return delEquipment(ids);
      }).then(() => {
        this.loading = false;
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).finally(() => {
        this.loading = false;
      });
    },
    /** 导出按钮操作 */
    handleExport() {
      this.download('oa/equipment/export', {
        ...this.queryParams
      }, `equipment_${new Date().getTime()}.xlsx`)
    }
  }
};
</script>
src/views/device/peripheralUnit/index.vue
New file
@@ -0,0 +1,473 @@
<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-input
          v-model="queryParams.manufacturer"
          placeholder="请输入生产厂商"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </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="外设代码" align="center" prop="code"/>
      <el-table-column label="外设名称" align="center" prop="name"/>
      <el-table-column label="规格型号" align="center" prop="model"/>
      <el-table-column label="生产厂商" align="center" prop="manufacturer"/>
      <el-table-column label="厂商代码" align="center" prop="vendorCode"/>
      <el-table-column label="波特率" 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" prop="readInstruction"/>
      <el-table-column label="回数长度" align="center" prop="loopLength"/>
      <el-table-column label="功能描述" align="center" prop="description"/>
      <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="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-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['oa:peripheralUnit:remove']"
          >删除
          </el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleUpload(scope.row)"
          >附件
          </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" width="500px" 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-input v-model="form.manufacturer" placeholder="请输入生产厂商" :disabled="disabled"/>
        </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">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
    <!-- 附件窗体 -->
    <el-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>
    </el-dialog>
  </div>
</template>
<script>
import {
  listPeripheralUnit,
  getPeripheralUnit,
  delPeripheralUnit,
  addPeripheralUnit,
  updatePeripheralUnit
} from "@/api/oa/peripheralUnit";
export default {
  name: "PeripheralUnit",
  dicts: ['DICT103'],
  data() {
    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"}
        ],
        model: [
          {required: true, message: "规格型号不能为空", trigger: "blur"}
        ],
        manufacturer: [
          {required: true, message: "生产厂商不能为空", trigger: "blur"}
        ],
        vendorCode: [
          {required: true, message: "厂商代码不能为空", trigger: "blur"}
        ],
        baudRate: [
          {required: true, message: "波特率不能为空", trigger: "change"}
        ],
        readInstruction: [
          {required: true, message: "读数指令不能为空", trigger: "blur"}
        ],
        loopLength: [
          {required: true, message: "回数长度不能为空", trigger: "blur"}
        ],
        filePath: [
          {required: true, message: "附件不能为空", trigger: "blur"}
        ],
      },
      disabled: false
    };
  },
  created() {
    this.getList();
  },
  methods: {
    /** 查询外设单元列表 */
    getList() {
      this.loading = true;
      listPeripheralUnit(this.queryParams).then(response => {
        this.peripheralUnitList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    // 取消按钮
    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.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.baudRate = '3'
      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.reset();
      const id = row.id || this.ids
      getPeripheralUnit(id).then(response => {
        this.loading = false;
        this.form = response.data;
        this.open = true;
        this.title = "修改外设单元";
      });
    },
    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          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('是否确认删除外设单元编号为"' + ids + '"的数据项?').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>
src/views/system/dept/index.vue
@@ -1,17 +1,17 @@
<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
      <el-form-item label="部门名称" prop="deptName">
      <el-form-item label="机构名称" prop="deptName">
        <el-input
          v-model="queryParams.deptName"
          placeholder="请输入部门名称"
          placeholder="请输入机构名称"
          clearable
          size="small"
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="状态" prop="status">
        <el-select v-model="queryParams.status" placeholder="部门状态" clearable size="small">
      <el-form-item label="机构状态" prop="status">
        <el-select v-model="queryParams.status" placeholder="机构状态" clearable size="small">
          <el-option
            v-for="dict in dict.type.sys_normal_disable"
            :key="dict.value"
@@ -35,7 +35,8 @@
          size="mini"
          @click="handleAdd"
          v-hasPermi="['system:dept:add']"
        >新增</el-button>
        >新增
        </el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
@@ -44,7 +45,8 @@
          icon="el-icon-sort"
          size="mini"
          @click="toggleExpandAll"
        >展开/折叠</el-button>
        >展开/折叠
        </el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
@@ -57,13 +59,17 @@
      :default-expand-all="isExpandAll"
      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
    >
      <el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
      <el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
      <el-table-column prop="deptName" label="机构名称" width="260"></el-table-column>
      <el-table-column prop="code" label="机构编号" width="200"></el-table-column>
<!--      <el-table-column prop="orderNum" label="排序" width="200"></el-table-column>-->
      <el-table-column prop="status" label="状态" width="100">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
        </template>
      </el-table-column>
      <el-table-column prop="leaderName" label="主负责人" width="200"></el-table-column>
      <el-table-column prop="leaderAssistantName" label="副负责人" width="200"></el-table-column>
      <el-table-column prop="remarks" label="机构职能" width="200"></el-table-column>
      <el-table-column label="创建时间" align="center" prop="createTime" width="200">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.createTime) }}</span>
@@ -75,16 +81,25 @@
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUser(scope.row)"
          >成员
          </el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-hasPermi="['system:dept:edit']"
          >修改</el-button>
          >修改
          </el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-plus"
            @click="handleAdd(scope.row)"
            v-hasPermi="['system:dept:add']"
          >新增</el-button>
          >新增
          </el-button>
          <el-button
            v-if="scope.row.parentId != 0"
            size="mini"
@@ -92,7 +107,8 @@
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['system:dept:remove']"
          >删除</el-button>
          >删除
          </el-button>
        </template>
      </el-table-column>
    </el-table>
@@ -102,13 +118,18 @@
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-row>
          <el-col :span="24" v-if="form.parentId !== 0">
            <el-form-item label="上级部门" prop="parentId">
            <el-form-item label="上级机构" prop="parentId">
              <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级部门" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="部门名称" prop="deptName">
              <el-input v-model="form.deptName" placeholder="请输入部门名称" />
            <el-form-item label="机构名称" prop="deptName">
              <el-input v-model="form.deptName" placeholder="请输入机构名称"/>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="机构编号" prop="code">
              <el-input v-model="form.code" placeholder="请输入机构名称"/>
            </el-form-item>
          </el-col>
          <el-col :span="12">
@@ -117,29 +138,54 @@
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="负责人" prop="leader">
              <el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" />
            <el-form-item label="主负责人" prop="leader">
              <el-select v-model="form.leader" placeholder="请选择主负责人" clearable size="small">
                <el-option
                  v-for="dict in userList"
                  :key="dict.userId"
                  :label="dict.nickName"
                  :value="dict.userId"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="联系电话" prop="phone">
              <el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="11" />
            <el-form-item label="副负责人" prop="leaderAssistant">
              <el-select v-model="form.leaderAssistant" placeholder="请选择副负责人" clearable size="small">
                <el-option
                  v-for="dict in userList"
                  :key="dict.userId"
                  :label="dict.nickName"
                  :value="dict.userId"
                />
              </el-select>
            </el-form-item>
          </el-col>
          <!--          <el-col :span="12">-->
          <!--            <el-form-item label="联系电话" prop="phone">-->
          <!--              <el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="11" />-->
          <!--            </el-form-item>-->
          <!--          </el-col>-->
          <!--          <el-col :span="12">-->
          <!--            <el-form-item label="邮箱" prop="email">-->
          <!--              <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />-->
          <!--            </el-form-item>-->
          <!--          </el-col>-->
          <el-col :span="12">
            <el-form-item label="邮箱" prop="email">
              <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="部门状态">
            <el-form-item label="机构状态">
              <el-radio-group v-model="form.status">
                <el-radio
                  v-for="dict in dict.type.sys_normal_disable"
                  :key="dict.value"
                  :label="dict.value"
                >{{dict.label}}</el-radio>
                >{{dict.label}}
                </el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="机构职能" prop="remarks">
              <el-input v-model="form.remarks" type="textarea" placeholder="请输入机构职能" controls-position="right" :min="0"/>
            </el-form-item>
          </el-col>
        </el-row>
@@ -149,11 +195,32 @@
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
    <!--机构成员-->
    <el-drawer
      title="机构成员"
      :visible.sync="drawer"
      direction="rtl"
      size="50%">
      <el-table :data="userTable">
        <el-table-column property="nickName" label="姓名" width="150"></el-table-column>
        <el-table-column property="phonenumber" label="电话" width="200"></el-table-column>
        <el-table-column property="userName" label="账号"></el-table-column>
      </el-table>
      <pagination
        v-show="tableTotal>0"
        :total="tableTotal"
        :page.sync="queryTable.pageNum"
        :limit.sync="queryTable.pageSize"
        @pagination="getList"
      />
    </el-drawer>
  </div>
</template>
<script>
import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept";
import {listUser, listUserDept} from "@/api/common/common";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -189,10 +256,13 @@
      // 表单校验
      rules: {
        parentId: [
          { required: true, message: "上级部门不能为空", trigger: "blur" }
          {required: true, message: "上级机构不能为空", trigger: "blur"}
        ],
        deptName: [
          { required: true, message: "部门名称不能为空", trigger: "blur" }
          {required: true, message: "机构名称不能为空", trigger: "blur"}
        ],
        code: [
          {required: true, message: "机构编号不能为空", trigger: "blur"}
        ],
        orderNum: [
          { required: true, message: "显示排序不能为空", trigger: "blur" }
@@ -211,6 +281,17 @@
            trigger: "blur"
          }
        ]
      },
      // 下拉用户
      userList: [],
      // 成员抽屉
      drawer: false,
      // 成员表格
      userTable: [],
      tableTotal: 0,
      queryTable: {
        pageNum: 1,
        pageSize: 10
      }
    };
  },
@@ -268,6 +349,7 @@
    /** 新增按钮操作 */
    handleAdd(row) {
      this.reset();
      this.getUserList()
      if (row != undefined) {
        this.form.parentId = row.deptId;
      }
@@ -277,6 +359,12 @@
        this.deptOptions = this.handleTree(response.data, "deptId");
      });
    },
    // 用户下拉列表
    getUserList() {
      listUser().then(res => {
        this.userList = res.data
      })
    },
    /** 展开/折叠操作 */
    toggleExpandAll() {
      this.refreshTable = false;
@@ -285,9 +373,19 @@
        this.refreshTable = true;
      });
    },
    // 机构成员
    handleUser(row) {
      this.drawer = true
      listUserDept(Object.assign({}, {deptId: row.deptId}, this.queryTable)).then(res => {
        console.log(res)
        this.userTable = res.data.records
        this.tableTotal = res.data.total
      })
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      this.getUserList()
      getDept(row.deptId).then(response => {
        this.form = response.data;
        this.open = true;
@@ -324,7 +422,8 @@
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
      }).catch(() => {
      });
    }
  }
};
src/views/system/user/index.vue
@@ -211,12 +211,24 @@
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-row>
          <el-col :span="12">
            <el-form-item label="用户昵称" prop="nickName">
              <el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
            <el-form-item v-if="form.userId == undefined" label="账号" prop="userName">
              <el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="归属部门" prop="deptId">
            <el-form-item v-if="form.userId == undefined" label="密码" prop="password">
              <el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password/>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="用户名称" prop="nickName">
              <el-input v-model="form.nickName" placeholder="请输入用户名称" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="所在部门" prop="deptId">
              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" placeholder="请选择归属部门" />
            </el-form-item>
          </el-col>
@@ -228,27 +240,20 @@
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="邮箱" prop="email">
              <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
            <el-form-item label="证件号码" prop="certificateNo">
              <el-input v-model="form.certificateNo" placeholder="请输入证件号码" maxlength="18" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
              <el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
              <el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password/>
            </el-form-item>
          </el-col>
<!--          <el-col :span="12">-->
<!--            <el-form-item label="邮箱" prop="email">-->
<!--              <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />-->
<!--            </el-form-item>-->
<!--          </el-col>-->
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="用户性别">
              <el-select v-model="form.sex" placeholder="请选择">
              <el-select v-model="form.sex" placeholder="请选择" prop="sex">
                <el-option
                  v-for="dict in dict.type.sys_user_sex"
                  :key="dict.value"
@@ -305,6 +310,23 @@
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="入职时间">
              <el-date-picker
                v-model="form.entryTime"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                placeholder="选择入职时间">
              </el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="照片">
              <imageUpload v-model="form.photo" :limit="1"/>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -356,6 +378,18 @@
  dicts: ['sys_normal_disable', 'sys_user_sex'],
  components: { Treeselect },
  data() {
    // 身份证号校验
    let checkIdNum = (rule, value, callback) => {
      const reg =
        /(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/
      if (!value) {
        return callback(new Error('证件号码不能为空'))
      } else if (!reg.test(value)) {
        return callback(new Error('证件号码不正确'))
      } else {
        callback()
      }
    }
    return {
      // 遮罩层
      loading: true,
@@ -430,8 +464,8 @@
      // 表单校验
      rules: {
        userName: [
          { required: true, message: "用户名称不能为空", trigger: "blur" },
          { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
          { required: true, message: "账号不能为空", trigger: "blur" },
          { min: 2, max: 20, message: '账号长度必须介于 2 和 20 之间', trigger: 'blur' }
        ],
        nickName: [
          { required: true, message: "用户昵称不能为空", trigger: "blur" }
@@ -440,19 +474,30 @@
          { required: true, message: "用户密码不能为空", trigger: "blur" },
          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
        ],
        email: [
          {
            type: "email",
            message: "'请输入正确的邮箱地址",
            trigger: ["blur", "change"]
          }
        ],
        // email: [
        //   {
        //     type: "email",
        //     message: "'请输入正确的邮箱地址",
        //     trigger: ["blur", "change"]
        //   }
        // ],
        phonenumber: [
          { required: true, message: "手机号码不能为空", trigger: "blur" },
          {
            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
            message: "请输入正确的手机号码",
            trigger: "blur"
          }
        ],
        certificateNo: [
          { required: true, message: "证件号码不能为空", trigger: "blur" },
          { validator: checkIdNum, trigger: 'blur' }
        ],
        sex: [
          { required: true, message: "性别不能为空", trigger: "blur" }
        ],
        deptId: [
          { required: true, message: "所在部门不能为空", trigger: "blur" }
        ]
      }
    };