quwangxin 2 лет назад
Родитель
Сommit
12e35d735b

+ 52 - 0
src/api/classifyManage/index.js

@@ -0,0 +1,52 @@
+import request from '@/utils/request';
+
+export async function getSubPage (data) {
+  const res = await request.get('/main/categoryLevel/getSubPage', {
+    params: data
+  });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+export async function saveOrUpdate (data) {
+  const res = await request.post('/main/categoryLevel/saveOrUpdate', data);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 根据父级id查分类树
+export async function getTreeByPid (parentId) {
+  const res = await request.get(`/main/categoryLevel/getTreeByPid/${parentId}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 根据类型查分类树
+export async function getTreeByType (type) {
+  const res = await request.get(`/main/categoryLevel/getTreeByType/${type}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 删除分类
+export async function deleteCategory (id) {
+  const res = await request.get(`/main/categoryLevel/delete/${id}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+//根据ID查询分类详情系信息
+export async function getInfoById (id) {
+  const res = await request.get(`/main/categoryLevel/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 53 - 0
src/api/classifyManage/itemInformation.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request';
+// 物品信息列表
+export async function getList (params) {
+  const res = await request.get('/main/category/getList', { params });
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+// 物品信息保存
+export async function informationAdd (data) {
+  const res = await request.post('/main/category/add', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 物品信息编辑
+export async function informationEdit (data) {
+  const res = await request.post('/main/category/edit', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 物品信息详情
+export async function getDetails (id) {
+  const res = await request.get(`/main/category/info/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 物品信息删除
+export async function removeItem (id) {
+  const res = await request.get(`/main/category/remove/${id}`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 物品信息获取编码
+export async function getOrderNo (prefix) {
+  const res = await request.get(`/main/category/createOrderNo/${prefix}`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 13 - 5
src/api/produceOrder/index.js

@@ -4,7 +4,7 @@ import request from '@/utils/request';
  * 分页
  */
 export async function getPage (params) {
-  const res = await request.post('/mes/workorder/page',  params );
+  const res = await request.post('/mes/workorder/page', params);
   if (res.data.code == 0) {
     return res.data.data;
   }
@@ -31,20 +31,28 @@ export async function update (data) {
   return Promise.reject(new Error(res.data.message));
 }
 
-// 批量完结 
+// 批量完结
 export async function batchCompletion (params) {
-  const res = await request.post('/mes/workorder/batchCompletion',  params );
+  const res = await request.post('/mes/workorder/batchCompletion', params);
   if (res.data.code == 0) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
 }
 
-// 取消完结 
+// 取消完结
 export async function cancelCompletion (id) {
   const res = await request.get(`/mes/workorder/cancelCompletion/${id}`);
   if (res.data.code == 0) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
-}
+}
+// 领料保存
+export async function batchSave (id) {
+  const res = await request.post(`/mes/pickorder/batchSave`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 219 - 0
src/components/material/ChooseMaterial.vue

@@ -0,0 +1,219 @@
+<template>
+  <el-dialog
+    title="选择物料"
+    :visible.sync="materialdialog"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    width="60%"
+  >
+    <div>
+      <el-row>
+        <el-col :span="24" class="topsearch">
+          <el-form>
+            <el-row>
+              <el-col :span="6">
+                <el-input
+                  v-model.trim="searchKey"
+                  placeholder="输入设备编码或名称"
+                  size="small"
+                ></el-input>
+              </el-col>
+              <el-col :span="6" style="margin-left: 10px">
+                <el-button type="primary" size="small" @click="searchByKeyWords"
+                  >搜索</el-button
+                >
+                <el-button size="small" @click="reset">重置</el-button>
+              </el-col>
+            </el-row>
+          </el-form>
+        </el-col>
+        <el-col :span="6" class="tree_col">
+          <AssetTree
+            @handleNodeClick="handleNodeClick"
+            @setRootId="setRootId"
+            id="1"
+            ref="treeList"
+          />
+        </el-col>
+        <el-col :span="18" class="table_col">
+          <ele-pro-table
+            ref="table"
+            :columns="columns"
+            @done="handleDone"
+            @update:selection="selectionChange"
+            row-key="id"
+            :initLoad="false"
+            :selection.sync="selectionList"
+            :datasource="datasource"
+            height="45vh"
+          >
+          </ele-pro-table>
+        </el-col>
+      </el-row>
+    </div>
+    <div class="btns">
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+  import AssetTree from '@/components/AssetTree';
+  import { getList } from '@/api/classifyManage/itemInformation';
+  export default {
+    components: {
+      AssetTree
+    },
+    data () {
+      return {
+        materialdialog: false,
+        selectionList: [],
+        total: 0,
+        searchKey: null,
+        columns: [
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            fixed: 'left',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'code',
+            label: '物品编码',
+            align: 'center'
+          },
+          {
+            prop: 'name',
+            label: '物品名称',
+            align: 'center'
+          },
+          {
+            prop: 'brandNum',
+            label: '牌号',
+            align: 'center'
+          },
+          {
+            prop: 'modelType',
+            label: '型号',
+            align: 'center'
+          },
+          {
+            prop: 'specification',
+            label: '规格',
+            align: 'center'
+          },
+          {
+            type: 'selection',
+            width: 55,
+            align: 'center',
+            fixed: 'right',
+            reserveSelection: true
+          }
+        ]
+      };
+    },
+    watch: {
+      selectionList (newVal, oldVal) {
+        console.log(newVal, oldVal);
+        if (newVal.length < oldVal.length) {
+          const arr = oldVal.filter(
+            (item) => !newVal.find((p) => p.id === item.id)
+          );
+
+          this.memoList = this.memoList.filter(
+            (item) => !arr.find((p) => p.id === item.id)
+          );
+        }
+      }
+    },
+    methods: {
+      open (memoList) {
+        this.memoList = memoList;
+        this.materialdialog = true;
+        if (this.current?.id) {
+          this.reload();
+        }
+      },
+      handleNodeClick (info) {
+        this.current = info;
+        this.reload();
+      },
+      // 获取根节点id
+      setRootId (id) {
+        this.rootId = id;
+      },
+      handleDone ({ data }) {
+        if (this.memoList.length && data.length) {
+          this.$nextTick(() => {
+            this.$refs.table.setSelectedRowKeys(this.memoList.map((i) => i.id));
+          });
+        }
+      },
+      selectionChange (...rest) {
+        console.log(rest);
+      },
+      handleClose () {
+        this.materialdialog = false;
+        this.searchKey = '';
+      },
+
+      datasource ({ page, limit }) {
+        return getList({
+          pageNum: page,
+          size: limit,
+          searchKey: this.searchKey
+        });
+      },
+      reload () {
+        this.$refs.table.reload();
+      },
+      // 弹窗 - 按关键字搜索
+      searchByKeyWords () {
+        this.reload();
+      },
+      // 重置
+      reset () {
+        this.searchKey = '';
+        this.reload();
+      },
+      selected () {
+        if (!this.selectionList.length) {
+          return this.$message.error('请选择物料!');
+        }
+
+        this.$emit('success', [...this.selectionList, ...this.memoList]);
+
+        this.handleClose();
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .tree_col {
+    border: 1px solid #eee;
+    padding: 10px 0;
+    box-sizing: border-box;
+    height: 500px;
+    overflow: auto;
+  }
+  .table_col {
+    padding-left: 10px;
+    ::v-deep .el-table th.el-table__cell {
+      background: #f2f2f2;
+    }
+  }
+  .btns {
+    text-align: center;
+    padding: 10px 0;
+  }
+  .topsearch {
+    margin-bottom: 15px;
+  }
+</style>

+ 2 - 0
src/views/produceOrder/components/createDialog.vue

@@ -120,6 +120,7 @@
           formingNum: '',
           brandNo: '',
           model: '',
+          productUnitWeight: '',
           requiredFormingNum: '',
           planStartTime: '',
           productNum: ''
@@ -146,6 +147,7 @@
           this.formData.brandNo = res.brandNo;
           this.formData.model = res.model;
           this.formData.productNum = res.productNum;
+          this.formData.productUnitWeight = res.productUnitWeight;
           this.formData.requiredFormingNum = res.requiredFormingNum;
           this.formData.produceVersionId = res.produceVersionId;
         });

+ 33 - 26
src/views/produceOrder/index.vue

@@ -92,7 +92,11 @@
 </template>
 
 <script>
-  import { getPage , batchCompletion , cancelCompletion } from '@/api/produceOrder/index.js';
+  import {
+    getPage,
+    batchCompletion,
+    cancelCompletion
+  } from '@/api/produceOrder/index.js';
   import produceOrderSearch from './components/produceOrder-search.vue';
   import createDialog from './components/createDialog.vue';
   import unpackDialog from './components/unpackDialog.vue';
@@ -337,42 +341,42 @@
             type: 'warning'
           })
             .then(() => {
-				batchCompletion([row.id]).then(res=>{
-					this.$message.success('成功')
-					this.reload();
-				})
-			})
+              batchCompletion([row.id]).then((res) => {
+                this.$message.success('成功');
+                this.reload();
+              });
+            })
             .catch(() => {});
         } else {
-          if (!this.selection.length){
-			  return this.$message.warning('请至少选择一条工单!');
-		  }
-		  const ids = []
-		   this.selection.map(item=>{
-		    	ids.push(item.id)
-		  })
+          if (!this.selection.length) {
+            return this.$message.warning('请至少选择一条工单!');
+          }
+          const ids = [];
+          this.selection.map((item) => {
+            ids.push(item.id);
+          });
           this.$confirm(`是否要完结${this.selection.length}条工单?`, '提醒', {
             confirmButtonText: '确认',
             cancelButtonText: '取消',
             type: 'warning'
           })
             .then(() => {
-				batchCompletion(ids).then(res=>{
-					this.$message.success('成功')
-					this.reload();
-				})
-			})
+              batchCompletion(ids).then((res) => {
+                this.$message.success('成功');
+                this.reload();
+              });
+            })
             .catch(() => {});
         }
       },
-	  
-	  // 取消完结
-	  toCancel(row){
-		  cancelCompletion([row.id]).then(res=>{
-		  	 this.$message.success('成功')
-			 this.reload();
-		  })
-	  },
+
+      // 取消完结
+      toCancel (row) {
+        cancelCompletion([row.id]).then((res) => {
+          this.$message.success('成功');
+          this.reload();
+        });
+      },
 
       // 拆分
       toUnpack (row) {
@@ -385,6 +389,9 @@
       /* 刷新表格 */
       reload (where = {}) {
         this.$nextTick(() => {
+          where.statusList = (
+            where.status || this.statusOpt[this.activeName][0].value
+          ).split(',');
           this.$refs.table.reload({ page: 1, where });
         });
       },

+ 81 - 47
src/views/produceOrder/picking.vue

@@ -1,63 +1,69 @@
 <template>
   <div class="ele-body">
-    <el-card>
-      <div class="page-title">
-        <el-page-header @back="$router.go(-1)">
-          <div slot="content" class="pageContent">
-            <div>{{ title }}领料</div>
-          </div>
-        </el-page-header>
-        <el-button type="primary">一键报工</el-button>
-      </div>
+    <el-form
+      inline
+      ref="formRef"
+      :show-error-message="false"
+      class="form-wrapper"
+    >
+      <el-card>
+        <div class="page-title">
+          <el-page-header @back="$router.go(-1)">
+            <div slot="content" class="pageContent">
+              <div>{{ title }}领料</div>
+            </div>
+          </el-page-header>
+          <el-button type="primary" @click="handleReport">一键报工</el-button>
+        </div>
 
-      <header-title title="工单信息">
-        <el-form inline :show-error-message="false" class="form-wrapper">
+        <header-title title="工单信息">
           <el-form-item label="执行人工号">
             <el-input></el-input>
           </el-form-item>
           <el-form-item label="执行日期">
             <el-input></el-input>
           </el-form-item>
-        </el-form>
-      </header-title>
+        </header-title>
 
-      <ele-pro-table
-        :columns="orderColumns"
-        :datasource="orderList"
-        cache-key="picking-table"
-      >
-        <template v-slot:toolbar>
-          <el-link type="primary" @click="addOrder">加入工单</el-link>
-        </template>
-        <template v-slot:action="{ $index }">
-          <el-link type="danger" @click="delOrder($index)">删除</el-link>
-        </template>
-      </ele-pro-table>
-      <header-title title="物料信息"> </header-title>
+        <ele-pro-table
+          :columns="orderColumns"
+          :datasource="orderList"
+          cache-key="picking-table"
+        >
+          <template v-slot:toolbar>
+            <el-link type="primary" @click="addOrder">加入工单</el-link>
+          </template>
+          <template v-slot:action="{ $index }">
+            <el-link type="danger" @click="delOrder($index)">删除</el-link>
+          </template>
+        </ele-pro-table>
+        <header-title title="物料信息"> </header-title>
 
-      <ele-pro-table
-        :columns="materialColumns"
-        :datasource="materialList"
-        cache-key="picking-table-material"
-      >
-        <template v-slot:toolbar>
-          <el-link type="primary">添加物料</el-link>
-        </template>
-        <template v-slot:action="{ $index }">
-          <el-link type="danger" @click="delMaterial($index)">删除</el-link>
-        </template>
-        <template v-slot:warehouse="{ row }">
-          <el-select v-model="row.w">
-            <el-option>ss</el-option>
-          </el-select>
-        </template>
-        <template v-slot:requireNum="{ row }">
-          <el-input v-model="row.c"></el-input>
-        </template>
-      </ele-pro-table>
-    </el-card>
+        <ele-pro-table
+          :columns="materialColumns"
+          :datasource="materialList"
+          cache-key="picking-table-material"
+        >
+          <template v-slot:toolbar>
+            <el-link type="primary" @click="addMaterial">添加物料</el-link>
+          </template>
+          <template v-slot:action="{ $index }">
+            <el-link type="danger" @click="delMaterial($index)">删除</el-link>
+          </template>
+          <template v-slot:warehouse="{ row }">
+            <el-select v-model="row.w">
+              <el-option>ss</el-option>
+            </el-select>
+          </template>
+          <template v-slot:requireNum="{ row }">
+            <el-input v-model="row.c"></el-input>
+          </template>
+        </ele-pro-table>
+      </el-card>
+    </el-form>
 
     <orderDailog ref="orderDailogRef" @success="orderSuccess" />
+    <ChooseMaterial ref="ChooseMaterialRef" @success="materialSuccess" />
   </div>
 </template>
 
@@ -72,9 +78,12 @@
   import Sinter from './components/report/Sinter';
   import Furnace from './components/report/Furnace';
   import orderDailog from './components/order-dailog';
+  import ChooseMaterial from '@/components/material/ChooseMaterial';
+  import { batchSave } from '@/api/produceOrder';
   export default {
     components: {
       orderDailog,
+      ChooseMaterial,
       Extrusion,
       Drying,
       Heating,
@@ -209,6 +218,24 @@
       orderSuccess (list) {
         this.orderList = list;
       },
+      materialSuccess (list) {
+        this.orderList = list;
+      },
+      addMaterial () {
+        this.$refs.ChooseMaterialRef.open(this.materialList.slice(0));
+      },
+      materialSuccess (list) {
+        const obj = {};
+        this.materialList = [...this.materialList, ...list].reduce(
+          (next, pre) => {
+            if (!obj[pre.id]) {
+              obj[pre.id] = true;
+              next.push(pre);
+            }
+          },
+          []
+        );
+      },
       delMaterial (index) {
         this.$confirm('是否删除', '提示')
           .then(() => {
@@ -222,6 +249,13 @@
             this.orderList.splice(index, 1);
           })
           .catch(() => {});
+      },
+      async handleReport () {
+        this.$refs.formRef.validate(async (value) => {
+          if (value) {
+            await batchSave();
+          }
+        });
       }
     }
   };