Procházet zdrojové kódy

feat: 新增销售费用模块2

cuiyalong před 2 měsíci
rodič
revize
128a6c36d6

+ 43 - 10
src/store/order.js

@@ -18,9 +18,10 @@ import { sortOrderInfo } from '@/views/create-order/components/schema-form/resor
 import { getRandomString, sleep } from '@/utils/utils'
 import { cloneDeep } from "lodash"
 import { showMessage, showNotify } from '@/views/create-order/hooks/toast'
-import { sub } from '@/utils/number'
+import { add, sub } from '@/utils/number'
+import { hasValue } from '@/utils/utils'
 import { defaultPageFormValue, OrderProductCardItem } from '@/views/create-order/data/interface'
-import { findUserInDeptTree, calcShowOnlineContractForm, getCardTotalAmount } from "@/views/create-order/hooks/utils"
+import { findUserInDeptTree, calcShowOnlineContractForm, calcUserProductInfoList, getCardTotalAmount } from "@/views/create-order/hooks/utils"
 
 const defaultOrderInfo = {
   disabled: false, // 禁用
@@ -76,14 +77,7 @@ export default {
     // 用户创建的产品类型列表
     userProductInfoList(state) {
       const { productInfoList } = state.orderInfo
-      if (productInfoList.length === 0) return []
-      return productInfoList.map(card => {
-        return {
-          _origin: card.productCardInfo,
-          ...card.productCardInfo.form,
-          ...card.productCardInfo.result,
-        }
-      })
+      return calcUserProductInfoList(productInfoList)
     },
     depTreeList(state) {
       let depTree  = cloneDeep(state.conf.deptTree)
@@ -150,6 +144,43 @@ export default {
     pureAmountMoney(state, getters) {
       return sub(getters.pageTotalMoney.contract, state.pageForm.channelCommission - 0)
     },
+    // 所有外采赠品的code
+    giftCodeList(state) {
+      const cList = state.productList.find(item => item.value === '外采赠品')
+      if (cList && cList.children && cList.children.length > 0) {
+        return cList.children.map(p => p.code)
+      }
+      return []
+    },
+    // 计算后的渠道佣金
+    channelCommission(state, getters) {
+      const calcCodeList = getters.giftCodeList
+      const moneyList = getters.userProductInfoList.map(item => {
+        if (item.productCode && calcCodeList.includes(item.productCode)) {
+          return item.contractAmount
+        }
+      }).filter(r => !!r)
+      if (moneyList.length > 0) {
+        const totalMap = {
+          contract: 0,
+          standard: 0,
+        }
+        moneyList.forEach(item => {
+          let c = Number(item?.contractMoney || 0)
+          let s = Number(item?.standardMoney || 0)
+          if (c > 0) {
+            totalMap.contract = add(totalMap.contract, c)
+          }
+          if (s > 0) {
+            totalMap.standard = add(totalMap.standard, s)
+          }
+        })
+        const diff = sub(totalMap.standard, totalMap.contract)
+        return diff
+      } else {
+        return 0
+      }
+    },
     salesMoneyTotal(state, getters) {
       // 销售业绩=合同金额
       return sub(getters.pageTotalMoney.contract, state.pageForm.channelCommission - 0)
@@ -541,6 +572,8 @@ export default {
         pageTotalMoney: getters.pageTotalMoney,
         orderMoney0Type: getters.orderMoney0Type,
         salesMoneyTotal: getters.salesMoneyTotal,
+        showOnlineContractForm: getters.showOnlineContractForm,
+        channelCommission: getters.channelCommission,
       })
       if (!pass) {
         throw new Error("必填字段校验未通过")

+ 7 - 6
src/views/create-order/components/order-detail-submodule/ContractInfoElectronModule.vue

@@ -60,7 +60,7 @@ import { signUnitOptions } from '@/views/create-order/data/index.js'
 import EditContractInfo from './EditContractInfo.vue';
 import Dialog from '@/components/Dialog.vue';
 import { dateFormatter } from '@/assets/js/date'
-import { calcShowOnlineContractForm } from "@/views/create-order/hooks/utils"
+import { calcShowOnlineContractForm, calcUserProductInfoList } from "@/views/create-order/hooks/utils"
 import { ajaxEditOrderContract } from '@/api/modules/'
 import NewDModel from "@/views/order/components/new-detailModel.vue";
 import { mapState } from 'vuex'
@@ -96,17 +96,18 @@ export default {
       showContract: true,
     }
   },
-  mounted() {
-    const res = this.getOnlineContractFormShow(this.orderDetail._pageFormValue, this.orderDetail._productArr)
-    console.log(this.orderDetail._pageFormValue, this.orderDetail._productArr, 'pageFormValue')
-    // this.showContract = res || false
+  created() {
+    const res = this.getOnlineContractFormShow()
+    this.showContract = res || false
   },
   methods: {
     doRefresh (type = '') {
       this.$emit('refresh', type)
     },
     // 是否显示电子协议订单
-    getOnlineContractFormShow(pageForm, pList) {
+    getOnlineContractFormShow() {
+      const pageForm = this.orderDetail._pageFormValue
+      const pList = calcUserProductInfoList(this.orderDetail._productArr, 'waitingRestoreForm')
       return calcShowOnlineContractForm(pageForm, pList)
     },
     editContractArchive() {

+ 30 - 22
src/views/create-order/components/schema-form/params.js

@@ -33,7 +33,7 @@ function getReturnPlant(pageForm, totalMoney) {
     })
     planList.push({
       code: '合计',
-      time: pageForm.expectedPaymentDeadlineTime,
+      time: '-',
       money: mul(totalMoney, 100) || 0
     })
   }
@@ -141,7 +141,7 @@ function getSaleMoney(pageForm, totalMoney) {
 }
 */
 export function createOrderParams(payload = {}) {
-  const { pageForm, productInfoList, pageTotalMoney, orderMoney0Type, salesMoneyTotal } = payload
+  const { pageForm, productInfoList, pageTotalMoney, orderMoney0Type, salesMoneyTotal, channelCommission, showOnlineContractForm } = payload
 
   const returnPlant = getReturnPlant(pageForm, salesMoneyTotal)
   const saleMoney = getSaleMoney(pageForm, salesMoneyTotal)
@@ -169,25 +169,8 @@ export function createOrderParams(payload = {}) {
     productArr = productArr.filter(r => !!r)
   }
 
-  const contract = {
-    contractId: '', // 归档协议编号,在创建订单期间不会上传。在订单详情处上传
-    contractCode: pageForm.signCode, // 线下协议编号
-    
+  const contractBase = {
     contractStatus: pageForm.agreeStatus - 0, // 协议状态
-    e_contract_type: pageForm.e_contract_type, // 电子协议类型:  1有电子章  2无电子章
-    e_contract_userA_type: pageForm.e_contract_userA_type, // 协议甲方类型: 1个人  2企业
-    e_contract_userA_name: pageForm.e_contract_userA_name, // 协议甲方
-    e_contract_userA_contacts_name: pageForm.e_contract_userA_contacts_name, // 协议甲方联系人
-    e_contract_userA_contacts_tel: pageForm.e_contract_userA_contacts_tel, // 协议甲方联系方式
-    e_contract_userA_contacts_address: pageForm.e_contract_userA_contacts_address, // 协议甲方联系地址
-    e_contract_userB_contacts_name: pageForm.e_contract_userB_contacts_name, // 协议乙方联系人
-    e_contract_remark: pageForm.e_contract_remark, // 协议备注
-
-    // contract_archive_status: pageForm.contract_archive_status, // 协议归档状态 1 已归档 0 未归档	
-    contractTime: pageForm.signTime ? dateFormatter(pageForm.signTime, 'yyyy-MM-dd') : '', // 协议签订时间
-    // contract_file_url: pageForm.contract_file_url, // 上传合同地址
-    // contract_archive_time: pageForm.contract_archive_time, // 协议归档时间
-    // contract_archive_num: pageForm.contract_archive_num - 0, // 协议归档份数
   }
   
   const p = {
@@ -202,7 +185,7 @@ export function createOrderParams(payload = {}) {
     userPhone: pageForm.accountTel, // 开通服务手机号
     contractMoney: mul(pageTotalMoney.contract, 100), // 合同金额总计(单位,分)
     order_money: pageTotalMoney.standard > 0 ? mul(pageTotalMoney.standard, 100) : undefined, // 标准售价总计(单位,分)
-    channelCommission: pageForm.channelCommission ? mul(pageForm.channelCommission, 100) : pageForm.channelCommission - 0, // 佣金(单位,分)
+    channelCommission: channelCommission ? mul(channelCommission, 100) : channelCommission - 0, // 佣金(单位,分)
     zeroOrderType: orderMoney0Type ? pageForm.orderMoney0Type : undefined, // 0元订单类型
     // emptyPhone: 0, // 无手机号
     orderRemark: pageForm.orderRemark, // 订单备注
@@ -212,12 +195,37 @@ export function createOrderParams(payload = {}) {
     returnPlant,
     productArr,
     saleMoney,
-    contract,
+    contract: contractBase,
     // actPrice: {
     //   VIP_PRO: 89900,
     // },
   }
 
+  if (showOnlineContractForm) {
+    const contractMore = {
+      contractId: '', // 归档协议编号,在创建订单期间不会上传。在订单详情处上传
+      contractCode: pageForm.signCode, // 线下协议编号
+      
+      
+      e_contract_type: pageForm.e_contract_type, // 电子协议类型:  1有电子章  2无电子章
+      e_contract_userA_type: pageForm.e_contract_userA_type, // 协议甲方类型: 1个人  2企业
+      e_contract_userA_name: pageForm.e_contract_userA_name, // 协议甲方
+      e_contract_userA_contacts_name: pageForm.e_contract_userA_contacts_name, // 协议甲方联系人
+      e_contract_userA_contacts_tel: pageForm.e_contract_userA_contacts_tel, // 协议甲方联系方式
+      e_contract_userA_contacts_address: pageForm.e_contract_userA_contacts_address, // 协议甲方联系地址
+      e_contract_userB_contacts_name: pageForm.e_contract_userB_contacts_name, // 协议乙方联系人
+      e_contract_remark: pageForm.e_contract_remark, // 协议备注
+
+      // contract_archive_status: pageForm.contract_archive_status, // 协议归档状态 1 已归档 0 未归档	
+      contractTime: pageForm.signTime ? dateFormatter(pageForm.signTime, 'yyyy-MM-dd') : '', // 协议签订时间
+      // contract_file_url: pageForm.contract_file_url, // 上传合同地址
+      // contract_archive_time: pageForm.contract_archive_time, // 协议归档时间
+      // contract_archive_num: pageForm.contract_archive_num - 0, // 协议归档份数
+    }
+
+    Object.assign(p.contract, contractMore)
+  }
+
   // 0元订单类型
   if (orderMoney0Type) {
     const r = orderMoney0TypeOptions.find(item => item.value === pageForm.orderMoney0Type)

+ 1 - 1
src/views/create-order/data/var.js

@@ -121,7 +121,7 @@ export const schemaKeyMap = {
   payment: 'paymentType',
   upgradeContent: 'upgradeContent',
   specification: 'productSpecification',
-  linkedOrderId: 'linkedOrderId',
+  relatedOrders: 'relatedOrders',
   contractAmount: 'contractAmount',
   serviceList: 'serviceList',
   validityCount: 'validityCount',

+ 16 - 0
src/views/create-order/hooks/utils.js

@@ -105,6 +105,22 @@ export function calcSaleTableList(saleFinalList) {
   return pageFormValue
 }
 
+export function calcUserProductInfoList(productInfoList, formKey = 'form') {
+  if (productInfoList.length === 0) return []
+  const formKeyList = ['form', 'waitingRestoreForm']
+  if (!formKeyList.includes(formKey)) {
+    formKey = 'form'
+  }
+  return productInfoList.map(card => {
+    const uForm = card.productCardInfo[formKey] || {}
+    return {
+      _origin: card.productCardInfo,
+      ...uForm,
+      ...card.productCardInfo.result,
+    }
+  }) 
+}
+
 // 通用:计算是否展示电子协议
 export function calcShowOnlineContractForm(pageForm, userProductInfoList) {
   const paybackCompanyCheck = pageForm.signUnit == 'h01' // 签约主体为:北京剑鱼信息技术有限公司/h01