Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

humingbo před 1 rokem
rodič
revize
41baab885c

+ 32 - 0
src/api/material/transfer.js

@@ -44,3 +44,35 @@ export function consumablesReceiveList(data) {
     data: data
   })
 }
+
+export function monthCheck() {
+  return request({
+    url: '/material/asset/transfer/monthCheck',
+    method: 'get'
+  })
+}
+
+export function getMonthCheckList(data) {
+  return request({
+    url: '/material/asset/transfer/getMonthCheckList',
+    method: 'get',
+    params: data
+  })
+}
+
+export function personMonthCheckList(data) {
+  return request({
+    url: '/material/asset/transfer/personMonthCheckList',
+    method: 'get',
+    params: data
+  })
+}
+
+export function monthCheckConfirm(data) {
+  return request({
+    url: '/material/asset/transfer/monthCheckConfirm',
+    method: 'post',
+    data: data
+  })
+}
+

+ 29 - 7
src/views/dashboard/index.vue

@@ -65,6 +65,15 @@
           </div>
         </div>
       </el-card>
+      <el-card class="card">
+        <div class="card-text" @click="toAssetCheck">
+          <div class="card-left"><i class="el-icon-s-order"></i></div>
+          <div class="card-right">
+            <div class="card-text-title">盘点确认</div>
+            <div class="card-text-val">{{ checkConfirmNum }}</div>
+          </div>
+        </div>
+      </el-card>
     </div>
 
     <el-dialog title="新任务" :visible.sync="newTaskOpen" append-to-body :close-on-click-modal="false">
@@ -124,7 +133,7 @@
 
 import {mapGetters} from 'vuex'
 import {addTaskFeedback, auditTask, getTask, toDoTaskList} from "@/api/task/task";
-import {personReceive} from "@/api/material/transfer";
+import {personMonthCheckList, personReceive} from "@/api/material/transfer";
 import {getPersonalTaskList} from '@/api/meeting/enforce'
 import {getTodoMeetinStatistics} from '@/api/meeting/meeting'
 import {getEnforceRemindCount} from '@/api/meeting/enforceRemind'
@@ -155,6 +164,7 @@ export default {
       todoMeetingCount: 0,
       todoMeetingConfirmCount: 0,
       enforceRemindCount: 0,
+      checkConfirmNum: 0,
 
       carouselNum: 0,
       currentCarouselIndex: 0,
@@ -186,6 +196,7 @@ export default {
       this.getTaskList();
       this.getTodoMeetinStatisticss()
       this.getEnforceRemindCounts()
+      this.getPersonMonthCheckList()
     },
     getTodoTask() {
       if (this.auditOpen) {
@@ -239,12 +250,23 @@ export default {
         this.enforceRemindCount = data.enforceRemindCount
       })
     },
+    getPersonMonthCheckList() {
+      let currentMonth = DateUtil.month();
+      personMonthCheckList({date: currentMonth}).then(res => {
+        let data = res.data || []
+        let toConfirmList = data.filter(item => item.receiveConfirm === '0');
+        this.checkConfirmNum = toConfirmList.length
+      })
+    },
     toTaskView() {
       this.$router.push(`/task/view`)
     },
     toMyReceive() {
       this.$router.push(`/material/myReceive`)
     },
+    toAssetCheck() {
+      this.$router.push({path: `/material/myReceive`, query: {checkConfirmNum: this.checkConfirmNum}})
+    },
     enforceTasksClick() {
       let params = {
         status: '1'
@@ -252,14 +274,14 @@ export default {
       this.$router.push({path: '/enforceflow/enforceflow', query: params});
     },
     todoMeetingClick() {
-      let count=this.todoMeetingConfirmCount
-      if(count===0){
+      let count = this.todoMeetingConfirmCount
+      if (count === 0) {
         this.$router.push('/meeting/meeting')
-      }else {
-        let params={
-            toDoMeeting:'toDoMeeting'
+      } else {
+        let params = {
+          toDoMeeting: 'toDoMeeting'
         }
-        this.$router.push({path: '/meeting/meeting',query:params})
+        this.$router.push({path: '/meeting/meeting', query: params})
       }
     },
     enforceRemindClick() {

+ 148 - 0
src/views/material/monthCheck.vue

@@ -0,0 +1,148 @@
+<template>
+  <div class="app-container">
+    <div class="query-container">
+      <el-form size="mini" :inline="true">
+        <el-form-item label="盘点月份">
+          <el-date-picker
+            v-model="date"
+            type="month"
+            value-format="yyyy-MM"
+            placeholder="选择月份"
+            @change="handleQuery"
+            clearable>
+          </el-date-picker>
+        </el-form-item>
+        <!--        <el-form-item>-->
+        <!--          <el-button type="primary" icon="el-icon-search" @click="handleQuery(date)">查询</el-button>-->
+        <!--        </el-form-item>-->
+      </el-form>
+
+      <el-row :gutter="10" style="margin-bottom:8px">
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            plain
+            icon="el-icon-s-check"
+            size="mini"
+            @click="checkAsset"
+            v-hasPermi="['material:asset:check']"
+          >发起月度盘点
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
+
+    <el-collapse v-model="activeName" accordion style="height: calc(100vh - 150px);overflow: auto">
+      <template v-for="(item,index) in checkList">
+        <el-collapse-item :name="index">
+          <template slot="title">
+            <div class="collapse-title">
+              <div>
+                <span class="collapse-title-text"><i class="el-icon-user"></i></span>
+                <span class="collapse-title-val">{{ item.userName }}</span>
+              </div>
+              <div>
+                <span class="collapse-title-text">总数量:</span>
+                <span class="collapse-title-val">{{ item.receiveNum }}</span>
+              </div>
+              <div>
+                <span class="collapse-title-text">待确认数量:</span>
+                <span v-if="item.toConfirmNum===0" class="collapse-title-val">{{ item.toConfirmNum }}</span>
+                <span v-else class="collapse-title-val-red">{{ item.toConfirmNum }}</span>
+              </div>
+            </div>
+          </template>
+          <el-table :data="item.assetList"
+                    size="mini"
+                    row-key="id"
+                    :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
+            <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="资产类型" width="80">
+              <template slot-scope="scope">
+                <el-tag v-if="scope.row.assetType==='1'" size="mini" type="warning">耗材</el-tag>
+                <el-tag v-else size="mini" type="success">固定资产</el-tag>
+              </template>
+            </el-table-column>
+            <el-table-column label="设备型号" prop="equipmentType" :show-overflow-tooltip="true"/>
+            <el-table-column label="生产厂家" prop="factoryName" :show-overflow-tooltip="true"/>
+            <el-table-column :label="item.userName==='仓库'?'入库日期':'领用日期'" prop="receiveDate">
+              <template slot-scope="scope">
+                <span>{{ parseTime(scope.row.receiveDate) }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="是否确认">
+              <template slot-scope="scope">
+                <el-tag type="info" v-if="scope.row.receiveConfirm==='0'">
+                  <i class="el-icon-coordinate"></i>未确认
+                </el-tag>
+                <el-tag type="success" v-if="scope.row.receiveConfirm==='1'">
+                  <i class="el-icon-coordinate"></i>已确认
+                </el-tag>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-collapse-item>
+      </template>
+    </el-collapse>
+  </div>
+</template>
+
+<script>
+import {
+  monthCheck,
+  getMonthCheckList
+} from "@/api/material/transfer";
+import DateUtil from "@/utils/date"
+
+export default {
+  name: "monthCheck",
+  data() {
+    return {
+      date: DateUtil.month(),
+      activeName: '',
+      checkList: []
+    }
+  },
+  created() {
+    this.handleQuery(this.date)
+  },
+  methods: {
+    checkAsset() {
+      monthCheck().then(res => {
+        this.$message.success(res.message)
+        this.handleQuery(DateUtil.month())
+      })
+    },
+    handleQuery(val) {
+      getMonthCheckList({date: val}).then(res => {
+        this.checkList = res.data
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+.collapse-title {
+  width: 100%;
+  padding-left: 20px;
+  padding-right: 20px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.collapse-title-text {
+  margin-right: 5px;
+}
+
+.collapse-title-val {
+  font-size: 14px;
+}
+
+.collapse-title-val-red {
+  font-size: 14px;
+  color: red;
+}
+</style>

+ 147 - 38
src/views/material/myReceive.vue

@@ -1,47 +1,62 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
-      <el-form-item prop="receiveUserId" v-hasPermi="['material:asset:add']">
-        <template slot="label">
-          <span>领用人</span>
-          <el-tooltip class="item" effect="dark" content="不选择时,默认展示当前用户的领用" placement="top">
-            <i class="el-icon-info"></i>
-          </el-tooltip>
-        </template>
-        <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>
+    <div class="query-container">
+      <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
+        <el-form-item prop="receiveUserId" v-hasPermi="['material:asset:add']">
+          <template slot="label">
+            <span>领用人</span>
+            <el-tooltip class="item" effect="dark" content="不选择时,默认展示当前用户的领用" placement="top">
+              <i class="el-icon-info"></i>
+            </el-tooltip>
           </template>
-        </el-autocomplete>
-      </el-form-item>
-      <el-form-item label="资产类型" prop="assetType">
-        <el-select
-          v-model="queryParams.assetType"
-          placeholder="资产类型"
-          style="width: 150px">
-          <el-option label="固定资产" value="0"/>
-          <el-option label="耗材" value="1"/>
-        </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-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"
+            placeholder="资产类型"
+            style="width: 150px">
+            <el-option label="固定资产" value="0"/>
+            <el-option label="耗材" value="1"/>
+          </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" style="margin-bottom:8px">
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            plain
+            icon="el-icon-s-check"
+            size="mini"
+            @click="handleCheck"
+            v-hasPermi="['material:asset:check']"
+          >月度盘点
+          </el-button>
+        </el-col>
+      </el-row>
+    </div>
 
     <el-table :data="assetList"
               @cell-click="cellClick"
               @cell-mouse-enter="cellMouseEnter"
               @cell-mouse-leave="cellMouseLeave"
+              height="calc(100vh - 110px)"
               size="mini"
               row-key="id"
               :row-class-name="rowClassName"
@@ -198,11 +213,61 @@
       </el-row>
     </el-dialog>
 
+    <!-- 资产盘点确认对话框-->
+    <el-dialog :title="checkTitle" :visible.sync="checkOpen" class="asset-dialog" width="900px" append-to-body
+               @close="checkOpen=false">
+      <el-table :data="toConfirmList"
+                size="mini"
+                row-key="id"
+                @selection-change="handleSelectionChange"
+                :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
+        <el-table-column type="selection" width="50" :selectable="selectableHandler"/>
+        <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="资产类型" width="80">
+          <template slot-scope="scope">
+            <el-tag v-if="scope.row.assetType==='1'" size="mini" type="warning">耗材</el-tag>
+            <el-tag v-else size="mini" type="success">固定资产</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="设备型号" prop="equipmentType" :show-overflow-tooltip="true"/>
+        <el-table-column label="生产厂家" prop="factoryName" :show-overflow-tooltip="true"/>
+        <el-table-column label="领用日期" prop="receiveDate" width="115">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.receiveDate) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="是否确认" width="80">
+          <template slot-scope="scope">
+            <el-tag type="info" v-if="scope.row.receiveConfirm==='0'">
+              <i class="el-icon-coordinate"></i>未确认
+            </el-tag>
+            <el-tag type="success" v-if="scope.row.receiveConfirm==='1'">
+              <i class="el-icon-coordinate"></i>已确认
+            </el-tag>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" size="mini" :disabled="monthCheckIds.length===0" @click="submitCheck">确 定
+        </el-button>
+        <el-button size="mini" @click="checkOpen=false">取 消</el-button>
+      </div>
+    </el-dialog>
+
+
   </div>
 </template>
 
 <script>
-import {addTransfer, confirmReceive, getTransferList, personReceive} from "@/api/material/transfer";
+import {
+  addTransfer,
+  confirmReceive,
+  getTransferList, monthCheckConfirm,
+  personMonthCheckList,
+  personReceive
+} from "@/api/material/transfer";
 import {getAsset} from "@/api/material/asset";
 import AssetDetail from "./components/assetDetail"
 import DeptUserTree from "@/components/DeptUserTree"
@@ -246,6 +311,11 @@ export default {
           {required: true, message: "流转备注不能为空", trigger: "blur"}
         ]
       },
+      checkTitle: '',
+      checkOpen: false,
+      toConfirmList: [],
+      monthCheckIds: []
+
     }
   },
   watch: {
@@ -256,6 +326,11 @@ export default {
     }
   },
   created() {
+    let checkConfirmNum = this.$route.query.checkConfirmNum;
+    console.log(checkConfirmNum);
+    if (checkConfirmNum > 0) {
+      this.getPersonMonthCheckList()
+    }
     this.getList()
     this.getUsers()
   },
@@ -410,7 +485,41 @@ export default {
       this.transferOpen = false
       this.transferForm = {}
       this.resetForm("transferForm");
-    }
+    },
+
+    /**
+     * 月度盘点
+     */
+    handleCheck() {
+      this.$router.push('/material/monthCheck')
+    },
+    getPersonMonthCheckList() {
+      let currentMonth = DateUtil.month();
+      personMonthCheckList({date: currentMonth}).then(res => {
+        this.toConfirmList = res.data || []
+        this.checkTitle = currentMonth + '资产盘点确认'
+        this.checkOpen = true
+      })
+    },
+    selectableHandler(row, index) {
+      return row.receiveConfirm == '0'
+    },
+    handleSelectionChange(val) {
+      this.monthCheckIds = val.map(item => item.monthCheckId)
+    },
+    submitCheck() {
+      if (this.monthCheckIds.length === 0) {
+        return
+      }
+      let data = {
+        date: DateUtil.month(),
+        monthCheckIds: this.monthCheckIds
+      }
+      monthCheckConfirm(data).then(res => {
+        this.$message.success(res.message)
+      })
+    },
+
   }
 }
 </script>

+ 1 - 1
src/views/task/components/taskDetail.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="task-detail">
+  <div style="height:calc(100vh - 200px)">
     <el-descriptions class="margin-top" :column="8" direction="vertical">
       <el-descriptions-item label="负责人">
         <div class="desc-item-content">{{ form.executorName }}</div>