From 4617951af57412dcf13c2c70ccefbd49196ff49a Mon Sep 17 00:00:00 2001
From: hyingbo <1363390067@qq.com>
Date: 星期五, 01 八月 2025 14:08:12 +0800
Subject: [PATCH] 库位号添加禁用规则

---
 src/views/tms/modules/GoodsShelvesForm.vue |  154 +++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 124 insertions(+), 30 deletions(-)

diff --git a/src/views/tms/modules/GoodsShelvesForm.vue b/src/views/tms/modules/GoodsShelvesForm.vue
index 68bd152..96c072f 100644
--- a/src/views/tms/modules/GoodsShelvesForm.vue
+++ b/src/views/tms/modules/GoodsShelvesForm.vue
@@ -14,8 +14,13 @@
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
-            <a-form-model-item label="搴撲綅鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="locationCode">
-              <a-input v-model="model.locationCode" placeholder="璇疯緭鍏ュ簱浣嶅彿"  ></a-input>
+            <a-form-model-item label="璐ф灦缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="shelfNumber">
+              <a-input v-model="model.shelfNumber" placeholder="璇疯緭鍏ヨ揣鏋剁紪鍙�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="璐ф灦鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="shelfName">
+              <a-input v-model="model.shelfName" placeholder="璇疯緭鍏ヨ揣鏋跺悕绉�" :disabled="shelfNameDisabled"></a-input>
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
@@ -33,18 +38,18 @@
               <a-input v-model="model.columnNumber" placeholder="璇疯緭鍏ュ垪鏁�"  ></a-input>
             </a-form-model-item>
           </a-col>
+           <a-col :span="12">
+            <a-form-model-item label="鏍兼暟" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="cellsNum">
+              <a-input v-model="model.cellsNum" placeholder="璇疯緭鍏ユ牸鏁�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="搴撲綅鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-input :disabled="true" v-model="model.locationCode"  placeholder="璇疯緭鍏ュ簱浣嶅彿"  ></a-input>
+            </a-form-model-item>
+          </a-col>
         </a-row>
         <a-row>
-          <a-col :span="12">
-            <a-form-model-item label="璐ф灦缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="shelfNumber">
-              <a-input v-model="model.shelfNumber" placeholder="璇疯緭鍏ヨ揣鏋剁紪鍙�"  ></a-input>
-            </a-form-model-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-model-item label="璐ф灦鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="shelfName">
-              <a-input v-model="model.shelfName" placeholder="璇疯緭鍏ヨ揣鏋跺悕绉�"  ></a-input>
-            </a-form-model-item>
-          </a-col>
           <a-col :span="12">
             <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
               <a-textarea v-model="model.remark" rows="4" placeholder="璇疯緭鍏ュ娉�" />
@@ -76,7 +81,22 @@
     data () {
       return {
         model:{
-         },
+          warehouseId: '',
+          warehouseNum: '',
+          warehouseName: '',
+          shelfNumber: '',
+          shelfName: '',
+          storey: '',
+          arrange: '',
+          columnNumber: '',
+          cellsNum:'',
+          locationCode: '',
+          remark: ''
+        },
+        autoLocationCode: '', // 鑷姩鎷兼帴鐨勫簱浣嶅彿
+        userEditedLocationCode: false,
+        shelfNameDisabled: false, // 鎺у埗璐ф灦鍚嶇О鏄惁绂佺敤
+        lastEchoedShelfName: '', // 淇濆瓨涓婃鍥炴樉鐨勮揣鏋跺悕绉�
         labelCol: {
           xs: { span: 24 },
           sm: { span: 5 },
@@ -87,48 +107,72 @@
         },
         confirmLoading: false,
         validatorRules: {
-           warehouseId: [
-              { required: true, message: '璇疯緭鍏ヤ粨搴撶紪鍙�!'},
-           ],
-           locationCode: [
-              { required: true, message: '璇疯緭鍏ュ簱浣嶅彿!'},
-           ],
-           storey: [
-              { required: true, message: '璇疯緭鍏ュ眰鏁�!'},
-           ],
-           arrange: [
-              { required: true, message: '璇疯緭鍏ユ帓鏁�!'},
-           ],
-           columnNumber: [
-              { required: true, message: '璇疯緭鍏ュ垪鏁�!'},
-           ],
+          shelfNumber: [
+            { required: true, message: '璇疯緭鍏ヨ揣鏋剁紪鍙�!'},
+            { validator: this.validateShelfName }
+          ],
+          shelfName: [
+            { required: true, message: '璇疯緭鍏ヨ揣鏋跺悕绉�!'},
+          ],
+          storey: [
+            { required: true, message: '璇疯緭鍏ュ眰鏁�!'},
+          ],
+          arrange: [
+            { required: true, message: '璇疯緭鍏ユ帓鏁�!'},
+          ],
+          columnNumber: [
+            { required: true, message: '璇疯緭鍏ュ垪鏁�!'},
+          ],
+          cellsNum: [
+            { required: true, message: '璇疯緭鍏ユ牸鏁�!'},
+            { validator: this.validateDuplicate }
+          ]
         },
         url: {
           add: "/tms/goodsShelves/add",
           edit: "/tms/goodsShelves/edit",
-          queryById: "/tms/goodsShelves/queryById"
-        }
+          queryById: "/tms/goodsShelves/queryById",
+          checkShelfName:"/tms/goodsShelves/checkShelfName",
+          checkDuplicate:"/tms/goodsShelves/checkDuplicate"
+        },
+        warehouseId:''
       }
     },
     computed: {
       formDisabled(){
         return this.disabled
       },
+      //鎷兼帴搴撲綅鍙�
+      autoGeneratedLocationCode() {
+        const { shelfNumber, storey, arrange, columnNumber, cellsNum } = this.model;
+        if (shelfNumber || storey || arrange || columnNumber || cellsNum) {
+          return `${shelfNumber}${storey}${arrange}${columnNumber}${cellsNum}`;
+        }
+        return '';
+      }
     },
     created () {
        //澶囦唤model鍘熷鍊�
       this.modelDefault = JSON.parse(JSON.stringify(this.model));
     },
     methods: {
+      updateLocationCode() {
+        this.model.locationCode = this.locationCode;
+      },
       add (treeSelected) {
         this.modelDefault.warehouseId = treeSelected.key
         this.modelDefault.warehouseNum = treeSelected.entity.warehouseId
         this.modelDefault.warehouseName = treeSelected.entity.warehouseName
+        this.modelDefault.cellsNum = '1' //鏍兼暟璁剧疆榛樿鍊�1
         this.edit(this.modelDefault);
       },
       edit (record) {
         this.model = Object.assign({}, record);
         this.visible = true;
+        this.shelfNameDisabled = false
+        // 閲嶇疆鍥炴樉鏍囪
+        this.lastEchoedShelfName = ''
+        this.warehouseId = record.warehouseId
       },
       submitForm () {
         const that = this;
@@ -159,6 +203,56 @@
 
         })
       },
+      //楠岃瘉 璐ф灦鍙�
+    validateShelfName(rule, value, callback) {
+      var params = {
+        warehouseId: this.warehouseId,
+        shelfNumber: value,
+      };
+      getAction(this.url.checkShelfName,params).then((res) => {
+        if (res.success) {
+          this.shelfNameDisabled = false
+          // 鍙湁鍦ㄦ牎楠岄�氳繃涓斿綋鍓嶈揣鏋跺悕绉版槸涔嬪墠鍥炴樉鐨勫�兼椂鎵嶆竻绌�
+          // 杩欓�氬父鍙戠敓鍦ㄧ敤鎴蜂慨鏀逛簡宸插瓨鍦ㄧ殑璐ф灦缂栧彿涓轰笉瀛樺湪鐨勭紪鍙锋椂
+          if (this.model.shelfName === this.lastEchoedShelfName) {
+            this.model.shelfName = ''
+          }
+          callback();
+        } else {
+          //瀛樺湪璇ヨ揣鏋跺彿锛岀洿鎺ュ皢缁撴灉鍥炴樉鍒拌揣鏋跺悕绉板瓧娈靛苟绂佺敤璇ュ瓧娈�
+          this.model.shelfName = res.result;
+          this.lastEchoedShelfName = res.result; // 淇濆瓨鍥炴樉鐨勫��
+          this.shelfNameDisabled = true;
+          callback();
+        }
+      })
+    },
+    validateDuplicate(rule, value, callback) {
+      getAction(this.url.checkDuplicate, this.model).then(res => {
+        if (res.success) {
+          callback();
+        } else {
+          callback(res.message);
+        }
+      })
+    }
+    },
+    watch: {
+      autoGeneratedLocationCode(newVal) {
+        // 鍙湁褰撶敤鎴锋病鏈夋墜鍔ㄨ緭鍏ユ椂鎵嶈嚜鍔ㄥ~鍏�
+        if (!this.userEditedLocationCode) {
+          this.model.locationCode = newVal;
+        }
+        this.autoLocationCode = newVal;
+      },
+      'model.locationCode'(newVal) {
+        // 濡傛灉鐢ㄦ埛鎵嬪姩杈撳叆锛屽垯鏍囪涓哄凡缂栬緫
+        if (newVal !== this.autoLocationCode) {
+          this.userEditedLocationCode = true;
+        } else {
+          this.userEditedLocationCode = false;
+        }
+      }
     }
   }
 </script>
\ No newline at end of file

--
Gitblit v1.9.3