jiangbiao 1 рік тому
батько
коміт
5259835586

+ 9 - 0
master/src/main/java/com/ruoyi/project/production/controller/TPpePersonController.java

@@ -53,6 +53,15 @@ public class TPpePersonController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 查询员工PPE检查列表
+     */
+    @PreAuthorize("@ss.hasPermi('production:person:list')")
+    @GetMapping("/listAll")
+    public AjaxResult listAll(TPpePerson tPpePerson) {
+        return AjaxResult.success(tPpePersonService.selectTPpePersonList(tPpePerson));
+    }
+
     /**
      * 导出员工PPE检查列表
      */

+ 7 - 7
master/src/main/resources/mybatis/production/TPpeMatrixMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.project.production.mapper.TPpeMatrixMapper">
-    
+
     <resultMap type="TPpeMatrix" id="TPpeMatrixResult">
         <result property="id"    column="id"    />
         <result property="ppeType"    column="ppe_type"    />
@@ -27,8 +27,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectTPpeMatrixList" parameterType="TPpeMatrix" resultMap="TPpeMatrixResult">
         <include refid="selectTPpeMatrixVo"/>
-        <where>  
-            <if test="ppeType != null  and ppeType != ''"> and ppe_type = #{ppeType}</if>
+        <where>
+            <if test="ppeType != null  and ppeType != ''"> and ppe_type like concat(concat('%', #{ppeType}), '%')</if>
             <if test="usePost != null  and usePost != ''"> and use_post = #{usePost}</if>
             <if test="assigner != null  and assigner != ''"> and assigner = #{assigner}</if>
             <if test="createrCode != null  and createrCode != ''"> and creater_code = #{createrCode}</if>
@@ -43,12 +43,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <!-- 数据范围过滤 -->
         ${params.dataScope}
     </select>
-    
+
     <select id="selectTPpeMatrixById" parameterType="Long" resultMap="TPpeMatrixResult">
         <include refid="selectTPpeMatrixVo"/>
         where id = #{id}
     </select>
-        
+
     <insert id="insertTPpeMatrix" parameterType="TPpeMatrix">
         <selectKey keyProperty="id" resultType="long" order="BEFORE">
             SELECT seq_t_ppe_matrix.NEXTVAL as id FROM DUAL
@@ -112,5 +112,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </update>
-    
-</mapper>
+
+</mapper>

+ 9 - 1
ui/src/api/production/person.js

@@ -9,6 +9,14 @@ export function listPerson(query) {
   })
 }
 
+export function listAllPerson(query) {
+  return request({
+    url: '/production/person/listAll',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询员工PPE检查详细
 export function getPerson(id) {
   return request({
@@ -50,4 +58,4 @@ export function exportPerson(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 173 - 127
ui/src/views/production/matrix/index.vue

@@ -1,27 +1,27 @@
 <template>
   <div class="app-container">
-    <el-form-item label="岗位" prop="usePost">
-      <el-select v-model="queryParams.usePost" placeholder="请选择应配备岗位" clearable size="small">
-        <el-option
-          v-for="dict in usePostOptions"
-          :key="dict.dictValue"
-          :label="dict.dictLabel"
-          :value="dict.dictValue"
-        />
-      </el-select>
-    </el-form-item>
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" label-width="68px">
+      <el-form-item label="岗位" prop="usePost">
+        <el-select v-model="queryParams.usePost" clearable placeholder="请选择应配备岗位" size="small">
+          <el-option
+            v-for="dict in usePostOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
       <el-form-item label="PPE种类" prop="ppeType">
         <el-input
           v-model="queryParams.ppeType"
-          placeholder="请输入PPE种类"
           clearable
+          placeholder="请输入PPE种类"
           size="small"
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
       <el-form-item>
-        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-search" size="mini" type="cyan" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
@@ -29,74 +29,80 @@
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
-          type="primary"
+          v-hasPermi="['production:matrix:add']"
           icon="el-icon-plus"
           size="mini"
+          type="primary"
           @click="handleAdd"
-          v-hasPermi="['production:matrix:add']"
-        >新增</el-button>
+        >新增
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
-          type="success"
+          v-hasPermi="['production:matrix:edit']"
+          :disabled="single"
           icon="el-icon-edit"
           size="mini"
-          :disabled="single"
+          type="success"
           @click="handleUpdate"
-          v-hasPermi="['production:matrix:edit']"
-        >修改</el-button>
+        >修改
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
-          type="danger"
+          v-hasPermi="['production:matrix:remove']"
+          :disabled="multiple"
           icon="el-icon-delete"
           size="mini"
-          :disabled="multiple"
+          type="danger"
           @click="handleDelete"
-          v-hasPermi="['production:matrix:remove']"
-        >删除</el-button>
+        >删除
+        </el-button>
       </el-col>
-	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="matrixList" @selection-change="handleSelectionChange" :span-method="mergeMethod" :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="岗位" align="center" prop="usePost" :formatter="usePostFormat" />
-      <el-table-column label="PPE种类" align="center" prop="ppeType" :show-overflow-tooltip="true"/>
-      <el-table-column label="指定人" align="center" prop="assigner" :show-overflow-tooltip="true"/>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+    <el-table v-loading="loading" :data="matrixList" :height="clientHeight"
+              :span-method="mergeMethod" border @selection-change="handleSelectionChange">
+      <el-table-column align="center" type="selection" width="55"/>
+      <el-table-column :formatter="usePostFormat" align="center" label="岗位" prop="usePost"/>
+      <el-table-column :show-overflow-tooltip="true" align="center" label="PPE种类" prop="ppeType"/>
+      <el-table-column :show-overflow-tooltip="true" :formatter="personFormat" align="center" label="指定人" prop="assigner"/>
+      <el-table-column align="center" class-name="small-padding fixed-width" label="操作">
         <template slot-scope="scope">
           <el-button
+            v-hasPermi="['production:matrix:edit']"
+            icon="el-icon-edit"
             size="mini"
             type="text"
-            icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
-            v-hasPermi="['production:matrix:edit']"
-          >修改</el-button>
+          >修改
+          </el-button>
           <el-button
+            v-hasPermi="['production:matrix:remove']"
+            icon="el-icon-delete"
             size="mini"
             type="text"
-            icon="el-icon-delete"
             @click="handleDelete(scope.row)"
-            v-hasPermi="['production:matrix:remove']"
-          >删除</el-button>
+          >删除
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
 
     <pagination
       v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
       :limit.sync="queryParams.pageSize"
+      :page.sync="queryParams.pageNum"
+      :total="total"
       @pagination="getList"
     />
 
     <!-- 添加或修改ppe矩阵管理对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" append-to-body width="500px">
       <el-form ref="form" :model="form" :rules="rules" label-width="120px">
         <el-form-item label="PPE种类" prop="ppeType">
-          <el-input v-model="form.ppeType" placeholder="请输入PPE种类" />
+          <el-input v-model="form.ppeType" placeholder="请输入PPE种类"/>
         </el-form-item>
         <el-form-item label="应配备岗位" prop="usePost">
           <el-select v-model="form.usePost" placeholder="请选择应配备岗位">
@@ -111,11 +117,18 @@
         <el-form-item label="是否指定人" prop="isAssigner">
           <el-checkbox v-model="form.isAssigner">是否指定人?</el-checkbox>
         </el-form-item>
-        <el-form-item label="指定人" prop="assigner" v-if="form.isAssigner">
-          <el-input v-model="form.assigner" placeholder="请输入指定人" />
+        <el-form-item v-if="form.isAssigner" label="指定人" prop="assigner">
+          <el-select v-model="form.assigner" clearable filterable multiple placeholder="请选择指定人">
+            <el-option
+              v-for="dict in personOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel+'_'+dict.dictValue"
+              :value="dict.dictValue"
+            ></el-option>
+          </el-select>
         </el-form-item>
         <el-form-item label="备注" prop="remarks">
-          <el-input v-model="form.remarks" placeholder="请输入备注" />
+          <el-input v-model="form.remarks" placeholder="请输入备注"/>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -127,15 +140,24 @@
 </template>
 
 <script>
-import { listMatrix, getMatrix, delMatrix, addMatrix, updateMatrix, exportMatrix, importTemplate} from "@/api/production/matrix";
-import { treeselect } from "@/api/system/dept";
-import { getToken } from "@/utils/auth";
+import {
+  addMatrix,
+  delMatrix,
+  exportMatrix,
+  getMatrix,
+  importTemplate,
+  listMatrix,
+  updateMatrix
+} from "@/api/production/matrix";
+import {treeselect} from "@/api/system/dept";
+import {getToken} from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {listAllPerson} from "@/api/production/person";
 
 export default {
   name: "Matrix",
-  components: { Treeselect },
+  components: {Treeselect},
   data() {
     return {
       // 遮罩层
@@ -156,26 +178,27 @@ export default {
       title: "",
       // 部门树选项
       deptOptions: undefined,
-      clientHeight:300,
+      clientHeight: 300,
       // 是否显示弹出层
       open: false,
       // 应配备岗位字典
       usePostOptions: [],
-        // 用户导入参数
-        upload: {
-            // 是否显示弹出层(用户导入)
-            open: false,
-            // 弹出层标题(用户导入)
-            title: "",
-            // 是否禁用上传
-            isUploading: false,
-            // 是否更新已经存在的用户数据
-            updateSupport: 0,
-            // 设置上传的请求头部
-            headers: { Authorization: "Bearer " + getToken() },
-            // 上传的地址
-            url: process.env.VUE_APP_BASE_API + "/production/matrix/importData"
-        },
+      personOptions: [],
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/production/matrix/importData"
+      },
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -195,28 +218,39 @@ export default {
       form: {},
       // 表单校验
       rules: {
-        deptId: [
-          { required: true, message: "部门编号不能为空", trigger: "blur" }
+        assigner: [
+          {required: true, message: "指定人不能为空", trigger: "blur"}
+        ],
+        usePost: [
+          {required: true, message: "岗位不能为空", trigger: "blur"}
+        ],
+        ppeType: [
+          {required: true, message: "PPE种类不能为空", trigger: "blur"}
         ],
       }
     };
   },
   watch: {
-        // 根据名称筛选部门树
-        deptName(val) {
-            this.$refs.tree.filter(val);
-        }
-   },
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
   created() {
-      //设置表格高度对应屏幕高度
-      this.$nextTick(() => {
-          this.clientHeight = document.body.clientHeight -250
-      })
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 250
+    })
     this.getList();
     this.getTreeselect();
     this.getDicts("PPE_POST").then(response => {
       this.usePostOptions = response.data;
     });
+    listAllPerson({}).then(res => {
+      res.data.forEach(item=>{
+        this.personOptions.push({dictValue:item.employeeid,dictLabel:item.name})
+      })
+    })
   },
   methods: {
     /** 查询ppe矩阵管理列表 */
@@ -228,16 +262,20 @@ export default {
         this.loading = false;
       });
     },
-     /** 查询部门下拉树结构 */
-     getTreeselect() {
-          treeselect().then(response => {
-              this.deptOptions = response.data;
-          });
-     },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
     // 应配备岗位字典翻译
     usePostFormat(row, column) {
       return this.selectDictLabel(this.usePostOptions, row.usePost);
     },
+    // 指定人字典翻译
+    personFormat(row, column) {
+      return this.selectDictLabels(this.personOptions, row.assigner,',');
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -274,7 +312,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -288,6 +326,9 @@ export default {
       this.reset();
       const id = row.id || this.ids
       getMatrix(id).then(response => {
+        if (response.data.assigner)
+          response.data.assigner = response.data.assigner.split(',')
+        response.data.isAssigner == '1' ? response.data.isAssigner = true : false;
         this.form = response.data;
         this.open = true;
         this.title = "修改ppe矩阵管理";
@@ -297,6 +338,11 @@ export default {
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
+          if (this.form.assigner)
+            this.form.assigner = this.form.assigner.join(',')
+          if (this.form.isAssigner){
+            this.form.isAssigner='1';
+          }
           if (this.form.id != null) {
             updateMatrix(this.form).then(response => {
               this.msgSuccess("修改成功");
@@ -317,61 +363,61 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$confirm('是否确认删除?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delMatrix(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delMatrix(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
     },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
       this.$confirm('是否确认导出所有ppe矩阵管理数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportMatrix(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportMatrix(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
     },
-      /** 导入按钮操作 */
-      handleImport() {
-          this.upload.title = "用户导入";
-          this.upload.open = true;
-      },
-      /** 下载模板操作 */
-      importTemplate() {
-          importTemplate().then(response => {
-              this.download(response.msg);
-          });
-      },
-      // 文件上传中处理
-      handleFileUploadProgress(event, file, fileList) {
-          this.upload.isUploading = true;
-      },
-      // 文件上传成功处理
-      handleFileSuccess(response, file, fileList) {
-          this.upload.open = false;
-          this.upload.isUploading = false;
-          this.$refs.upload.clearFiles();
-          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
-          this.getList();
-      },
-      // 提交上传文件
-      submitFileForm() {
-          this.$refs.upload.submit();
-      },
 
     //合并单元格
     mergeMethod({row, column, rowIndex, columnIndex}) {
       // console.log(row)
-      if (columnIndex===1) {
+      if (columnIndex === 1) {
         const _row = this.setTable(this.matrixList).merge[rowIndex];
         const _col = _row > 0 ? 1 : 0;
         return {