ysy 2 anni fa
parent
commit
969c4e5449

+ 1 - 1
src/api/material/list.js

@@ -12,7 +12,7 @@ export async function getGroupPage(data) {
 }
 
 
-//  ==========  删除物料管理, 用到得相关接口,移到这     =============/
+//  ==========  物料管理   =============/
 
 
 // 根据分类组编码查询分类树信息

+ 18 - 0
src/api/material/product.js

@@ -38,3 +38,21 @@ export async function getCategoryBom (categoryId) {
   return Promise.reject(new Error(res.data.message));
 }
 
+// 周转车 货位
+export async function categoryVehicle (data) {
+  const res = await request.post(`/main/categoryvehicle/save`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+export async function categoryVehicleList (id) {
+  const res = await request.get(`/main/categoryvehicle/getByCategoryId/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+

+ 257 - 12
src/views/material/product/components/goodsAllocation.vue

@@ -20,21 +20,21 @@
         <el-col :span="8">
           <el-form-item label="长" prop="vehicleLen">
             <el-input v-model="form.vehicleLen">
-              <template slot="append">mm</template>
+              <template slot="append">cm</template>
             </el-input>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="宽" prop="wilde">
             <el-input v-model="form.wilde">
-              <template slot="append">mm</template>
+              <template slot="append">cm</template>
             </el-input>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label="高" prop="hight">
             <el-input v-model="form.hight">
-              <template slot="append">mm</template>
+              <template slot="append">cm</template>
             </el-input>
           </el-form-item>
         </el-col>
@@ -50,7 +50,82 @@
     </el-form>
 
 
-
+    <el-form :model="form" ref="tableForm" class="tableForm" :rules="tableFormRules">
+      <el-table ref="multipleTable" :data="form.positionList" tooltip-effect="dark" style="width: 100%" stripe
+        :header-cell-style="{ background: '#EEEEEE', border: 'none' }">
+
+
+        <el-table-column label="货位编号" prop="code" min-width="120">
+          <template slot-scope="{ row, $index }">
+            <el-form-item :prop="'positionList.' + $index + '.code'" :rules="tableFormRules.code">
+              <el-input placeholder="请输入" clearable v-model="row.code"></el-input>
+            </el-form-item>
+
+          </template></el-table-column>
+        <el-table-column label="货位长(cm)" min-width="120">
+          <template slot-scope="scope">
+            <el-form-item :prop="'positionList.' +
+              scope.$index +
+              'length'
+              " :rules="tableFormRules.length">
+              <el-input placeholder="请输入" type="number" v-model.number="scope.row.length
+                " clearable></el-input>
+            </el-form-item>
+
+          </template>
+        </el-table-column>
+        <el-table-column label="货位宽(cm)" min-width="120">
+          <template slot-scope="scope">
+            <el-form-item :prop="'positionList.' +
+              scope.$index +
+              '.breadth'
+              " :rules="tableFormRules.breadth">
+              <el-input placeholder="请输入" type="number" v-model.number="scope.row.breadth"></el-input>
+            </el-form-item>
+
+          </template>
+        </el-table-column>
+        <el-table-column label="货位高(cm)" min-width="120">
+          <template slot-scope="scope">
+            <el-form-item :prop="'positionList.' +
+              scope.$index +
+              '.altitude'
+              " :rules="tableFormRules.altitude">
+              <el-input placeholder="请输入" type="number" v-model.number="scope.row.altitude"></el-input>
+            </el-form-item>
+
+          </template>
+        </el-table-column>
+        <el-table-column label="限重(kg)" min-width="120">
+          <template slot-scope="scope">
+            <el-form-item :prop="'positionList.' +
+              scope.$index +
+              '.weightLimit'
+              " :rules="tableFormRules.weightLimit">
+              <el-input placeholder="请输入" type="number" v-model.number="scope.row.weightLimit"></el-input>
+            </el-form-item>
+          </template>
+        </el-table-column>
+        <el-table-column label="基本货位容积(cm³)" min-width="120">
+          <template slot-scope="scope">
+            <el-form-item :prop="'positionList.' +
+              scope.$index +
+              '.volume'
+              " :rules="tableFormRules.volume">
+              <el-input placeholder="请输入" type="number" v-model.number="scope.row.volume"></el-input>
+            </el-form-item>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="操作" fixed="right">
+          <template slot-scope="{ $index, row }">
+            <el-button type="text" @click="removeGoods($index, row)">删除货架</el-button>
+          </template>
+        </el-table-column>
+
+
+      </el-table>
+    </el-form>
 
 
     <div slot="footer" class="footer">
@@ -60,12 +135,13 @@
 
 
     <!-- 规则货架编号 -->
-    <el-dialog title="规则货架编号" append-to-body :visible.sync="hjCodeFalg" width="20%">
+    <el-dialog title="规则货架编号" append-to-body :visible.sync="hjCodeFalg" width="35%">
       <el-form :model="hjForm">
         <el-form-item label="规则类型" label-width="100px">
           <el-radio-group v-model="hjForm.type">
             <el-radio :label="1">字母</el-radio>
             <el-radio :label="2">字母+数字</el-radio>
+            <el-radio :label="3">字母+数字(层级)</el-radio>
           </el-radio-group>
         </el-form-item>
         <el-form-item label="规则名称定义" label-width="100px">
@@ -85,20 +161,29 @@
 </template>
   
 <script>
-
+import { categoryVehicle, categoryVehicleList } from '@/api/material/product';
 export default {
 
   data() {
+    const defaultForm = {
+      categoryId: null,
+      levelNum: null,
+      lineNum: null,
+      hight: null,
+      wilde: null,
+      vehicleLen: null,
+      positionList: [],
+      removeIds: []
+    };
+
     return {
       visible: false,
 
       form: {
-        levelNum: null,
-        lineNum: null,
-
-
+        ...defaultForm
       },
 
+
       hjCodeFalg: false,
 
       hjForm: { code: '', type: 1 },
@@ -110,7 +195,16 @@ export default {
         lineNum: [
           { required: true, message: '请输入列数', trigger: 'blur' }
         ],
+      },
+
+      tableFormRules: {
+        code: {
+          required: true,
+          message: '请输入货位编号',
+          trigger: 'blur'
+        },
       }
+
     };
   },
   created() {
@@ -123,12 +217,46 @@ export default {
 
   },
   methods: {
-    open() {
+    open(row) {
+
+
       this.visible = true;
+
+
+      this.form.categoryId = row.id
+      this.getList()
     },
     cancel() {
+      this.$refs.form.clearValidate();
+      this.form = { ...this.defaultForm };
+      this.form.positionList = []
       this.visible = false;
 
+
+
+    },
+
+    getList() {
+      categoryVehicleList(this.form.categoryId).then(res => {
+        if (res) {
+          this.form = res
+          this.form['removeIds'] = []
+        }
+      })
+    },
+
+    removeGoods(idx, row) {
+      if (this.form.positionList.length == 1) {
+        return this.$message.error('至少保留一个货架!');
+      }
+
+      this.$confirm(`是否删除这个货架?`).then(async () => {
+        this.form.positionList.splice(idx, 1)
+
+
+        this.form['removeIds'].push(row.id)
+
+      })
     },
 
     handleHjCode() {
@@ -143,13 +271,130 @@ export default {
     },
 
     handleMine() {
+      this.$refs.form.clearValidate()
+      const ruleName = this.hjForm.code;
       let preCode = 0;
       let codeEng = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
       let currentLetterIndex = 0;
+      this.form.positionList = []
+
+      if (ruleName.length > 0) {
+        // 计算初始索引
+        let multiplier = Math.pow(codeEng.length, ruleName.length - 1);
+        for (let i = 0; i < ruleName.length; i++) {
+          currentLetterIndex +=
+            (codeEng.indexOf(ruleName[i]) + 1) * multiplier;
+          multiplier /= codeEng.length;
+        }
+      }
+
+
+      if (this.hjForm.type == 3) {
+        for (let i = 0; i < this.form.levelNum; i++) {
+          // 获取当前字母
+          let index = currentLetterIndex;
+          let dividend = codeEng.length;
+          let remainder;
+          let quotient;
+          let code = '';
+
+
+          while (index > 0) {
+            remainder = index % dividend;
+            quotient = Math.floor(index / dividend);
+
+            if (remainder === 0) {
+              remainder = codeEng.length;
+              quotient--;
+            }
+            code = codeEng[remainder - 1] + code;
+            index = quotient;
+          }
+
+          for (let j = 0; j < this.form.lineNum; j++) {
+            let obj1111 = {
+              code: code + (j + 1),
+              length: this.form.vehicleLen ? Number(this.form.vehicleLen / Number(this.form.lineNum)).toFixed(0) : '',
+              breadth: this.form.wilde,
+              altitude: this.form.hight ? Number(this.form.hight / Number(this.form.levelNum)).toFixed(0) : '',
+              weightLimit: '',
+              volume: ''
+            };
+
+            this.form.positionList.push(obj1111)
+
+
+
+          }
+
+
+
+          currentLetterIndex++; // 自增索引
+          this.hjCodeFalg = false
+        }
+
+      } else {
+        let num = Number(this.form.levelNum) * Number(this.form.lineNum)
+
+
+        for (let i = 0; i < num; i++) {
+          // 获取当前字母
+          let index = currentLetterIndex;
+          let dividend = codeEng.length;
+          let remainder;
+          let quotient;
+          let code = '';
+
+
+          while (index > 0) {
+            remainder = index % dividend;
+            quotient = Math.floor(index / dividend);
+
+            if (remainder === 0) {
+              remainder = codeEng.length;
+              quotient--;
+            }
+            code = codeEng[remainder - 1] + code;
+            index = quotient;
+          }
+
+
+
+
+          let obj1111 = {
+            code: this.hjForm.type === 1 ? code : ruleName + (i + 1),
+            length: this.form.vehicleLen ? Number(this.form.vehicleLen / Number(this.form.lineNum)).toFixed(0) : '',
+            breadth: this.form.wilde,
+            altitude: this.form.levelNum ? Number(this.form.hight / Number(this.form.levelNum)).toFixed(0) : '',
+            weightLimit: '',
+            volume: ''
+          };
+          this.form.positionList.push(obj1111)
+
+
+          currentLetterIndex++; // 自增索引
+          this.hjCodeFalg = false
+        }
+      }
+
+
+
     },
 
-    save() {
+    handleInput(event) {
+      // 只允许输入 A-Z 的大写字母
+      let filteredValue = this.hjForm.code.replace(/[^A-Z]/g, '');
+      this.hjForm.code = filteredValue;
+    },
 
+    save() {
+      this.$refs.tableForm.validate((valid) => {
+        if (valid) {
+          categoryVehicle(this.form).then(res => {
+            this.cancel()
+          })
+        }
+      })
     }