ysy пре 1 година
родитељ
комит
782205eb54

+ 393 - 0
src/views/productionPlan/components/unpackDialog.vue

@@ -0,0 +1,393 @@
+<template>
+  <ele-modal
+    width="60vw"
+    :visible.sync="visible"
+    :close-on-click-modal="false"
+    custom-class="ele-dialog-form"
+    :title="'拆分工单'"
+  >
+    <div class="form-wrapper">
+      <el-form :model="requestData" label-width="0" :show-message="false">
+        <el-descriptions title="" :column="2" border>
+          <el-descriptions-item label="工单号">
+            {{ formData.code }}</el-descriptions-item
+          >
+          <el-descriptions-item label="物料编码">
+            {{ formData.productCode }}</el-descriptions-item
+          >
+          <el-descriptions-item label="产品名称">{{
+            formData.productName
+          }}</el-descriptions-item>
+          <el-descriptions-item label="牌号|型号">
+            {{ formData.brandNo }}|{{ formData.model }}</el-descriptions-item
+          >
+          <el-descriptions-item label="要求生产数量">{{
+            formData.formingNum
+          }}</el-descriptions-item>
+          <el-descriptions-item label="计划开始时间">{{
+            formData.planStartTime
+          }}</el-descriptions-item>
+        </el-descriptions>
+      </el-form>
+
+      <headerTitle title="剩余拆单" class="mt20"> </headerTitle>
+      <el-form ref="form" :model="form" :rules="rules">
+        <ele-pro-table
+          ref="table"
+          :needPage="false"
+          :columns="columns"
+          :datasource="form.surplusUnpack"
+        >
+          <template v-slot:toolbar>
+            <el-button
+              size="small"
+              type="primary"
+              icon="el-icon-plus"
+              class="ele-btn-icon"
+              :disabled="formingNum == 0 ? true : false"
+              @click="openUnpack"
+            >
+              拆单
+            </el-button>
+          </template>
+
+          <template v-slot:formingNum="scope">
+            <el-form-item
+              v-if="formingNum != 0"
+              :prop="'surplusUnpack.' + scope.$index + '.formingNum'"
+              :rules="[
+                {
+                  required: true,
+                  message: '请输入要求生产数量',
+                  trigger: 'change'
+                },
+                {
+                  pattern: /^\d+(\.{0,1}\d+){0,1}$/,
+                  message: '拆单数超过生产数量',
+                  trigger: ['blur', 'change']
+                }
+              ]"
+            >
+              <el-input
+                disabled
+                v-model="formingNum"
+                placeholder="请输入"
+              ></el-input>
+            </el-form-item>
+
+            <el-form-item v-else> 工单已全部拆完 </el-form-item>
+          </template>
+
+          <template v-slot:planStartTime="scope">
+            <el-form-item
+              v-if="formingNum != 0"
+              :prop="'surplusUnpack.' + scope.$index + '.planStartTime'"
+              :rules="{
+                required: true,
+                message: '请选择开始计划时间',
+                trigger: 'change'
+              }"
+            >
+              <el-date-picker
+                class="w100"
+                v-model="scope.row.planStartTime"
+                type="date"
+                value-format="yyyy-MM-dd"
+              ></el-date-picker>
+            </el-form-item>
+          </template>
+
+          <template v-slot:classeId="scope">
+            <el-form-item
+              v-if="formingNum != 0"
+              :prop="'surplusUnpack.' + scope.$index + '.classeId'"
+              :rules="{
+                required: true,
+                message: '请选择排班',
+                trigger: 'change'
+              }"
+            >
+              <el-input
+                readonly
+                v-model="scope.row.classeName"
+                @click.native="openClasse(scope.row, 1, scope.$index)"
+              ></el-input>
+            </el-form-item>
+          </template>
+        </ele-pro-table>
+
+        <headerTitle title="拆单" class="mt20"> </headerTitle>
+
+        <ele-pro-table
+          ref="table"
+          :needPage="false"
+          :columns="columns2"
+          :datasource="form.unpackList"
+        >
+          <template v-slot:formingNum="scope">
+            <el-form-item
+              :prop="'unpackList.' + scope.$index + '.formingNum'"
+              :rules="{
+                required: true,
+                message: '请输入要求生产数量',
+                trigger: 'change'
+              }"
+            >
+              <el-input-number
+                type="number"
+                @change="changeNum(scope.$index)"
+                :min="0"
+                v-model="scope.row.formingNum"
+                placeholder="请输入"
+              ></el-input-number>
+            </el-form-item>
+          </template>
+
+          <template v-slot:planStartTime="scope">
+            <el-form-item
+              :prop="'unpackList.' + scope.$index + '.planStartTime'"
+              :rules="{
+                required: true,
+                message: '请选择开始计划时间',
+                trigger: 'change'
+              }"
+            >
+              <el-date-picker
+                class="w100"
+                v-model="scope.row.planStartTime"
+                type="date"
+                value-format="yyyy-MM-dd"
+              ></el-date-picker>
+            </el-form-item>
+          </template>
+
+          <template v-slot:action="{ $index }">
+            <el-popconfirm
+              class="ele-action"
+              title="确定要删除此子单吗?"
+              @confirm="remove($index)"
+            >
+              <template v-slot:reference>
+                <el-link type="danger" :underline="false" icon="el-icon-delete">
+                  删除
+                </el-link>
+              </template>
+            </el-popconfirm>
+          </template>
+        </ele-pro-table>
+      </el-form>
+    </div>
+    <div slot="footer">
+      <el-button plain @click="cancel">取消</el-button>
+      <el-button type="primary" @click="confirm">确定</el-button>
+    </div>
+  </ele-modal>
+</template>
+
+<script>
+  import { deepClone } from '@/utils';
+  export default {
+    components: {},
+    data() {
+      return {
+        visible: false,
+
+        formData: {},
+        requestData: {
+          deviceCode: '',
+          deviceName: '',
+          deviceId: ''
+        },
+        formingNum: 0,
+
+        form: {
+          surplusUnpack: [],
+          unpackList: []
+        },
+
+        rules: {},
+
+        columns: [
+          {
+            prop: 'originalCode',
+            label: '工单号',
+            align: 'center',
+            minWidth: 200
+          },
+          {
+            prop: 'formingNum',
+            label: '要求生产数量',
+            align: 'center',
+            slot: 'formingNum',
+            minWidth: 200
+          },
+          {
+            prop: 'planStartTime',
+            label: '计划开始时间',
+            align: 'center',
+            slot: 'planStartTime',
+            minWidth: 200
+          },
+          {
+            prop: 'classeId',
+            label: '排班',
+            align: 'center',
+            slot: 'classeId',
+            minWidth: 200
+          }
+        ],
+
+        columns2: [
+          {
+            prop: 'originalCode',
+            label: '工单号',
+            align: 'center',
+            minWidth: 200
+          },
+          {
+            prop: 'formingNum',
+            label: '要求生产数量',
+            align: 'center',
+            slot: 'formingNum',
+            minWidth: 200
+          },
+          {
+            prop: 'planStartTime',
+            label: '计划开始时间',
+            align: 'center',
+            slot: 'planStartTime',
+            minWidth: 200
+          },
+          {
+            prop: 'classeId',
+            label: '排班',
+            align: 'center',
+            slot: 'classeId',
+            minWidth: 200
+          },
+          {
+            columnKey: 'action',
+            label: '操作',
+            width: 160,
+            align: 'center',
+            resizable: false,
+            fixed: 'right',
+            slot: 'action',
+            showOverflowTooltip: true
+          }
+        ]
+      };
+    },
+    methods: {
+      open(row) {
+        this.visible = true;
+        this.formData = deepClone(row);
+        this.formingNum = this.formData.formingNum;
+
+        this.form.surplusUnpack = [];
+        this.form.unpackList = [];
+        this.setSurplus();
+      },
+
+      setSurplus() {
+        this.form.surplusUnpack.push({
+          originalCode: this.formData.code,
+          formingNum: this.formData.formingNum,
+          planStartTime: '',
+          classeId: '',
+          isCopy: 1
+        });
+      },
+
+      openUnpack() {
+        this.form.unpackList.push({
+          originalCode: this.formData.code,
+          formingNum: '',
+          planStartTime: '',
+          classeId: ''
+        });
+      },
+
+      changeNum(index) {
+        let num = this.formData.formingNum;
+        this.form.unpackList.forEach((e) => {
+          if (e.formingNum != null && e.formingNum != undefined) {
+            num = num - Number(e.formingNum);
+            if (num >= 0) {
+              this.formingNum = num;
+            } else {
+              this.$nextTick(() => {
+                this.$set(this.form.unpackList[index], 'formingNum', 0);
+              });
+              this.$message.error('拆单数超过生产数量');
+
+              return;
+            }
+          }
+        });
+      },
+
+      remove(index) {
+        this.form.unpackList.splice(index, 1);
+        if (this.form.unpackList.length == 0) {
+          this.formingNum = this.formData.formingNum;
+        } else {
+          this.changeNum(index);
+        }
+      },
+
+      cancel() {
+        this.formData = {};
+        this.visible = false;
+        this.$refs.form.resetFields();
+      },
+
+      confirm() {
+        this.$refs.form.validate(async (value) => {
+          if (value) {
+            if (
+              this.form.unpackList.length == 1 &&
+              this.form.unpackList[0].formingNum == this.formData.formingNum
+            ) {
+              this.$message.info('拆单数要大于1');
+              return false;
+            }
+
+            if (
+              this.form.surplusUnpack.length == 1 &&
+              this.form.unpackList.length == 0
+            ) {
+              this.$message.info('拆单数要大于1');
+              return false;
+            }
+
+            let params = [];
+            if (this.formingNum != 0) {
+              this.form.surplusUnpack[0].formingNum = this.formingNum;
+              params = [...this.form.unpackList, ...this.form.surplusUnpack];
+            } else {
+              params = this.form.unpackList;
+            }
+
+            // const res = await splitWork(params);
+            // if (res) {
+            //   this.$message.success('拆分成功!');
+            //   this.$emit('success');
+            //   this.cancel();
+            // }
+          }
+        });
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .mt20 {
+    margin-top: 20px;
+  }
+
+  .el-form-item {
+    margin-bottom: 0 !important;
+  }
+</style>

+ 24 - 4
src/views/productionPlan/index.vue

@@ -94,23 +94,36 @@
           >
             修改计划
           </el-link>
+
           <el-link
-            type="primary"
+              type="primary"
+              :underline="false"
+             @click="toUnpack(row)"
+            >
+              拆批
+            </el-link>
+
+          <el-link
+            type="danger"
             :underline="false"
             @click="handleDelete(row)"
-            icon="el-icon-edit"
+           icon="el-icon-delete"
           >
             删除
           </el-link>
         </template>
       </ele-pro-table>
     </el-card>
+
+    <unpackDialog ref="unpackRef" @success="reload" />
+
   </div>
 </template>
 
 <script>
   import { getList, del, updatePriority } from '@/api/productionPlan/index.js';
   import productionPlanSearch from './components/productionPlan-search.vue';
+  import unpackDialog from './components/unpackDialog.vue';
   import { release } from '@/api/productionPlan/order.js';
 
   import { getCode } from '@/api/codeManagement';
@@ -120,7 +133,8 @@
   import { debounce } from 'lodash';
   export default {
     components: {
-      productionPlanSearch
+      productionPlanSearch,
+      unpackDialog
     },
     data() {
       return {
@@ -469,7 +483,6 @@
               resizable: false,
               fixed: 'right',
               slot: 'action',
-              showOverflowTooltip: true
             });
           } else {
             privateColumn = [];
@@ -506,6 +519,13 @@
           path: '/productionPlan/detail/' + id
         });
       },
+
+            // 拆批
+            toUnpack(row) {
+        this.$refs.unpackRef.open(row);
+      },
+
+
       handleDelete({ id }) {
         this.$confirm('确定删除当前数据?', '提示')
           .then(async () => {

+ 2 - 0
src/views/saleOrder/components/order-search.vue

@@ -109,6 +109,8 @@
             <el-button @click="goProduct">转生产计划</el-button>
             <el-button type="primary" @click="orderRefresh" :loading="loading">订单刷新</el-button>
             <el-button type="success" @click="toCreate">创建订单</el-button>
+
+
             <el-upload class="avatar-uploader" action="#" :show-file-list="false" :http-request="uploadFile"
               :before-upload="beforeUpload" :on-change="handleChange" ref="uploadFile">
               <el-button type="warning">批量导入</el-button>

+ 16 - 2
src/views/saleOrder/index.vue

@@ -57,8 +57,12 @@
         </template>
         <!-- 操作列 -->
         <template v-slot:action="{ row }">
-          <template v-if="row.orderSource != 1">
+          <template >
+
+
+
             <el-link
+             v-if="row.orderSource != 1"
               type="primary"
               :underline="false"
               icon="el-icon-edit"
@@ -66,7 +70,10 @@
             >
               修改
             </el-link>
+
+
             <el-popconfirm
+            v-if="row.orderSource != 1"
               class="ele-action"
               title="确定要删除此销售订单吗?"
               @confirm="remove(row)"
@@ -85,6 +92,9 @@
     <order-detail @refresh="reload" ref="detailDialog"> </order-detail>
     <!-- 创建订单 -->
     <create-order ref="createDialog" @refresh="reload"> </create-order>
+
+
+    
   </div>
 </template>
 
@@ -92,6 +102,7 @@
   import OrderSearch from './components/order-search.vue';
   import OrderDetail from './components/order-detail.vue';
   import CreateOrder from './components/create-order.vue';
+ 
   import {
     getPageList,
     deleteOrder,
@@ -107,6 +118,7 @@
       OrderSearch,
       OrderDetail,
       CreateOrder
+
     },
     data() {
       return {
@@ -332,7 +344,7 @@
             privateColumn.push({
               columnKey: 'action',
               label: '操作',
-              width: 150,
+              width: 180,
               align: 'center',
               resizable: false,
               slot: 'action',
@@ -392,6 +404,8 @@
       toUpdate(row) {
         this.$refs.createDialog.open(row);
       },
+
+
       remove(row) {
         deleteOrder([row.id]).then((res) => {
           this.$message.success(res);