浏览代码

Merge branch 'dev' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend-mes into dev

lucw 8 月之前
父节点
当前提交
b5a27cc814

+ 21 - 0
src/views/InTheSystem/index.vue

@@ -132,6 +132,27 @@
             width: 120,
             showOverflowTooltip: true
           },
+          {
+            width: 150,
+            prop: 'modelType',
+            label: '型号',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            width: 150,
+            prop: 'specification',
+            label: '规格',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'colorKey',
+            label: '颜色',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
           {
             prop: 'workstationName',
             label: '工位',

+ 1 - 6
src/views/exceptionManagement/exceptionList/index.vue

@@ -110,7 +110,6 @@
           <el-link
             type="primary"
             :underline="false"
-            icon="el-icon-truck"
             v-if="row.approvalStatus == 0 || row.approvalStatus == 3"
             @click="open('edit', row)"
           >
@@ -123,15 +122,12 @@
             @confirm="remove([row.id])"
           >
             <template v-slot:reference>
-              <el-link type="danger" :underline="false" icon="el-icon-delete">
-                删除
-              </el-link>
+              <el-link type="danger" :underline="false"> 删除 </el-link>
             </template>
           </el-popconfirm>
           <el-link
             type="primary"
             :underline="false"
-            icon="el-icon-circle-plus-outline"
             v-if="row.approvalStatus == 2 && row.exceptionClose == 2"
             @click="dispose(row)"
           >
@@ -140,7 +136,6 @@
           <el-link
             type="primary"
             :underline="false"
-            icon="el-icon-circle-plus-outline"
             v-if="
               (row.approvalStatus == 0 || row.approvalStatus == 3) &&
               (!row.exceptionClose || row.exceptionClose == 2)

+ 215 - 155
src/views/materialReturn/components/returnPop.vue

@@ -1,6 +1,13 @@
 <template>
-  <el-dialog title="新建退料单" :visible.sync="visible" :before-close="handleClose" :close-on-click-modal="false"
-    :close-on-press-escape="false" append-to-body width="80%">
+  <el-dialog
+    :title="title"
+    :visible.sync="visible"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    width="80%"
+  >
     <div>
       <el-form :model="returnForm" ref="returnForm">
         <el-row :gutter="24">
@@ -12,14 +19,26 @@
 
           <el-col :span="6">
             <el-form-item label="退料单名称" prop="name" label-width="90px">
-              <el-input v-model="returnForm.name" :disabled="Boolean(returnDetailsId)"></el-input>
+              <el-input
+                v-model="returnForm.name"
+                :disabled="Boolean(returnDetailsId)"
+              ></el-input>
             </el-form-item>
           </el-col>
 
           <el-col :span="8">
             <el-form-item label="退料场景" prop="scene" label-width="90px">
-              <el-select v-model="returnForm.scene" :disabled="Boolean(returnDetailsId)" placeholder="请选择">
-                <el-option v-for="item in sceneList" :key="item.value" :label="item.label" :value="item.value">
+              <el-select
+                v-model="returnForm.scene"
+                :disabled="Boolean(returnDetailsId)"
+                placeholder="请选择"
+              >
+                <el-option
+                  v-for="item in sceneList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
                 </el-option>
               </el-select>
             </el-form-item>
@@ -29,12 +48,20 @@
         <el-row :gutter="24">
           <el-col :span="20">
             <el-form-item label="退料描述" prop="remark" label-width="90px">
-              <el-input v-model="returnForm.remark" :disabled="Boolean(returnDetailsId)"></el-input>
+              <el-input
+                v-model="returnForm.remark"
+                :disabled="Boolean(returnDetailsId)"
+              ></el-input>
             </el-form-item>
           </el-col>
 
           <el-col :span="4">
-            <el-button type="primary" @click="selectOrder" v-if="!Boolean(returnDetailsId)">选择领料单</el-button>
+            <el-button
+              type="primary"
+              @click="selectOrder"
+              v-if="!Boolean(returnDetailsId)"
+              >选择领料单</el-button
+            >
           </el-col>
         </el-row>
       </el-form>
@@ -54,11 +81,19 @@
         </div>
 
         <div>
-          <el-table :ref="`form${idx}`" class="table_content" :max-height="300" :data="item.pickOutInList"
-            tooltip-effect="dark" style="width: 100%" stripe border>
+          <el-table
+            :ref="`form${idx}`"
+            class="table_content"
+            :max-height="300"
+            :data="item.pickOutInList"
+            tooltip-effect="dark"
+            style="width: 100%"
+            stripe
+            border
+          >
             <el-table-column label="序号" type="index" width="60">
               <template slot-scope="{ row, $index }">
-                {{ $index }}
+                {{ $index + 1 }}
               </template>
             </el-table-column>
 
@@ -75,13 +110,21 @@
             <el-table-column label="规格" prop="specification">
             </el-table-column>
 
-            <el-table-column label="刻码" prop="engrave" v-if="clientEnvironmentId == 3">
+            <el-table-column
+              label="刻码"
+              prop="engrave"
+              v-if="clientEnvironmentId == 3"
+            >
               <template slot-scope="{ row, $index }">
                 {{ row.extInfo.engrave }}
               </template>
             </el-table-column>
 
-            <el-table-column label="物料代号" prop="materielCode" v-if="clientEnvironmentId == 3">
+            <el-table-column
+              label="物料代号"
+              prop="materielCode"
+              v-if="clientEnvironmentId == 3"
+            >
               <template slot-scope="{ row, $index }">
                 {{ row.extInfo.materielCode }}
               </template>
@@ -98,9 +141,16 @@
               </template>
             </el-table-column>
 
-            <el-table-column label="操作" fixed="right" width="100px" v-if="!Boolean(returnDetailsId)">
+            <el-table-column
+              label="操作"
+              fixed="right"
+              width="100px"
+              v-if="!Boolean(returnDetailsId)"
+            >
               <template slot-scope="{ $index, row }">
-                <el-link type="danger" @click="removeItem(idx, $index)">删除</el-link>
+                <el-link type="danger" @click="removeItem(idx, $index)"
+                  >删除</el-link
+                >
               </template>
             </el-table-column>
           </el-table>
@@ -108,187 +158,197 @@
       </div>
     </div>
 
-    <template slot="footer">
+    <template slot="footer" v-if="!returnDetailsId">
       <el-button size="mini" @click="handleClose">取 消</el-button>
-      <el-button size="mini" v-click-once type="primary" @click="save()">确 定</el-button>
+      <el-button size="mini" v-click-once type="primary" @click="save()"
+        >确 定</el-button
+      >
     </template>
 
-    <pickList v-if="pickListShow" @closeDialog="closeDialog" @emitSave="emitSave"></pickList>
+    <pickList
+      v-if="pickListShow"
+      @closeDialog="closeDialog"
+      @emitSave="emitSave"
+    ></pickList>
   </el-dialog>
 </template>
 
 <script>
-import { getCode } from '@/api/produce/workOrder';
-import { refundable, save, getById } from '@/api/materialReturn/index.js';
-import pickList from './pickList.vue';
-
-import { typeName } from '@/views/produce/components/common.js';
-export default {
-  components: { pickList },
-  props: {
-    sceneList: {
-      type: Array,
-      default() {
-        return [];
+  import { getCode } from '@/api/produce/workOrder';
+  import { refundable, save, getById } from '@/api/materialReturn/index.js';
+  import pickList from './pickList.vue';
+
+  import { typeName } from '@/views/produce/components/common.js';
+  export default {
+    components: { pickList },
+    props: {
+      sceneList: {
+        type: Array,
+        default() {
+          return [];
+        }
+      },
+      returnDetailsId: {
+        type: String,
+        default: ''
       }
     },
-    returnDetailsId: {
-      type: String,
-      default: ''
-    }
-  },
-  data() {
-    return {
-      visible: true,
-
-      returnForm: {
-        code: '',
-        name: '',
-        scene: '',
-        remark: '',
-        type: 1
-      },
-
-      typeName,
+    data() {
+      return {
+        visible: true,
 
-      pickListShow: false,
+        returnForm: {
+          code: '',
+          name: '',
+          scene: '',
+          remark: '',
+          type: 1
+        },
 
-      returnList: []
-    };
-  },
+        typeName,
 
-  computed: {
-    clientEnvironmentId() {
-      return this.$store.state.user.info.clientEnvironmentId;
-    }
-  },
-
-  created() {
-
-    if (this.returnDetailsId) {
-      this.getDetails()
-    } else {
-      this.getOrderCode();
-    }
-  },
+        pickListShow: false,
 
-  methods: {
-    async getOrderCode() {
-      this.returnForm.code = await getCode('return_materials_code');
+        returnList: [],
+        title: ''
+      };
     },
 
-    selectOrder() {
-      this.pickListShow = true;
-    },
-
-    closeDialog() {
-      this.pickListShow = false;
-    },
-
-    handleClose() {
-      this.$emit('close');
+    computed: {
+      clientEnvironmentId() {
+        return this.$store.state.user.info.clientEnvironmentId;
+      }
     },
 
-    emitSave(pickIds) {
-      refundable(pickIds).then((res) => {
-        this.returnList = res;
-        this.$forceUpdate();
-        this.pickListShow = false;
-      });
-    },
+    created() {
+      if (this.returnDetailsId) {
+        this.getDetails();
+      } else {
+        this.getOrderCode();
+      }
 
-    removeItem(idx, index) {
-      if (this.returnList[idx].pickOutInList.length != 1) {
-        this.returnList[idx].pickOutInList.splice(index, 1);
+      if (this.returnDetailsId) {
+        this.title = '退料详情';
       } else {
-        this.$message.warning('领料单中必须保留一条数据');
+        this.title = '新建退料单';
       }
     },
 
-    save() {
-      if (!this.returnForm.name) {
-        return this.$message.warning('请输入退料单名称');
-      }
-      if (this.returnList.length == 0) {
-        return this.$message.warning('请选择领料单');
-      }
+    methods: {
+      async getOrderCode() {
+        this.returnForm.code = await getCode('return_materials_code');
+      },
 
-      if (this.returnDetailsId) {
-        this.$emit('close', true);
-      } else {
-        let parma = {
-          ...this.returnForm,
-          pickOrderList: this.returnList
-        };
+      selectOrder() {
+        this.pickListShow = true;
+      },
 
-        save(parma).then((res) => {
-          this.$emit('close', true);
-        });
-      }
+      closeDialog() {
+        this.pickListShow = false;
+      },
 
+      handleClose() {
+        this.$emit('close');
+      },
 
-    },
+      emitSave(pickIds) {
+        refundable(pickIds).then((res) => {
+          this.returnList = res;
+          this.$forceUpdate();
+          this.pickListShow = false;
+        });
+      },
 
-    getDetails() {
-      getById(this.returnDetailsId).then((res) => {
-        this.returnForm.code = res.code
-        this.returnForm.name = res.name
-        this.returnForm.remark = res.remark
-        this.returnForm.scene = res.scene
-        this.returnList = res.pickOrderList
+      removeItem(idx, index) {
+        if (this.returnList[idx].pickOutInList.length != 1) {
+          this.returnList[idx].pickOutInList.splice(index, 1);
+        } else {
+          this.$message.warning('领料单中必须保留一条数据');
+        }
+      },
 
-        this.$forceUpdate()
-      })
-    },
-  }
-};
-</script>
+      save() {
+        if (!this.returnForm.name) {
+          return this.$message.warning('请输入退料单名称');
+        }
+        if (this.returnList.length == 0) {
+          return this.$message.warning('请选择领料单');
+        }
 
-<style lang="scss" scoped>
-.tableZ_box {
-  border: 1px solid #e3e5e5;
-  margin: 6px 0;
+        if (this.returnDetailsId) {
+          this.$emit('close', true);
+        } else {
+          let parma = {
+            ...this.returnForm,
+            pickOrderList: this.returnList
+          };
+
+          save(parma).then((res) => {
+            this.$emit('close', true);
+          });
+        }
+      },
 
-  &:last-child {
-    border-bottom: none;
-  }
+      getDetails() {
+        getById(this.returnDetailsId).then((res) => {
+          this.returnForm.code = res.code;
+          this.returnForm.name = res.name;
+          this.returnForm.remark = res.remark;
+          this.returnForm.scene = res.scene;
+          this.returnList = res.pickOrderList;
 
-  .row {
-    width: 100%;
-    display: flex;
-  }
+          this.$forceUpdate();
+        });
+      }
+    }
+  };
+</script>
 
-  .col {
-    width: calc(100% / 3);
-    display: flex;
-    align-items: center;
-    min-width: 200px;
-    min-height: 32px;
-    border-bottom: 1px solid #e3e5e5;
-    border-right: 1px solid #e3e5e5;
+<style lang="scss" scoped>
+  .tableZ_box {
+    border: 1px solid #e3e5e5;
+    margin: 6px 0;
 
     &:last-child {
-      border-right: none;
+      border-bottom: none;
     }
 
-    .name {
+    .row {
+      width: 100%;
       display: flex;
-      align-items: center;
-      padding: 4px;
-      width: 120px;
-      height: 100%;
-      background-color: #d0e4d5;
-      color: #000;
     }
 
-    .content {
-      padding: 4px 6px;
-      color: #000;
+    .col {
+      width: calc(100% / 3);
+      display: flex;
+      align-items: center;
+      min-width: 200px;
+      min-height: 32px;
+      border-bottom: 1px solid #e3e5e5;
+      border-right: 1px solid #e3e5e5;
+
+      &:last-child {
+        border-right: none;
+      }
+
+      .name {
+        display: flex;
+        align-items: center;
+        padding: 4px;
+        width: 120px;
+        height: 100%;
+        background-color: #d0e4d5;
+        color: #000;
+      }
+
+      .content {
+        padding: 4px 6px;
+        color: #000;
+      }
     }
-  }
 
-  .pd6 {
-    padding: 0 6px;
+    .pd6 {
+      padding: 0 6px;
+    }
   }
-}
 </style>

+ 4 - 2
src/views/pick/pickApply/components/addPick.vue

@@ -1,11 +1,13 @@
 <template>
-  <el-dialog
+  <ele-modal
     title="新建领料单"
     :visible.sync="visible"
+    v-if="visible"
     :before-close="handleClose"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     append-to-body
+    :maxable="true"
     width="80%"
   >
     <div>
@@ -227,7 +229,7 @@
       @close="orderShow = false"
       @workSelect="workSelect"
     ></produceOrder>
-  </el-dialog>
+  </ele-modal>
 </template>
 
 <script>

+ 3 - 2
src/views/pick/pickApply/components/selfBuildPick.vue

@@ -1,11 +1,12 @@
 <template>
-  <el-dialog
+  <ele-modal
     title="新建领料单"
     :visible.sync="visible"
     :before-close="handleClose"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     append-to-body
+    :maxable="true"
     width="80%"
   >
     <div>
@@ -153,7 +154,7 @@
       ref="pickingListRef"
       @allSelection="allSelection"
     ></pickingList>
-  </el-dialog>
+  </ele-modal>
 </template>
 
 <script>

+ 187 - 12
src/views/pick/pickApply/components/selfDetailed.vue

@@ -1,12 +1,13 @@
 <template>
   <div>
-    <el-dialog
+    <ele-modal
       title="领料列表"
       :visible.sync="visible"
       :before-close="handleClose"
       :close-on-click-modal="false"
       :close-on-press-escape="false"
       append-to-body
+      :maxable="true"
       width="80%"
     >
       <div class="tableZ_box">
@@ -47,20 +48,71 @@
         <template v-slot:demandQuantity="{ row }">
           {{ row.demandQuantity }} {{ row.unit }}
         </template>
+
+        <template v-slot:action="{ row, $index }">
+          <el-link
+            type="text"
+            @click="outboundDetails(row, $index)"
+            v-if="dataObj.status == 2"
+            >出库详情</el-link
+          >
+        </template>
       </ele-pro-table>
-    </el-dialog>
+
+      <div class="card_box" v-if="outboundDetailList.length != 0">
+        <div class="rx-bc">
+          <div class="item_box rx-bc">
+            <div class="time">出库单详情 </div>
+          </div>
+        </div>
+        <ele-pro-table
+          ref="table"
+          :columns="columnsTwo"
+          max-height="320px"
+          :datasource="outboundDetailList"
+          cache-key="detailed"
+          highlight-current-row
+          :need-page="false"
+        >
+          <template v-slot:empty>
+            <div class="empty">暂无领料数据</div>
+          </template>
+
+          <template v-slot:index="{ row, $index }">
+            {{ $index + 1 }}
+          </template>
+
+          <template v-slot:status="{ row }">
+            <el-tag>已出库</el-tag>
+          </template>
+
+          <!-- <template v-slot:action="{ row, $index }">
+            <el-link
+              type="text"
+              @click="outboundDetails(row, $index)"
+              v-if="dataObj.status == 2"
+              >出库详情</el-link
+            >
+          </template> -->
+        </ele-pro-table>
+      </div>
+    </ele-modal>
+    <outboundDetail ref="outboundDetailRef" />
   </div>
 </template>
 <script>
+  import outboundDetail from '@/views/produce/components/picking/outboundDetail.vue';
+  import { getOutboundDetail } from '@/api/produce/picking.js';
   export default {
-    components: {},
+    components: { outboundDetail },
     props: {
       detailedObj: {}
     },
     data() {
       return {
         visible: true,
-        dataObj: null
+        dataObj: null,
+        outboundDetailList: []
       };
     },
 
@@ -81,56 +133,169 @@
           {
             prop: 'categoryCode',
             label: '编码',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'categoryName',
             label: '名称',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'demandQuantity',
             label: '数量',
             align: 'center',
-            slot: 'demandQuantity'
+            slot: 'demandQuantity',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'warehouseName',
             label: '领料仓库',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'warehouseLeaderName',
             label: '审核人',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
 
           {
             prop: 'brandNo',
             label: '牌号',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
           {
             prop: 'model',
             label: '型号',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
           },
           {
             prop: 'specification',
             label: '规格',
-            align: 'center'
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'action',
+            label: '操作',
+            align: 'center',
+            fixed: 'right',
+            slot: 'action',
+            resizable: false,
+            showOverflowTooltip: true
           }
         ];
+      },
+
+      columnsTwo() {
+        let columnsVersion = this.columnsVersion;
+        return [
+          ...[
+            {
+              width: 55,
+              type: 'index',
+              columnKey: 'index',
+              align: 'center',
+              label: '序号',
+              fixed: 'left'
+            },
+            {
+              minWidth: 120,
+              prop: 'categoryCode',
+              label: '编码',
+              align: 'center',
+              fixed: 'left',
+              showOverflowTooltip: true
+            },
+            {
+              width: 100,
+              prop: 'batchNo',
+              label: '批次号',
+              slot: 'batchNo',
+              align: 'center'
+            },
+            {
+              minWidth: 140,
+              prop: 'name',
+              label: '名称',
+              align: 'center',
+              showOverflowTooltip: true
+            },
+            {
+              width: 150,
+              prop: 'feedQuantity',
+              label: '数量',
+              slot: 'feedQuantity',
+              align: 'center'
+            },
+            {
+              width: 150,
+              prop: 'unit',
+              label: '单位',
+              slot: 'unit',
+              align: 'center'
+            },
+            {
+              width: 150,
+              prop: 'modelType',
+              label: '型号',
+              slot: 'modelType',
+              align: 'center',
+              showOverflowTooltip: true
+            },
+            {
+              width: 150,
+              prop: 'specification',
+              label: '规格',
+              slot: 'specification',
+              align: 'center',
+              showOverflowTooltip: true
+            },
+            {
+              width: 150,
+              prop: 'brandNum',
+              label: '牌号',
+              slot: 'brandNum',
+              align: 'center',
+              showOverflowTooltip: true
+            },
+            {
+              width: 150,
+              prop: 'status',
+              label: '状态',
+              slot: 'status',
+              align: 'center',
+              showOverflowTooltip: true
+            }
+          ]
+        ];
       }
     },
 
     methods: {
       handleClose() {
         this.$emit('detailedClose');
+      },
+
+      outboundDetails(item, index) {
+        this.$refs.outboundDetailRef.open(item);
+      },
+
+      async getOutboundDetailList() {
+        await getOutboundDetail({
+          pickOrderId: this.dataObj.id
+        }).then((res) => {
+          this.outboundDetailList = res;
+        });
       }
     },
 
@@ -139,6 +304,7 @@
       console.log(obj, 'obj');
 
       this.dataObj = obj;
+      this.getOutboundDetailList();
     }
   };
 </script>
@@ -204,4 +370,13 @@
       margin: 0 4px;
     }
   }
+
+  .time {
+    color: #157a2c;
+    font-family: PingFang HK;
+    font-size: 14px;
+    font-style: normal;
+    font-weight: 500;
+    margin-left: 8px;
+  }
 </style>

+ 1 - 1
src/views/produce/components/feeding/components/batchProductsBom.vue

@@ -294,7 +294,7 @@
       },
 
       async getQualityParam() {
-        if (this.form.quantity && this.form.batchNo) {
+        if (this.form.quantity) {
           if (Number(this.itemData.feedQuantity) == 0) {
             this.$message.warning('拆批数不能等于0');
             return;

+ 3 - 3
src/views/produce/components/feeding/details.vue

@@ -112,7 +112,7 @@
               Object.prototype.hasOwnProperty.call(it, 'palletList') &&
               it.palletList.length != 0
             "
-            :palletList="it.palletList"
+            :list="it.palletList"
           ></palletBom>
 
           <revolvingDiskBom
@@ -120,7 +120,7 @@
               Object.prototype.hasOwnProperty.call(it, 'revolvingDiskList') &&
               it.revolvingDiskList.length != 0
             "
-            :revolvingDiskList="it.revolvingDiskList"
+            :list="it.revolvingDiskList"
           ></revolvingDiskBom>
         </div>
       </div>
@@ -137,7 +137,7 @@
   // import semiProductBom from './components/semiProductBom';
   import packingBom from './components/packingBom.vue';
   import palletBom from './components/palletBom';
-  import revolvingDiskBom from './components/revolvingDiskBom';
+  import revolvingDiskBom from './components/revolvingDiskBom.vue';
   import productsBom from './components/productsBom.vue';
   import batchProductsBom from './components/batchProductsBom.vue';
   import turnoverBom from './components/turnoverBom.vue';

+ 51 - 3
src/views/produce/components/feeding/index.vue

@@ -50,7 +50,7 @@
                 type="text"
                 size="mini"
                 @click="openPicking(item.workOrderId, item)"
-                >添加设备</el-button
+                >手动添加</el-button
               >
               <el-button
                 type="text"
@@ -356,6 +356,22 @@
         teamId: '',
         isDefaultExecutor: false,
         checked: false
+        // feedExistNum: '',
+        // feedNeedAridRegion: '',
+        // feedNeedAuxiliaryEquipment: '',
+        // feedNeedBoat: '',
+        // feedNeedConsumableMaterial: '',
+        // feedNeedEquipment: '',
+        // feedNeedJunkProduct: '',
+        // feedNeedMateriel: '',
+        // feedNeedMeasuringEquipment: '',
+        // feedNeedMould: '',
+        // feedNeedProduct: '',
+        // feedNeedQuality: '',
+        // feedNeedReworkProduct: '',
+        // feedNeedSemiProduct: '',
+        // feedNeedTurnover: '',
+        // feedStatus: ''
       };
     },
     mounted() {
@@ -708,7 +724,7 @@
         }
 
         if (this.executorIdList.length == 0) {
-          return this.$message.error('执行人不能为空!');
+          return this.$message.warning('执行人不能为空!');
         }
 
         const executorList = [];
@@ -748,7 +764,7 @@
             setTimeout(() => {
               this.$message.warning({
                 message: '请工单编号:' + f.code + '添加设备',
-                key: f.code // 使用当前时间作为key,确保唯一性
+                key: f.code
               });
             }, 500);
           }
@@ -758,6 +774,38 @@
           return;
         }
 
+        for (let item of this.List) {
+          if (
+            item.currentTaskDiagram.feedNeedTurnover == 1 &&
+            item.turnover.length == 0
+          ) {
+            setTimeout(() => {
+              this.$message.warning({
+                message: '请工单编号:' + item.code + '添加周转车',
+                key: item.code
+              });
+            }, 500);
+
+            return;
+          }
+        }
+
+        for (let item of this.List) {
+          if (
+            item.currentTaskDiagram.feedNeedBoat == 1 &&
+            item.palletList.length == 0
+          ) {
+            setTimeout(() => {
+              this.$message.warning({
+                message: '请工单编号:' + item.code + '添加舟皿',
+                key: item.code
+              });
+            }, 500);
+
+            return;
+          }
+        }
+
         const isCache = await this.checkCache(type);
 
         if (!isCache) {

+ 1 - 1
src/views/produce/components/jobBooking/components/batchPackagingGrouping.vue

@@ -16,7 +16,7 @@
       >
 
       <span
-        v-if="isNewUnpack == '1' && objData.singleReport == '0'"
+        v-else-if="isNewUnpack == '1' && objData.singleReport == '0'"
         style="
           color: green;
           font-size: 14px;

+ 1 - 1
src/views/produce/components/jobBooking/components/batchSemiProductJobBom.vue

@@ -1466,7 +1466,7 @@
       },
 
       async getQualityParam() {
-        if (this.batchForm.quantity && this.batchForm.batchNo) {
+        if (this.batchForm.quantity) {
           if (Number(this.itemData.feedQuantity) == 0) {
             this.$message.warning('拆批数不能等于0');
             return;

+ 1 - 0
src/views/produce/components/jobBooking/components/oneJobQualityBomPL.vue

@@ -222,6 +222,7 @@
                         class="content_num"
                         size="mini"
                         v-model="it.allReportWeight"
+                        @input="qualityChange"
                         type="number"
                       ></el-input>
                     </div>

+ 1 - 0
src/views/produce/components/jobBooking/details.vue

@@ -277,6 +277,7 @@
             <detailsIndex
               :code="objData.code"
               :taskId="objData.currentTaskDiagram.sourceTaskId"
+              :isDetails="true"
             >
             </detailsIndex>
           </div>

+ 2 - 2
src/views/produce/components/jobBooking/index.vue

@@ -67,7 +67,7 @@
               type="text"
               size="mini"
               @click="openPicking(item.workOrderId, item)"
-              >添加设备</el-button
+              >手动添加</el-button
             >
             <el-button
               type="text"
@@ -1328,7 +1328,7 @@
         });
 
         if (this.executorIdList.length == 0) {
-          return this.$message.error('执行人不能为空!');
+          return this.$message.warning('执行人不能为空!');
         }
 
         const executorList = [];

+ 2 - 2
src/views/produce/components/outsourcing/index.vue

@@ -496,9 +496,9 @@
     mounted() {
       this.getContactList();
       this.getFactoryList();
-      console.log(this.chooseType, '委托');
+      console.log(this.taskName, '委托');
       if (this.chooseType == '1') {
-        this.attributeData.name = this.taskName + '委';
+        this.attributeData.name = this.taskName + '委';
         // this.$set(this.outsourceFormVal, 'name', this.taskName + '委托');
       } else if (this.chooseType == '2') {
         this.attributeData.name = this.taskName + '请托';

+ 23 - 4
src/views/produce/components/picking/detailed.vue

@@ -46,11 +46,12 @@
         <ele-pro-table
           ref="table"
           :columns="columns"
-          max-height="320px"
+          :max-height="tableHeightPick"
           :datasource="item.arr"
           cache-key="detailed"
           highlight-current-row
           :need-page="false"
+          @fullscreen-change="fullscreenChangePick"
           v-if="item.bomDetailDTOS.length > 0 || item.instanceList.length > 0"
         >
           <template v-slot:toolbar>
@@ -97,11 +98,12 @@
         <ele-pro-table
           ref="table"
           :columns="columnsTwo"
-          max-height="320px"
+          :max-height="tableHeightOut"
           :datasource="outboundDetailList"
           cache-key="detailed"
           highlight-current-row
           :need-page="false"
+          @fullscreen-change="fullscreenChangeOut"
         >
           <template v-slot:empty>
             <div class="empty">暂无领料数据</div>
@@ -146,7 +148,9 @@
         dataObj: null,
         outboundDetailList: [],
         isFullscreen: false,
-        tabalHeight: 300
+        tabalHeight: 300,
+        tableHeightPick: '320px',
+        tableHeightOut: '320px'
       };
     },
 
@@ -358,7 +362,6 @@
       },
 
       outboundDetails(item, index) {
-        console.log(item, index, 'item, index');
         this.$refs.outboundDetailRef.open(item);
       },
 
@@ -372,6 +375,22 @@
 
       fullscreen() {
         this.isFullscreen = !this.isFullscreen;
+      },
+
+      fullscreenChangePick(fullscreen) {
+        if (fullscreen) {
+          this.tableHeightPick = 'calc(100vh - 120px)';
+        } else {
+          this.tableHeightPick = '320px';
+        }
+      },
+
+      fullscreenChangeOut(fullscreen) {
+        if (fullscreen) {
+          this.tableHeightOut = 'calc(100vh - 120px)';
+        } else {
+          this.tableHeightOut = '320px';
+        }
       }
     },
 

+ 0 - 11
src/views/produce/components/picking/index.vue

@@ -672,17 +672,6 @@
             : item.warehouseLists;
         });
 
-        // console.log(list, '111111');
-
-        // list.forEach((it) => {
-        //   if (it.warehouseList.length != 0) {
-        //     if (!it.warehouseIdList) {
-        //       it.warehouseIdList = [];
-        //       it.warehouseIdList.push(it.warehouseList[0].warehouse_id);
-        //     }
-        //   }
-        // });
-
         this.workList.forEach((e) => {
           if (e.id == id) {
             const newData = [];

+ 6 - 2
src/views/produce/components/picking/newPickingList.vue

@@ -10,7 +10,11 @@
     width="75%"
   >
     <el-card shadow="never">
-      <pickingListSearch @search="reload" ref="searchRef" />
+      <pickingListSearch
+        @search="reload"
+        ref="searchRef"
+        @handledime="handledime"
+      />
 
       <!-- <pickingSearch v-else @search="reload" ref="pickingRef" /> -->
 
@@ -145,7 +149,7 @@
 
 <script>
   import AssetTree from '../../components/assetTree.vue';
-  import pickingListSearch from './pickingListSearch.vue';
+  import pickingListSearch from './newPickingListSearch.vue';
   import pickingSearch from './pickingSearch.vue';
   import {
     pageeLedgerMain,

+ 191 - 0
src/views/produce/components/picking/newPickingListSearch.vue

@@ -0,0 +1,191 @@
+<!-- 搜索表单 -->
+<template>
+  <el-form
+    label-width="77px"
+    class="ele-form-search"
+    @keyup.enter.native="search"
+    @submit.native.prevent
+  >
+    <el-row :gutter="15">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="仓库:" prop="warehouseId">
+          <template>
+            <el-select
+              clearable
+              filterable
+              style="width: 100%"
+              v-model="where.warehouseId"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in warehouseList"
+                :label="item.name"
+                :value="item.id"
+                :key="item.id"
+              >
+              </el-option>
+            </el-select>
+          </template>
+        </el-form-item>
+      </el-col>
+
+      <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="列表维度:" prop="dimension">
+          <template>
+            <el-select
+              style="width: 100%"
+              clearable
+              @change="$emit('handledime', $event)"
+              v-model="dimension"
+              placeholder="请选择"
+            >
+              <el-option label="物品维度" value="1" v-if="type === 'products'">
+              </el-option>
+              <el-option label="批次维度" value="2"> </el-option>
+              <el-option label="包装维度" value="3"> </el-option>
+            </el-select>
+          </template>
+        </el-form-item>
+      </el-col> -->
+
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="物品编码:" prop="categoryCode">
+          <el-input
+            clearable
+            placeholder="请输入"
+            v-model.trim="where.categoryCode"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="物品名称:" prop="categoryName">
+          <el-input
+            clearable
+            v-model="where.categoryName"
+            placeholder="请输入"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="批次号:" prop="batchNo">
+          <el-input
+            clearable
+            v-model="where.batchNo"
+            placeholder="请输入"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+      <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="批次号:" prop="manualBatchNo">
+          <el-input
+            clearable
+            v-model="where.manualBatchNo"
+            placeholder="请输入"
+          ></el-input>
+        </el-form-item>
+      </el-col> -->
+
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="型号:" prop="modelType">
+          <el-input
+            clearable
+            v-model="where.modelType"
+            placeholder="请输入"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="规格:" prop="specification">
+          <el-input
+            clearable
+            v-model="where.specification"
+            placeholder="请输入"
+          ></el-input>
+        </el-form-item>
+      </el-col>
+
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <div class="ele-form-actions">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            class="ele-btn-icon"
+            @click="search"
+            size="small"
+          >
+            查询
+          </el-button>
+          <el-button
+            @click="reset"
+            icon="el-icon-refresh-left"
+            size="small"
+            type="primary"
+            >重置</el-button
+          >
+        </div>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+
+<script>
+  import { getWarehouseList } from '@/api/produce/index.js';
+  export default {
+    data() {
+      // 默认表单数据
+      const defaultWhere = {
+        batchNo: '',
+
+        warehouseId: '',
+        manualBatchNo: '',
+
+        modelType: '',
+        specification: '',
+        categoryCode: '',
+
+        categoryName: ''
+      };
+      return {
+        defaultWhere,
+        // 表单数据
+        where: { ...defaultWhere },
+        warehouseList: [],
+        dimension: '2',
+        type: 'products'
+      };
+    },
+    computed: {
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
+      }
+    },
+    created() {
+      this.getArguInfo();
+    },
+    methods: {
+      /* 搜索 */
+      search() {
+        this.$emit('search', this.where);
+      },
+      /*  重置 */
+      reset() {
+        this.where = { ...this.defaultWhere };
+        this.search();
+      },
+      //搜索数据源
+      async getArguInfo() {
+        const { data } = await getWarehouseList();
+        this.warehouseList = data;
+      }
+    }
+  };
+</script>
+
+<style>
+  .ele-form-actions {
+    display: inline-block;
+    transform: translate(0);
+    transition: all;
+  }
+</style>

+ 1 - 1
src/views/produceOrder/workReport.vue

@@ -208,7 +208,7 @@
                       ></outsourcingDetails>
                       <outsourcing
                         :outsourceFormVal="outsourceForm"
-                        :taskName="taskObj.name"
+                        :taskName="taskObj.taskTypeName"
                         @changePlugIn="changePlugIn"
                         @changeCancel="changeCancel"
                         :chooseType="chooseType"

+ 5 - 0
src/views/sample/index.vue

@@ -47,6 +47,10 @@
           <span>{{ getStatusLabel(row) }}</span>
         </template>
 
+        <template v-slot:quantity="{ row }">
+          <span>{{ row.quantity }}{{ row.measureUnit }}</span>
+        </template>
+
         <!-- 操作列 -->
         <template v-slot:action="{ row }">
           <el-link
@@ -167,6 +171,7 @@
             prop: 'quantity',
             label: '样品数量',
             align: 'center',
+            slot: 'quantity',
             width: 100,
             showOverflowTooltip: true
           },