소스 검색

销售订单

王英杰 1 년 전
부모
커밋
2b6e9ee4cb

+ 93 - 35
components/dkbase/dk-form-bill/dk-form-bill.js

@@ -87,7 +87,7 @@ Component({
       type: String,
       value: 'priceTailCol'
     },
-    
+
     // 价格列
     priceCol: {
       type: String,
@@ -275,7 +275,7 @@ Component({
     },
     goodsTagColor: { //标签颜色
       type: String,
-    },
+    }, 
     // 结果集
     value: {
       type: String,
@@ -344,7 +344,30 @@ Component({
     imageUrl: config.image_url + '/static/img/',
     // popContent:
     //   [{ code: 'quantity', type: 'step', title: '数量', required: true }, { code: 'pricePromotion', type: 'number', title: '销售价格', required: true }, { code: 'warehouseId', name: 'warehouseName', type: 'drop', required: true, dropType: 'warehouse' , required: true}, { code: 'color', type: 'str', title: '批次号' , required: true}, { code: 'giftFlag', type: 'checkbox', title: '赠品标识' }],
-    form: {}
+    form: {},
+    popChangePrice: [{
+      code: 'priceSale',
+      type: 'number',
+      title: mixins.$t("priceSale"),
+      required: true,
+      center: 'right',
+      readonly: true
+    },
+    {
+      code: 'factPrice',
+      type: 'number',
+      title: mixins.$t("factPrice"),
+      required: true,
+      readonly: false
+    },
+    {
+      code: 'factAmt',
+      type: 'number',
+      title: mixins.$t("factAmt"),
+      required: true,
+      readonly: false
+    },
+  ],
   },
   lifetimes: {
     attached: function () {
@@ -533,10 +556,8 @@ Component({
         let index_discAmt = popContent.findIndex(element => element.code == 'discAmt');
         if (ds.item['priceSale'] && ds.item['priceSale'] > 0) { //销售单价小于0 折扣和优惠 都不可输入
           popContent[index_discount].readonly = false
-          popContent[index_discAmt].readonly = false
         } else {
           popContent[index_discount].readonly = true
-          popContent[index_discAmt].readonly = true
         }
       }
       if (this.data.type == Constants.billType.inventory) {
@@ -580,6 +601,22 @@ Component({
       })
     },
     /**
+     * @desc   : dk-number-input 的点击事件外漏
+     * @author : 王英杰
+     * @date   : 2024/1/26 11:46
+     */
+    openPopDkNumberInput(e) {
+      console.log("openDkNumberInput-pop组件111", e);
+      let key = e.detail.key
+      if (key == "priceSale" || key == "factPrice") {
+        let dataItem = this.data.dataItem
+        this.setData({
+          showChangePrice: true,
+          dataItemChangePrice:dataItem
+        })
+      }
+    },
+    /**
      * @desc   : 再次打开箱片的弹框
      * @author : 周兴
      * @date   : 2024/1/26 11:46
@@ -643,7 +680,7 @@ Component({
       }
       if (this.data.type == Constants.billType.saleOutReturn) {
         this.setGoodsOutReturnAmount()
-      } 
+      }
       // 外露关闭pop后事件
       this.triggerEvent("editItems", {
         data: form
@@ -734,6 +771,17 @@ Component({
         dataItem: JSON.stringify(dataItem)
       })
     },
+        /**
+     * @desc : 商品确认事件-修改价格
+     * @date : 2024/2/1 15:49
+     * @author : 于继渤
+     */
+    editItemsChangePrice(e) {
+      let dataItem = this.data.dataItemChangePrice
+      this.setData({
+        dataItem:dataItem
+      })
+    },
     /**
      * @desc :商品明细数量加减事件
      * @date : 2024/2/1 15:49
@@ -1807,7 +1855,7 @@ Component({
       if (this.data.type == Constants.billType.saleOutReturn) {
         this.setGoodsOutReturnAmount()
       }
-    
+
       // 外露setGoods方法
       this.triggerEvent("delItem", {
         data: goodsList
@@ -1854,7 +1902,7 @@ Component({
      * @author : 周兴
      * @date : 2024/1/19
      */
-    setGoodsAmount(formdata) { 
+    setGoodsAmount(formdata) {
       let cardList = this.data.cardList
       let form = formdata
       console.log('form2', form);
@@ -1878,14 +1926,14 @@ Component({
             item.discount = Number(0)
             item.discAmt = Number(0)
           }
-          item.itemAmt =  Number(item.priceSale) *  Number(item.itemQty) //商品金额
-          item.sumPrice =  Number(item.priceSale) *  Number(item.itemQty) //商品金额
-          item.priceDiscount = item.priceStd ? Number(( Number(item.priceSale) /  Number(item.priceStd)) * 100).toFixed(2) : 100 //售价折扣  
+          item.itemAmt = Number(item.priceSale) * Number(item.itemQty) //商品金额
+          item.sumPrice = Number(item.priceSale) * Number(item.itemQty) //商品金额
+          item.priceDiscount = item.priceStd ? Number((Number(item.priceSale) / Number(item.priceStd)) * 100).toFixed(2) : 100 //售价折扣  
           item.factAmt = Number(item.factPrice) * Number(item.itemQty)
           sumQuantity += Number(item.itemQty) //数量
-          sumAmount +=  Number(item.priceSale) *  Number(item.itemQty) //没有售价默认取标价
-          factAmt +=  Number(item.factAmt)
-          sumStandard +=  Number((item.priceStd ? item.priceStd : item.priceStandard)) *  Number(item.itemQty)
+          sumAmount += Number(item.priceSale) * Number(item.itemQty) //没有售价默认取标价
+          factAmt += Number(item.factAmt)
+          sumStandard += Number((item.priceStd ? item.priceStd : item.priceStandard)) * Number(item.itemQty)
         })
         //标价合计
         cardList[index].sumStandard = sumStandard
@@ -1904,7 +1952,7 @@ Component({
         form.canUseCollect = 0
         form.useCollect = 0
         form.sumQuantity = sumQuantity
-        form.discount = 100//整单折扣
+        form.discount = 100 //整单折扣
         form.discAmt = 0 //优惠金额
       } else {
         cardList[index].sumStandard = 0
@@ -1919,7 +1967,7 @@ Component({
         form.canUseCollect = 0
         form.useCollect = 0
         form.factAmt = 0
-        form.discount = 100//整单折扣
+        form.discount = 100 //整单折扣
         form.discAmt = 0 //优惠金额
       }
       console.log('form1', form);
@@ -2094,7 +2142,7 @@ Component({
           }
           if (this.data.type == Constants.billType.sale) { //订单
             dataItem.sumPrice = dataItem['itemQty'] * dataItem.priceSale
-            dataItem.factAmt = dataItem['itemQty'] * dataItem.factPrice 
+            dataItem.factAmt = dataItem['itemQty'] * dataItem.factPrice
           }
         }
 
@@ -2174,25 +2222,11 @@ Component({
         }
       }
       if (this.data.type == Constants.billType.sale) {
-        //实际合计金额=合计金额*折扣-优惠(改折扣)
-        if (key == "factPrice") { //改实际单价 优惠金额不变 折扣和实际总额变了
-          dataItem.factPrice = e.detail.value //实际单价
-          dataItem.discount = Math.floor(dataItem.priceSale == 0 ? 100 : (((Number(dataItem.factPrice) + Number(dataItem.discAmt)) / Number(dataItem.priceSale)) * 100)) //折扣 = (实际合计金额+优惠)/合计金额
-          if (dataItem.priceSale != 0) { //预防 算出的折扣是无线循环  差的金额 放到优惠上
-            dataItem.discAmt = (dataItem.priceSale * (dataItem.discount / 100)) - dataItem.factPrice
-          }
-          dataItem.factAmt = (dataItem.factPrice * dataItem['itemQty']).toFixed(2) //实际销售金额=实际销售单价(四舍五入)*数量 
-        }
-        if (key == "discount") { //priceSale是0的时候  折扣和优惠动不了  改折扣 优惠不动 改变实际单价 和实际金额
+        //实际合计金额=合计金额*折扣  
+        if (key == "discount") { //销售价格是0的时候  折扣锁死 不让改
           dataItem.discount = e.detail.value
-          dataItem.factPrice = Number(dataItem.priceSale) * Number((Number(dataItem.discount) / 100)) - Number(dataItem.discAmt) //实际单价  = 销售单价*折扣-优惠(改折扣)
-          dataItem.factAmt = dataItem.factPrice * dataItem['itemQty'] //实际销售金额=实际销售单价(四舍五入)*数量
-        }
-        if (key == "discAmt") { //priceSale是0的时候  折扣和优惠动不了   
-          dataItem.discAmt = e.detail.value //优惠金额
-          //    dataItem.discount =   ((dataItem.factPrice/dataItem.priceSale)*100).toFixed(2)
-          dataItem.factPrice = Number(dataItem.priceSale) * Number((Number(dataItem.discount) / 100)) - Number(dataItem.discAmt) //实际单价  = 销售单价*折扣-优惠(改折扣) 
-          dataItem.factAmt = dataItem.factPrice * dataItem['itemQty'] //实际销售金额=实际销售单价(四舍五入)*数量 
+          dataItem.factPrice = Number(dataItem.priceSale) * Number((Number(dataItem.discount) / 100)) //实际单价  = 销售单价*折扣 
+          dataItem.factAmt = dataItem.factPrice * dataItem['itemQty'] //实际销售金额= 实际销售单价*数量
         }
       }
       this.setData({
@@ -2200,6 +2234,30 @@ Component({
       })
     },
     /**
+     * @desc   : 销售订单价格反算的时候 明细弹出pop修改价格点击再弹pop的离焦事件
+     * @author : 王英杰
+     * @date   : 2024/2/2 11:46
+     */
+    blurChangePriceNumberField(e) {
+      let dataItem = JSON.parse(this.data.dataItemChangePrice)
+      let key = e.detail.key
+      // 使用 Math.round() 方法进行四舍五入取整 
+      if (key == "factPrice") { //改实际单价  
+        dataItem.factPrice = e.detail.value //实际单价
+        dataItem.factAmt = dataItem.factPrice * dataItem['itemQty'] //实际金额=实际单价*数量 
+        dataItem.discount = Math.round(dataItem.priceSale ? (Number(dataItem.factPrice) / Number(dataItem.priceSale) * 100) : 100) //明细折扣 = 实际单价 /售价 
+      } 
+      if (key == "factAmt") { // 改实际金额
+        dataItem.factAmt = e.detail.value //实际金额
+        dataItem.factPrice = Math.round( (Number(dataItem.factAmt) / Number(dataItem.itemQty) * 100) )/100 //明细单价 = 金额 /数量
+        dataItem.discount =dataItem.priceSale ? Math.round( (Number(dataItem.factPrice) / Number(dataItem.priceSale) * 100) ) : 100 //明细折扣 = 实际单价 /售价 (对浮点数乘以100(将小数点右移两位),然后使用Math.round()进行四舍五入,最后再除以100(将小数点左移两位)来得到结果)
+      }
+      this.setData({
+        dataItemChangePrice: JSON.stringify(dataItem)
+      })
+
+    },
+    /**
      * @desc :  销售出库退货设置选品参数
      * @author : 于继渤
      * @date : 2024/1/19

+ 5 - 2
components/dkbase/dk-form-bill/dk-form-bill.wxml

@@ -297,6 +297,9 @@
   <van-datetime-picker type="date" bind:confirm="chooseDate" bind:cancel="cancelDatePop" loading="{true}" value="{{dataTime}}" min-date="{{ minDate }}" />
 </van-popup>
 
-<dk-popup id="dkPopup" stepperDecimal="decimalPlaces" type="{{popType}}" routeObjName="{{routeObjName}}" titleTagCol="{{titleTagCol}}" titleCol="{{titleCol}}" subCol="{{subCol}}" descCol="{{descCol}}" iconCol="{{iconCol}}"priceTailCol="{{priceTailCol}}"  priceCol="{{pupPriceCol}}"priceTitle="{{priceTitle}}" value="{{dataItem}}" show="{{showPop}}" contentObj="{{popContent_sku}}" popupTopObj="{{popupTopObj_sku}}" bind:changeStep="changeStep" bind:changeCheckBox="changeCheckBox" readonly="{{readonly}}" bind:changeField="changeDetailField" bind:blurNumberField="blurNumberField" bind:commit="editItems" bind:openPackageBox="openPackageBox"></dk-popup>
+<dk-popup id="dkPopup" stepperDecimal="decimalPlaces" type="{{popType}}" routeObjName="{{routeObjName}}" titleTagCol="{{titleTagCol}}" titleCol="{{titleCol}}" subCol="{{subCol}}" descCol="{{descCol}}" iconCol="{{iconCol}}"priceTailCol="{{priceTailCol}}"  priceCol="{{pupPriceCol}}"priceTitle="{{priceTitle}}" value="{{dataItem}}" show="{{showPop}}" contentObj="{{popContent_sku}}" popupTopObj="{{popupTopObj_sku}}" bind:changeStep="changeStep" bind:changeCheckBox="changeCheckBox" readonly="{{readonly}}" bind:changeField="changeDetailField" bind:blurNumberField="blurNumberField" bind:commit="editItems" bind:openPackageBox="openPackageBox" bind:openDkNumberInput = "openPopDkNumberInput"></dk-popup>
 <!-- 箱片 -->
-<dk-popup type="basic" title="修改包装数量" titleCol="skuModel" iconCol="imagesUrl" value="{{dataItem}}" show="{{showPopBox}}" routeObjName="{{routeObjName}}" contentObj="{{popContentBox}}" bind:changeStep="changeStep" bind:commit="editItemsBox" stepperDecimal="decimalPlaces"></dk-popup>
+<dk-popup type="basic" title="修改包装数量" titleCol="skuModel" iconCol="imagesUrl" value="{{dataItem}}" show="{{showPopBox}}" routeObjName="{{routeObjName}}" contentObj="{{popContentBox}}" bind:changeStep="changeStep" bind:commit="editItemsBox" stepperDecimal="decimalPlaces"></dk-popup>
+
+<!-- 修改实际金额 和实际单价 (销售订单价格反算用)-->
+<dk-popup type="basic" title="修改价格"   value="{{dataItemChangePrice}}" show="{{showChangePrice}}" routeObjName="{{routeObjName}}" contentObj="{{popChangePrice}}" validFlag="{{true}}"  bind:blurNumberField ="blurChangePriceNumberField"   bind:commit="editItemsChangePrice"  ></dk-popup>

+ 4 - 1
components/dkbase/dk-number-input/dk-number-input.js

@@ -216,6 +216,8 @@ Component({
     * @date : 2022/6/30 16:16
     */
     handleInput(e) {
+      this.triggerEvent('triggerOpen', { 
+      })
       if (this.data.readonly) {
         return
       }
@@ -226,6 +228,7 @@ Component({
           focus: true
         })
       }, 30)
+     
     },
     /**
     * @desc : 光标进入输入框
@@ -362,7 +365,7 @@ Component({
         focus: false
       })
     },
-
+    
     /**
     * @desc : 绑定值
     * @author : 周兴

+ 2 - 2
components/dkbase/dk-number-input/dk-number-input.wxml

@@ -5,7 +5,7 @@
     <dk-cell height="48rpx" left="{{left}}" signSize="{{signSize}}" fontWeight="{{titleFontWeight}}" fontSize="{{fontSize}}" tail="{{percentSignFlag ? '%' : ''}}" percentSignFlag="{{percentSignFlag}}" contentColor="{{inputColor}}" amount="{{sign?true:false }}" contentFontWeight="{{fontWeight}}" contentRight="{{contentRight}}" center="{{center=='right'?'flex-end':center}}" title="{{titleValue}}" content="{{(inputValue || inputValue == 0)?inputValue:null}}" titleWid="{{titleWidth}}" catchtap="handleInput" titleColor="{{titleColor}}" placeholder="{{placeholder}}" errorMessage="{{errorMessage}}">
     </dk-cell> -->
 
-    <van-field label-class="input-title-class" style="--color--:{{titleColor}};--fontSize--:{{fontSize + 'px'}};--width--:{{titleWidth}};--fontWeight--:{{titleFontWeight}};" required="{{required?true:false }}" input-align="{{left}}" label="{{titleValue}}" placeholder="{{(inputValue || inputValue == 0)?'':placeholder}}" data-type='name' readonly="{{true}}" autosize border="{{ false }}" errorMessage="{{errorMessage}}" catchtap="handleInput" showInput="{{false}}">
+    <van-field label-class="input-title-class" style="--color--:{{titleColor}};--fontSize--:{{fontSize + 'px'}};--width--:{{titleWidth}};--fontWeight--:{{titleFontWeight}};" required="{{required?true:false }}" input-align="{{left}}" label="{{titleValue}}" placeholder="{{(inputValue || inputValue == 0)?'':placeholder}}" data-type='name' readonly="{{true}}" autosize border="{{ false }}" errorMessage="{{errorMessage}}" catchtap="handleInput" showInput="{{false}}" >
       <van-icon wx:if="{{tip}}" slot="label-icon" name="question-o" catchtap="showTip" />
       <dk-cell slot="inputbefor" style="width: 100%;" center="{{center=='right'?'flex-end':center}}" contentRight="{{contentRight}}" left="0" height="46rpx" contentFontSize="{{fontSize}}" contentColor="{{inputColor}}" contentFontWeight="{{fontWeight}}" amount="{{sign?true:false }}" tail="{{percentSignFlag ? '%' : ''}}" percentSignFlag="{{percentSignFlag}}" placeholderColor="#c8c9cc" content="{{(inputValue || inputValue == 0)?inputValue:null}}" placeholder="{{(inputValue || inputValue == 0)?'':placeholder}}"></dk-cell>
     </van-field>
@@ -20,7 +20,7 @@
   </view> -->
   <!--文本框-->
   <view wx:else>
-    <van-field input-align="right" required="{{required}}" label-class="input-title-class" style="--color--:{{titleColor}};--inputColor--:{{inputColor}};--fontSize--:{{fontSize + 'px'}};--width--:{{titleWidth}};--fontWeight--:{{titleFontWeight}};--inputFontWeight--:{{inputColor}}" value="{{inputValue?inputValue:undefined}}" input-align="{{center}}" label="{{titleValue}}" placeholder="{{placeholder}}" autosize auto-focus clearable border="{{ false }}" input-class="{{inputWidthFlag ? 'dk-cell-value-class-input' : 'dk-cell-value-class'}}" type="text" inputMode="decimal" bind:focus="bindFocus" bind:change="bindInput" bind:blur="bindBlur">
+    <van-field input-align="right" required="{{required}}" label-class="input-title-class" style="--color--:{{titleColor}};--inputColor--:{{inputColor}};--fontSize--:{{fontSize + 'px'}};--width--:{{titleWidth}};--fontWeight--:{{titleFontWeight}};--inputFontWeight--:{{inputColor}}" value="{{inputValue?inputValue:undefined}}" input-align="{{center}}" label="{{titleValue}}" placeholder="{{placeholder}}" autosize auto-focus clearable border="{{ false }}" input-class="{{inputWidthFlag ? 'dk-cell-value-class-input' : 'dk-cell-value-class'}}" type="text" inputMode="decimal" bind:focus="bindFocus" bind:change="bindInput" bind:blur="bindBlur" >
     </van-field>
   </view>
 </view>

+ 11 - 0
components/dkbase/dk-popup/dk-popup.js

@@ -282,6 +282,17 @@ Component({
         item: e.detail.item
       })
     },
+      /**
+     * @desc   : dk-number-input 的点击事件外漏
+     * @author : 王英杰
+     * @date   : 2024/1/26 11:46
+     */
+    openDkNumberInput(e) { 
+      console.log("openDkNumberInput-pop组件", e); 
+      this.triggerEvent("openDkNumberInput", {
+        key: e.currentTarget.dataset.key
+      })
+    },
     /**
      * @desc   : 打开下拉
      * @author : 周兴

+ 1 - 1
components/dkbase/dk-popup/dk-popup.wxml

@@ -79,7 +79,7 @@
       </van-cell>
       <!--数字类--> 
       <dk-number-input wx:if="{{item.type=='number'}}" sign="{{(item.sign || item.sign == '')?item.sign:'¥'}}" digits="{{(item.digits || item.digits == 0)?item.digits:2}}" fontSize="14" left="30rpx" data-key="{{item.code}}" data-item="{{item}}" max="{{(item.max || item.max == '')?item.max:10000000}}" min="{{(item.min || item.min == '')?item.min:-10000000}}"  data-index="{{index}}" center="{{'right'}}" readonly="{{!!readonly || !!item.readonly}}" 
-      placeholder="{{wxmlUtil.setPlaceholder($t,item.title?item.title:item.code)}}" errorMessage="{{item.errMsg}}" contentRight="{{true}}" titleValue="{{item.title?item.title:$t[item.code]}}" inputColor="{{item.inputColor?item.inputColor:'#FF7B1A'}}" titleFontWeight="normal" required="{{item.required?true:false }}" requiredLeft="15rpx" titleColor="{{item.readonly?'#272829':'#95A8CB'}}" inputValue="{{form[item.code]}}" titleWidth = "174px"bind:triggerBindValue="changeNumberField" bind:triggerBindBlur="blurNumberField"percentSignFlag="{{item.percentSignFlag}}" negative="{{item.negative}}"></dk-number-input>
+      placeholder="{{wxmlUtil.setPlaceholder($t,item.title?item.title:item.code)}}" errorMessage="{{item.errMsg}}" contentRight="{{true}}" titleValue="{{item.title?item.title:$t[item.code]}}" inputColor="{{item.inputColor?item.inputColor:'#FF7B1A'}}" titleFontWeight="normal" required="{{item.required?true:false }}" requiredLeft="15rpx" titleColor="{{item.readonly?'#95A8CB':'#272829'}}" inputValue="{{form[item.code]}}" titleWidth = "174px" bind:triggerBindValue="changeNumberField" bind:triggerBindBlur="blurNumberField"percentSignFlag="{{item.percentSignFlag}}" negative="{{item.negative}}"  bind:triggerOpen="openDkNumberInput" ></dk-number-input>
  
       <!--备注-->
       <van-field wx:if="{{item.type=='textarea'}}" type="textarea" required="{{item.required?true:false }}" data-key="{{item.code}}" data-item="{{item}}" data-index="{{index}}" value="{{ form[item.code]}}" input-align="left" label="{{item.title?item.title:$t[item.code]}}" placeholder="{{wxmlUtil.setPlaceholder($t,item.title?item.title:item.code)}}" autosize border="{{ false }}" readonly="{{!!readonly || !!item.readonly}}" input-class="dk-cell-value-class" maxlength="{{item.maxlength?item.maxlength:500}}" right-icon="{{item.rightIcon}}" bind:change="changeField" errorMessage="{{item.errMsg}}">

+ 2 - 0
i18n/zh-CN.js

@@ -500,6 +500,8 @@ const customer = {
 }
 // 提示信息
 const messages = {
+  messages:'提示',
+  priceLimited:'销售价格不能低于销售限价',
 }
 
 // 其他信息

+ 11 - 3
package-base-select/pages/select-goods/select-goods.js

@@ -1041,8 +1041,16 @@ Page({
       }
     }
     if (this.data.billType == Constants.billType.inventory){ //解决 销售订单的出库 没有价格问题  受销售出库的 选择库存限制
+      if (!this.editItemsPriceLimited(item, 'priceOut')) {
+        return
+      }
       item.priceSale = item.priceOut
     } 
+    if (this.data.billType == Constants.billType.sale){ //销售订单 的销售限价
+      if (!this.editItemsPriceLimited(item, 'priceSale')) {
+        return
+      } 
+    } 
     choosedGoodsList.push(item)
     this.setData({
       choosedGoodsList: choosedGoodsList
@@ -1063,10 +1071,10 @@ Page({
     item[priceName] = Number(item[priceName])
     //校验销售价格输入是否符合规则
     //销售价格不能低于销售限价 
-    if (item[priceName] < item.priceLimited) {
+    if (item.flgPrice &&item[priceName] < item.priceLimited) {
       Dialog.alert({
-        title: '提示',
-        message: '销售价格不能低于销售限价',
+        title: mixins.$t('messages'),
+        message:  mixins.$t('priceLimited'),//销售价格不能低于销售限价
       }).then(() => {})
       return false
     }

+ 66 - 44
package-sales/pages/order-billing/add/add.js

@@ -186,7 +186,7 @@ Page({
         type: 'number',
         title: mixins.$t("factPrice"),
         required: true,
-        readonly: false
+        readonly: true
       },
       {
         code: 'discount',
@@ -197,14 +197,7 @@ Page({
         percentSignFlag: true,
         inputColor: '#95A8CB'
       },
-      {
-        code: 'discAmt',
-        type: 'number',
-        title: mixins.$t("sumWaiveAmt"),
-        required: true,
-        readonly: false,
-        negativeNumber: true
-      },
+     
       {
         code: 'whId',
         name: 'whName',
@@ -285,6 +278,7 @@ Page({
         negativeNumber: true
       },
     ],
+  
   },
 
   /**
@@ -298,19 +292,23 @@ Page({
       return
     }
     let cardList = this.data.cardList
+    let contentSaveList = this.data.contentSaveList 
+    let index_factAmt = contentSaveList.findIndex(it => it.code == 'factAmt');
+    let index_receivable = contentSaveList.findIndex(it => it.code == 'receivable'); 
     let index = cardList.findIndex(it => it.name == 'items');
     let dataItem = {}
-    dataItem.sumAmount = cardList[index].sumAmount //合计金额
+    dataItem.sumAmount = contentSaveList[index_receivable]['content']//合计金额
     dataItem.discount = cardList[index].discount ? cardList[index].discount : 100 //整单折扣
     dataItem.discAmt = cardList[index].discAmt ? cardList[index].discAmt : 0 //优惠金额
-    dataItem.factAmt = cardList[index].factAmt ? cardList[index].factAmt : cardList[index].sumAmount // 实际合计金额
+    dataItem.factAmt =   contentSaveList[index_factAmt]['content'] ?  contentSaveList[index_factAmt]['content'] :contentSaveList[index_receivable]['content'] // 实际合计金额
     this.setData({
       dataItem: JSON.stringify(dataItem),
       showReverseCalculationPop: true,
     })
   },
   /**
-   * @desc :  开始反算
+   * @desc :  总单的各个反算
+   * 反算逻辑涉及到五个地方(1,总单的各个反算  2.明细的反算(在dk-form-bill里) 3.点击总单pop确定均分 4.点击明细pop确定反写总单 5明细dpop点击价格 还能弹pop 有点逻辑)
    * @date : 2024/2/1 15:49
    * @author : 于继渤
    */
@@ -319,29 +317,29 @@ Page({
     let key = e.detail.key
     let value = null
     let dataItem = JSON.parse(this.data.dataItem)
-    //实际合计金额=合计金额*折扣-优惠(改折扣)
-    if (key == "discount") //整单折扣 
+   // 总单折扣=实际合计金额/合计金额
+   // 实际合计金额=合计金额-优惠
+   // Math.round 四舍五入 取整
+    if (key == "discount") //修改整单折扣 
     {
       value = Number(e.detail.value) / 100
-      dataItem.discount = value * 100
-      dataItem.factAmt = Number(dataItem.sumAmount) * Number(value) - Number(dataItem.discAmt)
+      dataItem.discount = value * 100   //整单折扣
+      dataItem.factAmt = Number(dataItem.sumAmount) * Number(value)  //实际合计金额 = 合计金额*总单折扣
+      dataItem.discAmt = Number(dataItem.sumAmount)-Number(dataItem.factAmt)  // 优惠 = 合计金额-实际合计金额
     }
-    if (key == "discAmt") //优惠金额
+    if (key == "discAmt") //修改优惠金额
     {
       value = Number(e.detail.value)
-      dataItem.discAmt = value
-      dataItem.factAmt = Number(dataItem.sumAmount) * (Number(dataItem.discount) / 100) - Number(value)
-
+      dataItem.discAmt = value    //优惠金额
+      dataItem.factAmt = Number(dataItem.sumAmount) - Number(dataItem.discAmt)//实际合计金额 = 合计金额-优惠
+      dataItem.discount =  dataItem.sumAmount? Math.round(Number(dataItem.factAmt) / Number(dataItem.sumAmount)*100):0 //总单折扣=实际合计金额/合计金额
     }
-    if (key == "factAmt") //实际合计金额
+    if (key == "factAmt") //修改实际合计金额 
     {
       value = Number(e.detail.value)
-      dataItem.factAmt = value
-      //折扣 = (实际合计金额+优惠)/合计金额
-      dataItem.discount = dataItem.sumAmount? Math.floor(((Number(value) + Number(dataItem.discAmt)) / Number(dataItem.sumAmount)) * 100):0
-      if (dataItem.sumAmount != 0) { //预防 算出的折扣是无线循环  差的金额 放到优惠上
-        dataItem.discAmt = ((dataItem.sumAmount * (dataItem.discount / 100)) - dataItem.factAmt).toFixed(2)
-      }
+      dataItem.factAmt = value  //实际合计金额
+      dataItem.discAmt = Number(dataItem.sumAmount)-Number(dataItem.factAmt)  // 优惠 = 合计金额-实际合计金额
+      dataItem.discount =  dataItem.sumAmount? Math.round(Number(dataItem.factAmt) / Number(dataItem.sumAmount)*100):100 //总单折扣=实际合计金额/合计金额
     }
     this.setData({
       dataItem: JSON.stringify(dataItem)
@@ -357,7 +355,7 @@ Page({
     this.calculateDiscounts()
   },
   /**
-   * @desc :  计算折扣 
+   * @desc :  点击总单pop确定均分 
    * @date : 2024/2/1 15:49
    * @author : 于继渤
    */
@@ -368,13 +366,12 @@ Page({
     let contentSaveList = this.data.contentSaveList
     goodsList.forEach(element => {
       element.sumPrice = Number(element.priceSale) * Number(element.itemQty) //求出单品合计
-    }); //折扣 
-    goodsList = this.distributeValue(goodsList, dataItem.discAmt, "discAmt", "itemQty", "sumPrice") //商品平分优惠金额
+    }); //折扣  
     goodsList = this.distributeValue(goodsList, dataItem.factAmt, "factAmt", "itemQty", "sumPrice") //商品平分实际合计金额
     goodsList.forEach(element => {
       if (!element.flgGift) {
-        element.discount = dataItem.discount
-        element.factPrice = Number(element.factAmt) / Number(element.itemQty) //求出实际单价
+        element.discount = dataItem.discount //商品折扣 = 总单折扣
+        element.factPrice = Math.round( (Number(element.factAmt) / Number(element.itemQty) * 100) )/100 //求出实际单价
       }
     }); //折扣 
     formData.goodsList = goodsList
@@ -398,8 +395,23 @@ Page({
       contentSaveList: contentSaveList
     })
   },
+   /**
+   * @desc :  点击销售单价和实际单价 弹出pop
+   * @date : 2024/2/1 15:49
+   * @author : 于继渤
+   */
+  openPopDkNumberInput(e){
+    console.log('openPopDkNumberInput',e);
+    let dataItem = JSON.parse(e.detail.dataItem)
+    let key = e.detail.key
+    if(key=="priceSale"||key=="factPrice"){
+       this.setData({
+         showChangePrice:true
+       })
+    }
+  },
   /**
-   * @desc :  分配总值到元素列表 
+   * @desc :  总单分配明细 均分方法
    * @date : 2024/2/1 15:49
    * @author : 于继渤
    */
@@ -423,7 +435,8 @@ Page({
       }
       goodsList[lastIndexNonZero][key] = 0
       result[lastIndexNonZero][key] = totalValue - goodsList.sum(key) //除了最后一个前面均分 然后最后一个是 总-前面均分的和 
-    } else { // 能进入这个方法 goodsLsit 一是有值的  进else 说明 都是金额为0 的数据 按数量分份
+    } else { // 能进入这个方法 goodsLsit 都是有值的  进else 说明 都是金额为0 的数据 按数量分份
+      return
       let itemAmtList = goodsList.filter(it => !!!it["flgGift"]) //过滤掉赠品
       let partNmb = itemAmtList.sum(itemQty)
       let avg = (Number(totalValue) / Number(partNmb)).toFixed(2); // 计算平均值(取两位小数)
@@ -442,6 +455,7 @@ Page({
     }
     return result;
   },
+ 
   /**
    * @desc   : 手机号离焦事件
    * @author : 于继渤
@@ -723,14 +737,15 @@ Page({
     //设置需收款
     let contentSaveList = this.data.contentSaveList
     let formData = JSON.parse(this.data.formData)
-    //需收款 = 合计金额 - 使用预存
-    let amtReceivable = Number(formData.sumAmount - formData.useCollect)
-    //实际金额 = 实际收款 - 使用预存
-    let amtFactAmt = Number(formData.factAmt - formData.useCollect)
+    //需收款 = 实际金额 - 使用预存
+    let amtReceivable = Number(formData.factAmt - formData.useCollect) 
+    formData.factAmt = formData.factAmt  //总单实收金额 =  明细实收金额汇总
+    formData.discAmt = Number(formData.sumAmount) - Number(formData.factAmt)   //总单优惠金额 = 合计金额 - 总单实收金额 
+    formData.discount = formData.sumAmount? Math.round(Number(formData.factAmt) / Number(formData.sumAmount)*100):100 //总单折扣  = 总单实收金额 /总单合计金额
     //组件显示 需收款 
     let index_factAmt = contentSaveList.findIndex(it => it.code == 'factAmt');
     if (index_factAmt != -1) {
-      contentSaveList[index_factAmt]['content'] = amtFactAmt
+      contentSaveList[index_factAmt]['content'] = formData.factAmt
     }
     let index_receivable = contentSaveList.findIndex(it => it.code == 'receivable');
     if (index_receivable != -1) {
@@ -743,7 +758,7 @@ Page({
       formData: JSON.stringify(formData),
       contentSaveList: contentSaveList
     })
-    this.calculateAmount(formData)
+ 
   },
   //校验库存
   outBound() {
@@ -1017,8 +1032,8 @@ Page({
 
 
   editItems() {
-    this.setGoods()
-
+    let formData = JSON.parse(this.data.formData)
+    this.calculateAmount(formData)
     //校验库存
     let btnFormData = this.data.btnFormData ? JSON.parse(this.data.btnFormData) : ''
     if (btnFormData.flag) {
@@ -1058,6 +1073,10 @@ Page({
     // formData.canUseCollect = 0
     // formData.useCollect = 0
     formData.sumQuantity = sumQuantity
+    formData.factAmt = factAmt  //总单实收金额 =  明细实收金额汇总
+    formData.discAmt = sumAmount - factAmt   //总单优惠金额 = 合计金额 - 总单实收金额
+    formData.discount = sumAmount? Math.round(Number(factAmt) / Number(sumAmount)*100):100 //总单折扣  = 总单实收金额 /总单合计金额
+   
     cardList.forEach(element => {
       if (element.name == "items") {
         element.sumAmount = sumAmount
@@ -1067,6 +1086,8 @@ Page({
       }
     });
     let contentSaveList = this.data.contentSaveList
+    //需收款 = 实际金额 - 使用预存
+    let amtReceivable = Number(formData.factAmt - formData.useCollect) 
     //组件显示 需收款 
     let index_factAmt = contentSaveList.findIndex(it => it.code == 'factAmt');
     if (index_factAmt != -1) {
@@ -1074,8 +1095,9 @@ Page({
     }
     let index_receivable = contentSaveList.findIndex(it => it.code == 'receivable');
     if (index_receivable != -1) {
-      contentSaveList[index_receivable]['content'] = sumAmount
+      contentSaveList[index_receivable]['content'] = amtReceivable
     }
+ 
     this.setData({
       cardList: cardList,
       contentSaveList: contentSaveList,
@@ -1083,7 +1105,7 @@ Page({
     })
 
   },
-
+ 
 
   /**
    * 生命周期函数--监听页面加载

+ 4 - 2
package-sales/pages/order-billing/add/add.wxml

@@ -4,8 +4,8 @@
 
 
 <dk-form-bill type="sale" id="{{formName}}" routeObjName="{{routeObjName}}" cardList="{{cardList}}"   titleCol="skuModel" iconCol="imagesUrl" descCol="skuName"  subCol="calculationFormula" priceTailCol="sumPrice"pupPriceCol="factAmt" priceCol="priceSale"  quantityCol="itemQty" sumAmountCol="sumAmount" sumQuantityCol="sumQuantity" discountStandardCol="saleDiscount" contentObj="{{contentObj}}" model:value="{{formData}}" popContent="{{popContent}}" bind:chooseData="chooseData" bind:setGoods="setGoods" table="{{table}}" 
-bind:editItems="editItems"  bind:openChoosedItemInfo="openChoosedItemInfo" deleteName="deleteItemList"bind:onCloseDel="deleteItemList" 
-bind:customersChoose="customersChoose" bind:changeCheckBox="changeCheckBox" bind:changePhoneblur="changePhoneblur"  popType="sale" priceTitle="" staff="staff" org="org"bind:openReverseCalculationPop="openReverseCalculationPop"reverseCalculationFlag="true"wholeOrderDiscountCol="discount"discountAmountCol="discAmt">
+bind:editItems="editItems"  bind:openChoosedItemInfo="openChoosedItemInfo" deleteName="deleteItemList" bind:onCloseDel="deleteItemList" 
+bind:customersChoose="customersChoose" bind:changeCheckBox="changeCheckBox" bind:changePhoneblur="changePhoneblur"  popType="sale" priceTitle="" staff="staff" org="org" bind:openReverseCalculationPop="openReverseCalculationPop"reverseCalculationFlag="true"wholeOrderDiscountCol="discount"discountAmountCol="discAmt"  >
 </dk-form-bill>
 <van-dialog id="van-dialog" />  
 <view style="height: 200rpx;"></view>
@@ -14,5 +14,7 @@ bind:customersChoose="customersChoose" bind:changeCheckBox="changeCheckBox" bind
 <dk-save-button id="saveButton"  model:value="{{btnFormData}}" btnAutoWidthFlag="{{formMode != 'add'}}" contentLineFlag="{{false}}" btnRightFlag="{{true}}" buttonList="{{buttonSaveList}}" bind:open="saveButton" contentList="{{contentSaveList}}" bind:change="saveChange"></dk-save-button>
 <!-- 修改价格反算 -->
 <dk-popup type="basic" title="修改价格"   value="{{dataItem}}" show="{{showReverseCalculationPop}}" routeObjName="{{routeObjName}}" contentObj="{{popContentReverse}}" validFlag="{{true}}"  bind:blurNumberField ="blurNumberField"   bind:commit="editItemsReverse"  ></dk-popup>
+
+
 <!--  新手引导 -->
 <dk-guide step="{{step}}"></dk-guide>

+ 3 - 3
pages/shopping/shopping.js

@@ -387,10 +387,10 @@ Page({
     //校验销售价格输入是否符合规则
     //销售价格不能低于销售限价
     console.log(item.priceSale, item.priceLimited)
-    if (item.priceLimited>0 && item.priceSale < item.priceLimited) {
+    if (item.flgPrice  && item.priceSale < item.priceLimited) {
       Dialog.alert({
-        title: '提示',
-        message: '销售价格不能低于销售限价',
+        title: mixins.$t('messages'),
+        message:  mixins.$t('priceLimited'),//销售价格不能低于销售限价
       }).then(() => {})
       return
     }