Browse Source

资产管理取消选中分类功能;我的领用增加流转记录,资产管理员可查看他人领用;资产导出功能优化,资产列表增加定位位置显示,资产流转增加当前定位位置

ysc 1 year ago
parent
commit
db446a54aa

+ 8 - 3
src/views/material/asset.vue

@@ -2,7 +2,7 @@
   <div class="app-container">
     <el-row :gutter="20">
       <el-col :span="5" :xs="24">
-        <category @selectCategory="selectCategory"></category>
+        <category ref="cgTreee" @selectCategory="selectCategory"></category>
       </el-col>
       <el-col :span="19" :xs="24">
         <div class="query-container">
@@ -79,7 +79,7 @@
                   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="assetNumber" :show-overflow-tooltip="true"/>
+          <!--          <el-table-column label="公司资产编号" prop="assetNumber" :show-overflow-tooltip="true"/>-->
           <el-table-column label="资产类型" width="80">
             <template slot-scope="scope">
               <el-tag v-if="scope.row.assetType==='1'" size="mini" type="warning">耗材</el-tag>
@@ -101,6 +101,7 @@
               <el-tag v-else type="danger">丢弃</el-tag>
             </template>
           </el-table-column>
+          <el-table-column label="定位位置" prop="location" width="80"/>
           <el-table-column label="操作" width="160">
             <template slot-scope="scope">
               <el-button
@@ -286,6 +287,9 @@
             <el-form-item label="物品说明" prop="remark">
               <div>{{ transferForm.remark }}</div>
             </el-form-item>
+            <el-form-item label="定位位置" prop="location">
+              <div>{{ transferForm.location }}</div>
+            </el-form-item>
             <el-form-item v-if="transferForm.assetType==='1'" label="库存数">
               <div>{{ transferForm.num }}</div>
             </el-form-item>
@@ -520,6 +524,7 @@ export default {
       this.dateRange = [];
       this.resetForm("queryForm");
       this.queryParams.deptId = undefined;
+      this.$refs.cgTreee.clear()
       this.handleQuery();
     },
 
@@ -628,7 +633,7 @@ export default {
 
     /**  流转按钮操作 */
     handleTransfer(row) {
-      getDeptUserTree('').then(res => {
+      getDeptUserTree('1').then(res => {
         this.userList = res.data
       })
       getTransferList(row.id).then(res => {

+ 4 - 0
src/views/material/components/category.vue

@@ -223,6 +223,10 @@ export default {
         this.getCategoryTree();
       }).catch(() => {
       });
+    },
+    clear(){
+      this.$refs.categoryTree.setCurrentKey(null)
+      this.$emit('selectCategory', null)
     }
   }
 };

+ 285 - 11
src/views/material/myReceive.vue

@@ -1,6 +1,21 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
+      <el-form-item label="领用人" prop="receiveUserId" v-hasPermi="['material:asset:add']">
+        <el-autocomplete
+          class="my-autocomplete"
+          v-model="selectUser"
+          :fetch-suggestions="querySearch"
+          placeholder="请输入姓名"
+          @select="handleSelect">
+          <template slot-scope="{ item }">
+            <div class="autocomplete-item">
+              <div class="name">{{ item.value }}</div>
+              <div class="dept">{{ item.deptName }}</div>
+            </div>
+          </template>
+        </el-autocomplete>
+      </el-form-item>
       <el-form-item label="资产类型" prop="assetType">
         <el-select
           v-model="queryParams.assetType"
@@ -33,20 +48,27 @@
         </template>
       </el-table-column>
       <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="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="receiveDate">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.receiveDate) }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="操作" width="120">
+      <el-table-column label="操作" mini-width="120">
         <template slot-scope="scope">
           <el-button
-            plain
+            icon="el-icon-edit"
+            size="mini"
+            type="text"
+            @click="handleTransfer(scope.row)"
+          >流转记录
+          </el-button>
+          <el-button
             icon="el-icon-coordinate"
             size="mini"
+            type="text"
             v-if="scope.row.receiveConfirm==='0'"
             @click="handleConfirm(scope.row)"
           >领用确认
@@ -63,30 +85,168 @@
         <el-button size="mini" @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+
+    <!-- 物品流转记录对话框 -->
+    <el-dialog title="物品流转记录" :visible.sync="transferOpen" class="asset-dialog" width="800px" append-to-body
+               @close="cancelTransferForm">
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form ref="transferForm" :model="transferForm" :rules="transferRules" size="mini" label-width="100px">
+            <el-form-item label="物品名称" prop="assetName">
+              <div>{{ transferForm.assetName }}</div>
+            </el-form-item>
+            <el-form-item label="公司资产编号" prop="assetNumber">
+              <div>{{ transferForm.assetNumber }}</div>
+            </el-form-item>
+            <el-form-item label="唯一编码" prop="deptAssetNumber">
+              <div>{{ transferForm.deptAssetNumber }}</div>
+            </el-form-item>
+            <el-form-item label="设备型号" prop="equipmentType">
+              <div>{{ transferForm.equipmentType }}</div>
+            </el-form-item>
+            <el-form-item label="物品说明" prop="remark">
+              <div>{{ transferForm.remark }}</div>
+            </el-form-item>
+            <el-form-item label="定位位置" prop="location">
+              <div>{{ transferForm.location }}</div>
+            </el-form-item>
+            <el-form-item v-if="transferForm.assetType==='1'" label="库存数">
+              <div>{{ transferForm.num }}</div>
+            </el-form-item>
+            <el-form-item label="流转数量" prop="receiveNum" v-if="transferForm.assetType==='1'">
+              <el-input-number v-model="transferForm.receiveNum" :max="transferForm.num"></el-input-number>
+              <el-tooltip class="item" effect="dark" content="不填表示领取剩余全部库存" placement="right">
+                <div style="margin-left: 10px" class="el-icon-info"></div>
+              </el-tooltip>
+            </el-form-item>
+            <el-form-item label="选择配件" prop="accessoriesId">
+              <el-select v-model="transferForm.accessoriesId" multiple style="width: 200px">
+                <el-option v-for="(item,index) in accessoryList" :label="item.accessoryName" :key="index"
+                           :value="item.id">
+                  <span style="float: left">{{ item.accessoryName }}</span>
+                  <span style="float: right; color: #8492a6; font-size: 10px">{{ item.location }}</span>
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="接收人" prop="receiveUserId">
+              <dept-user-tree ref="dut" :userList="userList" style="width: 200px"
+                              @selected="selectReceiveUserId"></dept-user-tree>
+            </el-form-item>
+            <el-form-item label="流转类型" prop="transferType">
+              <el-select v-model="transferForm.transferType" style="width: 200px">
+                <el-option
+                  v-for="dict in dict.type.transfer_type"
+                  :key="dict.value"
+                  :label="dict.label"
+                  :value="dict.value"/>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="流转备注" prop="transferRemark">
+              <el-input v-model="transferForm.transferRemark" type="textarea"
+                        :autosize="{ minRows: 4, maxRows: 7}"></el-input>
+            </el-form-item>
+          </el-form>
+          <div class="transfer-btn">
+            <el-button type="primary" size="mini" @click="submitTransferForm">确 定</el-button>
+            <el-button size="mini" @click="cancelTransferForm">取 消</el-button>
+          </div>
+        </el-col>
+        <el-col :span="12">
+          <div style="margin-top: -15px">
+            <span style="font-size: 18px;margin-right: 10px">流转记录</span>
+            <span style="font-size: 12px"><i class="el-icon-info"/>红点表示接收人还未确认</span>
+          </div>
+          <div style="height: 500px;margin-top: 10px;overflow: auto">
+            <el-timeline :reverse="true">
+              <el-timeline-item
+                v-for="(transfer, index) in assetTransferList"
+                :key="index"
+                :timestamp="transfer.transferDate" placement="top">
+                <div style="font-size: 12px;color: #1c84c6">
+                  <span>{{ getTransferTypeLabel(transfer.transferType) }}</span>
+                  <span>({{ transfer.transferUserName }}</span>
+                  <span><i class="el-icon-right"/></span>
+                  <span>{{ transfer.receiveUserName }}</span>
+                  <el-badge v-if="transfer.receiveConfirm!='1'" is-dot></el-badge>
+                  <span>)</span>
+                  <span>{{ ':' + transfer.transferRemark }}</span>
+                </div>
+                <div style="margin-top: 5px" v-if="transfer.accessoryList.length>0">
+                  <span style="font-size: 10px">配件:</span>
+                  <template v-for="(item,index) in transfer.accessoryList">
+                    <el-tooltip :content="item.deptAssetNumber" placement="top">
+                      <el-tag size="mini" style="margin-left: 5px">{{ item.assetName }}</el-tag>
+                    </el-tooltip>
+                  </template>
+                </div>
+              </el-timeline-item>
+            </el-timeline>
+          </div>
+        </el-col>
+      </el-row>
+    </el-dialog>
+
   </div>
 </template>
 
 <script>
-import {confirmReceive, personReceive} from "@/api/material/transfer";
+import {addTransfer, confirmReceive, getTransferList, personReceive} from "@/api/material/transfer";
 import {getAsset} from "@/api/material/asset";
 import AssetDetail from "./components/assetDetail"
+import DeptUserTree from "@/components/DeptUserTree"
+import {getDeptUserTree, listUser} from "@/api/system/user";
+import DateUtil from "@/utils/date";
 
 export default {
   name: "myReceive",
-  components: {AssetDetail},
+  components: {AssetDetail, DeptUserTree},
+  dicts: ['asset_type', 'asset_status', 's_source', 'transfer_type'],
   data() {
     return {
+      users: [],
       queryParams: {},
+      selectUser: '',
       assetList: [],
       detailOpen: false,
       confirmDialog: false,
       toConfirmTransferId: undefined,
       form: {},
-      title:''
+      title: '',
+
+      accessoryList: [],
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() > DateUtil.unix(DateUtil.day()) * 1000
+        }
+      },
+      transferOpen: false,
+      transferForm: {},
+      assetTransferList: [],
+      userList: [],
+      transferRules: {
+        receiveUserId: [
+          {required: true, message: "接收人不能为空", trigger: "change"}
+        ],
+        transferType: [
+          {required: true, message: "流转类型不能为空", trigger: "change"}
+        ],
+        transferRemark: [
+          {required: true, message: "流转备注不能为空", trigger: "blur"}
+        ]
+      },
+    }
+  },
+  watch: {
+    selectUser(val) {
+      console.log(val);
+      if (!val) {
+        this.$set(this.queryParams, 'receiveUserId', null)
+      }
     }
   },
   created() {
     this.getList()
+    this.getUsers()
   },
   methods: {
     getList() {
@@ -94,22 +254,66 @@ export default {
         this.assetList = res.data
       })
     },
+    getUsers() {
+      listUser({pageSize: 1000, pageNum: 1}).then(res => {
+        this.users = res.data.records.map(item => {
+          return {id: item.id, value: item.userName, deptName: item.deptName}
+        })
+      })
+    },
     /** 搜索按钮操作 */
     handleQuery() {
-      // this.queryParams.pageNum = 1;
       this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
-      // this.queryParams.deptId = undefined;
+      this.selectUser = ''
       this.handleQuery();
     },
+    querySearch(queryString, cb) {
+      let users = this.users;
+      let results = queryString ? users.filter(this.createFilter(queryString)) : users;
+      // 调用 callback 返回建议列表的数据
+      cb(results);
+    },
+    createFilter(queryString) {
+      return (user) => {
+        return (user.value.indexOf(queryString) > -1);
+      };
+    },
+    handleSelect(item) {
+      this.$set(this.queryParams, "receiveUserId", item.id)
+    },
+    handleTransfer(row) {
+      getDeptUserTree('1').then(res => {
+        this.userList = res.data
+      })
+      getTransferList(row.id).then(res => {
+        this.assetTransferList = res.data
+      })
+      getAsset(row.id).then(res => {
+        this.transferForm = res.data
+        this.transferForm.assetId = row.id
+        this.accessoryList = res.data.accessoryList
+        this.transferOpen = true
+      })
+    },
+    getTransferTypeLabel(transferType) {
+      let typeLabel = ''
+      this.dict.type.transfer_type.forEach(item => {
+        if (item.value === transferType) {
+          typeLabel = item.label
+        }
+      })
+      return typeLabel
+    },
+
     handleConfirm(row) {
       this.toConfirmTransferId = row.transferId
       getAsset(row.id).then(res => {
         this.form = res.data
-        this.title='物品领用确认'
+        this.title = '物品领用确认'
         this.confirmDialog = true
         this.detailOpen = true;
       })
@@ -133,7 +337,7 @@ export default {
       }
       getAsset(row.id).then(res => {
         this.form = res.data
-        this.title='物品详情'
+        this.title = '物品详情'
         this.detailOpen = true;
       })
     },
@@ -142,13 +346,83 @@ export default {
         return 'warning-row';
       }
       return '';
+    },
+    selectReceiveUserId(val) {
+      this.$set(this.transferForm, 'receiveUserId', val)
+    },
+    submitTransferForm() {
+      this.$refs["transferForm"].validate(valid => {
+        if (valid) {
+          this.transferForm.id = undefined
+          if (this.transferForm.accessoriesId) {
+            this.transferForm.accessoriesId = this.transferForm.accessoriesId.join()
+          }
+          addTransfer(this.transferForm).then(res => {
+            this.$message.success("流转成功");
+            this.$refs.dut.clearText();
+            this.transferOpen = false;
+            this.resetForm("transferForm");
+            this.getList();
+          });
+        }
+      });
+    },
+    cancelTransferForm() {
+      this.$refs.dut.clearText();
+      this.transferOpen = false
+      this.transferForm = {}
+      this.resetForm("transferForm");
     }
   }
 }
 </script>
 
 <style scoped lang="scss">
+.el-form-item--mini.el-form-item, .el-form-item--small.el-form-item {
+  margin-bottom: 10px;
+}
+
 .el-table::v-deep .warning-row {
   background: #fef0f0;
 }
+
+.asset-dialog ::v-deep .el-dialog__body {
+  padding: 0 20px 10px 20px;
+}
+
+.accessory-header {
+  display: flex;
+  justify-content: space-between;
+  margin-bottom: 10px;
+
+  .a-h-title {
+    font-size: 18px;
+    margin-top: 7px;
+  }
+}
+
+.dialog-btn {
+  position: absolute;
+  bottom: 0px;
+  right: 20px;
+}
+
+.transfer-btn {
+  text-align: right;
+  margin-top: 20px;
+}
+
+.my-autocomplete {
+  width: 240px;
+}
+
+.autocomplete-item {
+  display: flex;
+  justify-content: space-between;
+
+  .dept {
+    font-size: 12px;
+    color: #b4b4b4;
+  }
+}
 </style>