소스 검색

Merge remote-tracking branch 'origin/master'

humingbo 1 년 전
부모
커밋
18ba9e14b6

+ 8 - 1
src/api/material/transfer.js

@@ -36,4 +36,11 @@ export function confirmReceive(transferId) {
   })
 }
 
-
+// 耗材领用记录
+export function consumablesReceiveList(data) {
+  return request({
+    url: '/material/asset/transfer/consumablesReceiveList',
+    method: 'post',
+    data: data
+  })
+}

+ 69 - 2
src/views/material/asset.vue

@@ -69,6 +69,16 @@
               >导出
               </el-button>
             </el-col>
+            <el-col :span="1.5">
+              <el-button
+                plain
+                icon="el-icon-document"
+                size="mini"
+                @click="toConsumablesReceive"
+                v-hasPermi="['material:asset:add']"
+              >耗材领用记录
+              </el-button>
+            </el-col>
           </el-row>
         </div>
 
@@ -80,7 +90,35 @@
                   height="calc(100vh - 180px)"
                   size="mini">
           <el-table-column label="唯一编码" prop="deptAssetNumber" :show-overflow-tooltip="true"/>
-          <el-table-column label="物品名称" prop="assetName" min-width="100" :show-overflow-tooltip="true"/>
+          <el-table-column label="物品名称" prop="assetName" min-width="100" :show-overflow-tooltip="true">
+            <template slot-scope="scope">
+              <el-popover
+                placement="right"
+                width="500"
+                trigger="hover">
+                <div class="assset-popover">
+                  <span class="a-p-title">入库来源:</span>
+                  <el-tag>{{ getSourceName(scope.row.source) }}</el-tag>
+                </div>
+                <div class="assset-popover">
+                  <span class="a-p-title">详细描述:</span>
+                  <span class="a-p-des">{{ scope.row.remark }}</span>
+                </div>
+                <div class="assset-popover">
+                  <span class="a-p-title">当前状态:</span>
+                  <el-tag v-if="scope.row.status!='1'">{{'【' + scope.row.transferRecord.receiveUserName + '】正在领用' }}</el-tag>
+                  <el-tag v-else>{{ '【在库】' }}</el-tag>
+                  <span class="a-p-des">{{ parseTime(scope.row.transferRecord.transferDate) }}</span>
+                  <span class="a-p-des a-p-user">{{ scope.row.transferRecord.transferUserName }}</span>
+                  <span class="a-p-des"><i class="el-icon-right"/></span>
+                  <span class="a-p-des a-p-user">{{ scope.row.transferRecord.receiveUserName }}</span>
+                  <span class="a-p-des">{{ '【' + scope.row.transferRecord.transferRemark + '】' }}</span>
+                </div>
+
+                <div slot="reference">{{ scope.row.assetName }}</div>
+              </el-popover>
+            </template>
+          </el-table-column>
           <el-table-column label="公司资产编号" prop="assetNumber" :show-overflow-tooltip="true"/>
           <el-table-column label="资产类型" width="80">
             <template slot-scope="scope">
@@ -560,6 +598,9 @@ export default {
     handleExport() {
       exportAsset()
     },
+    toConsumablesReceive() {
+      this.$router.push('/material/consumablesReceive')
+    },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
@@ -720,7 +761,15 @@ export default {
       cell.style.color = '#606266';
       cell.style.textDecoration = 'none';
     },
-
+    getSourceName(sourceCode) {
+      let label = ''
+      this.dict.type.s_source.forEach(dict => {
+        if (dict.value === sourceCode) {
+          label = dict.label
+        }
+      })
+      return label
+    }
   }
 }
 </script>
@@ -755,4 +804,22 @@ export default {
   text-align: right;
   margin-top: 20px;
 }
+
+.assset-popover {
+  margin: 5px 0;
+
+  .a-p-title {
+    font-size: 12px;
+    font-weight: bold;
+  }
+
+  .a-p-des {
+    font-size: 11px;
+    margin-left: 5px;
+  }
+
+  .a-p-user {
+    color: #409eff;
+  }
+}
 </style>

+ 22 - 13
src/views/material/components/assetDetail.vue

@@ -19,26 +19,23 @@
           <el-form-item v-if="form.assetType==='1'" label="库存数">
             <div>{{ form.num }}</div>
           </el-form-item>
-<!--          <el-form-item label="设备设施名称" prop="equipmentName">-->
-<!--            <div>{{ form.equipmentName }}</div>-->
-<!--          </el-form-item>-->
+          <!--          <el-form-item label="设备设施名称" prop="equipmentName">-->
+          <!--            <div>{{ form.equipmentName }}</div>-->
+          <!--          </el-form-item>-->
           <el-form-item label="设备型号" prop="equipmentType">
             <div>{{ form.equipmentType }}</div>
           </el-form-item>
-<!--          <el-form-item label="设备编号" prop="equipmentNumber">-->
-<!--            <div>{{ form.equipmentNumber }}</div>-->
-<!--          </el-form-item>-->
-<!--          <el-form-item label="原厂编号" prop="factoryNumber">-->
-<!--            <div>{{ form.factoryNumber }}</div>-->
-<!--          </el-form-item>-->
+          <!--          <el-form-item label="设备编号" prop="equipmentNumber">-->
+          <!--            <div>{{ form.equipmentNumber }}</div>-->
+          <!--          </el-form-item>-->
+          <!--          <el-form-item label="原厂编号" prop="factoryNumber">-->
+          <!--            <div>{{ form.factoryNumber }}</div>-->
+          <!--          </el-form-item>-->
           <el-form-item label="生产厂家" prop="factoryName">
             <div>{{ form.factoryName }}</div>
           </el-form-item>
           <el-form-item label="入库来源" prop="source">
-            <el-tag v-if="form.source==='1'" size="mini">采购</el-tag>
-            <el-tag v-else-if="form.source==='2'" size="mini">租赁</el-tag>
-            <el-tag v-else-if="form.source==='3'" size="mini">借用</el-tag>
-            <el-tag v-else size="mini">赠送</el-tag>
+            <el-tag size="mini">{{ getSourceName(form.source) }}</el-tag>
           </el-form-item>
           <el-form-item label="购入日期" prop="buyDate">
             <div>{{ form.buyDate }}</div>
@@ -67,11 +64,23 @@
 <script>
 export default {
   name: "assetDetail",
+  dicts: ['s_source'],
   props: {
     form: {
       type: Object,
       default: {}
     }
+  },
+  methods: {
+    getSourceName(sourceCode) {
+      let label = ''
+      this.dict.type.s_source.forEach(dict => {
+        if (dict.value === sourceCode) {
+          label = dict.label
+        }
+      })
+      return label
+    }
   }
 }
 </script>

+ 137 - 0
src/views/material/consumablesReceive.vue

@@ -0,0 +1,137 @@
+<template>
+  <div class="app-container">
+    <el-row>
+      <el-col :span="22">
+        <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
+          <el-form-item label="耗材名称" prop="assetName">
+            <el-input v-model="queryParams.assetName" placeholder="请输入耗材名称"></el-input>
+          </el-form-item>
+          <el-form-item label="资产编号" prop="deptAssetNumber">
+            <el-input v-model="queryParams.deptAssetNumber" placeholder="请输入资产编号"></el-input>
+          </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-col>
+      <el-col :span="2">
+        <el-button icon="el-icon-back" @click="goBack">返回</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table :data="receiveList"
+              size="mini"
+              height="calc(100vh - 180px)"
+              row-key="id">
+      <el-table-column label="唯一编码" prop="deptAssetNumber" :show-overflow-tooltip="true"/>
+      <el-table-column label="公司资产编号" prop="assetNumber" :show-overflow-tooltip="true"/>
+      <el-table-column label="物品名称" prop="assetName" min-width="100" :show-overflow-tooltip="true"/>
+      <el-table-column label="设备型号" prop="equipmentType" :show-overflow-tooltip="true"/>
+      <!--      <el-table-column label="设备编号" prop="equipmentNumber" :show-overflow-tooltip="true"/>-->
+      <!--      <el-table-column label="原厂编号" prop="factoryNumber" :show-overflow-tooltip="true"/>-->
+      <el-table-column label="生产厂家" prop="factoryName" :show-overflow-tooltip="true"/>
+      <el-table-column label="领用数量" prop="receiveNum" width="80"/>
+      <el-table-column label="领用人" prop="receiveUserName" width="80"/>
+      <el-table-column label="领用日期" prop="transferDate">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.transferDate) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="领用备注" prop="transferRemark" :show-overflow-tooltip="true"/>
+    </el-table>
+    <div style="margin-top: 10px;text-align: center">
+      <el-pagination
+        background
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="queryParams.pageNum"
+        :page-sizes="[10, 20, 50]"
+        :page-size="queryParams.pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div>
+  </div>
+
+</template>
+
+<script>
+import {consumablesReceiveList} from "@/api/material/transfer";
+import {getAsset} from "@/api/material/asset";
+
+export default {
+  name: "consumablesReceive",
+  data() {
+    return {
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10
+      },
+      total: 0,
+      receiveList: []
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    goBack() {
+      this.$router.go(-1)
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    getList() {
+      consumablesReceiveList(this.queryParams).then(res => {
+        this.receiveList = res.data.records;
+        this.total = res.data.total;
+      })
+    },
+    handleSizeChange(val) {
+      this.queryParams.pageSize = val;
+      this.getList();
+    },
+    handleCurrentChange(val) {
+      this.queryParams.pageNum = val;
+      this.getList();
+    },
+    cellClick(row, column, event) {
+      if (column.property != 'assetName') {
+        return
+      }
+      getAsset(row.id).then(res => {
+        this.form = res.data
+        this.title = '物品详情'
+        this.detailOpen = true;
+      })
+    },
+    cellMouseEnter(row, column, cell, event) {
+      if (column.property != 'assetName') {
+        return
+      }
+      cell.style.color = '#306FB1';
+      cell.style.cursor = 'pointer';
+      cell.style.textDecoration = 'underline';
+    },
+    cellMouseLeave(row, column, cell, event) {
+      if (column.property != 'assetName') {
+        return
+      }
+      cell.style.color = '#606266';
+      cell.style.textDecoration = 'none';
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 12 - 9
src/views/material/myReceive.vue

@@ -66,13 +66,13 @@
       </el-table-column>
       <el-table-column label="操作" width="160">
         <template slot-scope="scope">
-          <!--          <el-button-->
-          <!--            icon="el-icon-edit"-->
-          <!--            size="mini"-->
-          <!--            type="text"-->
-          <!--            @click="handleTransfer(scope.row)"-->
-          <!--          >流转记录-->
-          <!--          </el-button>-->
+          <el-button
+            icon="el-icon-edit"
+            size="mini"
+            type="text"
+            @click="handleTransfer(scope.row)"
+          >流转
+          </el-button>
           <el-button
             icon="el-icon-coordinate"
             size="mini"
@@ -81,13 +81,16 @@
             @click="handleConfirm(scope.row)"
           >领用确认
           </el-button>
-          <el-tag type="success" v-if="scope.row.receiveConfirm==='1'"><i class="el-icon-coordinate"></i>已确认</el-tag>
+          <el-tag type="success" v-if="scope.row.receiveConfirm==='1'" style="margin-left: 10px">
+            <i class="el-icon-coordinate"></i>已确认
+          </el-tag>
         </template>
       </el-table-column>
     </el-table>
 
     <!-- 资产详情对话框 -->
-    <el-dialog :title="title" :visible.sync="detailOpen" width="800px" append-to-body @close="cancel" :close-on-click-modal="!confirmDialog">
+    <el-dialog :title="title" :visible.sync="detailOpen" width="800px" append-to-body @close="cancel"
+               :close-on-click-modal="!confirmDialog">
       <asset-detail :form="form"></asset-detail>
       <div v-if="confirmDialog" slot="footer" class="dialog-footer">
         <el-button type="primary" size="mini" @click="submitConfirm">确 定</el-button>

+ 36 - 6
src/views/task/components/project.vue

@@ -70,12 +70,16 @@
             <el-radio label="1">停用</el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="可查看人员" prop="viewable">
+        <el-form-item label="可查看人员" prop="viewable" v-if="form.type==='2'&&form.parentId">
           <dept-user-tree ref="dut" :userList="userList" :multiple="true" @selected="selectCoExecutor"/>
         </el-form-item>
         <el-form-item label="描述" prop="description">
           <rich-text-editor ref="rtEditor" v-model="form.description"></rich-text-editor>
         </el-form-item>
+        <el-form-item label="审核流程" v-if="form.type==='2'&&form.parentId">
+          <audit-module ref="auditModule" :audit-users="auditUsers"
+                        :project-audit-configs="projectAuditConfigs"></audit-module>
+        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" size="mini" @click="submitForm">确 定</el-button>
@@ -98,12 +102,18 @@
             <el-radio label="1">停用</el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="可查看人员" prop="viewable">
+        <el-form-item label="可查看人员" prop="viewable" v-if="form.type==='2'">
           <div>{{ form.viewUserNames }}</div>
         </el-form-item>
         <el-form-item label="描述" prop="description">
           <div v-html="form.description"></div>
         </el-form-item>
+        <el-form-item label="审核流程" v-if="form.type==='2'">
+          <template v-for="(config,index) in form.auditConfigs">
+            <el-tag>{{ config.configCode }}</el-tag>
+            <i class="el-icon-right" v-if="index!=form.auditConfigs.length-1"></i>
+          </template>
+        </el-form-item>
       </el-form>
     </el-dialog>
 
@@ -118,16 +128,18 @@ import {
   addProject,
   updateProject, getProjectTree
 } from "@/api/task/project";
-import {getDeptUserTree} from "@/api/system/user";
+import {getAuditUsers, getDeptUserTree} from "@/api/system/user";
 
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import DeptUserTree from "@/components/DeptUserTree"
 import RichTextEditor from '@/components/RichTextEditor'
+import AuditModule from '@/views/task/components/auditModule';
+import {projectAuditConfigs} from "@/api/task/task";
 
 export default {
   name: "Project",
-  components: {Treeselect, DeptUserTree, RichTextEditor},
+  components: {Treeselect, DeptUserTree, RichTextEditor, AuditModule},
   data() {
     return {
       projectName: '',
@@ -161,7 +173,8 @@ export default {
       userList: [],
       expandedKeys: [],
       detailOpen: false,
-
+      auditUsers: [],
+      projectAuditConfigs: []
     };
   },
   watch: {
@@ -205,9 +218,11 @@ export default {
     },
     // 取消按钮
     cancel() {
-      this.open = false;
       this.$refs.dut.clearText()
+      this.projectAuditConfigs = []
+      this.auditUsers = []
       this.reset();
+      this.open = false;
     },
     // 表单重置
     reset() {
@@ -267,6 +282,9 @@ export default {
       getDeptUserTree('1').then(res => {
         this.userList = res.data
       })
+      getAuditUsers().then(res => {
+        this.auditUsers = res.data
+      })
     },
     selectCoExecutor(val) {
       this.form.viewable = val.join();
@@ -279,6 +297,12 @@ export default {
         arr.push(getProjectTree().then(response => {
           this.projectOptions = response.data
         }))
+        getAuditUsers().then(res => {
+          this.auditUsers = res.data
+        })
+        projectAuditConfigs({projectId: row.id}).then(res => {
+          this.projectAuditConfigs = res.data
+        })
       }
       arr.push(getDeptUserTree('1').then(res => {
         this.userList = res.data
@@ -296,6 +320,7 @@ export default {
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
+          this.form['auditConfigs'] = this.$refs.auditModule.getAuditConfigs()
           if (this.form.id != undefined) {
             if (this.form.id === this.form.parentId) {
               this.$message.error("上级结构不能自身节点")
@@ -391,4 +416,9 @@ export default {
     line-height: 28px;
   }
 }
+
+.el-icon-right {
+  font-weight: bold;
+  margin-right: 5px;
+}
 </style>