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

采购退货相关

于继渤 1 éve
szülő
commit
185df5a7d5

+ 1 - 0
api/pages/ivt/inboundPurchaseReturn.js

@@ -15,6 +15,7 @@ module.exports = {
     inboundRepeal: 'repeal/',
     selectByUpdate: 'select_by_update/',
     inboundInsert: 'inbound_insert',
+    inboundUpdate: 'inbound_update',
   },
 
   routeUrl: {

+ 250 - 51
package-purchase/pages/purchase-return/add/add.js

@@ -7,20 +7,20 @@ Page({
   mixins: [mixins],
   /**
    * 页面的初始数据  采购退货相关 TODO
-   */ 
+   */
   data: {
     routeObjName: 'inboundReturn',
     tableData: [],
     table: Constants.tables.purchase,
     commonService: app.globalData['commonService'],
     inboundPurchaseReturnService: app.globalData['inboundPurchaseReturnService'],
-    btnFormData: JSON.stringify({ flag: app.globalData.setting[Constants.settingCode.IVT001] == "true" ? true : false }),
+    btnFormData: JSON.stringify({
+      flag: app.globalData.setting[Constants.settingCode.IVT001] == "true" ? true : false
+    }),
+    validFlag: true,
     // 系统参数
     flgHandleSetting: app.globalData.setting[Constants.settingCode.IVT001] == "true" ? true : false,
     pageFlag: false,
-    flgAutoIvt: false,
-    showPopFlag: true,
-    stepperFlag: true,
     cardList: [
       { name: 'main', title: '' },
       { name: 'relation', title: '' },
@@ -125,7 +125,6 @@ Page({
       formData.address = {
         address: data.item.returnAddress,
         addressFull: data.item.returnAddress,
-
       }
     }
     ///设置主从业务员
@@ -171,14 +170,20 @@ Page({
     let itemIndex = 0
     let formData = JSON.parse(this.data.formData)
     params.fromNo = (params.fromNo && params.fromNo.length > 0) ? params.fromNo[0] : null
-    params.fromId =  this.data.item? (this.data.item.purId ? this.data.item.purId : params.purId) :  null
+    params.fromId = this.data.item ? (this.data.item.purId ? this.data.item.purId : params.purId) : null
     params.factAmt = params.intoingAmt
     params.intoQty = this.convertToNegative(params.intoQty)
     params.intoAmt = this.convertToNegative(params.intoAmt)
+    if (this.data.formMode == 'edit') {
+      delete params['intoType']
+    }
     params.goodsList.forEach(res => {
       delete res['priceReturn']
       delete res['pricePurchase']
       delete res['rejectQty']
+      if (this.data.formMode == 'edit') {
+        delete res['intoType']
+      }
       res.sIntoId = res.sIntoId ? res.sIntoId : params.outId
       res.sPurId = res.sPurId ? res.sPurId : params.purId
       res.supId = res.supId ? res.supId : null
@@ -232,14 +237,159 @@ Page({
   convertToNegative(number) {
     return Math.abs(number) * -1
   },
+
+
+
+
+  /**
+   * @desc : 保存数据服务--校验
+   * @date : 2024/2/1 15:49
+   * @author : 王英杰
+   */
+  validData() {
+    let msgError = null
+    let formData = JSON.parse(this.data.formData)
+    if (this.data.formMode == Constants.formMode.edit) { //编辑
+      let changeList = this.searchEditList(this.data.searchEditList, formData.goodsList)
+      let deleteList = formData.deleteList ? formData.deleteList.filter(it => !!it["itemId"]) : [] //过滤掉选择的商品 留下查询出的
+      if (changeList.length <= 0 && deleteList.length <= 0) { //明细未改变
+        let changeData = this.isEqualFormData(JSON.parse(this.data.initialFormData), formData)
+        if (changeData) { //总单也未改变
+          msgError = '数据未修改';
+        }
+      }
+      if (msgError != null) {
+        utils.showToast(msgError);
+        return false
+      }
+    }
+
+    return true
+  },
+  /**
+   * @desc : 查找出 编辑过的list数据(处理前 整理数据)   
+   * @date : 2024/2/1 15:49
+   * @author : 王英杰 
+   */
+  searchEditList(oldList_, newList_) {
+    //因为isEqual 对比方法 的对象 要一样内容对比 
+    let oldList = []
+    let newList = []
+    oldList_.forEach(element => {
+      oldList.push({
+        itemId: element.itemId,
+        skuId: element.skuId,
+        skuModel: element.skuModel,
+        skuName: element.skuName,
+        intoingQty: Number(element.intoingQty),
+        priceInto: element.priceInto,
+        whId: element.whId,
+        nonStdCode: element.nonStdCode,
+        flgGift: element.flgGift,
+        remarks: element.remarks,
+      })
+    });
+    newList_.forEach(element => {
+      newList.push({
+        itemId: element.itemId,
+        skuId: element.skuId,
+        skuModel: element.skuModel,
+        skuName: element.skuName,
+        intoingQty: Number(element.intoingQty),
+        priceInto: element.priceInto,
+        whId: element.whId,
+        nonStdCode: element.nonStdCode,
+        flgGift: element.flgGift,
+        remarks: element.remarks,
+      })
+    });
+    return this.findChangedItems(oldList, newList, newList_)
+  },
+
+  /**
+   * @desc : 查找出 编辑过的list数据 
+   * 参数 一 编辑查询出的数据 
+   *  二  修改以及未修改的数据  
+   * 三 是未格式处理的 混合数据(取值用 因为isEqual要求对比数据格式统一 所以一和二是处理过的   如果从二取值 会丢失数据)
+   * _.isEqual:lodash 库中的函数
+   * @date : 2024/2/1 15:49
+   * @author : 王英杰 
+   */
+  findChangedItems(oldList, newList, unHandleNewData) {
+    let changedItems = [];
+    // 建一个映射,以便快速查找 oldList 中的 item  
+    const oldMap = new Map(oldList.map(item => [item.itemId, item]));
+    // 遍历 newList  
+    newList.forEach((item, index) => {
+      // 尝试在 oldMap 中找到对应的 item  
+      const oldItem = oldMap.get(item.itemId);
+      // 如果找不到,说明这是一个新添加的 item  
+      // 如果找到了但内容不同,则视为改动  
+      if (!oldItem || !_.isEqual(oldItem, item)) {
+        changedItems.push(unHandleNewData[index]); // 将改动或新添加的 item 添加到 changedItems 中  
+      }
+    });
+    return changedItems;
+  },
+  /**
+ * @desc :检查总单是否编辑过(处理前 整理数据)   
+ * @date : 2024/2/1 15:49
+ * @author : 王英杰 
+ */
+  isEqualFormData(oldData_, newData_) {
+    //因为isEqual 对比方法 的对象 要一样内容对比 
+    let oldData = {
+      supId: newData_.supId || '',
+      supName: newData_.supName || '',
+      remarks: newData_.remarks || '',
+    }
+    let newData = {
+      supId: newData_.supId || '',
+      supName: newData_.supName || '',
+      remarks: newData_.remarks || '',
+    }
+    //验证总单上的 附件list
+    let oldData_annexPaths = oldData_.annexPaths || []
+    let newData_annexPaths = newData_.annexPaths || []
+    let annexPathsEditFalg = this.hasGoodsChanged(oldData_annexPaths, newData_annexPaths)
+    if (annexPathsEditFalg) { //说明有附件改变
+      return false
+    }
+    //_.isEqual:lodash 库中的函数
+    if (!_.isEqual(oldData, newData)) { //不相同进
+      return false
+    }
+    return true
+  },
+  /**
+ * @desc : 对比 附件是否相同     
+ * @date : 2024/2/1 15:49
+ * @author : 王英杰 
+ */
+  hasGoodsChanged(originalList, currentList) {
+    if (originalList.length !== currentList.length) {
+      return true; // 列表长度不同,认为有改动  
+    }
+    for (let i = 0; i < originalList.length; i++) {
+      if (!_.isEqual(originalList[i], currentList[i])) {
+        return true; // 找到一个不同的商品,认为有改动  
+      }
+    }
+    return false; // 所有商品都相同,没有改动  
+  },
+
+
+
+
+
   /**
     * @desc : 保存数据服务
     * @date : 2024/2/1 15:49
     * @author : 于继渤
     */
   saveData() {
-    if (this.data.formType == Constants.formMode.edit) {
-      return this.excute(this.data.service, this.data.service.update, this.data.params);
+    if (this.data.formMode == Constants.formMode.edit) {
+      return this.excute(this.data.inboundPurchaseReturnService, this.data.inboundPurchaseReturnService.inboundUpdate, this.data.params);
     } else {
       return this.excute(this.data.inboundPurchaseReturnService, this.data.inboundPurchaseReturnService.inboundInsert, this.data.params);
     }
@@ -249,25 +399,25 @@ Page({
     * @date : 2024/2/1 15:49
     * @author : 于继渤
     */
-  handleData(){
+  handleData() {
     let cardList = this.data.cardList
     let contentSaveList = this.data.contentSaveList
-    cardList.forEach(res=>{
-      if(res.name == 'items'){
-          res.sumAmount = 0
-          res.sumQuantity = 0
-          res.chooseGoodsFlag = true
+    cardList.forEach(res => {
+      if (res.name == 'items') {
+        res.sumAmount = 0
+        res.sumQuantity = 0
+        res.chooseGoodsFlag = true
       }
     })
-    contentSaveList.forEach(res=>{
-      if(res.code == 'sumAmount'){
-          res.content = 0
+    contentSaveList.forEach(res => {
+      if (res.code == 'sumAmount') {
+        res.content = 0
       }
     })
-    
+
     this.setData({
-      cardList:cardList,
-      contentSaveList:contentSaveList
+      cardList: cardList,
+      contentSaveList: contentSaveList
     })
   },
 
@@ -484,33 +634,72 @@ Page({
     */
   setValuesByEdit(data) {
     let formData = JSON.parse(this.data.formData)
-    data.goodsList.forEach(res => {
-      //处理图片
-      if (res.skuImages) {
-        res['imagesUrl'] = res.skuImages.length > 0 ? res.skuImages[0].url : null
-      }
-      res['itemQty'] = res.returnQty
-      res['itemQtyMin'] = res.sintoItemIntoQty ? Number(res.sintoItemIntoQty * -1) : Number(res.invQty * -1)
-      res['itemQtyMax'] = Number(-1)
-      res['priceReturn'] = res.priceInto * -1
-      if (res.fromId) {
-        //有关联源单
-        res['swipeDisabled'] = true
-      }
-    })
-    formData = data
+    formData = data.data
     //处理地址
     formData.address = {
       address: data.returnAddress,
-      addressFull: data.returnAddress,
+      addressFull: data.returnAddress
     }
+    formData['staff'] = {
+      text: formData.staffName ? formData.staffName : app.globalData.user.staffName,
+      value: [formData.staffId ? formData.staffId : app.globalData.user.staffId]
+    }
+    formData['org'] = {
+      text: formData.orgName ? formData.orgName : app.globalData.user.orgName,
+      value: [formData.orgId ? formData.orgId : app.globalData.user.orgId]
+    }
+    formData.orgId = formData.orgId ? formData.orgId : app.globalData.user.orgId
+    formData.staffId = formData.staffId ? formData.staffId : app.globalData.user.staffId
+    data.dataItem.forEach(item => {
+      item.intoingQty_max = 0
+      item.priceStd = item.priceInto
+      //处理图片
+      if (item.skuImages) {
+        item['imagesUrl'] = item.skuImages.length > 0 ? item.skuImages[0].url : null
+      }
+      item.intoingQty_min = item.canReturnQty ? item.canReturnQty : item.invQty * -1 //可出库最大值
+
+    })
+    formData.goodsList = data.dataItem
+    let searchEditList = data.dataItem
+    searchEditList.forEach(element => {
+      if (this.data.formMode == Constants.formMode.edit) {
+        element.eidtFlag = true
+      }
+    });
+    formData.goodsList.forEach(element => {
+      if (this.data.formMode == Constants.formMode.edit) {
+        element.eidtFlag = true
+      }
+      if (element.intoStatus == Constants.intoStatus.inBounded) {
+        element.box = element.intoBox
+        element.piece = element.intoPiece
+      } else {
+        element.box = element.intoingBox
+        element.piece = element.intoingPiece
+      }
+      if (element.flgSubUnit) {
+        element.calculationFormula = element.packBox + element.unitName + '= 1' + element.subUnitName
+        element.packageBox = element['box'] + element.subUnitName + element['piece'] + element.unitName
+      }
+      element.sumPrice = element.priceInto * element.itemQty
+      // 原仓库ID 240701
+      element.whIdPri = element.whId
+      element.nonStdCodePri = element.nonStdCode
+    })
     this.setData({
-      beforeSumAmount: data.returnAmt,
-      formData: JSON.stringify(formData)
+      beforeSumAmount: formData.returnAmt,
+      searchEditList: searchEditList,
+      formData: JSON.stringify(formData),
+      initialFormData: JSON.stringify(formData)
     })
-    //设置业务员业务部门
-    this.setStaffOrg()
     this.calculateTotal()
+    setTimeout(() => {
+      // 刷新商品明细 显示 查看更多
+      let card = this.data.cardList.filter(it => it.name == 'items');
+      this.selectComponent('#' + this.data.formName).handleContentObj(card[0])
+    }, 2000)
+
   },
 
   //计算可售量相关
@@ -634,14 +823,17 @@ Page({
     })
   },
   loadInit() {
-
-    let flgHandleSetting = this.data.flgHandleSetting //true为自动办理  false 为手动办理
-    let contentSaveList = this.data.contentSaveList
-    if (flgHandleSetting) { //系统参数中的自动办理参数  隐藏左下角cheakbox
-      // 使用 filter 方法删除 code 为 flag 的项  
-      contentSaveList = contentSaveList.filter(item => item.code !== 'flag');
+    if (this.data.gradeCode == Constants.gradeCode.STD) { //标准
       this.setData({
-        contentSaveList: contentSaveList,
+        contentSaveList: [{
+          code: 'need',
+          title: mixins.$t("totalReturn"),//'合计金额',
+          type: 'str'
+        }, {
+          code: 'sumAmount',
+          content: 0,
+          type: 'number'
+        }]
       })
     }
     if (this.data.formMode != Constants.formMode.edit) {
@@ -663,8 +855,15 @@ Page({
       })
     }
     let contentObj = this.data.contentObj
+    // 标准版,自动出库办理标识默认勾上
     if (this.data.gradeCode == Constants.gradeCode.STD) {
+      let btnFormData = JSON.parse(this.data.btnFormData) || {}
+      btnFormData.flag = true
       contentObj.relation = []
+      this.setData({
+        btnFormData: JSON.stringify(btnFormData),
+        contentObj: contentObj
+      })
     } else {
       contentObj.relation = [{
         code: 'fromNo',
@@ -675,10 +874,10 @@ Page({
         title: mixins.$t("sourceOrder"),//'关联源单'
         urlKey: 'selectSourcePurchaseOrder'
       }]
+      this.setData({
+        contentObj: contentObj
+      })
     }
-    this.setData({
-      contentObj: contentObj
-    })
   }
 
 })

+ 1 - 1
package-purchase/pages/purchase-return/detail/detail.js

@@ -179,7 +179,7 @@ Page({
     formData.sumQuantity = sumQuantity
     //设置显示
     contentSaveList[1].content = sumAmount
-    cardList[0].info = '(' + formData.intoStatus + ')'
+    cardList[0].info = '(' + formData.intoStatusName + ')'
     cardList[0].sumAmount = formData.sumAmount
     cardList[0].sumQuantity = formData.sumQuantity
     //设置退货后总额