Browse Source

代码整理、优化-1

hbchen 2 years ago
parent
commit
b469f769ad

+ 1 - 0
.env.development

@@ -1,4 +1,5 @@
 # 接口地址
+# VITE_APP_API_URL="http://192.168.77.4:8619/api"
 VITE_APP_API_URL="http://8.136.199.33:8619/api"
 # crm系统地址
 VITE_CRM_SYSTEM_URL="https://rddptest.hzinsights.com/login"

+ 2 - 0
src/views/financialManagement/components/permissionQyDia.vue

@@ -71,10 +71,12 @@
 
   // -------method
   const permissionCheckedChange=(e)=>{
+    console.log(e);
     e.checked = e.check_list.length == e.children.length
     e.indeterminate = e.check_list.length>0 && e.check_list.length < e.children.length
   }
   const permissionAllChecked=(e)=>{
+    console.log(e);
     let arr = e.children.map((item) => {
       return item.service_template_id;
     });

+ 150 - 0
src/views/financialManagement/composition/serivceCascader.js

@@ -0,0 +1,150 @@
+
+export default function serviceCascader() {
+
+  let hasQyBigOne=false
+  let hasQyBigTwo=false
+  let hasQySmall=false
+  let hasFiccSmall=false
+  let hasFiccBig=false
+  // 小品种的service_template_id
+  const FICCSmallServiceId=[90001,90016,90103,90138,90142,90109,90110,90114,90107,90111,90108,
+    90118,90239,90205,90212,90224,90224,90226,90302,90317,90325,90340]
+
+  // 套餐选择更改
+  // servicesList套餐列表 value-选中的套餐Id cascaderRef - el-cascaser的ref值
+  const servicesChange=(servicesList,value,cascaderRef)=>{
+    // console.log(servicesList);
+    // 权益大套餐/45万
+    hasQyBigOne=false
+    // 权益大套餐/70万
+    hasQyBigTwo=false
+    // 11-权益大套餐/45万 12-权益大套餐/70万 单选
+    if(value.includes(11) || value.includes(12)){
+      value=value.filter(it => ![19,20,21,22,23,24,25,26,27].includes(it))
+      if(value.includes(11)){
+        value= value.filter(it => it!=12)
+        hasQyBigOne=true
+      }else if(value.includes(12)){
+        hasQyBigTwo=true
+      }
+    }
+    // 行业套餐
+    hasQySmall=false
+    if(value.some(it => [19,20,21,22,23,24,25,26,27].includes(it))){
+      hasQySmall=true
+    }
+
+    hasFiccBig=false
+    hasFiccSmall=false
+    
+    if(value.includes(1)){
+      // FICC大套餐
+      value=value.filter(it => !FICCSmallServiceId.includes(it))
+      hasFiccBig=true
+    }else if(value.some(it => FICCSmallServiceId.includes(it))){
+      // FICC小套餐
+      value=value.filter(it => it!=1)
+      hasFiccSmall=true
+    }
+
+    let checkedNodes=cascaderRef.getCheckedNodes()
+
+    // 套餐类型
+    let hasFICCService = checkedNodes.some(Node => Node.data.product_id == 1)
+    let hasQYService = checkedNodes.some(Node => Node.data.product_id == 2)
+    // 套餐类型
+    let typeValue
+    if(hasFICCService&&hasQYService || !(hasFICCService||hasQYService)){
+      typeValue=3
+    }else if(hasFICCService){
+      typeValue=1
+    }else{
+      typeValue=2
+    }
+    // console.log(checkedNodes);
+    
+    setDisable(servicesList)
+    // 返回选中的套餐Id 和套餐类型值
+    return {backValue:value,typeValue}
+  }
+  // 套餐禁用处理
+  const setDisable=(List)=>{
+    List.forEach(element => {
+      // if(!element.service_template_id){
+      //   setDisable(element.children)
+      //   return 
+      // }
+      if(hasQyBigOne||hasQyBigTwo){
+        // 权益大套餐选中了,禁用行业套餐
+        if(element.service_template_id==13){
+          element.disabled=true
+        }
+        if(hasQyBigOne){
+          // 权益大套餐-45万选中了,禁用70万
+          if(element.service_template_id==12){
+            element.disabled=true
+          }
+        }else{
+          // 权益大套餐-70万选中了,禁用45万
+          if(element.service_template_id==11){
+            element.disabled=true
+          }
+        }
+      }else{
+        // 权益大套餐没选中
+        if([11,12,13].includes(element.service_template_id)){
+          element.disabled=false
+        }
+      }
+      // 行业套餐选中了,禁用权益大套餐
+      if(hasQySmall){
+        if(element.service_template_id==10){
+          element.disabled=true
+        }
+      }else{
+        if(element.service_template_id==10){
+          element.disabled=false
+        }
+      }
+      // FICC大套餐选中了,禁用FICC小套餐
+      if(hasFiccBig){
+        if(element.service_template_id==2){
+          element.disabled=true
+        }
+      }else{
+        if(element.service_template_id==2){
+          element.disabled=false
+        }
+      }
+      // FICC小套餐选中了,禁用FICC大套餐
+      if(hasFiccSmall){
+        if(element.service_template_id==1){
+          element.disabled=true
+        }
+      }else{
+        if(element.service_template_id==1){
+          element.disabled=false
+        }
+      }
+      if(element.children){
+        setDisable(element.children)
+      }
+    });
+  }
+
+  // 重置套餐禁用状态
+  const resetDisable=(List)=>{
+    List.forEach(element => {
+      element.disabled=false
+      if(element.children && element.children.length>0){
+        resetDisable(element.children)
+      }
+    });
+  }
+
+  return {
+    FICCSmallServiceId,
+    servicesChange,
+    resetDisable
+  }
+}

+ 1063 - 0
src/views/financialManagement/contractProgress-component/Compliance.vue

@@ -0,0 +1,1063 @@
+<script setup>
+  import '../style/contractRegistration.scss'
+  import scrollableSelect from '@/components/scrollable-select/index.vue'
+  import permissionDia from '../components/permissionDia.vue'
+  import permissionQyDia from '../components/permissionQyDia.vue'
+  import {getContractSearchList,getServiceDetail} from '@/api/crm'
+  import {registerAdd,registerEdit,contractRegisterCheck} from '@/api/financialMana'
+
+
+  const contractSourceArray=['非CRM合同导入','CRM合同导入']
+  const contractStatusArray=[{id:1,label:"已审批"},{id:2,label:"单章寄出"},{id:3,label:"已签回"},{id:4,label:"已终止"},{id:5,label:"邮件备案"}]
+  const contractTypeArray=[{value:0,label:"自付合同",
+  children:[{value:1,label:"新签",children:null},{value:2,label:"续约",children:null},{value:4,label:"补充协议",children:null}]},
+  {value:1,label:"代付合同",
+  children:[{value:1,label:"新签",children:null},{value:2,label:"续约",children:null},{value:4,label:"补充协议",children:null}]}]
+
+  const props=defineProps({
+    // 权限类型
+    operationtype:{
+      type:String,
+      default:'compliance'
+    },
+    // 货币列表
+    currencyList:{
+      type:Array,
+      default:()=>[]
+    },
+    serviceItem:{
+      type:Object,
+      default:()=>{}
+    },
+    sellerData:{
+      type:Object,
+      default:()=>{}
+    },
+    supplementaryInfo:{
+      type:Object,
+      default:()=>{}
+    },
+    detailInfo:{
+      type:Object,
+      default:()=>{}
+    }
+  })
+
+  const emits=defineEmits(['submitSuccess'])
+
+  const rmbRate=ref(1)
+
+  // 表单相关
+  const compliance=reactive({
+    // 合规登记表单
+    form:{
+      product_ids:'1,2',
+      supplement:0, // 是否是补录合同
+      contract_register_id:'',
+      crm_contract_id:0,
+      contract_source:0,
+      contract_code:'',
+      company_name:'',
+      currency_unit:'CNY',
+      new_company:0,
+      seller_ids:'',
+      seller_id:0,
+      contract_status:'',
+      start_date:'',
+      end_date:'',
+      contract_amount:'',
+      contract_type:'',
+      has_payment:'',
+      actual_pay_companies:'',
+      relate_contract_code:'',
+      relate_contract_main_code:'',
+      sign_date:'',
+      agreed_pay_time:'',
+      // 套餐金额
+      service_amount:[],
+      services:[],
+      services_amount:'',
+      services_Qy_amount:'',
+      service_remark:'',
+      remark:""
+    },
+    rules:{
+      contract_source:{required:true,message:'合同来源不能为空',trigger:'change'},
+      contract_code:{required:true,message:'合同编号不能为空',trigger:'blur'},
+      company_name:{required:true,message:'客户名称不能为空',trigger:'blur'},
+      seller_ids:{required:true,message:'销售姓名不能为空',trigger:['blur','change']},
+      contract_status:{required:true,message:'合同状态不能为空',trigger:'change'},
+      start_date:{required:true,message:'合同有效期不能为空',trigger:'change'},
+      contract_amount:[{required:true,message:'合同金额不能为空',trigger:'blur'},
+      {
+        validator:(rule,value,callback)=>{
+          if(!parseFloat(value)){
+            callback(new Error('合同金额格式错误'))
+          }else{
+            callback()
+          }
+        },
+        trigger:'blur'
+      }],
+      contract_type:{required:true,message:'合同类型不能为空',trigger:'change'},
+      actual_pay_companies:{required:true,message:'代付方不能为空',trigger:'blur'}
+    },
+    // 有效期
+    contractValidityDate:[],
+
+    // --------------套餐信息
+    showServiceFicc:false,
+    showServiceQy:false,
+    // 选中的套餐 - ficc
+    checkedService:[],
+    // 选中的套餐 - 权益
+    checkedServiceQy:[],
+    // 套餐列表
+    serviceArray:[],
+    // 套餐列表 - 权益
+    serviceArrayQy:[],
+    // 小套餐选中的品种
+    checkedPermission:[],
+    // 权益大套餐选中的品种
+    checkedPermissionQyBig:[],
+    // 行业套餐选中的品种
+    checkedPermissionQySmall:[],
+    // 显示选择品种 - FICC小套餐
+    serviceVarietyShow:false,
+    serviceVarietyShowQy:false,
+    // 1-大套餐  2-小套餐
+    serviceType:0,
+    // 权益套餐 1、权益大套餐 2、行业套餐
+    serviceTypeQy:0,
+    // 合同类型选中
+    contractTypeCheck:[],
+    // 品种选择 - Ficc
+    varietyDiaShow:false,
+    //品种选择 - Qy
+    varietyDiaShowQy:false,
+    varietyDiaType:'view',
+    // 1 - 权益大套餐 2-行业套餐 
+    qYDiaType:1,
+    // 查看套餐弹窗
+    serviceShow:false,
+  })
+
+  // 合同编号列表请求参数
+  const contractNoQuery=reactive({
+    page_size:20,
+    current:1,
+    keyword:''
+  })
+  const contractNoInfo=reactive({
+    contractNoTotal:0,
+    contractNoLoading:false,
+    contractNoArray:[]
+  })
+
+  // 合同编号--列表
+
+  // 销售列表
+  const contractInfoForm=ref(null)
+  // 销售列表类型1-单Ficc 2-单权益 3-ficc和权益
+  const sellerListType=ref(3)
+  // 选中的销售数组
+  const cascaderSelectSeller=ref([])
+
+  // 查看套餐报价单 图片
+  const previewImage=ref('')
+  // 查看套餐报价单 标题
+  const previewImageTitle=ref('')
+
+  // 合同来源改变
+  const contractSourceChange=(value)=>{
+    // 切换来源,清空数据
+    compliance.form={...compliance.form,
+      product_ids:value==0?'1,2':'',
+      crm_contract_id:0,
+      contract_code:'',
+      company_name:'',
+      currency_unit:'CNY',
+      new_company:0,
+      seller_ids:'',
+      seller_id:'',
+      contract_status:'',
+      start_date:'',
+      end_date:'',
+      contract_amount:'',
+      contract_type:'',
+      has_payment:'',
+      actual_pay_companies:'',
+      relate_contract_code:'',
+      relate_contract_main_code:'',
+      sign_date:'',
+      agreed_pay_time:'',
+      services:[],
+      services_amount:'',
+      services_Qy_amount:'',
+      service_remark:'',
+      remark:""
+    }
+    
+    compliance.checkedService=[]
+    compliance.checkedServiceQy=[]
+
+    compliance.checkedPermission=[]
+    compliance.checkedPermissionQyBig=[]
+    compliance.checkedPermissionQySmall=[]
+    sellerListType.value = value==0?3:''
+    compliance.contractTypeCheck=[]
+    // 1-大套餐  2-小套餐
+    compliance.serviceType=0
+    compliance.serviceTypeQy=0
+    // 品种选择 - Ficc
+    compliance.serviceVarietyShow=false
+    // 品种选择 - Qy
+    compliance.serviceVarietyShowQy=false
+    compliance.contractValidityDate=[]
+    setTimeout(()=>{
+      // 去除错误信息
+      contractInfoForm.value && contractInfoForm.value.clearValidate()
+    },0)
+  }
+
+// ------------------------------------------------监听
+  watch(()=>compliance.form.contract_amount,(newVal)=>{
+    if(compliance.showServiceFicc && compliance.showServiceQy){
+      return 
+    }else if(!compliance.showServiceFicc){
+      compliance.form.services_Qy_amount = newVal
+    }else{
+      compliance.form.services_amount = newVal
+    }
+    
+  })
+
+  watch(()=>props.supplementaryInfo.supplement,(value)=>{
+    if(value){
+      setSupplementaryData()
+    }
+  }) 
+  watch(()=>props.detailInfo.contract_register_id,(value)=>{
+    if(value){
+      console.log(props.detailInfo);
+      setComplianceDetail()
+    }
+  }) 
+  
+// --------------------------------------------------------方法
+
+  // 合同类型改变
+  const contractTypeChange=(value)=>{
+    // console.log(value);
+    if(!value) return 
+    compliance.form.has_payment = value[0]
+    compliance.form.contract_type = value[1]
+    if(compliance.form.contract_type==1){
+      // 新签 -- 新客户
+      compliance.form.new_company = 1
+    }else{
+      // 续约、补充 -- 老客户
+      compliance.form.new_company = 0
+    }
+    if(compliance.form.contract_type!=4){
+      // 新签、续约
+      compliance.form.relate_contract_main_code=''
+    }
+    if(!compliance.form.has_payment){
+      compliance.form.relate_contract_code=''
+      compliance.form.actual_pay_companies=''
+    }
+  }
+  // 销售修改
+  const sellerChange=(value)=>{
+    let ficcSeller,qySeller;
+    if(value?.length>0){
+      for (let i = 0; i < value.length; i++) {
+        const element = value[i];
+        if(element[0]==2){
+          // ficc
+          ficcSeller = element[2]
+        }else{
+          //权益
+          qySeller = element[2]
+        }
+      }
+      // 编辑,不允许修改销售数量
+      if(compliance.form.contract_register_id){
+        if(!(ficcSeller&&qySeller)){
+          ElMessage.warning('合规套餐类型已定,不允许修改销售数量')
+          cascaderSelectSeller.value = compliance.form.seller_ids.split(',').map(item => +item)
+          return 
+        }
+      }
+      console.log(compliance.form.seller_ids);
+      cascaderSelectSeller.value=[ficcSeller,qySeller]
+      compliance.form.seller_ids= cascaderSelectSeller.value.join(',')
+      // 根据销售选择是否显示套餐
+      if(ficcSeller && qySeller){
+        // 都有
+        compliance.showServiceFicc=true
+        compliance.showServiceQy=true
+        if(!compliance.form.contract_register_id){
+          // 新增的情况才置空
+          compliance.form.services_amount = compliance.form.services_Qy_amount = ''
+        }
+      }else if(!ficcSeller){
+        // 没有ficc销售
+        compliance.showServiceFicc=false
+        compliance.showServiceQy=true
+        compliance.form.services_Qy_amount = compliance.form.contract_amount
+        compliance.form.services_amount =''
+      }else{
+        // 没有权益销售
+        compliance.showServiceFicc=true
+        compliance.showServiceQy=false
+        compliance.form.services_amount = compliance.form.contract_amount
+        compliance.form.services_Qy_amount =''
+      }
+    }else{
+      if(compliance.form.contract_register_id){
+        ElMessage.warning('合规套餐类型已定,不允许修改销售数量')
+        cascaderSelectSeller.value = compliance.form.seller_ids.split(',').map(item => +item)
+        return 
+      }
+      compliance.showServiceFicc = compliance.showServiceQy=true
+      compliance.form.services_amount = compliance.form.services_Qy_amount = ''
+      cascaderSelectSeller.value=[]
+    }
+  }
+  // 合同编号选中
+  const selectContractNo=(value)=>{
+    let selectItem=contractNoInfo.contractNoArray.find(item=>item.contract_code == value)
+    // console.log(selectItem);
+    // 获取套餐详情
+    getServiceDetail({contract_id:selectItem.contract_id}).then(res=>{
+      // console.log(res);
+      let servivesTemp = res.data?res.data.Service||[]:[]
+      if(selectItem.product_id==1){
+        // FICC套餐
+        // 小套餐
+        let smallService = servivesTemp.find(item => item.ServiceTemplateId==2)
+        // 是否有大套餐
+        let hasBigService = servivesTemp.some(item => item.ServiceTemplateId==1)
+        compliance.serviceVarietyShow=!!smallService
+        compliance.serviceType = !!smallService?2:hasBigService?1:0
+        compliance.checkedService=servivesTemp.map(item => item.ServiceTemplateId)
+        compliance.checkedPermission=smallService?smallService.ChartPermissionIds||[]:[]
+        compliance.form.services_Qy_amount = ''
+      }else{
+        //权益
+        // 权益大套餐
+        let bigServiceQY = servivesTemp.find(item => item.FMSServiceTemplateId==11 || item.FMSServiceTemplateId==12)
+        // 行业套餐
+        let smallServiceQY = servivesTemp.filter(item => [14,15,16,17,18].includes(item.FMSServiceTemplatePId))
+
+        compliance.serviceVarietyShowQy = (!!bigServiceQY) || (!!smallServiceQY)
+        compliance.serviceTypeQy = compliance.qYDiaType =  !!bigServiceQY?1:!!smallServiceQY?2:0
+        compliance.checkedServiceQy=[!!bigServiceQY?10:13]
+        if(!!bigServiceQY){
+          //权益大套餐
+          compliance.checkedPermissionQyBig = [bigServiceQY.FMSServiceTemplateId]
+          compliance.checkedPermissionQySmall = []
+        }else{
+          //行业套餐
+          compliance.checkedPermissionQyBig = []
+          compliance.checkedPermissionQySmall = smallServiceQY.map(item => item.FMSServiceTemplateId)
+        }
+        compliance.form.services_amount = ''
+      }
+      compliance.varietyDiaType='edit'
+
+    })
+
+    compliance.form.product_ids = selectItem.product_id.toString()
+    sellerListType.value = selectItem.product_id
+    // console.log(compliance.form);
+    compliance.form.company_name=selectItem.company_name
+    compliance.form.crm_contract_id=selectItem.contract_id
+    compliance.form.start_date=selectItem.start_date
+    compliance.form.end_date=selectItem.end_date
+    compliance.contractValidityDate=[selectItem.start_date,selectItem.end_date]
+    compliance.form.contract_amount=selectItem.price
+    compliance.form.seller_id=selectItem.seller_id
+    compliance.form.has_payment=selectItem.contract_business_type_int-1
+    compliance.form.actual_pay_companies=selectItem.actual_pay_companies
+    compliance.form.seller_ids=selectItem.seller_id+''
+    // selectItem.contract_type_int 1-新签 2-续约 3-补充
+    // compliance.form.contract_type 1-新签 2-续约 4-补充
+    compliance.form.contract_type=selectItem.contract_type_int==3?4:selectItem.contract_type_int
+    compliance.form.relate_contract_code=compliance.form.has_payment?selectItem.relate_contract_code:''
+    compliance.form.relate_contract_main_code=!compliance.form.has_payment?selectItem.relate_contract_main_code:''
+    compliance.contractTypeCheck = [compliance.form.has_payment,compliance.form.contract_type]
+    contractInfoForm.value && 
+    contractInfoForm.value.validateField([
+      'contract_code','company_name','contract_type','seller_ids',
+      'start_date','contract_amount','relate_contract_code','actual_pay_companies'
+    ])
+  
+    compliance.showServiceFicc = selectItem.product_id == 1
+    compliance.showServiceQy = selectItem.product_id == 2
+
+  }
+
+  // 合规登记-提交
+  const complianceSubmit=()=>{
+    // console.log(compliance.checkedService);
+    contractInfoForm.value.validate(valid=>{
+      if(valid){
+        compliance.form.services=[]
+        compliance.form.service_amount=[]
+        // FICC
+        if(compliance.showServiceFicc){
+          if(compliance.checkedService.length==0){
+            ElMessage.warning('请选择FICC套餐')
+            return 
+          }
+          if((!compliance.checkedPermission || compliance.checkedPermission.length==0) 
+          && compliance.checkedService.some(serviceId =>serviceId==2)){
+            ElMessage.warning('请保存FICC小套餐品种')
+            return 
+          }
+          compliance.checkedService.map(serviceId=>{
+            let serviceSelectItem = props.serviceItem.serviceArray.find(it=> it.service_template_id==serviceId) || {}
+            // 小套餐
+            if(serviceId==2){
+              compliance.form.services.push({
+                service_template_id:serviceSelectItem.service_template_id,
+                value:'',
+                chart_permission_ids:compliance.checkedPermission?compliance.checkedPermission.join(','):'',
+                chart_permission_id:serviceSelectItem.chart_permission_id,
+                title:serviceSelectItem.title
+              })
+            }
+            else if(serviceId==3){
+              compliance.form.services.push(serviceSelectItem)
+            }
+            else{
+              compliance.form.services.push({service_template_id:serviceSelectItem.service_template_id,title:serviceSelectItem.title})
+            }
+          })
+          // 套餐金额
+          
+          if(!compliance.form.services_amount){
+            ElMessage.error('请填写FICC套餐金额')
+            return 
+          }
+          if(!parseFloat(compliance.form.services_amount)){
+            ElMessage.error('FICC套餐金额格式错误')
+            return 
+          }
+          compliance.form.service_amount.push({product_id:1,service_amount:+compliance.form.services_amount})
+        }
+        
+        // 权益
+        if(compliance.showServiceQy){
+          if(compliance.checkedServiceQy.length==0){
+            ElMessage.warning('请选择权益套餐')
+            return 
+          }
+          // 权益大套餐
+          if((!compliance.checkedPermissionQyBig || compliance.checkedPermissionQyBig.length==0) 
+          && compliance.checkedServiceQy.some(serviceId =>serviceId==10)){
+            ElMessage.warning('请保存权益大套餐类型')
+            return 
+          }
+
+          // 行业套餐
+          if((!compliance.checkedPermissionQySmall || compliance.checkedPermissionQySmall.length==0) 
+          && compliance.checkedServiceQy.some(serviceId =>serviceId==13)){
+            ElMessage.warning('请保存行业套餐品种')
+            return 
+          }
+          compliance.checkedServiceQy.map(serviceId=>{
+            let serviceSelectItem = props.serviceItem.serviceArrayQy.find(it=> it.service_template_id==serviceId)
+            if(serviceSelectItem)
+            compliance.form.services.push({service_template_id:serviceSelectItem.service_template_id,title:serviceSelectItem.title})
+            // 权益大套餐
+            if(serviceId==10){
+              let subServiceItem = serviceSelectItem.children.find(it=> it.service_template_id==compliance.checkedPermissionQyBig[0])
+              compliance.form.services.push({service_template_id:subServiceItem.service_template_id,title:subServiceItem.title})
+            }else if(serviceId==13){
+              // 行业套餐
+              const hasSubList=[0,0,0,0,0]
+              compliance.checkedPermissionQySmall.map(serviceTemplateId=>{
+                for (let i = 0; i < serviceSelectItem.children.length; i++) {
+                  const element = serviceSelectItem.children[i];
+                  let subItem=element.children.find(it =>it.service_template_id == serviceTemplateId)
+                  if(subItem){
+                    compliance.form.services.push({service_template_id:subItem.service_template_id,title:subItem.title})
+                    hasSubList[i]=element.service_template_id
+                    break;
+                  }
+                }
+              })
+              hasSubList.map(serviceTemplateId =>{
+                if(serviceTemplateId){
+                  let tempItem = serviceSelectItem.children.find(it => it.service_template_id==serviceTemplateId)
+                  compliance.form.services.push({service_template_id:tempItem.service_template_id,title:tempItem.title})
+                }
+              })
+              
+            }
+          })
+          // console.log(compliance.form.services);
+          // 套餐金额
+          if(!compliance.form.services_Qy_amount){
+            ElMessage.error('请填写权益套餐金额')
+            return 
+          }
+          if(!parseFloat(compliance.form.services_Qy_amount)){
+            ElMessage.error('权益套餐金额格式错误')
+            return 
+          }
+          compliance.form.service_amount.push({product_id:2,service_amount:+compliance.form.services_Qy_amount})
+        }
+        
+        compliance.form.contract_amount = +parseFloat(compliance.form.contract_amount).toFixed(2)
+        compliance.form.services_amount = +parseFloat(compliance.form.services_amount).toFixed(2) || 0
+        compliance.form.services_Qy_amount = +parseFloat(compliance.form.services_Qy_amount).toFixed(2) || 0
+        console.log(compliance.form.services_amount,compliance.form.services_Qy_amount);
+        let servicesAll = Math.round((compliance.form.services_Qy_amount+compliance.form.services_amount)*100)/100
+        if(servicesAll!=compliance.form.contract_amount){
+          ElMessage.error('套餐总金额不等于合同金额')
+          return 
+        }
+        // compliance.form.service_amount = [{product_id:1,service_amount:compliance.form.services_amount},
+        // {product_id:2,service_amount:compliance.form.services_Qy_amount}]
+        if(!compliance.form.has_payment){
+          compliance.form.has_payment=0
+          compliance.form.actual_pay_companies=''
+        }
+        console.log(compliance.form);
+        // 检验合同名称或者合同有效期是否重复
+        if(compliance.form.contract_register_id){
+          // 编辑
+          registerEdit(compliance.form).then(res=>{
+            let messageHint=ElMessage.success('合规登记编辑成功')
+            setTimeout(()=>{
+              messageHint.close()
+              emits('submitSuccess')
+            },1000)
+          })
+        }else{
+          let params=compliance.form
+          if(props.supplementaryInfo.id){
+            // 预登记过来的
+            params={...params,contract_register_id:props.supplementaryInfo.id}
+          }
+          // 新增
+          contractRegisterCheck({company_name:compliance.form.company_name,
+            start_date:compliance.form.start_date,end_date:compliance.form.end_date}).then(res=>{
+            if(res.data?.exist){
+              // 存在给提示
+              ElMessageBox.confirm('已登记过相同的合同,是否继续操作?',
+              '操作提示',{
+                type:'warning',
+                confirmButtonText: '确定',
+                cancelButtonText: '取消'
+              }).then(resp=>{
+                registerAdd(params).then(res=>{
+                  let messageHint=ElMessage.success('合规登记成功')
+                  setTimeout(()=>{
+                    messageHint.close()
+                    emits('submitSuccess')
+                  },1000)
+                })
+              }).catch(()=>{})
+            }else{
+              registerAdd(params).then(res=>{
+                let messageHint=ElMessage.success('合规登记成功')
+                setTimeout(()=>{
+                  messageHint.close()
+                  emits('submitSuccess')
+                },1000)
+              })
+            }
+          })
+        }
+      }
+    })
+  }
+  const canServiceShow=(serviceTemplateId)=>{
+    return compliance.form.services.find(item => item.service_template_id == serviceTemplateId) && props.operationtype!='compliance'
+  }
+  // 查看套餐 - ficc
+  const viewService=(serviceTemplateId)=>{
+    if(!canServiceShow(serviceTemplateId)) return 
+    if(serviceTemplateId==2){
+      compliance.varietyDiaShow=true
+      compliance.varietyDiaType='view'
+      return 
+    }
+    let viewItem=compliance.form.services.find(item => item.service_template_id == serviceTemplateId)
+    previewImageTitle.value = viewItem.title
+    previewImage.value=viewItem.value
+    compliance.serviceShow=true
+  }
+
+  // 查看套餐 - 权益
+  const viewServiceQy=(serviceTemplateId,diaType)=>{
+    if(!canServiceShow(serviceTemplateId)) return 
+    compliance.varietyDiaShowQy=true
+    compliance.qYDiaType = diaType
+    compliance.varietyDiaType='view'
+  }
+  // 合同编号远程搜索
+  const contractNoSearch=(value)=>{
+    if(!value.trim()) return 
+    contractNoQuery.keyword=value
+    contractNoQuery.current=1
+    contractNoInfo.contractNoArray=[]
+    getContractSearchListFun()
+    // console.log(value);
+  }
+  const loadContractNoMore=()=>{
+    if(contractNoInfo.contractNoArray.length >=contractNoInfo.contractNoTotal) return 
+    contractNoQuery.current++
+    getContractSearchListFun()
+  }
+  const getContractSearchListFun=()=>{
+    contractNoInfo.contractNoLoading=true 
+    getContractSearchList(contractNoQuery).then(res=>{
+      contractNoInfo.contractNoArray=contractNoInfo.contractNoArray.concat(res.data.list || [])
+      contractNoInfo.contractNoTotal=res.data.page.total
+    }).finally(()=>{
+      contractNoInfo.contractNoLoading=false
+    })
+  }
+
+
+  // 销售选中
+  const selectSeller=(value)=>{
+    compliance.form.seller_ids=value+''
+  }
+
+    // 选择品种 - ficc
+    const selectVariety=()=>{
+    compliance.varietyDiaType='edit'
+    compliance.varietyDiaShow=true
+  }
+  // 选择品种 - 权益
+  const selectVarietyQy=(diaType)=>{
+    compliance.varietyDiaType='edit'
+    compliance.varietyDiaShowQy=true
+    compliance.qYDiaType = diaType
+  }
+
+  const getPermissionChecked=(list)=>{
+    compliance.checkedPermission=list
+  }
+
+  const getPermissionQYChecked=(list)=>{
+    console.log(list,'list');
+    if(compliance.qYDiaType==1) compliance.checkedPermissionQyBig=list
+    else if(compliance.qYDiaType==2) compliance.checkedPermissionQySmall=list
+  }
+
+    // 有效期变更触发函数
+    const contractValidityDateChane=(value)=>{
+    if(value){
+      compliance.form.start_date=value[0]
+      compliance.form.end_date=value[1]
+    }else{
+      compliance.form.start_date=compliance.form.end_date=''
+    }
+  }
+
+
+  // 服务改变
+  const serciveChange=(value,type,serviceType='ficc',openDia=true)=>{
+    // console.log(value,type,serviceType);
+    if(serviceType=='ficc'){
+      // ficc套餐修改
+      if(type==2){
+        compliance.serviceVarietyShow=value
+        compliance.varietyDiaType='edit'
+        compliance.varietyDiaShow=openDia&&value
+      }
+      compliance.serviceType = value?type:0
+    }else{
+      // 权益套餐修改
+      // if(type==2){
+        compliance.serviceVarietyShowQy=value
+        compliance.varietyDiaType='edit'
+        compliance.varietyDiaShowQy=openDia&&value
+      // }
+      compliance.serviceTypeQy = compliance.qYDiaType =  value?type:0
+      // console.log(compliance.qYDiaType);
+    }
+  }
+
+  const setSupplementaryData=()=>{
+    compliance.form.supplement =1
+    compliance.form.company_name = props.supplementaryInfo.company_name
+    compliance.form.currency_unit = props.supplementaryInfo.currency_unit
+    compliance.form.new_company = parseInt(props.supplementaryInfo.new_company)
+    compliance.form.start_date = props.supplementaryInfo.start_date
+    compliance.form.end_date = props.supplementaryInfo.end_date
+    compliance.contractValidityDate = [compliance.form.start_date,compliance.form.end_date]
+    serviceDataHandle(props.supplementaryInfo.services)
+  }
+
+  const setComplianceDetail=()=>{
+    compliance.form.product_ids=props.detailInfo.product_ids
+    compliance.form.contract_register_id=props.detailInfo.contract_register_id
+    compliance.form.crm_contract_id=props.detailInfo.crm_contract_id
+    compliance.form.contract_code=props.detailInfo.contract_code
+    compliance.form.company_name=props.detailInfo.company_name
+    compliance.form.currency_unit=props.detailInfo.currency_unit
+    compliance.form.new_company=props.detailInfo.new_company
+    compliance.form.seller_ids=props.detailInfo.seller_ids
+    compliance.form.seller_id=props.detailInfo.seller_id || props.detailInfo.rai_seller_id
+    compliance.form.contract_status=props.detailInfo.contract_status
+    compliance.form.start_date=props.detailInfo.start_date
+    compliance.form.end_date=props.detailInfo.end_date
+    compliance.form.contract_amount=props.detailInfo.contract_amount
+    compliance.form.contract_type=props.detailInfo.contract_type
+    compliance.form.has_payment=props.detailInfo.has_payment
+    compliance.form.actual_pay_companies=props.detailInfo.actual_pay_companies
+    compliance.form.relate_contract_code=props.detailInfo.relate_contract_code
+    compliance.form.relate_contract_main_code=props.detailInfo.relate_contract_main_code
+    compliance.form.sign_date=props.detailInfo.sign_date
+    compliance.form.agreed_pay_time=props.detailInfo.agreed_pay_time
+    compliance.form.service_remark=props.detailInfo.service_remark
+    compliance.form.remark=props.detailInfo.remark
+    compliance.form.contract_source=props.detailInfo.contract_source
+    // 有效期回显 
+    compliance.contractValidityDate=[compliance.form.start_date,compliance.form.end_date]
+    // 合同类型回显
+    compliance.contractTypeCheck = [compliance.form.has_payment,compliance.form.contract_type]
+    // 销售&套餐显示
+    if(props.detailInfo.seller_id && props.detailInfo.rai_seller_id){
+      compliance.showServiceFicc = compliance.showServiceQy=true
+      cascaderSelectSeller.value = compliance.form.seller_ids.split(',').map(item => +item) 
+      sellerListType.value = 3
+    }else if(!props.detailInfo.seller_id){
+      sellerListType.value = 2
+      compliance.showServiceQy=true
+    }else{
+      sellerListType.value = 1
+      compliance.showServiceFicc=true
+    }
+    rmbRate.value=props.detailInfo.rmb_rate
+    if(props.currencyList.length>0){
+      // 拿到货币列表后才去取单位
+      compliance.currencyUnit=props.currencyList.find(item => item.code==props.detailInfo.currency_unit)?.unit_name
+    }else{
+      // 轮询等拿到货币列表后去取单位,并清除轮询定时器
+      const timer = setInterval(()=>{
+        if(props.currencyList.length>0){
+          compliance.currencyUnit=props.currencyList.find(item => item.code==props.detailInfo.currency_unit)?.unit_name
+          clearInterval(timer)
+        }
+      },10)
+    }
+    // 套餐金额
+    compliance.form.services_amount = props.detailInfo.service_amount_list.find(it => it.product_id==1)?
+    props.detailInfo.service_amount_list.find(it => it.product_id==1).service_amount:0
+    compliance.form.services_Qy_amount = props.detailInfo.service_amount_list.find(it => it.product_id==2)?
+    props.detailInfo.service_amount_list.find(it => it.product_id==2).service_amount:0
+    serviceDataHandle(props.detailInfo.services)
+  }
+
+  const serviceDataHandle=(services)=>{
+    services.map(item =>{
+      if(item.service_template_id==2){
+        // ficc小套餐
+        compliance.form.services.push({
+          service_template_id:item.service_template_id,
+          value:item.value,
+          chart_permission_ids:item.chart_permission_ids,
+          chart_permission_id:item.chart_permission_id,
+          title:item.title
+        })
+        compliance.checkedPermission=item.chart_permission_ids.split(',')
+      }else if(item.service_template_id==11 || item.service_template_id==12){
+        // 权益大套餐
+        compliance.checkedPermissionQyBig = [item.service_template_id]
+        compliance.form.services.push(item)
+      }else if([19,20,21,22,23,24,25,26,27].includes(item.service_template_id)){
+        // 行业套餐
+        compliance.checkedPermissionQySmall.push(item.service_template_id)
+        compliance.form.services.push(item)
+      }else{
+        compliance.form.services.push(item)
+      }
+    })
+    compliance.checkedService=services.map(item => {
+      if(item.product_id==1){
+        let serviceId=item.service_template_id
+        // 大套餐或者小套餐
+        if(serviceId==1 || serviceId==2) serciveChange(true,serviceId,'ficc',false)
+        return serviceId
+      }
+    }).filter(Boolean)
+    compliance.checkedServiceQy=services.map(item => {
+      if(item.product_id==2){
+        let serviceId=item.service_template_id
+        // 权益大套餐或者行业套餐
+        if(serviceId==10 || serviceId==13) serciveChange(true,serviceId==10?1:2,'qy',false)
+        return serviceId
+      }
+    }).filter(Boolean)
+  }
+
+  // --------------------------------------开始
+  defineExpose({
+    complianceSubmit
+  })
+</script>
+
+<template>
+    <div id="contractProgress-compliance">
+      <div class="info-row" id="contract-info-container">
+        <div class="info-row-title">合同信息</div>
+        <div style="margin: 0px 42px 0 62px;">
+          <el-form :model="compliance.form" inline ref="contractInfoForm" label-width="130" 
+          :disabled="operationtype!='compliance'"
+          :rules="compliance.rules" class="contractInfo-form">
+            <el-form-item label="合同来源" prop="contract_source" >
+              <el-select v-model="compliance.form.contract_source" 
+              placeholder="请选择合同来源" @change="contractSourceChange">
+                <el-option :label="item" :value="index" 
+                v-for="(item,index) in contractSourceArray" :key="item"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="合同编号" prop="contract_code" id="selectContract">
+              <el-input v-model="compliance.form.contract_code" placeholder="请输入合同编号"
+              v-if="(compliance.form.contract_source==0)" />
+              <scrollableSelect :loadMoreMethod="loadContractNoMore" v-model="compliance.form.contract_code" placeholder="请搜索合同编号" v-else
+              :searchMethod="contractNoSearch" @change="selectContractNo" useLoading :isLoading="contractNoInfo.contractNoLoading" 
+              >
+                <el-option :label="item.contract_code" :value="item.contract_code" v-for="item in contractNoInfo.contractNoArray" :key="item.contract_id"></el-option>
+              </scrollableSelect>
+            </el-form-item>
+            <el-form-item label="客户名称" prop="company_name" id="contractInfo-companyName">
+              <el-input v-model="compliance.form.company_name" 
+              placeholder="请输入客户名称"  />
+            </el-form-item>
+            <el-form-item label="销售" prop="seller_ids">
+              <el-cascader v-if="sellerListType==3" filterable :options="sellerData.all_list" placeholder="请选择销售" @change="sellerChange"
+                :show-all-levels="false" v-model="cascaderSelectSeller" :clearable="false" 
+                :props="{multiple:true,label:'seller_name',value:'seller_id',children:'child'}"
+                key="seller" >
+              </el-cascader>
+              <el-select v-else-if="!sellerListType" placeholder="请选择销售" filterable  >
+                <el-option :label="item" :value="item" v-for="item in []" :key="item"></el-option>
+              </el-select>
+              <el-select v-else v-model="compliance.form.seller_id" placeholder="请选择销售" 
+              filterable @change="selectSeller" >
+                <el-option :label="item.seller_name" :value="item.seller_id" 
+                v-for="item in sellerListType==1?sellerData.ficc_list:sellerData.rai_list" :key="item.admin_id"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="合同金额" id="contractInfo-contractAmount"
+            prop="contract_amount">
+              <el-input v-model.trim="compliance.form.contract_amount"
+              placeholder="请输入合同金额"  />
+              <el-select v-model="compliance.form.currency_unit" placeholder="请选择货币类型" 
+              style="margin-left: 20px;" :disabled="compliance.form.supplement!=0">
+                <el-option v-for="item in currencyList" :key="item.code" :label="item.name" :value="item.code">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="合同有效期" 
+            prop="start_date">
+              <el-date-picker type="daterange" 
+              v-model="compliance.contractValidityDate" @change="contractValidityDateChane"
+              start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD"
+              :clearable="false">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="合同类型" prop="contract_type">
+              <el-cascader :options="contractTypeArray" placeholder="请选择合同类型" @change="contractTypeChange"
+              v-model="compliance.contractTypeCheck" :clearable="false" key="contractType" >
+              </el-cascader>
+            </el-form-item>
+            <el-form-item label="关联主合同" prop="relate_contract_main_code" 
+            v-if="compliance.form.contract_type==4">
+              <el-input v-model="compliance.form.relate_contract_main_code" 
+              placeholder="请输入关联主合同" />
+            </el-form-item>
+            <el-form-item label="代付方" prop="actual_pay_companies" v-if="compliance.form.has_payment==1">
+              <div v-overflowTooltip="'#overflow-input'">
+                <el-tooltip placement="top" :content="compliance.form.actual_pay_companies" >
+                  <el-input v-model="compliance.form.actual_pay_companies"
+                  placeholder="请输入代付方信息" id="overflow-input" />
+                </el-tooltip>
+              </div>
+            </el-form-item>
+            <el-form-item label="关联合同" prop="relate_contract_code" v-if="compliance.form.has_payment">
+              <el-input v-model="compliance.form.relate_contract_code" 
+              placeholder="请输入关联合同" />
+            </el-form-item>
+            <el-form-item label="合同状态" prop="contract_status">
+              <el-select v-model="compliance.form.contract_status" 
+              placeholder="请选择合同状态" >
+                <el-option :label="item.label" :value="item.id" v-for="item in contractStatusArray" :key="item.id"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="签订日" prop="sign_date" >
+              <el-date-picker v-model="compliance.form.sign_date" 
+              placeholder="请选择签订日" value-format="YYYY-MM-DD"
+              :clearable="false">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="约定付款时间" prop="agreed_pay_time">
+              <el-input v-model="compliance.form.agreed_pay_time" 
+              placeholder="请输入约定付款时间" />
+            </el-form-item>
+          </el-form>
+        </div>
+      </div>
+      <div class="info-row">
+        <div class="info-row-title" >套餐信息</div>
+        <div class="info-row-services" v-if="compliance.showServiceFicc">
+          <div class="info-row-services-header" id="info-row-services-header">
+            <span>FICC套餐</span>
+            <el-input v-model="compliance.form.services_amount" :disabled="operationtype!='compliance'"
+            placeholder="请输入套餐金额" style="width: 200px;" />
+          </div>
+            <el-checkbox-group :disabled="operationtype!='compliance'"
+          v-model="compliance.checkedService" class="info-service-box" id="service-information">
+            <!-- 大套餐 -->
+            <el-checkbox :label="serviceItem.serviceArray[0]?.service_template_id" @change="(e) => serciveChange(e,1)" 
+              :class="{'viewService':canServiceShow(serviceItem.serviceArray[0]?.service_template_id)}"
+            :disabled="compliance.serviceType==2" @click="viewService(serviceItem.serviceArray[0]?.service_template_id)">
+              {{serviceItem.serviceArray[0]?.title}}
+            </el-checkbox>
+            <!-- 小套餐 -->
+            <div class="service-small">
+              <el-checkbox :label="serviceItem.serviceArray[1]?.service_template_id" style="margin-right: 0;"
+              @change="(e) => serciveChange(e,2)" 
+                :class="{'viewService':canServiceShow(serviceItem.serviceArray[1]?.service_template_id)}"
+                :disabled="compliance.serviceType==1" @click="viewService(serviceItem.serviceArray[1]?.service_template_id)">
+                {{serviceItem.serviceArray[1]?.title}}
+              </el-checkbox>
+              <span v-if="(compliance.serviceVarietyShow&&operationtype=='compliance')" 
+              @click="selectVariety" class="select-variety">选择品种</span>
+            </div>
+            <!-- 市场策略 -->
+            <el-checkbox :label="serviceItem.serviceArray[2]?.service_template_id"
+            @click="viewService(serviceItem.serviceArray[2]?.service_template_id)"
+            :class="{'viewService':canServiceShow(serviceItem.serviceArray[2]?.service_template_id)}">
+            {{serviceItem.serviceArray[2]?.title}}
+            </el-checkbox>
+            <!-- 财富管理类似没有详情的套餐 -->
+            <el-checkbox v-for="item in serviceItem.serviceArray.slice(3)" :label="item.service_template_id">
+              {{item.title}}
+            </el-checkbox>
+          </el-checkbox-group>
+        </div>
+        <div class="info-row-services" v-if="compliance.showServiceQy">
+          <div class="info-row-services-header" id="info-row-services-header">
+            <span>权益套餐</span>
+            <el-input v-model="compliance.form.services_Qy_amount" :disabled="operationtype!='compliance'"
+            placeholder="请输入套餐金额" style="width: 200px;" />
+          </div>
+            <el-checkbox-group :disabled="operationtype!='compliance'"
+          v-model="compliance.checkedServiceQy" class="info-service-box" id="service-information">
+            <!-- 权益大套餐、行业套餐 -->
+            <div class="service-small" v-for="(item,index) in [1,2]" :key="item">
+              <el-checkbox :label="serviceItem.serviceArrayQy[index]?.service_template_id" style="margin-right: 0;"
+              @change="(e) => serciveChange(e,item,'qy')" 
+                :class="{'viewService':canServiceShow(serviceItem.serviceArrayQy[index]?.service_template_id)}"
+                :disabled="compliance.serviceTypeQy!=0 && compliance.serviceTypeQy != item" 
+                @click="viewServiceQy(serviceItem.serviceArrayQy[index]?.service_template_id,item)">
+                {{serviceItem.serviceArrayQy[index]?.title}}
+              </el-checkbox>
+              <span v-if="(compliance.serviceVarietyShowQy&&compliance.qYDiaType==item&&operationtype=='compliance')" 
+              @click="selectVarietyQy(item)" class="select-variety">选择品种</span>
+            </div>
+            <!-- 非行业套餐 -->
+            <el-checkbox v-for="item in serviceItem.serviceArrayQy.slice(2)" :label="item.service_template_id">
+              {{item.title}}
+            </el-checkbox>
+          </el-checkbox-group>
+        </div>
+        <div class="remark info-service-remark">
+          <span style="white-space: nowrap;font-size: 14px;margin-right: 20px;">套餐备注</span>
+          <el-input style="flex-grow: 1;" :disabled="operationtype!='compliance'"
+              v-model="compliance.form.service_remark" placeholder="请输入备注"
+            />
+        </div>
+      </div>
+      <div class="info-row">
+        <div class="info-row-title">备注</div>
+        <div class="info-row-remark">
+          <span style="white-space: nowrap;font-size: 14px;margin-right: 20px;">备注</span>
+          <el-input style="flex-grow: 1;" :disabled="operationtype!='compliance'"
+            v-model="compliance.form.remark" placeholder="请输入备注"
+          />
+        </div>
+      </div>
+      <!-- 小套餐选择品种弹窗 -->
+      <permission-dia v-model:visible="compliance.varietyDiaShow" :type="compliance.varietyDiaType"
+      @selectFinish="getPermissionChecked" :hasCheckedPermission="compliance.checkedPermission"></permission-dia>
+      <!-- 权益大套餐、行业套餐选择品种弹窗 -->
+      <permission-qy-dia v-model:visible="compliance.varietyDiaShowQy" :type="compliance.varietyDiaType" 
+      @selectFinish="getPermissionQYChecked" :serviceType="compliance.qYDiaType"
+      :permissionData="compliance.qYDiaType==1?serviceItem.serviceArrayQy[0]?.children:serviceItem.serviceArrayQy[1]?.children"
+      :hasCheckedPermission="compliance.qYDiaType==1?compliance.checkedPermissionQyBig:compliance.checkedPermissionQySmall"></permission-qy-dia>
+      <!-- 查看套餐弹窗 -->
+      <el-dialog v-model="compliance.serviceShow" style="min-width: 800px;" title="" width="70vw" top="5vh">
+        <template #header>
+          <div style="text-align: center;">{{previewImageTitle}}</div>
+        </template>
+        <img style="width: 100%; display: block; margin: 0 auto 20px auto" 
+        :src="previewImage" />
+        <div style="text-align: center; margin: 30px 0 10px">
+          <el-button type="primary" @click="compliance.serviceShow=false">知道了</el-button>
+        </div>
+      </el-dialog>
+    </div>
+</template>
+  
+<style lang="scss" scoped>
+
+</style>
+<style lang="scss">
+#contractProgress-compliance{
+  #contract-info-container{
+    .el-input__wrapper,.el-input{
+      min-width: 320px;
+      width: 15vw;
+    }
+    .el-form-item{
+      .el-form-item__content{
+        min-width: 320px;
+        width: 15vw;
+        flex-wrap: nowrap;
+      }
+    }
+  }
+  #contractInfo-companyName,#contractInfo-contractAmount{
+    .el-input__wrapper,.el-input{
+      min-width: 200px;
+      flex-grow: 1;
+    }
+    .el-select{
+      .el-input__wrapper,.el-input{
+        min-width: 100px;
+        width: 100px;
+      }
+    }
+  }
+  #info-row-services-header{
+    .el-input__wrapper{
+      height: 30px;
+    }
+  }
+  #service-information{
+    .el-checkbox{
+      margin-right: 40px;
+    }
+  }
+  .viewService{
+    .el-checkbox__label{
+      cursor: pointer;
+      color: $themeColor;
+    }
+  }
+}
+</style>

+ 564 - 0
src/views/financialManagement/contractProgress-component/InvoiceAndPayment.vue

@@ -0,0 +1,564 @@
+<script setup>
+  import '../style/contractRegistration.scss'
+  import {registerInvoice,registerPayment} from '@/api/financialMana'
+  // 开票记录表单
+  const invoiceFormRef=ref(null)
+  // 到款记录表单
+  const placementFormRef=ref(null)
+  // 货币单位
+  const IandP=reactive({
+    currencyUnit:'',
+    moneyData:{
+      // 开票金额
+      haveInvoiceMoney:0,
+      waitInvoiceMoney:0,
+      allInvoiceMoney:'',
+      // 到款金额
+      havePlacementMoney:0,
+      waitPlacementMoney:0,
+      allPlacementMoney:0,
+      // FICC开票金额
+      haveInvoiceMoneyFICC:0,
+      waitInvoiceMoneyFICC:0,
+      allInvoiceMoneyFICC:0,
+      // FICC到款金额
+      havePlacementMoneyFICC:0,
+      waitPlacementMoneyFICC:0,
+      allPlacementMoneyFICC:0, 
+      // 权益开票金额
+      haveInvoiceMoneyQY:0,
+      waitInvoiceMoneyQY:0,
+      allInvoiceMoneyQY:0,
+      // 权益到款金额
+      havePlacementMoneyQY:0,
+      waitPlacementMoneyQY:0,
+      allPlacementMoneyQY:0,
+    },
+    // 开票时 FICC的销售列表
+    sellerInvoiceListF:[],
+    // 开票时 权益的销售列表
+    sellerInvoiceListQ:[]
+  })
+  
+  // -----------------------------监听
+  // 已开票金额-FICC
+  watch(()=> contractInfo.moneyData.haveInvoiceMoneyFICC ,(newValue)=>{
+    contractInfo.moneyData.waitInvoiceMoneyFICC = contractInfo.moneyData.allInvoiceMoneyFICC-newValue
+    contractInfo.moneyData.waitInvoiceMoneyFICC=Math.round(contractInfo.moneyData.waitInvoiceMoneyFICC*100)/100
+    contractInfo.moneyData.waitInvoiceMoney = 
+    Math.round((contractInfo.moneyData.waitInvoiceMoneyFICC+contractInfo.moneyData.waitInvoiceMoneyQY)*100)/100
+    
+    contractInfo.moneyData.haveInvoiceMoney = 
+    Math.round((contractInfo.moneyData.haveInvoiceMoneyFICC+contractInfo.moneyData.haveInvoiceMoneyQY)*100)/100
+  })
+  // 已开票金额-QY
+  watch(()=> contractInfo.moneyData.haveInvoiceMoneyQY ,(newValue)=>{
+    contractInfo.moneyData.waitInvoiceMoneyQY = contractInfo.moneyData.allInvoiceMoneyQY-newValue
+    contractInfo.moneyData.waitInvoiceMoneyQY=Math.round(contractInfo.moneyData.waitInvoiceMoneyQY*100)/100
+    contractInfo.moneyData.waitInvoiceMoney = 
+    Math.round((contractInfo.moneyData.waitInvoiceMoneyFICC+contractInfo.moneyData.waitInvoiceMoneyQY)*100)/100
+    
+    contractInfo.moneyData.haveInvoiceMoney = 
+    Math.round((contractInfo.moneyData.haveInvoiceMoneyFICC+contractInfo.moneyData.haveInvoiceMoneyQY)*100)/100
+  })
+  // 已到款金额-FICC
+  watch(()=> contractInfo.moneyData.havePlacementMoneyFICC ,(newValue)=>{
+    contractInfo.moneyData.waitPlacementMoneyFICC = contractInfo.moneyData.allPlacementMoneyFICC-newValue
+    contractInfo.moneyData.waitPlacementMoneyFICC=Math.round(contractInfo.moneyData.waitPlacementMoneyFICC*100)/100
+    contractInfo.moneyData.waitPlacementMoney = 
+    Math.round((contractInfo.moneyData.waitPlacementMoneyQY+contractInfo.moneyData.waitPlacementMoneyFICC)*100)/100
+    
+    contractInfo.moneyData.havePlacementMoney = 
+    Math.round((contractInfo.moneyData.havePlacementMoneyFICC+contractInfo.moneyData.havePlacementMoneyQY)*100)/100
+  })
+  // 已到款金额-QY
+  watch(()=> contractInfo.moneyData.havePlacementMoneyQY ,(newValue)=>{
+    contractInfo.moneyData.waitPlacementMoneyQY = contractInfo.moneyData.allPlacementMoneyQY-newValue
+    contractInfo.moneyData.waitPlacementMoneyQY=Math.round(contractInfo.moneyData.waitPlacementMoneyQY*100)/100
+    contractInfo.moneyData.waitPlacementMoney = 
+    Math.round((contractInfo.moneyData.waitPlacementMoneyQY+contractInfo.moneyData.waitPlacementMoneyFICC)*100)/100
+    
+    contractInfo.moneyData.havePlacementMoney = 
+    Math.round((contractInfo.moneyData.havePlacementMoneyFICC+contractInfo.moneyData.havePlacementMoneyQY)*100)/100
+  })
+
+// ------------------------------------------方法
+  // 切换套餐类型
+  const productIdChange=(value,type,row)=>{
+    // 清空销售
+    if(type=='invoice'){
+      row.seller_id=''
+    }
+    if(!row.origin_amount) return
+    if(type=='invoice'){
+      // 开票
+      if(value==1){
+        //切换成FICC套餐类型
+        contractInfo.moneyData.haveInvoiceMoneyFICC += row.origin_amount
+        contractInfo.moneyData.haveInvoiceMoneyQY -= row.origin_amount
+      }else{
+        //切换成QY套餐类型
+        contractInfo.moneyData.haveInvoiceMoneyFICC -= row.origin_amount
+        contractInfo.moneyData.haveInvoiceMoneyQY += row.origin_amount
+      }
+      contractInfo.moneyData.haveInvoiceMoneyFICC = Math.round(contractInfo.moneyData.haveInvoiceMoneyFICC*100)/100
+      contractInfo.moneyData.haveInvoiceMoneyQY = Math.round(contractInfo.moneyData.haveInvoiceMoneyQY*100)/100
+    }else{
+      if(value==1){
+        //切换成FICC套餐类型
+        contractInfo.moneyData.havePlacementMoneyFICC += row.origin_amount
+        contractInfo.moneyData.havePlacementMoneyQY -= row.origin_amount
+      }else{
+        //切换成QY套餐类型
+        contractInfo.moneyData.havePlacementMoneyFICC -= row.origin_amount
+        contractInfo.moneyData.havePlacementMoneyQY += row.origin_amount
+      }
+      contractInfo.moneyData.havePlacementMoneyFICC = Math.round(contractInfo.moneyData.havePlacementMoneyFICC*100)/100
+      contractInfo.moneyData.havePlacementMoneyQY = Math.round(contractInfo.moneyData.havePlacementMoneyQY*100)/100
+    }
+  }
+  // 添加行
+  const addTableRow=(type)=>{
+    if(type=='invoice'){
+      invoiceForm.invoiceData.push({
+        service_product_id:sellerListType.value == 3?'':sellerListType.value,origin_amount:'',amount:'',invoice_date:'',remark:'',
+      seller_id:'',seller_name:'',amountDomType:'text',remarkDomType:'text'})
+    }else{
+      placementForm.placementData.push({
+        service_product_id:sellerListType.value == 3?'':sellerListType.value,origin_amount:'',
+        amount:'',invoice_date:'',remark:'',amountDomType:'text',remarkDomType:'text'})
+    }
+  }
+
+  // 表格添加行
+  const addRow=(type,row,index)=>{
+    console.log(type,row,index);
+    if(!(row.amount && row.invoice_date && row.service_product_id)){
+      ElMessage.error('请填写完整信息')
+      return
+    }
+    if(type=='invoice'){
+      if(!row.seller_id){
+        ElMessage.error('请填写完整信息')
+        return
+      }
+      invoiceForm.invoiceData.splice((index+1),0,
+      {service_product_id:sellerListType.value == 3?'':sellerListType.value,origin_amount:'',
+      amount:'',invoice_date:'',remark:'',seller_id:'',seller_name:'',amountDomType:'text',remarkDomType:'text'})
+    }else{
+      placementForm.placementData.splice((index+1),0,
+      {service_product_id:sellerListType.value == 3?'':sellerListType.value,origin_amount:'',
+      amount:'',invoice_date:'',remark:'',amountDomType:'text',remarkDomType:'text'})
+    }
+  }
+
+
+  // 表格删除行
+  const deleteRow=(type,row,index)=>{
+    let tempArr=[]
+    let word='开票'
+    let haveSalesman=false
+    if(type=='invoice'){
+      tempArr=invoiceForm.invoiceData
+      if(tempArr[index].seller_id) haveSalesman=true
+      word='开票'
+    }else{
+      console.log(row);
+      if(row.is_pre_pay==1){
+        // 预到款登记
+        ElMessage.error('该笔到款是预到款,不允许删除!')
+        return 
+      }
+      tempArr=placementForm.placementData
+      word='到款'
+    }
+    if(tempArr[index].origin_amount=='' && tempArr[index].amount=='' && (tempArr[index].service_product_id=='' || sellerListType.value != 3)
+    && tempArr[index].invoice_date=='' && !haveSalesman){
+      // 没有内容 直接删除
+      tempArr.splice(index,1)
+    }else{
+      ElMessageBox.confirm(`是否删除该条${word}记录?`,
+      '提示',    
+      {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      }).then(res=>{
+        // 有金额才进行删除后的运算
+        if(tempArr[index].origin_amount!=''){
+          tempArr.splice(index,1)
+          let money=0                                           
+          tempArr.map(item =>{
+            if(item.service_product_id == row.service_product_id){
+              money+=parseFloat(item.origin_amount) || 0
+            }
+            // console.log(money);
+          })
+          // 保留两位小数、防止计算时精度丢失
+          money=Math.round(money*100)/100
+          if(type=='invoice'){
+            if(row.service_product_id==1){
+              contractInfo.moneyData.haveInvoiceMoneyFICC=money
+            }else{
+              contractInfo.moneyData.haveInvoiceMoneyQY=money
+            }
+          }else{
+            if(row.service_product_id==1){
+              contractInfo.moneyData.havePlacementMoneyFICC=money
+            }else{
+              contractInfo.moneyData.havePlacementMoneyQY=money
+            }
+          }
+        }else{
+          tempArr.splice(index,1)
+        }
+      }).catch(()=>{})
+    }
+  }
+  // 金额改变
+  const moneyChange=(type,value,index,row)=>{ 
+    // console.log(value);
+    let numerValue=parseFloat(value)
+    let tempArr=[]
+    if(type=='invoice'){
+      tempArr=invoiceForm.invoiceData
+    }else{
+      tempArr=placementForm.placementData
+    }
+
+    if(!numerValue&&numerValue!=0&&value){
+      tempArr[index].origin_amount=''
+      ElMessage.error('请输入数字')
+      return
+    }
+    // 如果输入不是 以.结尾&&只有一个. 或者 不是零结尾的话,就赋值为转为成数字后的值
+    // 考虑到类似12.02的情况
+    if(!((value.endsWith('.') && value.indexOf('.')==(value.length-1)) || 
+    (value.endsWith('0') && value.indexOf('.')==(value.length-2)))&&numerValue){
+      tempArr[index].origin_amount=numerValue
+    }
+    // console.log(rmbRate.value);
+    tempArr[index].amount=tempArr[index].origin_amount/rmbRate.value
+
+    let money=0
+    tempArr.map(item =>{
+      if(item.service_product_id == row.service_product_id){
+        money+=Math.round(item.origin_amount*100)/100 || 0
+      }
+    })
+    // 保留两位小数、防止计算时精度丢失
+    money=Math.round(money*100)/100
+    
+    if(type=='invoice'){
+      if(row.service_product_id==1){
+        contractInfo.moneyData.haveInvoiceMoneyFICC=money
+      }else{
+        contractInfo.moneyData.haveInvoiceMoneyQY=money
+      }
+    }else{
+      if(row.service_product_id==1){
+        contractInfo.moneyData.havePlacementMoneyFICC=money
+      }else{
+        contractInfo.moneyData.havePlacementMoneyQY=money
+      }
+    }
+  }
+  // 金额格式化,保留两位小数
+  const moneyFormatter=(money)=>{
+    let result=money.toString()
+    if(result.indexOf('.')==-1){
+      // 没有小数
+      return result+'.00'
+    }else{
+      let arr = result.split('.')
+      let decimal = arr[1].padEnd(2,'0')
+      return arr[0]+'.'+decimal
+    }
+  }
+  //开票-到款展开和收起
+  const isIandPExpand=reactive({
+    haveInvoice:false,
+    waitInvoice:false,
+    havePlacement:false,
+    waitPlacement:false
+  })
+
+  // 开票登记保存
+  const invoiceSubmit=()=>{
+    invoiceFormRef.value.validate(valid=>{
+      if(valid){
+        // 转化
+        invoiceForm.invoiceData.forEach(element => {
+          element.origin_amount = parseFloat(element.origin_amount)
+          element.amount = parseFloat(element.amount.toFixed(2))
+        });
+        let param={
+          contract_register_id:contractRegisterId,
+          invoice_type:1,
+          amount_list:invoiceForm.invoiceData,
+        }
+        registerInvoice(param).then(res=>{
+          let messageHint=ElMessage.success('开票登记成功')
+          setTimeout(()=>{
+            messageHint.close()
+            router.back()
+          },1000)
+        })
+      }
+    })
+  }
+  // 到款登记保存
+  const placementSubmit=()=>{
+    placementFormRef.value.validate(valid=>{
+      if(valid){
+        // 转化
+        placementForm.placementData.forEach(element => {
+          element.origin_amount = parseFloat(element.origin_amount)
+          element.amount = parseFloat(element.amount.toFixed(2))
+        });
+        let param={
+          contract_register_id:contractRegisterId,
+          invoice_type:2,
+          amount_list:placementForm.placementData
+        }
+        registerPayment(param).then(res=>{
+          let messageHint=ElMessage.success('到款登记成功')
+          setTimeout(()=>{
+            messageHint.close()
+            router.back()
+          },1000)
+        })
+      }
+    })
+  }
+  // 点击输入框后 文本切换成输入框
+  const iandPInput=(row,prop)=>{
+    row[prop]='input'
+  }
+  // 金额输入框失去焦点
+  const iandPAmountBlur=(row)=>{
+    if(row.origin_amount){
+      // console.log(parseFloat(row.origin_amount).toFixed(2));
+      row.origin_amount= Math.round(parseFloat(row.origin_amount)*100)/100
+    }
+    row.amountDomType ='text'
+    // console.log(row.origin_amount);
+  }
+  
+  let elMessageDom=null
+
+  const selectVisible=(value)=>{
+    if(value){
+      if(!elMessageDom){
+        elMessageDom=ElMessage.warning('请选择套餐类型')
+        setTimeout(()=>{
+          elMessageDom=null
+        },1000)
+      }
+    }
+  }
+</script>
+
+<template>
+    <div id="contractProgress-InvoiceAndPayment">
+      <div class="info-row" >
+        <div class="info-row-title">开票信息</div>
+        <div class="info-row-invoice-payment">
+          <div class="invoice-payment-title">
+            <div v-if="contractInfo.showServiceFicc && contractInfo.showServiceQy" style="margin-right: 30px;margin-bottom: 20px;">
+              <div class="invoice-payment-money-multiple" :style="{height:isIandPExpand.haveInvoice?'135px':'59px'}">
+                <div class="invoice-payment-money-multiple-head" @click="isIandPExpand.haveInvoice=!isIandPExpand.haveInvoice">
+                  <span style="margin-right: 20px;">已开票金额</span>
+                  <span>
+                    <span class="invoice-payment-money">{{moneyFormatter(contractInfo.moneyData?.haveInvoiceMoney)}}</span>
+                  ({{ contractInfo.currencyUnit }})
+                  </span>
+                  <el-icon size="16px">
+                    <svg-Icon name="svgIcon-common-arrow_right" style="transition: all 0.1s ease;"
+                    :style="{transform:isIandPExpand.haveInvoice?'rotate(90deg)':''}"></svg-Icon>
+                  </el-icon>
+                </div>
+                <div class="invoice-payment-money-multiple-body">
+                  <div style="margin-bottom: 16px;">
+                    <span style="margin-right: 20px;">FICC套餐</span>
+                    <span class="invoice-payment-money">{{ moneyFormatter(contractInfo.moneyData?.haveInvoiceMoneyFICC) }}</span>({{ contractInfo.currencyUnit }})
+                  </div>
+                  <div>
+                    <span style="margin-right: 20px;">权益套餐</span>
+                    <span class="invoice-payment-money">{{ moneyFormatter(contractInfo.moneyData?.haveInvoiceMoneyQY) }}</span>({{ contractInfo.currencyUnit }})
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div style="margin-right: 30px;" v-else>已开票金额:
+              <span class="invoice-payment-money">{{moneyFormatter(contractInfo.moneyData?.haveInvoiceMoney)}}</span>
+              ({{ contractInfo.currencyUnit }})
+            </div>
+            <div v-if="contractInfo.showServiceFicc && contractInfo.showServiceQy" style="margin-bottom: 20px;">
+              <div class="invoice-payment-money-multiple" :style="{height:isIandPExpand.waitInvoice?'135px':'59px'}">
+                <div class="invoice-payment-money-multiple-head" @click="isIandPExpand.waitInvoice=!isIandPExpand.waitInvoice">
+                  <span style="margin-right: 20px;">剩余开票金额</span>
+                  <span>
+                    <span class="invoice-payment-money">{{moneyFormatter(contractInfo.moneyData?.waitInvoiceMoney)}}</span>
+                  ({{ contractInfo.currencyUnit }})
+                  </span>
+                  <el-icon size="16px">
+                    <svg-Icon name="svgIcon-common-arrow_right" style="transition: all 0.1s ease;"
+                    :style="{transform:isIandPExpand.waitInvoice?'rotate(90deg)':''}"></svg-Icon>
+                  </el-icon>
+                </div>
+                <div class="invoice-payment-money-multiple-body">
+                  <div style="margin-bottom: 16px;">
+                    <span style="margin-right: 20px;">FICC套餐</span>
+                    <span class="invoice-payment-money">{{ moneyFormatter(contractInfo.moneyData?.waitInvoiceMoneyFICC) }}</span>({{ contractInfo.currencyUnit }})
+                  </div>
+                  <div>
+                    <span style="margin-right: 20px;">权益套餐</span>
+                    <span class="invoice-payment-money">{{ moneyFormatter(contractInfo.moneyData?.waitInvoiceMoneyQY) }}</span>({{ contractInfo.currencyUnit }})
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div v-else>剩余开票金额:
+              <span class="invoice-payment-money">{{moneyFormatter(contractInfo.moneyData?.waitInvoiceMoney)}}</span>
+              ({{ contractInfo.currencyUnit }})
+            </div>
+            <el-button type="primary" style="margin: 0 0 0 20px;" @click="addTableRow('invoice')" 
+            v-if="contractInfo.operationtype=='invoice'&&invoiceForm.invoiceData.length==0">添加开票信息</el-button>
+          </div>
+          <el-form ref="invoiceFormRef" :model="invoiceForm" :disabled="contractInfo.operationtype!='invoice'">
+            <el-table :data="invoiceForm.invoiceData" border v-if="invoiceForm.invoiceData.length>0" style="width: 100%;"> 
+              <el-table-column label="序号" width="80" align="center">
+                <template #default="{row,$index}">
+                  {{$index+1}}
+                </template>
+              </el-table-column>
+              <el-table-column label="套餐类型" width="160" align="center" prop="service_product_id" v-if="sellerListType==3">
+                <template #header>
+                  <span style="color: var(--dangerColor);">*</span>套餐类型
+                </template>
+                <template #default="{row,$index}">
+                  <el-form-item :prop="`invoiceData.${$index}.service_product_id`" :show-message="false" v-if="!row.invoice_id"
+                  :rules="{required:true,message:()=>{ ElMessage.error('套餐类型不能为空')},trigger:'change'}">
+                    <el-select v-model="row.service_product_id" style="width: 124px;" @change="value=> productIdChange(value,'invoice',row)"
+                    placeholder="请选择套餐" filterable>
+                      <el-option label="FICC套餐" :value="1"></el-option>
+                      <el-option label="权益套餐" :value="2"></el-option>
+                    </el-select>
+                  </el-form-item>
+                  <span v-else>{{ row.service_product_id?row.service_product_id==1?'FICC套餐':'权益套餐' : '--' }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="开票金额" width="160" show-overflow-tooltip  align="center" prop="origin_amount">
+                <template #header>
+                  <span style="color: var(--dangerColor);">*</span>开票金额
+                </template>
+                <template #default="{row,$index}">
+                  <el-form-item :prop="`invoiceData.${$index}.origin_amount`" :show-message="false" v-if="!row.invoice_id"
+                  :rules="{required:true,message:()=>{ ElMessage.error('开票金额不能为空')},trigger:'blur'}">
+                    <label :for="'invoice'+$index+'origin_amount'" style="cursor: pointer;" 
+                    :style="{color:row.origin_amount?'var(--secondaryTextColor)':'var(--hitTextColorOne)'}"
+                    v-show="row.amountDomType=='text'" @click="iandPInput(row,'amountDomType')">
+                      {{ row.origin_amount ? parseFloat(row.origin_amount).toFixed(2): '单击此处输入金额'}}
+                    </label>
+                    <el-input v-model.trim="row.origin_amount" :id="'invoice'+$index+'origin_amount'" style="width: 124px;" 
+                    v-show="row.amountDomType=='input'" @blur="iandPAmountBlur(row)"
+                      placeholder="请输入金额" @input="(e)=>moneyChange('invoice',e,$index,row)"></el-input>
+                  </el-form-item>
+                  <span  v-else>{{ row.origin_amount.toFixed(2)}}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="换算金额(元)" show-overflow-tooltip width="160" align="center" prop="amount">
+                <template #default="{row,$index}">
+                  <span v-if="row.amount">{{ row.amount.toFixed(2)}}</span>
+                  <span v-else style="color: var(--hitTextColorOne);">开票金额为空</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="开票日" width="120" align="center" prop="invoice_date">
+                <template #header>
+                  <span style="color: var(--dangerColor);">*</span>开票日
+                </template>
+                <template #default="{row,$index}" >
+                  <el-form-item :prop="`invoiceData.${$index}.invoice_date`" :show-message="false" v-if="!row.invoice_id"
+                  :rules="{required:true,message:()=>{ ElMessage.error('请选择开票日')},trigger:'change'}">       
+                    <el-date-picker v-model="row.invoice_date" style="width: 124px;"
+                    placeholder="请选择日期" value-format="YYYY-MM-DD" :clearable="false" ></el-date-picker>
+                  </el-form-item>
+                  <span v-show="row.invoice_id">{{ row.invoice_date || '--' }}</span>
+                </template>
+              </el-table-column >
+              <el-table-column label="销售" width="120" align="center" prop="seller_id">
+                <template #header>
+                  <span style="color: var(--dangerColor);">*</span>销售
+                </template>
+                <template #default="{row,$index}">
+                  <el-form-item :prop="`invoiceData.${$index}.seller_id`" :show-message="false" v-if="!row.invoice_id"
+                  :rules="{required:true,message:()=>{ ElMessage.error('销售不能为空')},trigger:'change'}">
+                    <el-select v-model="row.seller_id" style="width: 124px;" :ref='`invoiceData-service_product_id${$index}`'
+                    placeholder="请选择销售" filterable v-if="row.service_product_id==1">
+                      <el-option :label="item.seller_name" :value="item.seller_id" 
+                      v-for="item in contractInfo.sellerInvoiceListF" :key="item.seller_id">
+                      </el-option>
+                    </el-select>
+                    <el-select v-model="row.seller_id" style="width: 124px;" :ref='`invoiceData-service_product_id${$index}`'
+                    placeholder="请选择销售" filterable v-else-if="row.service_product_id==2">
+                      <el-option :label="item.seller_name" :value="item.seller_id" 
+                      v-for="item in contractInfo.sellerInvoiceListQ" :key="item.seller_id">
+                      </el-option>
+                    </el-select>
+                    <el-select v-model="row.seller_id" style="width: 124px;" :ref='`invoiceData-service_product_id${$index}`'
+                    placeholder="请选择销售" v-else
+                      @visible-change="selectVisible">
+                    </el-select>
+                  </el-form-item>
+                  <span v-else>{{ row.seller_name || '--' }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="备注" width="160" align="center" prop="remark" show-overflow-tooltip >
+                <template #default="{row,$index}">
+                  <el-form-item  v-if="!row.invoice_id">             
+                    <label :for="'invoice'+$index+'remark'" style="cursor: pointer;" v-show="row.remarkDomType=='text'" 
+                    :style="{color:row.remark?'var(--secondaryTextColor)':'var(--hitTextColorOne)'}"
+                    @click="iandPInput(row,'remarkDomType')">{{ row.remark || '单击此处输入备注'}}</label>
+                    <el-input v-model="row.remark" :id="'invoice'+$index+'remark'" style="width: 124px;" placeholder="请输入备注" 
+                    v-show="row.remarkDomType=='input'" @blur="row.remarkDomType='text'"/>
+                  </el-form-item>
+                  <span v-else>{{row.remark || '--'}}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" width="120" align="center" v-if="contractInfo.operationtype=='invoice'">
+                <template #default="{row,$index,column}" >
+                  <span class="table-operation-button" v-show="$index==invoiceForm.invoiceData.length-1" 
+                  @click="addRow('invoice',row,$index)" style="margin-right: 10px;">添加</span>
+                  <span class="table-operation-button" style="color: var(--dangerColor);" 
+                  @click="deleteRow('invoice',row,$index)">删除</span>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-form>
+        </div>
+      </div>
+    </div>
+</template>
+  
+<style lang="scss" scoped>
+  
+</style>
+<style lang="scss">
+#contractProgress-InvoiceAndPayment{
+  .el-table{
+    .cell{
+      padding: 0 10px;
+    }
+  }
+  .el-input__wrapper{
+    width: 100px;
+  }
+  .el-form-item{
+    margin-bottom: 0;
+    .el-form-item__content{
+      justify-content: center;
+    }
+  }
+}
+</style>

File diff suppressed because it is too large
+ 51 - 1017
src/views/financialManagement/contractProgress.vue


+ 3 - 3
src/views/financialManagement/financialList.vue

@@ -251,13 +251,13 @@ const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
                   <el-button class="element-common-button" size="large">下载导入模版</el-button>
                   <template #dropdown>
                     <el-dropdown-menu>
-                      <a href="https://hzchart.oss-cn-shanghai.aliyuncs.com/static/fms/excel/财务列表-导入模版(新).xlsx" download>
+                      <a href="https://hzchart.oss-cn-shanghai.aliyuncs.com/static/fms/excel/财务列表FICC&权益.xlsx" download>
                         <el-dropdown-item>FICC&权益</el-dropdown-item>
                       </a>
-                      <a href="https://hzchart.oss-cn-shanghai.aliyuncs.com/static/fms/excel/财务列表-导入模版(新).xlsx" download>
+                      <a href="https://hzchart.oss-cn-shanghai.aliyuncs.com/static/fms/excel/财务列表FICC.xlsx" download>
                         <el-dropdown-item>FICC</el-dropdown-item>
                       </a>
-                      <a href="https://hzchart.oss-cn-shanghai.aliyuncs.com/static/fms/excel/财务列表-导入模版(新).xlsx" download>
+                      <a href="https://hzchart.oss-cn-shanghai.aliyuncs.com/static/fms/excel/财务列表权益.xlsx" download>
                         <el-dropdown-item>权益</el-dropdown-item>
                       </a>
                     </el-dropdown-menu>

+ 109 - 238
src/views/financialManagement/registrationPre.vue

@@ -5,6 +5,9 @@ import {getSellerList} from '@/api/crm'
 import {getCurrencyList} from '@/api/common'
 import {getServiceList,getPreRegistrationList,preRegistrationAdd,
   preRegistrationDetail,preRegistrationEdit,preRegistrationDelete,preRegistrationSave} from '@/api/financialMana'
+import serviceCascader from './composition/serivceCascader.js'
+// 套餐的composition
+const serviceComposition = serviceCascader()
 
 const router = useRouter()
 
@@ -18,7 +21,6 @@ const router = useRouter()
     tableData:[],
     total:0,
   })
-  
   // -----------------弹窗
   const registrationPreForm=ref(null)
 
@@ -40,7 +42,6 @@ const router = useRouter()
           currency_unit:'CNY',
           register_date:'',
           seller_id:'',
-          seller_name:'',
           remark:''
         }
       ],
@@ -77,14 +78,70 @@ const serviceTypePre=ref(3)
 // 获取套餐列表
 const getServicesListFun=()=>{
   getServiceList().then(res=>{
-    servicesList.value=res.data||[]
+    let tempData = res.data||[]
+    // 给最外成添加service_template_id,防止级联选择器乱跳
+    servicesList.value=tempData.map((item,index) =>{
+      // if(item.service_template_id) 
+      return item
+      // item.service_template_id=999999+index
+      // return item
+    })
+  })
+}
+// 提交表单之前的套餐数据处理
+const serivcesDataHandler=(cascaderRef)=>{
+  // 处理选中套餐的数据格式
+  let servicesParam=[]
+  let FICCSmallServiceIds=[]
+  cascaderRef.getCheckedNodes().map(node=>{
+    let nodeData = node.data
+    if(!nodeData.service_template_id) return
+    if(nodeData.product_id==2){
+      // 权益 - 直接push每一个级别的对象
+      servicesParam.push({service_template_id:nodeData.service_template_id,title:nodeData.title})
+    }else{
+      // 90000往上都是FICC小套餐品种的Id,特殊处理
+      if(nodeData.service_template_id>=90000){
+        // 真正拿取的是chart_permission_id
+        if(serviceComposition.FICCSmallServiceId.includes(nodeData.service_template_id)) FICCSmallServiceIds.push(nodeData.chart_permission_id)
+      }else{
+        if(nodeData.service_template_id==2){
+          // 小套餐
+          servicesParam.push({service_template_id:nodeData.service_template_id,
+            title:nodeData.title,value:nodeData.value,chart_permission_ids:''})
+        }else{
+          servicesParam.push({service_template_id:nodeData.service_template_id,title:nodeData.title,value:nodeData.value})
+        }
+      }
+    }
   })
+  for (let i = 0; i < servicesParam.length; i++) {
+    const element = servicesParam[i];
+    if(element.service_template_id==2){
+      element.chart_permission_ids=FICCSmallServiceIds.join(',')
+      break;
+    }
+  }
+  return servicesParam
 }
 
 // 套餐类型更改
 const productIdChange=(value,item)=>{
   item.seller_id=''
 }
+// 级联选择器套餐改变
+const servicesChange=(value,type)=>{
+  let cascaderRef = type==1?selectServicesRef.value:selectServicesPreRef.value
+  let returnItem=serviceComposition.servicesChange(servicesList.value,value,cascaderRef)
+  if(type == 1){
+    serviceType.value = returnItem.typeValue
+    dialog.registrationPreForm.services= dialog.selectServices=returnItem.backValue
+  }else{
+    serviceTypePre.value = returnItem.typeValue
+    preDialog.preForm.services=preDialog.selectServices=returnItem.backValue
+  }
+  console.log(value,returnItem.backValue);
+}
 
 watch(serviceType,(newVal)=>{
   if(newVal==1 || newVal==2){
@@ -108,15 +165,15 @@ watch(serviceTypePre,(newVal)=>{
 // -----------------------------------------套餐部分 - 结束
 // -----------------------------------------销售部分 - 开始
 //FICC的销售列表
-const sellerInvoiceListF=ref(null)
+let sellerInvoiceListF=[]
 //权益的销售列表
-const sellerInvoiceListQ=ref(null)
+let sellerInvoiceListQ=[]
 
 //获取销售列表
 const getSellerListFun=()=>{
   getSellerList().then(res=>{
-    sellerInvoiceListF.value = res.data.ficc_list || []
-    sellerInvoiceListQ.value = res.data.rai_list || []
+    sellerInvoiceListF = res.data.ficc_list || []
+    sellerInvoiceListQ = res.data.rai_list || []
   })
 }
 
@@ -165,7 +222,6 @@ const addRegistrationPreRow=()=>{
     currency_unit:'CNY',
     register_date:'',
     seller_id:'',
-    seller_name:'',
     remark:''
   })
 }
@@ -194,11 +250,17 @@ const editRegistrationPre=(row)=>{
     dialog.registrationPreForm.services=res.data.services || []
     dialog.validityDate=[res.data.start_date,res.data.end_date]
     dialog.selectServices = [...res.data.services.map(item => item.service_template_id),...res.data.serviceTemplateIds]
+    dialog.registrationPreForm.IorPInfo.forEach(item =>{
+      if(item.service_product_id==0){
+        // 不能为零,否则回显
+        item.service_product_id=''
+      }
+    })
     dialog.registrationType=row.invoice_type==3?'开票':'到款'
     dialog.title=`编辑${dialog.registrationType}预登记`
     dialog.registrationPreShow=true
     nextTick(()=>{
-      servicesChange(dialog.selectServices,1)
+      serviceType.value=serviceComposition.servicesChange(servicesList.value,dialog.selectServices,selectServicesRef.value).typeValue
     })
   })
 }
@@ -206,6 +268,8 @@ const editRegistrationPre=(row)=>{
 //弹窗关闭动画 回调
 const dialogClosed=()=>{
   dialog.registrationPreForm.company_name=''
+  dialog.registrationPreForm.contract_register_id=''
+  dialog.registrationPreForm.pre_register_id=''
   dialog.registrationPreForm.services=[]
   dialog.registrationPreForm.IorPInfo=[
     {
@@ -214,13 +278,12 @@ const dialogClosed=()=>{
       currency_unit:'CNY',
       register_date:'',
       seller_id:'',
-      seller_name:'',
       remark:''
     }
   ]
   dialog.validityDate=[]
   dialog.selectServices=[]
-  resetDisable(servicesList.value)
+  serviceComposition.resetDisable(servicesList.value)
   setTimeout(()=>{
     registrationPreForm.value.clearValidate()
   },0)
@@ -228,38 +291,7 @@ const dialogClosed=()=>{
 
 // 提交
 const submitForm=()=>{
-  // 处理选中套餐的数据格式
-  let servicesParam=[]
-  let FICCSmallServiceIds=[]
-  selectServicesRef.value.getCheckedNodes().map(node=>{
-    let nodeData = node.data
-    if(!nodeData.service_template_id) return
-    if(nodeData.product_id==2){
-      // 权益
-      servicesParam.push({service_template_id:nodeData.service_template_id,title:nodeData.title})
-    }else{
-      // 90000往上都是FICC小套餐品种的Id,特殊处理
-      if(nodeData.service_template_id>=90000){
-        // 真正拿取的是chart_permission_id
-        if(FICCSmallServiceId.includes(nodeData.service_template_id)) FICCSmallServiceIds.push(nodeData.chart_permission_id)
-      }else{
-        if(nodeData.service_template_id==2){
-          // 小套餐
-          servicesParam.push({service_template_id:nodeData.service_template_id,
-            title:nodeData.title,value:nodeData.value,chart_permission_ids:''})
-        }else{
-          servicesParam.push({service_template_id:nodeData.service_template_id,title:nodeData.title,value:nodeData.value})
-        }
-      }
-    }
-  })
-  for (let i = 0; i < servicesParam.length; i++) {
-    const element = servicesParam[i];
-    if(element.service_template_id==2){
-      element.chart_permission_ids=FICCSmallServiceIds.join(',')
-      break;
-    }
-  }
+  const serviceData=serivcesDataHandler(selectServicesRef.value)
   let params={
     contract_register_id:dialog.registrationPreForm.contract_register_id||0,
     pre_register_id:dialog.registrationPreForm.pre_register_id||0,
@@ -268,8 +300,9 @@ const submitForm=()=>{
     start_date:dialog.registrationPreForm.start_date,
     end_date:dialog.registrationPreForm.end_date,
     list:dialog.registrationPreForm.IorPInfo,
-    services:servicesParam,
+    services:serviceData,
   }
+  // 化''为0
   params.list.forEach(item =>{
     item.amount = parseFloat(item.amount)
     item.seller_id=item.seller_id||0
@@ -362,8 +395,27 @@ const preIorP=(row)=>{
     preDialog.selectServices = [...res.data.services.map(item => item.service_template_id),...res.data.serviceTemplateIds]
     preDialog.title=row.invoice_type==3?'预到款':'预开票'
     preDialog.show=true
+    
     nextTick(()=>{
-      servicesChange(preDialog.selectServices,2)
+      if(preDialog.title=='预开票'){
+        // 预开票需要回显套餐信息
+        serviceTypePre.value=serviceComposition.servicesChange(servicesList.value,preDialog.selectServices,selectServicesPreRef.value).typeValue
+      }else{
+        // 预到款不用回显套餐信息
+        let checkedNodes=selectServicesPreRef.value.getCheckedNodes()
+
+        // 套餐类型
+        let hasFICCService = checkedNodes.some(Node => Node.data.product_id == 1)
+        let hasQYService = checkedNodes.some(Node => Node.data.product_id == 2)
+
+        if(hasFICCService&&hasQYService || !(hasFICCService||hasQYService)){
+          serviceTypePre.value=3
+        }else if(hasFICCService){
+          serviceTypePre.value=1
+        }else{
+          serviceTypePre.value=2
+        }
+      }
     })
   })
 }
@@ -371,38 +423,13 @@ const preIorP=(row)=>{
 const submitPreForm=()=>{
     preFormRef.value.validate((valid)=>{
     if(valid){
-      // console.log(preDialog.preForm);
-          // 处理选中套餐的数据格式
-      let servicesParam=[]
-      let FICCSmallServiceIds=[]
-      selectServicesPreRef.value.getCheckedNodes().map(node=>{
-        let nodeData = node.data
-        if(!nodeData.service_template_id) return
-        if(nodeData.product_id==2){
-          // 权益
-          servicesParam.push({service_template_id:nodeData.service_template_id,title:nodeData.title})
-        }else{
-          // 90000往上都是FICC小套餐品种的Id,特殊处理
-          if(nodeData.service_template_id>=90000){
-            // 真正拿取的是chart_permission_id
-            if(FICCSmallServiceId.includes(nodeData.service_template_id)) FICCSmallServiceIds.push(nodeData.chart_permission_id)
-          }else{
-            if(nodeData.service_template_id==2){
-              // 小套餐
-              servicesParam.push({service_template_id:nodeData.service_template_id,
-                title:nodeData.title,value:nodeData.value,chart_permission_ids:''})
-            }else{
-              servicesParam.push({service_template_id:nodeData.service_template_id,title:nodeData.title,value:nodeData.value})
-            }
-          }
-        }
-      })
-      for (let i = 0; i < servicesParam.length; i++) {
-        const element = servicesParam[i];
-        if(element.service_template_id==2){
-          element.chart_permission_ids=FICCSmallServiceIds.join(',')
-          break;
-        }
+      let serviceData;
+      if(preDialog.title=='预开票'){
+        // 预开票可能会修改套餐,需要重组套餐数据
+        serviceData=serivcesDataHandler(selectServicesPreRef.value)
+      }else{
+        // 预到款不需要重组套餐数据
+        serviceData=preDialog.preForm.services
       }
       preDialog.preForm.amount = parseFloat(preDialog.preForm.amount)
       let params={
@@ -421,7 +448,7 @@ const submitPreForm=()=>{
           seller_id:preDialog.preForm.seller_id||0,
           service_product_id:preDialog.preForm.service_product_id,
         }],
-        services:servicesParam||[]
+        services:serviceData
       }
       preRegistrationSave(params).then(res=>{
         preDialog.show=false
@@ -445,7 +472,7 @@ const preDialogClosed=()=>{
   },
   preDialog.validityDate=[]
   preDialog.selectServices=[]
-  resetDisable(servicesList.value)
+  serviceComposition.resetDisable(servicesList.value)
   setTimeout(()=>{
     preFormRef.value.clearValidate()
   },0)
@@ -478,163 +505,6 @@ const currencyUnitChange=(value)=>{
 }
 
 
-let hasQyBigOne=false
-let hasQyBigTwo=false
-let hasQySmall=false
-let hasFiccSmall=false
-let hasFiccBig=false
-// 小品种的service_template_id
-const FICCSmallServiceId=[90001,90016,90103,90138,90142,90109,90110,90114,90107,90111,90108,
-  90118,90239,90205,90212,90224,90224,90226,90302,90317,90325,90340]
-
-// 套餐选择更改
-const servicesChange=(value,type)=>{
-  // console.log(value,type);
-  // type---> 1-预登记弹窗 2-预开票/预到款弹窗
-
-  // 权益大套餐/45万
-  hasQyBigOne=false
-  // 权益大套餐/70万
-  hasQyBigTwo=false
-  // 11-权益大套餐/45万 12-权益大套餐/70万 单选
-  if(value.includes(11) || value.includes(12)){
-    value=value.filter(it => ![19,20,21,22,23,24,25,26,27].includes(it))
-    if(value.includes(11)){
-      value= value.filter(it => it!=12)
-      hasQyBigOne=true
-    }else if(value.includes(12)){
-      hasQyBigTwo=true
-    }
-  }
-  // FICC大套餐
-  if(value.includes(1)){
-    value=value.filter(it => !FICCSmallServiceId.includes(it))
-  }if(value.includes(2)){
-    // FICC小套餐
-    value=value.filter(it => it!=1)
-  }
-// console.log(value);
-  // 行业套餐
-  hasQySmall=false
-  if(value.some(it => [19,20,21,22,23,24,25,26,27].includes(it))){
-    hasQySmall=true
-  }
-
-  // FICC大套餐
-  hasFiccBig=false
-  // FICC小套餐
-  hasFiccSmall=false
-  if(value.some(it => FICCSmallServiceId.includes(it))){
-    hasFiccSmall=true
-  }
-  if(value.includes(1)){
-    hasFiccBig=true
-  }
-  let checkedNodes;
-  if(type==1){
-    checkedNodes= selectServicesRef.value.getCheckedNodes()
-  }else{
-    checkedNodes= selectServicesPreRef.value.getCheckedNodes()
-  }
-  // 套餐类型
-  let hasFICCService = checkedNodes.some(Node => Node.data.product_id == 1)
-  let hasQYService = checkedNodes.some(Node => Node.data.product_id == 2)
-  if(hasFICCService&&hasQYService || !(hasFICCService||hasQYService)){
-    type==1?serviceType.value=3:serviceTypePre.value=3
-  }else if(hasFICCService){
-    type==1?serviceType.value=1:serviceTypePre.value=1
-  }else{
-    type==1?serviceType.value=2:serviceTypePre.value=2
-  }
-  // console.log(checkedNodes);
-  
-  setDisable(servicesList.value)
-  if(type==1){
-    dialog.registrationPreForm.services= dialog.selectServices= value
-  }else{
-    preDialog.preForm.services=preDialog.selectServices=value
-  }
-  
-}
-// 套餐禁用处理
-const setDisable=(List)=>{
-  List.forEach(element => {
-    if(!element.service_template_id){
-      setDisable(element.children)
-      return 
-    }
-    if(hasQyBigOne||hasQyBigTwo){
-      // 权益大套餐选中了,禁用行业套餐
-      if(element.service_template_id==13){
-        element.disabled=true
-      }
-      if(hasQyBigOne){
-        // 权益大套餐-45万选中了,禁用70万
-        if(element.service_template_id==12){
-          element.disabled=true
-        }
-      }else{
-        // 权益大套餐-70万选中了,禁用45万
-        if(element.service_template_id==11){
-          element.disabled=true
-        }
-      }
-    }else{
-      // 权益大套餐没选中
-      if([11,12,13].includes(element.service_template_id)){
-        element.disabled=false
-      }
-    }
-    // 行业套餐选中了,禁用权益大套餐
-    if(hasQySmall){
-      if(element.service_template_id==10){
-        element.disabled=true
-      }
-    }else{
-      if(element.service_template_id==10){
-        element.disabled=false
-      }
-    }
-    // FICC大套餐选中了,禁用FICC小套餐
-    if(hasFiccBig){
-      if(element.service_template_id==2){
-        element.disabled=true
-      }
-    }else{
-      if(element.service_template_id==2){
-        element.disabled=false
-      }
-    }
-    // FICC小套餐选中了,禁用FICC大套餐
-    if(hasFiccSmall){
-      if(element.service_template_id==1){
-        element.disabled=true
-      }
-    }else{
-      if(element.service_template_id==1){
-        element.disabled=false
-      }
-    }
-    if(element.children){
-      setDisable(element.children)
-    }
-  });
-}
-
-// 重置套餐禁用状态
-const resetDisable=(List)=>{
-  List.forEach(element => {
-    if(!element.service_template_id){
-      resetDisable(element.children)
-      return 
-    }
-    element.disabled=false
-    if(element.service_template_id==10){
-      resetDisable(element.children)
-    }
-  });
-}
-
 // 切换每页的数量
 const changePageSize=(pageSize)=>{
   placemenetPre.searchParams.page_size = pageSize
@@ -730,7 +600,7 @@ placementPreList()
         </el-table-column>
         <el-table-column label="约定有效期" width="210" prop="start_date">
           <template #default="{row}">
-            {{(row.start_date+' 至 '+row.end_date)}}
+            {{row.start_date?(row.start_date+' 至 '+row.end_date):''}}
           </template>
         </el-table-column>
         <el-table-column label="套餐" prop="services" show-overflow-tooltip></el-table-column>
@@ -894,7 +764,8 @@ placementPreList()
             </el-date-picker>
         </el-form-item>
         <el-form-item label="套餐" prop="services" v-show="preDialog.title=='预开票'">
-          <el-cascader filterable :options="servicesList" placeholder="请选择套餐" @change="(value)=>servicesChange(value,2)"
+          <el-cascader filterable :options="servicesList" placeholder="请选择套餐" 
+          @change="(value)=>servicesChange(value,2)"
             :show-all-levels="true" v-model="preDialog.selectServices" :clearable="false" ref="selectServicesPreRef"
             :props="{multiple:true,label:'title',value:'service_template_id',emitPath:false}" collapse-tags collapse-tags-tooltip
             key="preSeriveces" style="min-width: 286px;z-index: 100;">

+ 123 - 0
src/views/financialManagement/style/contractRegistration.scss

@@ -0,0 +1,123 @@
+.info-row{
+  padding: 48px 2vw 30px 0;
+  .info-row-title{
+    font-weight: 500;
+    font-size: 14px;
+    color: #333333;
+    font-weight: bold;
+    padding-left: 16px;
+    position: relative;
+    &::after{
+      content: '';
+      height: 22px;
+      width: 4px;
+      background-color: $themeColor;
+      position: absolute;
+      top: -1.5px;
+      left: 0;
+    }
+  }
+  .info-row-services{
+    min-width: 560px;
+    padding-left: 80px;
+    margin-top: 30px;
+    .info-row-services-header{
+      display: flex;
+      align-items: center;
+      margin-bottom: 20px;
+      span{
+        white-space: nowrap;
+        font-weight: bold;
+        font-size: 14px;
+        color: $mainTextColor;
+        margin-right: 20px;
+      }
+    }
+  }
+
+  .contractInfo-form{
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-between;
+  }
+  // 套餐信息
+  .info-service-box{
+    margin-right: -40px;
+    display: flex;
+    align-items: center;
+    flex-wrap: wrap;
+    .service-small{
+      display: inline-flex;
+      align-items: center;
+      margin-right: 30px;
+      .select-variety{
+        font-size: 14px;
+        cursor: pointer;
+        color: $themeColor;
+        margin-left: 12px;
+        line-height: 14px;
+      }
+    }
+  }
+  .info-service-remark{
+    display: flex;
+    padding-left: 80px;
+    align-items: center;
+    margin-top: 20px;
+  }
+  .remark{
+    span{
+      font-weight: 400;
+      font-size: 14px;
+      color: #333333;
+      margin-right: 20px;
+      white-space: nowrap;
+    }
+  }
+  // 备注
+  .info-row-remark{
+    display: flex;
+    padding-left: 80px;
+    align-items: center;
+  }
+  // 开票信息
+  .info-row-invoice-payment{
+    padding-left: 80px;
+    display: flex;
+    flex-direction: column;
+    align-items: flex-start;
+    .invoice-payment-title{
+      min-width: 560px;
+      font-size: 14px;
+      color: #333333;
+      display: flex;
+      margin: 26px 0 20px;
+      .invoice-payment-money-multiple{
+        border: 1px solid #DCDFE6;
+        border-radius: 4px;
+        overflow: hidden;
+        padding: 0 20px;
+        transition: all 0.1s ease-in;
+        .invoice-payment-money-multiple-head{
+          display: flex;
+          align-items: center;
+          padding: 20px 0;
+          cursor: pointer;
+        }
+        .invoice-payment-money-multiple-body{
+          box-sizing: border-box;
+          padding-bottom: 20px ;
+        }
+      }
+      .invoice-payment-money{
+        font-weight: 600;
+        font-size: 14px;
+        color: var(--dangerColor);
+      }
+    }
+    .table-operation-button{
+      cursor: pointer;
+      color: $themeColor;
+    }
+  }
+}

Some files were not shown because too many files changed in this diff