Forráskód Böngészése

feat: 锁定的订单入库前不能发货

liujt 3 hete
szülő
commit
4fd97cc38e

+ 409 - 0
src/views/saleManage/saleOrder/components/stockUnlock.vue

@@ -0,0 +1,409 @@
+<template>
+  <ele-modal
+    custom-class="ele-dialog-form long-dialog-form"
+    :centered="true"
+    v-if="visible"
+    :visible.sync="visible"
+    :title="title"
+    :append-to-body="true"
+    :maxable="true"
+    :resizable="true"
+    :close-on-click-modal="false"
+    width="70%"
+    @close="cancel"
+  >
+    <div class="switch">
+      <div class="switch_left">
+        <ul>
+          <li
+            v-for="item in tabOptions"
+            :key="item.key"
+            :class="{ active: activeComp == item.key }"
+            @click="activeComp = item.key"
+          >
+            {{ item.name }}
+          </li>
+        </ul>
+      </div>
+    </div>
+    <div v-show="activeComp == 'order'">
+      <el-form ref="form" class="el-form-box" :model="form" label-width="120px">
+        <headerTitle title="订单信息"> </headerTitle>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="订单编号:" prop="orderNo">
+              <el-input v-model="form.orderNo" disabled></el-input>
+            </el-form-item>
+            <el-form-item
+              label="报价单"
+              prop="relationCode"
+              v-if="form.relationType == 2"
+            >
+              <el-input v-model="form.relationCode" disabled placeholder=" " />
+            </el-form-item>
+
+            <el-form-item
+              label="商机名称"
+              prop="relationName"
+              v-if="form.relationType == 1"
+            >
+              <el-input v-model="form.relationName" disabled placeholder=" " />
+            </el-form-item>
+
+            <el-form-item
+              label="选择合同"
+              prop="relationName"
+              v-if="form.relationType == 3"
+            >
+              <el-input v-model="form.relationName" placeholder=" " disabled />
+            </el-form-item>
+            <el-form-item
+              label="项目名称"
+              prop="relationName"
+              v-if="form.relationType == 4"
+            >
+              <el-input disabled v-model="form.relationName" placeholder=" " />
+            </el-form-item>
+            <el-form-item label="结算方式:" prop="settlementModeName">
+              <el-input v-model="form.settlementModeName" disabled></el-input>
+            </el-form-item>
+
+            <el-form-item label="客户收货地址:" prop="receiveAddress">
+              <el-input v-model="form.receiveAddress" disabled></el-input>
+            </el-form-item>
+            <el-form-item label="订单备注:" prop="remark">
+              <el-input
+                type="textarea"
+                v-model="form.remark"
+                disabled
+              ></el-input>
+            </el-form-item>
+            <el-form-item prop="orderFiles" label="订单附件:">
+              <fileMain v-model="form.orderFiles" type="view"></fileMain>
+            </el-form-item>
+            <!-- <el-form-item prop="productionRequirements" label="生产要求:">
+              <el-input v-model="form.productionRequirements" type="textarea" disabled></el-input>
+            </el-form-item> -->
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="来源类型" prop="relationType">
+              <el-select
+                v-model="form.relationType"
+                filterable
+                clearable
+                style="width: 100%"
+                :disabled="true"
+              >
+                <el-option :value="1" label="商机"></el-option>
+                <el-option :value="2" label="报价"></el-option>
+                <el-option :value="3" label="销售合同"></el-option>
+                <el-option :value="4" label="项目"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item
+              label="合同编号"
+              prop="relationCode"
+              v-if="form.relationType == 3"
+            >
+              <el-input disabled v-model="form.contractNumber" />
+            </el-form-item>
+            <el-form-item label="销售部门:" prop="salesDeptName">
+              <el-input v-model="form.salesDeptName" disabled></el-input>
+            </el-form-item>
+            <el-form-item label="销售类型:" prop="saleTypeName">
+              <el-input v-model="form.saleTypeName" disabled></el-input>
+            </el-form-item>
+            <el-form-item label="总金额:" prop="totalAmount">
+              <el-input v-model="form.totalAmount" disabled>
+                <template slot="append"> 元 </template>
+              </el-input>
+            </el-form-item>
+            <el-form-item label="优惠后总金额:" prop="payAmount">
+              <el-input v-model="form.payAmount" disabled>
+                <template slot="append"> 元 </template>
+              </el-input>
+            </el-form-item>
+            <el-form-item
+              label="订单类型:"
+              prop="needProduce"
+              style="margin-bottom: 22px"
+            >
+              <el-radio v-model="form.needProduce" disabled :label="0"
+                >库存式订单</el-radio
+              >
+              <el-radio v-model="form.needProduce" :label="1" disabled
+                >有客户生产性订单</el-radio
+              >
+              <el-radio v-model="form.needProduce" disabled :label="2"
+                >无客户生产性订单</el-radio
+              >
+              <el-radio
+                v-model="form.needProduce"
+                disabled
+                :label="4"
+                v-if="clientEnvironmentId != 5"
+                >不定向订单</el-radio
+              >
+            </el-form-item>
+            <el-form-item
+              label="总数"
+              prop="totalPlanNum"
+              v-if="form.needProduce == 4"
+            >
+              <el-input
+                v-model="form.totalPlanNum"
+                class="totalPlanNum"
+                disabled
+              >
+                <template slot="append">
+                  <DictSelection
+                    dictName="计量单位"
+                    disabled
+                    v-model="form.planNumUnit"
+                  >
+                  </DictSelection>
+                </template>
+              </el-input>
+            </el-form-item>
+            <el-form-item
+              label="发起人所属部门"
+              prop="createDeptName"
+            >
+              <el-input
+                v-model="form.createDeptName"
+                disabled
+              >
+              </el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <headerTitle title="基本信息"></headerTitle>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="客户名称:" prop="partaName">
+              <el-input v-model="form.partaName" disabled></el-input>
+            </el-form-item>
+            <el-form-item
+              label="客户统一社会信用代码:"
+              prop="partaUnifiedSocialCreditCode"
+              class="form_item_label"
+            >
+              <el-input
+                v-model="form.partaUnifiedSocialCreditCode"
+                disabled
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="客户联系人:" prop="partaLinkName">
+              <el-input v-model="form.partaLinkName" disabled></el-input>
+            </el-form-item>
+            <el-form-item label="客户电话:" prop="partaTel">
+              <el-input v-model="form.partaTel" disabled></el-input>
+            </el-form-item>
+            <el-form-item label="客户传真:" prop="partaFax">
+              <el-input v-model="form.partaFax" disabled></el-input>
+            </el-form-item>
+            <el-form-item label="	客户Email:" prop="partaEmail">
+              <el-input v-model="form.partaEmail" disabled></el-input>
+            </el-form-item>
+            <el-form-item label="客户地址:" prop="partaAddress">
+              <el-input v-model="form.partaAddress" disabled></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="售出方名称:" prop="partbName">
+              <el-input v-model="form.partbName" disabled></el-input>
+            </el-form-item>
+            <el-form-item
+              label="售出方统一社会信用代码:"
+              prop="partbUnifiedSocialCreditCode"
+              class="form_item_label"
+            >
+              <el-input
+                v-model="form.partbUnifiedSocialCreditCode"
+                disabled
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="售出方联系人:" prop="partbLinkName">
+              <el-input v-model="form.partbLinkName" disabled></el-input>
+            </el-form-item>
+            <el-form-item
+              prop="partbTel"
+              label="售出方联系电话:"
+              class="form_item_label"
+            >
+              <el-input v-model="form.partbTel" disabled></el-input>
+            </el-form-item>
+            <el-form-item prop="partbFax" label="售出方传真:">
+              <el-input v-model="form.partbFax" disabled></el-input>
+            </el-form-item>
+
+            <el-form-item label="售出方Email:" prop="partbEmail">
+              <el-input v-model="form.partbEmail" disabled></el-input>
+            </el-form-item>
+
+            <el-form-item label="售出方地址:" prop="partbAddress">
+              <el-input v-model="form.partbAddress" disabled></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+
+      <headerTitle title="物品清单" v-if="form.needProduce != 4"></headerTitle>
+      <inventoryTabledetail
+        v-if="form.needProduce != 4"
+        ref="inventoryTabledetailRef"
+        :isCustomerMark="true"
+        :isDiscountTotalPrice="true"
+        :isArrivalWay="true"
+        pageName="send"
+        :cacheKeyUrl="cacheKeyUrl"
+        :isProductionRequirements="true"
+
+      ></inventoryTabledetail>
+      <headerTitle title="类型清单" v-if="form.needProduce == 4"></headerTitle>
+      <typeList
+        v-if="form.needProduce == 4"
+        ref="typeListRef"
+        type="view"
+      ></typeList>
+    </div>
+    <bpmDetail
+      v-if="activeComp === 'bpm' && form.processInstanceId"
+      :id="form.processInstanceId"
+    ></bpmDetail>
+
+    <div v-if="activeComp == 'invoice'">
+      <invoiceList :orderId="detailId"></invoiceList>
+    </div>
+    <div v-if="activeComp == 'returnorder'">
+      <returnGoodsList :orderId="detailId"></returnGoodsList>
+    </div>
+    <div v-if="activeComp == 'accountstatement'">
+      <accountstatementList :orderId="detailId"></accountstatementList>
+    </div>
+    <div slot="footer" class="footer">
+      <el-button @click="cancel">返回</el-button>
+    </div>
+  </ele-modal>
+</template>
+
+<script>
+  import { getSaleOrderDetail } from '@/api/saleManage/saleorder';
+  import invoiceList from '@/views/saleManage/saleOrder/orderAssociation/invoiceList.vue';
+  import returnGoodsList from '@/views/saleManage/saleOrder/orderAssociation/returnGoodsList.vue';
+  import accountstatementList from '@/views/saleManage/saleOrder/orderAssociation/accountstatementList.vue';
+  import { getFile } from '@/api/system/file';
+  import dictMixins from '@/mixins/dictMixins';
+  import { copyObj } from '@/utils/util';
+  import bpmDetail from '@/views/bpm/processInstance/detail.vue';
+  import inventoryTabledetail from '@/BIZComponents/inventoryTableDetails.vue';
+  // import fileMain from '@/components/addDoc/index.vue';
+  import typeList from './typeList.vue';
+
+  export default {
+    mixins: [dictMixins],
+    components: {
+      // fileMain,
+      invoiceList,
+      returnGoodsList,
+      accountstatementList,
+      bpmDetail,
+      inventoryTabledetail,
+      typeList
+    },
+    data() {
+      return {
+        activeComp: 'order',
+        tabOptions: [
+          { key: 'order', name: '订单详情' },
+          { key: 'bpm', name: '流程详情' },
+          { key: 'invoice', name: '发货列表' },
+          { key: 'returnorder', name: '退货列表' },
+          { key: 'accountstatement', name: '对账列表' }
+        ],
+        visible: false,
+        detailId: '',
+        title: '详情',
+        cacheKeyUrl: 'eos-saleManage-saleOrder-inventoryTableDetails',
+        form: {
+          orderFiles: []
+        }
+      };
+    },
+    computed: {
+      clientEnvironmentId() {
+        return this.$store.state.user.info.clientEnvironmentId;
+      }
+    },
+    methods: {
+      async open(row) {
+        this.form = row;
+        this.visible = true;
+        this.getDetailData(row.id);
+        this.detailId = row.id;
+      },
+      toSendTab(tabName) {
+        this.activeComp = tabName;
+      },
+      cancel() {
+        this.$nextTick(() => {
+          // 关闭后,销毁所有的表单数据
+          (this.form = copyObj(this.formDef)),
+            (this.otherForm = copyObj(this.otherFormDef)),
+            (this.tableBankData = []);
+          this.tableLinkData = [];
+          this.visible = false;
+        });
+      },
+
+      async getDetailData(id) {
+        this.loading = true;
+        const data = await getSaleOrderDetail(id);
+        this.loading = false;
+        if (data) {
+          this.form = data;
+          this.$nextTick(() => {
+            this.$refs.inventoryTabledetailRef &&
+              this.$refs.inventoryTabledetailRef.putTableValue(data);
+            this.$refs.typeListRef &&
+              this.$refs.typeListRef.putTableValue(data.typedetailList);
+          });
+        }
+      }
+    }
+  };
+</script>
+
+<style scoped lang="scss">
+  .ele-dialog-form {
+    .el-form-item {
+      margin-bottom: 10px;
+    }
+  }
+
+  .headbox {
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+    .amount {
+      font-size: 14px;
+      font-weight: bold;
+      margin-right: 20px;
+    }
+  }
+
+  .switch_left ul .active {
+    border-top: 4px solid var(--color-primary);
+    color: var(--color-primary-5);
+  }
+
+  .switch {
+    padding-bottom: 20px;
+  }
+
+  :deep .divider .content {
+    justify-content: flex-start;
+  }
+</style>

+ 18 - 2
src/views/saleManage/saleOrder/index.vue

@@ -134,6 +134,16 @@
                       >
                     </el-dropdown-menu>
                   </el-dropdown>
+
+                  <!-- <el-button
+                    size="small"
+                    type="primary"
+                    class="ele-btn-icon"
+                    @click="handleStockUnlock"
+                    :disabled="selection?.length === 0"
+                  >
+                    库存解锁
+                  </el-button> -->
                 </template>
 
                 <!-- 查看详情列 -->
@@ -246,7 +256,7 @@
                       $hasPermission('eom:saleordersendrecord:save') &&
                       ((isTotalCount == '1' &&
                         row.sendTotalCount < row.productCount) ||
-                        isTotalCount == 0)
+                        isTotalCount == 0) && row.isLock != 1
                     "
                   >
                     发货单
@@ -454,6 +464,7 @@ import { enterprisePage } from '@/api/contractManage/contractBook';
 import { listOrganizations } from '@/api/system/organization';
 import printTemplateHt from './components/printTemplateHt.vue';
 import printTemplateRt from './components/printTemplateRt.vue';
+import stockUnlock from './components/stockUnlock.vue';
 
 
 export default {
@@ -490,7 +501,8 @@ export default {
     suspend,
     addDialogNew,
     printTemplateHt,
-    printTemplateRt
+    printTemplateRt,
+    stockUnlock
   },
   //客户管理数据
   props: {
@@ -1018,6 +1030,10 @@ export default {
     }
   },
   methods: {
+    handleStockUnlock() {
+      console.log('库存解锁', this.selection);
+      
+    },
     getSummaries(param) {
         return getSummaries(
           param,

+ 9 - 2
src/views/saleManage/saleOrder/invoice/components/inventoryTable.vue

@@ -77,7 +77,13 @@
         </template>
 
         <template v-slot:batchStockId="scope">
-          <el-form-item :prop="'datasource.' + scope.$index + '.batchStockId'">
+          <el-form-item :prop="'datasource.' + scope.$index + '.batchStockId'" :rules="[
+              {
+                required: scope.row.isLockSaleOrder == 1 ? true : false,
+                message: '请选择批次号',
+                trigger: 'blur'
+              }
+            ]">
             <!-- <el-input v-model="scope.row.batchNo"></el-input> -->
             <el-select
               v-model="scope.row.batchStockId"
@@ -205,7 +211,7 @@
             :prop="'datasource.' + scope.$index + '.warehouseId'"
             :rules="[
               {
-                required: isWarehouseId == 1 ? true : false,
+                required: isWarehouseId == 1 || scope.row.isLockSaleOrder == 1 ? true : false,
                 message: '请选择仓库',
                 trigger: 'blur'
               }
@@ -1691,6 +1697,7 @@
             // 设置为不存在的批次ID
             this.$set(this.form.datasource[index], 'batchStockId', 999);
             this.$set(this.form.datasource[index], 'warehouseNum', '');
+            this.$set(this.form.datasource[index], 'warehouseId', '');
           }
 
           // // 批次号

+ 2 - 1
src/views/saleManage/saleOrder/invoice/components/orderListDialog.vue

@@ -310,7 +310,8 @@
           ...where,
           orderStatus,
           ...this.searchParams,
-          isNoSendDone: this.isTotalCount
+          isNoSendDone: this.isTotalCount,
+          isLock: 0
         });
       },