From 24fc98301c0b38a76b7d5aa704fe79a2e385e584 Mon Sep 17 00:00:00 2001
From: 石广澎 <shiguangpeng@163.com>
Date: 星期三, 29 十一月 2023 14:20:41 +0800
Subject: [PATCH] feat: 1、物品分发部门查询 2、分发新增数量校验

---
 admin-web/src/api/stock/ledger.js                                 |    8 ++
 admin-web/src/views/departmentitem/itemdis/distribution/edit.vue  |   98 +++++++++++++++---------
 admin-web/src/views/departmentitem/itemdis/distribution/index.vue |   61 ++++++++------
 admin-web/src/views/dashboard/index.vue                           |   50 +++++++-----
 admin-web/src/views/systemSetting/department/index.vue            |   12 +-
 5 files changed, 139 insertions(+), 90 deletions(-)

diff --git a/admin-web/src/api/stock/ledger.js b/admin-web/src/api/stock/ledger.js
index 07081e4..ed3947d 100644
--- a/admin-web/src/api/stock/ledger.js
+++ b/admin-web/src/api/stock/ledger.js
@@ -72,3 +72,11 @@
     params,
   });
 }
+// 鏌ヨ棰勮淇℃伅鏁伴噺
+export function getWarningTypeNum(params) {
+  return request({
+    url: '/pc/warehouse/warning/getWarningTypeNum',
+    method: 'get',
+    params,
+  });
+}
diff --git a/admin-web/src/views/dashboard/index.vue b/admin-web/src/views/dashboard/index.vue
index a82a8cc..e210eb0 100644
--- a/admin-web/src/views/dashboard/index.vue
+++ b/admin-web/src/views/dashboard/index.vue
@@ -13,7 +13,8 @@
             </el-radio-group>
             <div class="to-more" @click="nav('/stock/transfer/transferissue')">鏌ョ湅鏇村 ></div>
           </div>
-          <el-table v-loading="waitLoading" :data="waitWorkData" class="top-tb" height="265" :show-header="false" size="medium">
+          <el-table v-loading="waitLoading" :data="waitWorkData" class="top-tb" height="265" :show-header="false"
+                    size="medium">
             <el-table-column prop="businessFormCode" align="center" width="130"></el-table-column>
             <el-table-column prop="inWarehouseName" align="left" min-width="130">
               <template slot-scope="{row}">
@@ -48,12 +49,13 @@
           <div class="f-r f-r-between m-b-10">
             <el-radio-group size="mini" v-model="earlyWarningType" @change="changeEarlyWarning">
               <el-radio-button label="">鍏ㄩ儴</el-radio-button>
-              <el-radio-button label="2">缂鸿揣锛�12锛�</el-radio-button>
-              <el-radio-button label="1">瓒呭嚭锛�3锛�</el-radio-button>
+              <el-radio-button label="2">缂鸿揣 <span v-if="warningTypeNum.lowNum">锛坽{warningTypeNum.lowNum}}锛�</span></el-radio-button>
+              <el-radio-button label="1">瓒呭嚭 <span v-if="warningTypeNum.upNum">锛坽{warningTypeNum.upNum}}锛�</span></el-radio-button>
             </el-radio-group>
             <div class="to-more" @click="nav('/stock/ledger/alertQuery')">鏌ョ湅鏇村 ></div>
           </div>
-          <el-table v-loading="earlyLoading" :data="earlyWarningData" class="top-tb" height="265" :show-header="false" size="medium">
+          <el-table v-loading="earlyLoading" :data="earlyWarningData" class="top-tb" height="265" :show-header="false"
+                    size="medium">
             <el-table-column prop="baseGoodsTemplateName" align="left" min-width="130">
               <template slot-scope="{row}">
                 <el-tooltip class="item" effect="dark" :content="row.baseGoodsTemplateName " placement="top-start">
@@ -138,8 +140,7 @@
 // 鍒涘缓Context
 import {LongToDateTime} from "@/utils/DateFormatter";
 import {transfeIncome, transferList, transferOutput} from "@/api/stock/transfer";
-import {geWarningList} from '@/api/stock/ledger'
-import transfer from "@/views/mixins/transfer";
+import {getWarningTypeNum, geWarningList} from '@/api/stock/ledger'
 
 const ComponentContext = require.context('./components', false, /\.vue$/i);
 let res_components = {};
@@ -172,6 +173,11 @@
       waitType: '0',
       waitWorkData: [], // 寰呭姙宸ヤ綔
       earlyWarningType: '',
+      warningTypeNum: {
+        lowNum: 0,
+        totalNum: 0,
+        upNum: 0,
+      },
       earlyWarningData: [] // 棰勮閫氱煡
     };
   },
@@ -215,9 +221,9 @@
         this.waitLoading = false
       });
     },
-    aduitThis(row){
+    aduitThis(row) {
       if (this.waitType === '0') {
-       this.handleOutput(row)
+        this.handleOutput(row)
       } else {
         this.handleIncome(row)
       }
@@ -229,7 +235,7 @@
           if (action == 'confirm') {
             instance.confirmButtonLoading = true;
             instance.confirmButtonText = '鎵ц涓�...';
-            transfeIncome({ id: row.id })
+            transfeIncome({id: row.id})
                 .then((res) => {
                   this.$message.success('鎺ユ敹鍏ュ簱鎴愬姛锛�');
                   done();
@@ -252,7 +258,7 @@
           if (action == 'confirm') {
             instance.confirmButtonLoading = true;
             instance.confirmButtonText = '鎵ц涓�...';
-            transferOutput({ id: row.id })
+            transferOutput({id: row.id})
                 .then((res) => {
                   this.$message.success('璋冩嫧鍑哄簱鎴愬姛锛�');
                   done();
@@ -279,16 +285,20 @@
     getWarningList() {
       this.earlyLoading = true
       this.earlyWarningData = []
-      geWarningList({
-        warningType: this.earlyWarningType,
-        pageNum: 1,
-        pageSize: 5,
-      }).then(res => {
-        this.earlyLoading = false
-        this.earlyWarningData = res.datas;
-      }).catch(() => {
-        this.waitLoading = false
-      });
+      getWarningTypeNum().then(res => {
+        this.warningTypeNum = res
+        geWarningList({
+          warningType: this.earlyWarningType,
+          pageNum: 1,
+          pageSize: 5,
+        }).then(res => {
+          this.earlyLoading = false
+          this.earlyWarningData = res.datas;
+        }).catch(() => {
+          this.waitLoading = false
+        });
+      })
+
     },
     //  璺宠浆
     nav(url) {
diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue b/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
index 1a44026..d94d5c4 100644
--- a/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
+++ b/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue
@@ -118,12 +118,12 @@
             </el-col>
           </el-row>
           <el-row class="card3" v-for="(mItem, mIndex) in goodsItem.models" :key="mIndex">
-            <el-col style="padding: 10px 0" :span="10">
+            <el-col style="padding: 15px 0" :span="10">
               <el-form-item label="瑙勬牸鍨嬪彿:" style="margin-bottom: 0">
                 {{ getGoodsModelsName(mItem.baseGoodsModelsId) }}
               </el-form-item>
             </el-col>
-            <el-col style="padding: 10px 0" :span="4">
+            <el-col style="padding: 15px 0" :span="4">
               <el-form-item label="鍓╀綑鏁伴噺:" style="margin-bottom: 0" label-width="80">
                 {{ mItem.worehouseCount }}
               </el-form-item>
@@ -135,9 +135,12 @@
                   <template slot-scope="{$index,row}">
                     <el-form-item
                         :prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.goodsNum`"
+                        :rules="[
+                          {validator: checkCounts,type: 1, userList: mItem.procureModelUserList,worehouseCount: mItem.worehouseCount, trigger: ['blur', 'change']}
+                        ]"
                         label-width="0"
                     >
-                      <el-input v-model="row.goodsNum" style="width: 100%"></el-input>
+                      <el-input v-model.number="row.goodsNum" style="width: 100%"></el-input>
                     </el-form-item>
                   </template>
                 </el-table-column>
@@ -145,6 +148,7 @@
                   <template slot-scope="{$index,row}">
                     <el-form-item
                         :prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.nowUserName`"
+                        :rules="[{required: true, message: '璇疯緭鍏ヤ娇鐢ㄤ汉濮撳悕', trigger: ['blur', 'change']}]"
                         label-width="0"
                     >
                       <el-input v-model="row.nowUserName" style="width: 100%"></el-input>
@@ -154,7 +158,8 @@
                 <el-table-column prop="nowUserPhone" label="鑱旂郴鐢佃瘽" align="center">
                   <template slot-scope="{$index,row}">
                     <el-form-item
-                        :prop="`transferGoods.${goodsIndex}.models.${mIndex}].procureModelUserList.${$index}.nowUserPhone`"
+                        :prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.nowUserPhone`"
+                        :rules="[{required: true, message: '璇疯緭鍏ヨ仈绯荤數璇�', trigger: ['blur', 'change']}]"
                         label-width="0"
                     >
                       <el-input v-model="row.nowUserPhone" style="width: 100%"></el-input>
@@ -180,12 +185,15 @@
               </el-table>
             </el-col>
             <!--BC绫诲晢鍝� -->
-            <el-col style="padding: 10px 0" :span="10" v-else>
+            <el-col style="padding: 15px 0" :span="10" v-else>
               <el-form-item
                   label="鍒嗗彂鏁伴噺:"
                   :prop="`transferGoods.${goodsIndex}.models.${mIndex}.counts`"
+                  :rules="[
+                    {validator: checkCounts, type: 2,worehouseCount: mItem.worehouseCount, trigger: ['blur', 'change']}
+                  ]"
                   style="margin-bottom: 0" label-width="80">
-                <el-input v-model.number="goodsItem.models[mIndex].counts" style="width: 160px;"></el-input>
+                <el-input v-model.number="mItem.counts" style="width: 160px;"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
@@ -258,23 +266,35 @@
       }
       callback();
     };
-    // 鏁伴噺鏍¢獙
-    var checkCounts = (rule, value, callback) => {
-      console.log(value);
-      if (!value) {
-        return callback(new Error('璇疯緭鍏�'));
-      }
-      if (!Number.isInteger(value)) {
-        this.$message.warning('璇疯緭鍏ユ暟瀛楀��');
-        return callback(new Error('璇疯緭鍏ユ暟瀛楀��'));
-      }
-      if (value == 0) {
-        this.$message.warning('鏁板瓧鍊间笉鑳戒负0');
-        return callback(new Error('鏁板瓧鍊间笉鑳戒负0'));
-      }
-      callback();
-    };
     return {
+      checkCounts: (rule, value, callback) => {
+        if (!value) {
+          return callback(new Error('璇疯緭鍏ュ垎鍙戞暟閲�'));
+        }
+        if (!Number.isInteger(value)) {
+          // this.$message.warning('璇疯緭鍏ユ暟瀛楀��');
+          return callback(new Error('璇疯緭鍏ユ暟瀛楀��'));
+        }
+        if (value < 1) {
+          // this.$message.warning('鏁板瓧鍊间笉鑳戒负0');
+          return callback(new Error('鏁板瓧鍊煎繀椤诲ぇ浜�0'));
+        }
+        if (value > rule.worehouseCount) {
+          // this.$message.warning('鍒嗗彂鏁伴噺涓嶈兘澶т簬鍓╀綑鏁伴噺');
+          return callback(new Error('鍒嗗彂鏁伴噺涓嶈兘澶т簬鍓╀綑鏁伴噺'));
+        }
+        if(rule.type===1){
+          let sum = 0
+          rule.userList.map(item=>{
+            sum+=(item.goodsNum||0)
+          })
+          if (sum > rule.worehouseCount) {
+            // this.$message.warning('鍒嗗彂鏁伴噺鎬诲拰涓嶈兘澶т簬鍓╀綑鏁伴噺');
+            return callback(new Error('鍒嗗彂鏁伴噺鎬诲拰涓嶈兘澶т簬鍓╀綑鏁伴噺'));
+          }
+        }
+        callback();
+      },
       loading: false,
       buyTypeOptions: [
         {
@@ -329,21 +349,25 @@
         baseCategoryIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
         baseGoodsTemplateId: [{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}],
         modelsIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}],
-        transferGoods:{
-          models:{
-            counts: [
-              { required: true, message: '璇疯緭鍏�', trigger: 'change' },
-              { type: 'number', message: '鏁伴噺蹇呴』涓烘暣鏁�' },
-            ],
-            procureModelUserList:{
-              goodsNum: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
-              nowUserName: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
-              nowUserPhone: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
-            }
+        transferGoods: [
+          {
+            models: [
+              {
+                counts: [
+                  {required: true, message: '璇疯緭鍏�', trigger: 'change'},
+                  {type: 'number', message: '鏁伴噺蹇呴』涓烘暣鏁�'},
+                ],
+                procureModelUserList: [
+                  {
+                    goodsNum: [{required: true, message: '璇疯緭鍏�', trigger: 'blur'}],
+                    nowUserName: [{required: true, message: '璇疯緭鍏�', trigger: 'blur'}],
+                    nowUserPhone: [{required: true, message: '璇疯緭鍏�', trigger: 'blur'}],
+                  }
+                ]
+              }
+            ]
           }
-        }
-
-
+        ]
       },
 
       uploadSettings: {
@@ -399,7 +423,7 @@
 
     // 鑾峰彇鍏ュ簱浠撳簱鍒楄〃
     getdeptmentList() {
-      departmentListAll({agencyId: this.userInfo.tenantId})
+      departmentListAll({tenantId: this.userInfo.tenantId})
           .then((res) => {
             this.departmentOptions = res;
             if (!this.setting.id && res.length) {
diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/index.vue b/admin-web/src/views/departmentitem/itemdis/distribution/index.vue
index 4f55539..681e679 100644
--- a/admin-web/src/views/departmentitem/itemdis/distribution/index.vue
+++ b/admin-web/src/views/departmentitem/itemdis/distribution/index.vue
@@ -10,7 +10,7 @@
           <el-col>
             <!--鍒楄〃-->
             <div class="table-tool-bar" style="margin-bottom: 15px">
-              <my-button name="鏂板" @click="handleAdd" site="tools" size="medium" />
+              <my-button name="鏂板" @click="handleAdd" site="tools" size="medium"/>
             </div>
             <div :style="{ 'overflow-y': 'auto', height: `calc(100vh - 320px)` }" v-loading="loading">
               <el-row v-if="list.length" class="card" :gutter="5">
@@ -23,7 +23,9 @@
                           <span class="value">{{ item.businessFormCode }}</span>
                         </div>
                         <div class="card-header-right">
-                          <el-button name="鏌ョ湅璇︽儏" site="form" type="primary" size="mini" @click="handleDetail(item)">鏌ョ湅璇︽儏</el-button>
+                          <el-button name="鏌ョ湅璇︽儏" site="form" type="primary" size="mini" @click="handleDetail(item)">
+                            鏌ョ湅璇︽儏
+                          </el-button>
                         </div>
                       </div>
                       <div class="one-hed">
@@ -52,14 +54,14 @@
               <el-empty v-else description="鏆傛棤鏁版嵁"></el-empty>
             </div>
             <el-pagination
-              :small="false"
-              :current-page="pageNum"
-              :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
-              :page-size="pageSize"
-              layout="total, sizes, prev, pager, next, jumper"
-              :total="total"
-              @size-change="handleSizeChange"
-              @current-change="handleCurrentChange"
+                :small="false"
+                :current-page="pageNum"
+                :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]"
+                :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper"
+                :total="total"
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
             />
           </el-col>
         </el-row>
@@ -67,35 +69,36 @@
     </el-container>
     <!--娣诲姞/缂栬緫寮圭獥-->
     <edit
-      v-if="editSetting.show"
-      :setting="editSetting"
-      ref="editRef"
-      @close="editSetting.show = false"
-      @search="refreshData"
+        v-if="editSetting.show"
+        :setting="editSetting"
+        ref="editRef"
+        @close="editSetting.show = false"
+        @search="refreshData"
     ></edit>
     <detail
-      v-if="detailSetting.show"
-      :setting="detailSetting"
-      @close="detailSetting.show = false"
-      ref="detailRef"
+        v-if="detailSetting.show"
+        :setting="detailSetting"
+        @close="detailSetting.show = false"
+        ref="detailRef"
     ></detail>
   </div>
 </template>
 
 <script>
-import { transferList} from '@/api/stock/transfer';
+import {transferList} from '@/api/stock/transfer';
 import MyButton from '@/components/myButton/myButton';
 import SettingIplatform from '@/utils/settingIplatform';
 import myImport from '@/views/components/myImport';
 import edit from './edit';
 import detail from './detail';
-import { getBaseUrl } from '@/utils/base';
+import {getBaseUrl} from '@/utils/base';
 import listPage from '../../../mixins/listPage';
+import {getUserDetail} from "@/utils/auth";
 
 export default {
   name: 'index',
   mixins: [listPage],
-  components: { MyButton, myImport, edit, detail },
+  components: {MyButton, myImport, edit, detail},
   data() {
     return {
       loading: false,
@@ -111,11 +114,15 @@
           defaultValue: '',
         },
         {
-          type: 'cascader',
-          dataIndex: 'agencyId',
+          type: 'select',
+          dataIndex: 'inWarehouseId',
           label: '鍒嗗彂閮ㄩ棬',
           placeholder: '璇烽�夋嫨',
-          optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null },
+          optionsConfig: {
+            url: `/pc/fin/sys/tenant/department/list/all?tenantId=${getUserDetail().tenantId}`,
+            label: 'name',
+            value: 'id',
+          },
           defaultValue: '',
           options: [],
         },
@@ -156,7 +163,7 @@
       treeDataList: []
     };
   },
-  created(){
+  created() {
     this.fetchData()
   },
   methods: {
@@ -182,5 +189,5 @@
 </script>
 
 <style scoped lang="scss">
-  //@import url(../../../../styles/index.scss);
+//@import url(../../../../styles/index.scss);
 </style>
diff --git a/admin-web/src/views/systemSetting/department/index.vue b/admin-web/src/views/systemSetting/department/index.vue
index 9544286..41c30b7 100644
--- a/admin-web/src/views/systemSetting/department/index.vue
+++ b/admin-web/src/views/systemSetting/department/index.vue
@@ -129,15 +129,15 @@
         },
         // 鍒椾俊鎭�
         columns: [
-          { title: '缂栧彿', field: 'code', align: 'center', width: '100px' },
-          { title: '閮ㄩ棬', field: 'name', align: 'left' },
-          { title: '椤哄簭鍙�', field: 'orderNum', align: 'left' },
-          { title: '澶囨敞', field: 'remark', align: 'left', width: '200px' },
+          { title: '缂栧彿', field: 'code', align: 'center', width: 80 },
+          { title: '閮ㄩ棬', field: 'name', align: 'left', minWidth: 200 },
+          { title: '椤哄簭鍙�', field: 'orderNum', align: 'center', width: 100 },
+          { title: '澶囨敞', field: 'remark', align: 'left', minWidth: 200 },
           {
             title: '鐘舵��',
             field: 'status',
             align: 'center',
-            width: '180px',
+            width: 100,
             formatter: (row) => {
               return { value: row.status === 0 ? '鍚敤' : '绂佺敤' };
             },
@@ -145,7 +145,7 @@
         ],
         // 鎿嶄綔淇℃伅
         operation: {
-          width: 150,
+          width: 100,
           align: 'center',
           show: true, // 鏄剧ず鎿嶄綔鍒�
           attr: [

--
Gitblit v1.9.1