Browse Source

合并2.5 解决冲突

hbchen 2 years ago
parent
commit
574ffc1fca

+ 110 - 1
src/api/financialMana.js

@@ -310,4 +310,113 @@ export function prePlacementDelete(data) {
      method:'post',
      method:'post',
      data
      data
  })
  })
-}
+}
+// -----------------预登记
+// 获取预登记列表
+ /**
+  * 
+  * @param data.page_size - 每页数据量 - 必填
+  * @param data.current - 页码 - 必填
+  * @param data.keyword - 关键词-客户姓名 - 非必填
+ * @returns 
+ */
+export function getPreRegistrationList(data) {
+  return request({
+      url:'/contract/pre_register/list',
+      method:'get',
+      params:data
+  })
+}
+ // 新增预登记
+ /**
+  * 
+  * @param {
+ * contract_register_id - 到登记ID
+ * company_name - 客户名称
+ * register_type - 预登记类型 3-开票预登记 4-到款预登记 
+ * start_date - 约定开始日期
+ * end_date - 约定结束日期
+ * lists - 开票/到款列表 
+ * services - 套餐列表
+ * } data 
+ * @returns 
+ */
+export function preRegistrationAdd(data) {
+ return request({
+     url:'/contract/pre_register/add',
+     method:'post',
+     data
+ })
+}
+ // 预登记详情
+ /**
+  * 
+  * @param {
+ * invoice_id contract_register_id
+ * } data 
+ * @returns 
+ */
+export function preRegistrationDetail(data) {
+ return request({
+     url:'/contract/pre_register/detail',
+     method:'post',
+     data
+ })
+}
+ // 编辑预登记
+ /**
+  * 
+  * @param {
+ * contract_register_id - 到登记ID
+ * company_name - 客户名称
+ * register_type - 预登记类型 3-开票预登记 4-到款预登记 
+ * start_date - 约定开始日期
+ * end_date - 约定结束日期
+ * lists - 开票/到款列表 
+ * services - 套餐列表
+ * } data 
+ * @returns 
+ */
+export function preRegistrationEdit(data) {
+ return request({
+     url:'/contract/pre_register/edit',
+     method:'post',
+     data
+ })
+}
+ // 预开票/预到款保存
+ /**
+  * 
+  * @param {
+ * contract_register_id - 到登记ID
+ * company_name - 客户名称
+ * register_type - 预登记类型 3-开票预登记 4-到款预登记 
+ * start_date - 约定开始日期
+ * end_date - 约定结束日期
+ * lists - 开票/到款列表 
+ * services - 套餐列表
+ * } data 
+ * @returns 
+ */
+export function preRegistrationSave(data) {
+ return request({
+     url:'/contract/pre_register/save',
+     method:'post',
+     data
+ })
+}
+ // 删除预登记
+ /**
+  * 
+  * @param {
+ * invoice_id contract_register_id arrive_id pre_register_id
+ * } data 
+ * @returns 
+ */
+export function preRegistrationDelete(data) {
+ return request({
+     url:'/contract/pre_register/del',
+     method:'post',
+     data
+ })
+}

+ 4 - 0
src/assets/svg-icons/common/add.svg

@@ -0,0 +1,4 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M7.5 11V8.5H5V7.5H7.5V5H8.5V7.5H11V8.5H8.5V11H7.5Z" fill="currentColor"/>
+<path d="M3 14C2.44772 14 2 13.5523 2 13V3C2 2.44771 2.44772 2 3 2H13C13.5523 2 14 2.44772 14 3L14 13C14 13.5523 13.5523 14 13 14L3 14ZM3 13L13 13L13 3L3 3L3 13Z" fill="currentColor"/>
+</svg>

+ 70 - 5
src/styles/main.scss

@@ -86,7 +86,72 @@ div::-webkit-scrollbar-corner {
   font-size: 16px;
   font-size: 16px;
   width: 130px;
   width: 130px;
 }
 }
-
+// 主题按钮 - 大
+.main-button-large{
+  font-size: 14px;
+  min-width: 118px;
+  height: 40px;
+  border-radius: 4px;
+}
+// 主题按钮 - 中
+.main-button-medium{
+  font-size: 14px;
+  min-width: 120px;
+  height: 36px;
+  border-radius: 4px;
+}
+// 主题按钮 - 小
+.main-button-small{
+  font-size: 14px;
+  min-width: 80px;
+  height: 36px;
+  border-radius: 4px;
+}
+// 普通按钮 - 大
+.common-button-large{
+  font-size: 14px;
+  min-width: 118px;
+  height: 40px;
+  border-radius: 4px;
+  border: none;
+  background-color: #F5F7FA;
+  color: #333333;
+  &:hover{
+    background-color: #E9EBED;
+    color: unset;
+    border-color: unset;
+  }
+}
+// 普通按钮 - 中
+.common-button-medium{
+  font-size: 14px;
+  min-width: 120px;
+  height: 36px;
+  border-radius: 4px;
+  border: none;
+  background-color: #F5F7FA;
+  color: #333333;
+  &:hover{
+    background-color: #E9EBED;
+    color: unset;
+    border-color: unset;
+  }
+}
+// 普通按钮 - 小
+.common-button-small{
+  font-size: 14px;
+  min-width: 80px;
+  height: 36px;
+  border-radius: 4px;
+  border: none;
+  background-color: #F5F7FA;
+  color: #333333;
+  &:hover{
+    background-color: #E9EBED;
+    color: unset;
+    border-color: unset;
+  }
+}
 // 表格没有数据的插槽样式
 // 表格没有数据的插槽样式
 .table-no-data{
 .table-no-data{
   display: flex;
   display: flex;
@@ -205,10 +270,10 @@ div::-webkit-scrollbar-corner {
     font-size: 16px;
     font-size: 16px;
     // font-family: PingFang SC-Medium, PingFang SC;
     // font-family: PingFang SC-Medium, PingFang SC;
     font-weight: 500;
     font-weight: 500;
-    &:first-child{
-      border: 1px solid $themeColor;
-      color: $themeColor;
-    }
+    // &:first-child{
+    //   border: 1px solid $themeColor;
+    //   color: $themeColor;
+    // }
   }
   }
   .el-button + .el-button{
   .el-button + .el-button{
     margin-left: 20px;
     margin-left: 20px;

+ 2 - 1
src/views/Login.vue

@@ -41,9 +41,10 @@
 					is_remember:login.checked
 					is_remember:login.checked
 				}
 				}
 				authLogin(params).then(async ({data})=>{
 				authLogin(params).then(async ({data})=>{
-					let {admin_name,change_pwd,real_name,token} = data
+					let {admin_id,admin_name,change_pwd,real_name,token} = data
 					localStorage.setItem('fsms_token',token)
 					localStorage.setItem('fsms_token',token)
 					localStorage.setItem('userInfo',JSON.stringify({
 					localStorage.setItem('userInfo',JSON.stringify({
+						admin_id:admin_id,
 						admin_name:admin_name,
 						admin_name:admin_name,
 						change_pwd:change_pwd,
 						change_pwd:change_pwd,
 						real_name:real_name,
 						real_name:real_name,

+ 120 - 82
src/views/financialManagement/contractProgress.vue

@@ -7,7 +7,7 @@
   import {ElMessage} from 'element-plus'
   import {ElMessage} from 'element-plus'
   import {getSellerList,getContractSearchList,getServiceDetail} from '@/api/crm'
   import {getSellerList,getContractSearchList,getServiceDetail} from '@/api/crm'
   import {getServiceList,registerAdd,registerDetail,registerEdit,registerInvoice,
   import {getServiceList,registerAdd,registerDetail,registerEdit,registerInvoice,
-    registerPayment,contractRegisterCheck} from '@/api/financialMana'
+    registerPayment,contractRegisterCheck,preRegistrationDetail} from '@/api/financialMana'
   import {getCurrencyList} from '@/api/common'
   import {getCurrencyList} from '@/api/common'
   import scrollableSelect from '@/components/scrollable-select/index.vue'
   import scrollableSelect from '@/components/scrollable-select/index.vue'
 
 
@@ -23,7 +23,11 @@
 
 
   const contractSourceArray=['非CRM合同导入','CRM合同导入']
   const contractSourceArray=['非CRM合同导入','CRM合同导入']
   const contractStatusArray=[{id:1,label:"已审批"},{id:2,label:"单章寄出"},{id:3,label:"已签回"},{id:4,label:"已终止"},{id:5,label:"邮件备案"}]
   const contractStatusArray=[{id:1,label:"已审批"},{id:2,label:"单章寄出"},{id:3,label:"已签回"},{id:4,label:"已终止"},{id:5,label:"邮件备案"}]
-  const contractTypeArray=[{id:1,label:"新签合同"},{id:2,label:"续约合同"},{id:3,label:"代付合同"},{id:4,label:"补充协议"}]
+  // const contractTypeArray=[{id:1,label:"新签合同"},{id:2,label:"续约合同"},{id:3,label:"代付合同"},{id:4,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 operationType=[{op_type:1,label:"合规登记"},{op_type:2,label:"开票登记"},{op_type:3,label:"到款登记"},
   const operationType=[{op_type:1,label:"合规登记"},{op_type:2,label:"开票登记"},{op_type:3,label:"到款登记"},
   {op_type:4,label:"修改合同状态"},{op_type:5,label:"删除合同登记"},{op_type:6,label:"合规编辑"},{op_type:7,label:"预到款登记"}]
   {op_type:4,label:"修改合同状态"},{op_type:5,label:"删除合同登记"},{op_type:6,label:"合规编辑"},{op_type:7,label:"预到款登记"}]
 
 
@@ -43,7 +47,6 @@
     // 合规登记表单
     // 合规登记表单
     form:{
     form:{
       product_ids:'1,2',
       product_ids:'1,2',
-      pre_pay_id:0, //到款预登记Id
       supplement:0, // 是否是补录合同
       supplement:0, // 是否是补录合同
       contract_register_id:'',
       contract_register_id:'',
       crm_contract_id:0,
       crm_contract_id:0,
@@ -63,7 +66,7 @@
       has_payment:'',
       has_payment:'',
       actual_pay_companies:'',
       actual_pay_companies:'',
       relate_contract_code:'',
       relate_contract_code:'',
-      actual_company_name:'',
+      relate_contract_main_code:'',
       sign_date:'',
       sign_date:'',
       agreed_pay_time:'',
       agreed_pay_time:'',
       // 套餐金额
       // 套餐金额
@@ -74,6 +77,8 @@
       service_remark:'',
       service_remark:'',
       remark:""
       remark:""
     },
     },
+    // 合同类型选中
+    contractTypeCheck:[],
     // 货币单位
     // 货币单位
     currencyUnit:'',
     currencyUnit:'',
     rules:{
     rules:{
@@ -95,8 +100,7 @@
         trigger:'blur'
         trigger:'blur'
       }],
       }],
       contract_type:{required:true,message:'合同类型不能为空',trigger:'change'},
       contract_type:{required:true,message:'合同类型不能为空',trigger:'change'},
-      has_payment:{required:true,message:'请选择是否是代付',trigger:'change'},
-      actual_company_name:{required:true,message:'实际使用方不能为空',trigger:'blur'}
+      actual_pay_companies:{required:true,message:'代付方不能为空',trigger:'blur'}
     },
     },
     moneyData:{
     moneyData:{
       // 开票金额
       // 开票金额
@@ -378,12 +382,12 @@
   const previewImage=ref('')
   const previewImage=ref('')
   // 查看套餐报价单 标题
   // 查看套餐报价单 标题
   const previewImageTitle=ref('')
   const previewImageTitle=ref('')
-  // 是否是新公司的复选框勾选判断
-  let is_new_company=ref(false)
-
 
 
   // ------------------ 到款预登记
   // ------------------ 到款预登记
-  let supplementaryId = 0
+  const supplementary_item=reactive({
+    id:0,
+    invoice_type:0
+  })
 
 
 
 
 // -----------------------------监听
 // -----------------------------监听
@@ -438,14 +442,6 @@
   //   contractInfo.moneyData.waitPlacementMoney=Math.round(contractInfo.moneyData.waitPlacementMoney*100)/100
   //   contractInfo.moneyData.waitPlacementMoney=Math.round(contractInfo.moneyData.waitPlacementMoney*100)/100
   // })
   // })
 
 
-  watch(()=>contractInfo.form.new_company,(newVal)=>{
-    if(newVal==1){
-      is_new_company.value=true
-    }else{
-      is_new_company.value=false
-    }
-  })
-
   watch(()=>contractInfo.form.contract_amount,(newVal)=>{
   watch(()=>contractInfo.form.contract_amount,(newVal)=>{
     if(contractInfo.showServiceFicc && contractInfo.showServiceQy){
     if(contractInfo.showServiceFicc && contractInfo.showServiceQy){
       return 
       return 
@@ -546,7 +542,7 @@
       has_payment:'',
       has_payment:'',
       actual_pay_companies:'',
       actual_pay_companies:'',
       relate_contract_code:'',
       relate_contract_code:'',
-      actual_company_name:'',
+      relate_contract_main_code:'',
       sign_date:'',
       sign_date:'',
       agreed_pay_time:'',
       agreed_pay_time:'',
       services:[],
       services:[],
@@ -581,23 +577,24 @@
   }
   }
   // 合同类型改变
   // 合同类型改变
   const contractTypeChange=(value)=>{
   const contractTypeChange=(value)=>{
-    if(value!=3){
-      if(value==1){
-        // 新签 -- 新客户
-        contractInfo.form.new_company = 1
-      }else{
-        // 续约、补充 -- 老客户
-        contractInfo.form.new_company = 0
-      }
-
-      if(value!=4){
-        // 新签、续约
-        contractInfo.form.actual_company_name=''
-      }
-      contractInfo.form.relate_contract_code=''
+    // console.log(value);
+    if(!value) return 
+    contractInfo.form.has_payment = value[0]
+    contractInfo.form.contract_type = value[1]
+    if(contractInfo.form.contract_type==1){
+      // 新签 -- 新客户
+      contractInfo.form.new_company = 1
     }else{
     }else{
-      contractInfo.form.has_payment=''
-      // contractInfo.form.payment_companys=''
+      // 续约、补充 -- 老客户
+      contractInfo.form.new_company = 0
+    }
+    if(contractInfo.form.contract_type==3){
+      // 新签、续约
+      contractInfo.form.relate_contract_main_code=''
+    }
+    if(!contractInfo.form.has_payment){
+      contractInfo.form.relate_contract_code=''
+      contractInfo.form.actual_pay_companies=''
     }
     }
   }
   }
 
 
@@ -620,7 +617,7 @@
         contractInfo.varietyDiaShowQy=openDia&&value
         contractInfo.varietyDiaShowQy=openDia&&value
       // }
       // }
       contractInfo.serviceTypeQy = contractInfo.qYDiaType =  value?type:0
       contractInfo.serviceTypeQy = contractInfo.qYDiaType =  value?type:0
-      console.log(contractInfo.qYDiaType);
+      // console.log(contractInfo.qYDiaType);
     }
     }
   }
   }
   // 选择品种 - ficc
   // 选择品种 - ficc
@@ -723,12 +720,15 @@
     contractInfo.contractValidityDate=[selectItem.start_date,selectItem.end_date]
     contractInfo.contractValidityDate=[selectItem.start_date,selectItem.end_date]
     contractInfo.form.contract_amount=selectItem.price
     contractInfo.form.contract_amount=selectItem.price
     contractInfo.form.seller_id=selectItem.seller_id
     contractInfo.form.seller_id=selectItem.seller_id
-    contractInfo.form.has_payment=selectItem.actual_pay_companies?1:0
+    contractInfo.form.has_payment=selectItem.contract_business_type_int-1
     contractInfo.form.actual_pay_companies=selectItem.actual_pay_companies
     contractInfo.form.actual_pay_companies=selectItem.actual_pay_companies
     contractInfo.form.seller_ids=selectItem.seller_id+''
     contractInfo.form.seller_ids=selectItem.seller_id+''
-    contractInfo.form.contract_type=selectItem.contract_type_key
-    contractInfo.form.relate_contract_code=contractInfo.form.contract_type==3 || contractInfo.form.contract_type==4?selectItem.relate_contract_code:''
-    contractInfo.form.actual_company_name=contractInfo.form.contract_type==3?selectItem.actual_company_name:''
+    // selectItem.contract_type_int 1-新签 2-续约 3-补充
+    // contractInfo.form.contract_type 1-新签 2-续约 4-补充
+    contractInfo.form.contract_type=selectItem.contract_type_int==3?4:selectItem.contract_type_int
+    contractInfo.form.relate_contract_code=contractInfo.form.has_payment?selectItem.relate_contract_code:''
+    contractInfo.form.relate_contract_main_code=contractInfo.form.contract_type==3?selectItem.relate_contract_main_code:''
+    contractInfo.contractTypeCheck = [contractInfo.form.has_payment,contractInfo.form.contract_type]
     if(sellerArray.value.findIndex(item => item.seller_id == selectItem.seller_id)==-1){
     if(sellerArray.value.findIndex(item => item.seller_id == selectItem.seller_id)==-1){
       // 为-1表示原本的销售已离职
       // 为-1表示原本的销售已离职
       contractInfo.form.seller_id = selectItem.seller_name
       contractInfo.form.seller_id = selectItem.seller_name
@@ -741,7 +741,7 @@
     contractInfoForm.value && 
     contractInfoForm.value && 
     contractInfoForm.value.validateField([
     contractInfoForm.value.validateField([
       'contract_code','company_name','contract_type','seller_ids',
       'contract_code','company_name','contract_type','seller_ids',
-      'start_date','contract_amount','relate_contract_code','actual_company_name'
+      'start_date','contract_amount','relate_contract_code','actual_pay_companies'
     ])
     ])
   
   
     contractInfo.showServiceFicc = selectItem.product_id == 1
     contractInfo.showServiceFicc = selectItem.product_id == 1
@@ -1117,6 +1117,11 @@
             },1000)
             },1000)
           })
           })
         }else{
         }else{
+          let params=contractInfo.form
+          if(supplementary_item.id){
+            // 预登记过来的
+            params={...params,contract_register_id:supplementary_item.id}
+          }
           // 新增
           // 新增
           contractRegisterCheck({company_name:contractInfo.form.company_name,
           contractRegisterCheck({company_name:contractInfo.form.company_name,
             start_date:contractInfo.form.start_date,end_date:contractInfo.form.end_date}).then(res=>{
             start_date:contractInfo.form.start_date,end_date:contractInfo.form.end_date}).then(res=>{
@@ -1128,7 +1133,7 @@
                 confirmButtonText: '确定',
                 confirmButtonText: '确定',
                 cancelButtonText: '取消'
                 cancelButtonText: '取消'
               }).then(resp=>{
               }).then(resp=>{
-                registerAdd(contractInfo.form).then(res=>{
+                registerAdd(params).then(res=>{
                   let messageHint=ElMessage.success('合规登记成功')
                   let messageHint=ElMessage.success('合规登记成功')
                   setTimeout(()=>{
                   setTimeout(()=>{
                     messageHint.close()
                     messageHint.close()
@@ -1137,7 +1142,7 @@
                 })
                 })
               }).catch(()=>{})
               }).catch(()=>{})
             }else{
             }else{
-              registerAdd(contractInfo.form).then(res=>{
+              registerAdd(params).then(res=>{
                 let messageHint=ElMessage.success('合规登记成功')
                 let messageHint=ElMessage.success('合规登记成功')
                 setTimeout(()=>{
                 setTimeout(()=>{
                   messageHint.close()
                   messageHint.close()
@@ -1228,11 +1233,6 @@
     contractInfo.varietyDiaType='view'
     contractInfo.varietyDiaType='view'
   }
   }
 
 
-  const isNewChange=(value)=>{
-    contractInfo.form.new_company = value?1:0
-    // console.log(contractInfo.form);
-  }
-
   // 合规登记、开票登记、到款登记 展开收起
   // 合规登记、开票登记、到款登记 展开收起
   const unfoldOrFlod=(index)=>{
   const unfoldOrFlod=(index)=>{
     if(!(isIOrP)) return 
     if(!(isIOrP)) return 
@@ -1275,9 +1275,10 @@
 
 
 // ----------------------created
 // ----------------------created
   // 合规登记Id
   // 合规登记Id
-  contractInfo.form.contract_register_id = parseInt(route.query.complianceId) || ''
+  contractInfo.form.contract_register_id = parseInt(route.query.complianceId) || 0
   // 到款预登记Id
   // 到款预登记Id
-  supplementaryId = parseInt(route.query.supplementaryId) || ''
+  supplementary_item.id = parseInt(route.query.supplementaryId) || 0
+  supplementary_item.invoice_type = parseInt(route.query.invoice_type) || 0
   // complianceId没有,认为是合规登记
   // complianceId没有,认为是合规登记
   contractInfo.operationtype=contractInfo.form.contract_register_id?(route.query.type || 'view'):'compliance'
   contractInfo.operationtype=contractInfo.form.contract_register_id?(route.query.type || 'view'):'compliance'
   
   
@@ -1330,16 +1331,17 @@
         end_date:res.data.end_date,
         end_date:res.data.end_date,
         contract_amount:res.data.contract_amount,
         contract_amount:res.data.contract_amount,
         contract_type:res.data.contract_type,
         contract_type:res.data.contract_type,
-        has_payment:res.data.has_payment,
         actual_pay_companies:res.data.actual_pay_companies,
         actual_pay_companies:res.data.actual_pay_companies,
         relate_contract_code:res.data.relate_contract_code,
         relate_contract_code:res.data.relate_contract_code,
-        actual_company_name:res.data.actual_company_name,
+        relate_contract_main_code:res.data.relate_contract_main_code,
         sign_date:res.data.sign_date,
         sign_date:res.data.sign_date,
         agreed_pay_time:res.data.agreed_pay_time,
         agreed_pay_time:res.data.agreed_pay_time,
         service_remark:res.data.service_remark,
         service_remark:res.data.service_remark,
         remark:res.data.remark,
         remark:res.data.remark,
         contract_source:res.data.contract_source,
         contract_source:res.data.contract_source,
       }
       }
+      // 合同类型回显
+      contractInfo.contractTypeCheck = [res.data.has_payment,res.data.contract_type]
       // 销售
       // 销售
       if(allSellerArray.all_list){
       if(allSellerArray.all_list){
         // 拿到销售列表后才去做处理
         // 拿到销售列表后才去做处理
@@ -1517,18 +1519,60 @@
       contractInfo.moneyData.allInvoiceMoney = contractInfo.moneyData.allPlacementMoney=
       contractInfo.moneyData.allInvoiceMoney = contractInfo.moneyData.allPlacementMoney=
       contractInfo.moneyData.allInvoiceMoneyFICC+contractInfo.moneyData.allInvoiceMoneyQY
       contractInfo.moneyData.allInvoiceMoneyFICC+contractInfo.moneyData.allInvoiceMoneyQY
     })
     })
-  }else if(supplementaryId){
+  }else if(supplementary_item.id){
     // 拿到预登记详情信息
     // 拿到预登记详情信息
-    // console.log(supplementaryId,'supplementaryId');
-    contractInfo.form.pre_pay_id=supplementaryId
-    contractInfo.form.supplement =1
-    contractInfo.form.company_name = route.query.company_name
-    contractInfo.form.currency_unit = route.query.currency_unit
-    contractInfo.form.contract_amount = route.query.placement_amount
-    contractInfo.form.start_date = route.query.start_date
-    contractInfo.form.end_date = route.query.end_date
-    contractInfo.contractValidityDate = [contractInfo.form.start_date,contractInfo.form.end_date]
-    cascaderSelectSeller.value = [parseInt(route.query.seller_id)]
+    // console.log(supplementary_item.id);
+    preRegistrationDetail({contract_register_id:supplementary_item.id,
+    invoice_type:supplementary_item.invoice_type}).then(res=>{
+      if(!res.data) return
+      contractInfo.form.supplement =1
+      contractInfo.form.company_name = res.data.company_name
+      contractInfo.form.currency_unit = res.data.list[0]?.currency_unit
+      contractInfo.form.new_company = parseInt(res.data.new_company)
+      contractInfo.form.start_date = res.data.start_date
+      contractInfo.form.end_date = res.data.end_date
+      contractInfo.contractValidityDate = [contractInfo.form.start_date,contractInfo.form.end_date]
+      res.data.services.map(item =>{
+        if(item.service_template_id==2){
+          // ficc小套餐
+          contractInfo.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
+          })
+          contractInfo.checkedPermission=item.chart_permission_ids.split(',')
+        }else if(item.service_template_id==11 || item.service_template_id==12){
+          // 权益大套餐
+          contractInfo.checkedPermissionQyBig = [item.service_template_id]
+          contractInfo.form.services.push(item)
+        }else if([19,20,21,22,23,24,25,26,27].includes(item.service_template_id)){
+          // 行业套餐
+          contractInfo.checkedPermissionQySmall.push(item.service_template_id)
+          contractInfo.form.services.push(item)
+        }else{
+          contractInfo.form.services.push(item)
+        }
+      })
+      // console.log(contractInfo.form.services);
+      contractInfo.checkedService=res.data.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)
+      contractInfo.checkedServiceQy=res.data.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)
+    })
   }
   }
 </script>
 </script>
 
 
@@ -1573,8 +1617,6 @@
                       <el-form-item label="客户名称" prop="company_name" id="contractInfo-companyName">
                       <el-form-item label="客户名称" prop="company_name" id="contractInfo-companyName">
                         <el-input v-model="contractInfo.form.company_name" 
                         <el-input v-model="contractInfo.form.company_name" 
                         placeholder="请输入客户名称"  />
                         placeholder="请输入客户名称"  />
-                        <el-checkbox v-model="is_new_company" label="新客户" style="margin-left: 20px;min-width: 100px;"
-                        size="large" @change="isNewChange" :disabled="contractInfo.form.contract_type!='' && contractInfo.form.contract_type!=3 "   />
                       </el-form-item>
                       </el-form-item>
                       <el-form-item label="销售" prop="seller_ids">
                       <el-form-item label="销售" prop="seller_ids">
                         <el-cascader v-if="sellerListType==3" filterable :options="sellerArray" placeholder="请选择销售" @change="sellerChange"
                         <el-cascader v-if="sellerListType==3" filterable :options="sellerArray" placeholder="请选择销售" @change="sellerChange"
@@ -1592,7 +1634,7 @@
                         <el-input v-model.trim="contractInfo.form.contract_amount"
                         <el-input v-model.trim="contractInfo.form.contract_amount"
                         placeholder="请输入合同金额"  />
                         placeholder="请输入合同金额"  />
                         <el-select v-model="contractInfo.form.currency_unit" placeholder="请选择货币类型" 
                         <el-select v-model="contractInfo.form.currency_unit" placeholder="请选择货币类型" 
-                        style="margin-left: 20px;" >
+                        style="margin-left: 20px;" :disabled="contractInfo.form.supplement!=0">
                           <el-option v-for="item in currencyList" :key="item.code" :label="item.name" :value="item.code">
                           <el-option v-for="item in currencyList" :key="item.code" :label="item.name" :value="item.code">
                           </el-option>
                           </el-option>
                         </el-select>
                         </el-select>
@@ -1606,32 +1648,28 @@
                         </el-date-picker>
                         </el-date-picker>
                       </el-form-item>
                       </el-form-item>
                       <el-form-item label="合同类型" prop="contract_type">
                       <el-form-item label="合同类型" prop="contract_type">
-                        <el-select v-model="contractInfo.form.contract_type" 
+                        <!-- <el-select v-model="contractInfo.form.contract_type" 
                         placeholder="请选择合同类型" @change="contractTypeChange">
                         placeholder="请选择合同类型" @change="contractTypeChange">
                           <el-option :label="item.label" :value="item.id" v-for="item in contractTypeArray" :key="item.id"></el-option>
                           <el-option :label="item.label" :value="item.id" v-for="item in contractTypeArray" :key="item.id"></el-option>
-                        </el-select>
+                        </el-select> -->
+                        <el-cascader :options="contractTypeArray" placeholder="请选择合同类型" @change="contractTypeChange"
+                        v-model="contractInfo.contractTypeCheck" :clearable="false" key="contractType" >
+                        </el-cascader>
                       </el-form-item>
                       </el-form-item>
-                      <el-form-item label="是否代付" prop="has_payment" v-if="[1,2,4].includes(contractInfo.form.contract_type)">
-                        <el-radio-group v-model="contractInfo.form.has_payment"
-                        style="min-width:286px;width: 15vw;">
-                          <el-radio :label="1">是</el-radio>
-                          <el-radio :label="0">否</el-radio>
-                        </el-radio-group>
+                      <el-form-item label="关联主合同" prop="relate_contract_main_code" 
+                      v-if="contractInfo.form.contract_type==4">
+                        <el-input v-model="contractInfo.form.relate_contract_main_code" 
+                        placeholder="请输入关联主合同" />
                       </el-form-item>
                       </el-form-item>
-                      <el-form-item label="代付方" prop="actual_pay_companies" v-if="contractInfo.form.has_payment==1"
-                      :rules="contractInfo.form.contract_source==0?{required:true,message:'代付方信息不能为空',trigger:'blur'}:{}">
+                      <el-form-item label="代付方" prop="actual_pay_companies" v-if="contractInfo.form.has_payment==1">
                         <div v-overflowTooltip="'#overflow-input'">
                         <div v-overflowTooltip="'#overflow-input'">
                           <el-tooltip placement="top" :content="contractInfo.form.actual_pay_companies" >
                           <el-tooltip placement="top" :content="contractInfo.form.actual_pay_companies" >
-                            <el-input v-model="contractInfo.form.actual_pay_companies" :disabled="contractInfo.form.contract_source==0?false:true"
+                            <el-input v-model="contractInfo.form.actual_pay_companies"
                             placeholder="请输入代付方信息" id="overflow-input" />
                             placeholder="请输入代付方信息" id="overflow-input" />
                           </el-tooltip>
                           </el-tooltip>
                         </div>
                         </div>
                       </el-form-item>
                       </el-form-item>
-                      <el-form-item label="实际使用方" prop="actual_company_name" v-if="contractInfo.form.contract_type==3">
-                        <el-input v-model="contractInfo.form.actual_company_name" 
-                        placeholder="请输入实际使用方" />
-                      </el-form-item>
-                      <el-form-item label="关联合同" prop="relate_contract_code" v-if="contractInfo.form.contract_type==3 || contractInfo.form.contract_type==4">
+                      <el-form-item label="关联合同" prop="relate_contract_code" v-if="contractInfo.form.has_payment">
                         <el-input v-model="contractInfo.form.relate_contract_code" 
                         <el-input v-model="contractInfo.form.relate_contract_code" 
                         placeholder="请输入关联合同" />
                         placeholder="请输入关联合同" />
                       </el-form-item>
                       </el-form-item>

+ 40 - 16
src/views/financialManagement/financialList.vue

@@ -116,9 +116,9 @@ const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
     router.push({path:'/financial/list/contractProgress',query:{type,complianceId:id}})
     router.push({path:'/financial/list/contractProgress',query:{type,complianceId:id}})
   }
   }
   // 导出数据
   // 导出数据
-  const exportData=()=>{
-    registerListExport(financial.searchParams).then(res=>{
-      downloadByFlow(res,'xlsx','财务列表')
+  const exportData=({value,text})=>{
+    registerListExport({...financial.searchParams,list_param:value}).then(res=>{
+      downloadByFlow(res,'xlsx',`财务列表-${text}`)
     })
     })
   }
   }
 
 
@@ -246,26 +246,49 @@ const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
                 @click="router.push('/financial/placementPre')" class="element-common-button">到款预登记</el-button> -->
                 @click="router.push('/financial/placementPre')" class="element-common-button">到款预登记</el-button> -->
               </div>
               </div>
               <div class="financial-top-option-zone-right">
               <div class="financial-top-option-zone-right">
-                <a href="https://hzchart.oss-cn-shanghai.aliyuncs.com/static/fms/excel/财务列表-导入模版(新).xlsx" download>
-                  <el-button class="element-common-button" size="large"
-                  v-permission="'financial:list:complianceImport'">下载导入模版</el-button>
-                </a>
+                <el-dropdown v-permission="'financial:list:complianceImport'" trigger="click" popper-class="classifyFandQ"
+                size="large">
+                  <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>
+                        <el-dropdown-item>FICC&权益</el-dropdown-item>
+                      </a>
+                      <a href="https://hzchart.oss-cn-shanghai.aliyuncs.com/static/fms/excel/财务列表-导入模版(新).xlsx" download>
+                        <el-dropdown-item>FICC</el-dropdown-item>
+                      </a>
+                      <a href="https://hzchart.oss-cn-shanghai.aliyuncs.com/static/fms/excel/财务列表-导入模版(新).xlsx" download>
+                        <el-dropdown-item>权益</el-dropdown-item>
+                      </a>
+                    </el-dropdown-menu>
+                  </template>
+                </el-dropdown>
                 <el-upload
                 <el-upload
                   class="upload-demo"
                   class="upload-demo"
                   accept=".xlsx"
                   accept=".xlsx"
                   :show-file-list="false"
                   :show-file-list="false"
                   :http-request="importData"
                   :http-request="importData"
                   v-permission="'financial:list:complianceImport'"
                   v-permission="'financial:list:complianceImport'"
+                  style="margin-right: 30px;"
                 >
                 >
                   <el-button size="large" :loading="financial.importLoading"
                   <el-button size="large" :loading="financial.importLoading"
-                  class="element-common-button" >导入</el-button>
+                  class="element-common-button" style="margin: 0;" >导入</el-button>
                 </el-upload>
                 </el-upload>
-                <el-button @click="exportData" size="large" class="element-common-button" style="margin-right: 0;" >导出</el-button>
+                <el-dropdown trigger="click" popper-class="classifyFandQ" size="large"  @command="exportData">
+                  <el-button size="large" class="element-common-button" style="margin-right: 0;" >导出</el-button>
+                  <template #dropdown>
+                    <el-dropdown-menu>
+                      <el-dropdown-item :command="{value:0,text:'FICC&权益'}">FICC&权益</el-dropdown-item>
+                      <el-dropdown-item :command="{value:1,text:'FICC'}">FICC</el-dropdown-item>
+                      <el-dropdown-item :command="{value:2,text:'权益'}">权益</el-dropdown-item>
+                    </el-dropdown-menu>
+                  </template>
+                </el-dropdown>
               </div>              
               </div>              
           </div>
           </div>
           <div class="financial-table-zone">
           <div class="financial-table-zone">
             <!-- 表格 -->
             <!-- 表格 -->
-            <el-table :data="financial.tableData" border max-height="640px" size="default" style="position: sticky;"> 
+            <el-table :data="financial.tableData" border max-height="640px" size="default"> 
               <el-table-column label="合同编号" align="center" show-overflow-tooltip 
               <el-table-column label="合同编号" align="center" show-overflow-tooltip 
               prop="contract_code" fixed="left" min-width="150"></el-table-column>
               prop="contract_code" fixed="left" min-width="150"></el-table-column>
               <el-table-column label="客户名称" align="center" prop="company_name"
               <el-table-column label="客户名称" align="center" prop="company_name"
@@ -275,11 +298,8 @@ const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
                   {{ row.seller_name+(row.seller_name&&row.rai_seller_name?`、`:'')+row.rai_seller_name }}
                   {{ row.seller_name+(row.seller_name&&row.rai_seller_name?`、`:'')+row.rai_seller_name }}
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
-              <el-table-column label="合同类型" align="center" width="90" prop="contract_type"
+              <el-table-column label="合同类型" align="center" width="90" prop="contract_type_string"
               v-if="financial.tabelColumnShowArr.includes('contract_type')">
               v-if="financial.tabelColumnShowArr.includes('contract_type')">
-                <template #default="{row}">
-                  {{contractTypeArray[row.contract_type-1].label}}
-                </template>
               </el-table-column>
               </el-table-column>
               <el-table-column label="套餐信息" align="center" prop="services" min-width="120"></el-table-column>
               <el-table-column label="套餐信息" align="center" prop="services" min-width="120"></el-table-column>
               <el-table-column label="合同有效期" align="center" prop="contractDate" width="210" 
               <el-table-column label="合同有效期" align="center" prop="contractDate" width="210" 
@@ -314,7 +334,7 @@ const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
               v-if="financial.tabelColumnShowArr.includes('remark')"></el-table-column>
               v-if="financial.tabelColumnShowArr.includes('remark')"></el-table-column>
               <el-table-column label="登记状态" align="center" prop="register_status" width="90">
               <el-table-column label="登记状态" align="center" prop="register_status" width="90">
                 <template #default="{row}">
                 <template #default="{row}">
-                  {{statusArray[row.register_status-1].label}}
+                  {{statusArray[row.register_status-1]?.label}}
                 </template>
                 </template>
               </el-table-column>
               </el-table-column>
               <el-table-column label="登记时间" v-if="financial.tabelColumnShowArr.includes('create_time')"
               <el-table-column label="登记时间" v-if="financial.tabelColumnShowArr.includes('create_time')"
@@ -466,5 +486,9 @@ const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
       }
       }
     }
     }
   }
   }
-
+  .classifyFandQ{
+    .el-dropdown-menu__item{
+      justify-content: center;
+    }
+  }
 </style>
 </style>

+ 2 - 0
src/views/financialManagement/placementPre.vue

@@ -1,3 +1,5 @@
+<!-- 1、到款预登记,之后的版本改为预登记 - registrationPre.vue
+      2、此文件仅作备份,保留至2023-4-7 -->
 <script setup>
 <script setup>
 import { Search } from '@element-plus/icons-vue'
 import { Search } from '@element-plus/icons-vue'
 import {useRouter} from 'vue-router'
 import {useRouter} from 'vue-router'

+ 1024 - 0
src/views/financialManagement/registrationPre.vue

@@ -0,0 +1,1024 @@
+<script setup>
+import { Search } from '@element-plus/icons-vue'
+import {useRouter} from 'vue-router'
+import {getSellerList} from '@/api/crm'
+import {getCurrencyList} from '@/api/common'
+import {getServiceList,getPreRegistrationList,preRegistrationAdd,
+  preRegistrationDetail,preRegistrationEdit,preRegistrationDelete,preRegistrationSave} from '@/api/financialMana'
+
+const router = useRouter()
+
+  const adminId = localStorage.getItem('userInfo')?JSON.parse(localStorage.getItem('userInfo')).admin_id || 0:0
+  const placemenetPre=reactive({
+    searchParams:{
+      keyword:'',
+      page_size:10,
+      current:1,
+    },
+    tableData:[],
+    total:0,
+  })
+  
+  // -----------------弹窗
+  const registrationPreForm=ref(null)
+
+  // 新增/编辑 开票/到款 预登记弹窗
+  const dialog=reactive({
+    registrationPreShow:false,
+    // 登记类型
+    registrationType:'开票',
+    title:'',
+    registrationPreForm:{
+      company_name:'',
+      start_date:'',
+      end_date:'',
+      services:[],
+      IorPInfo:[
+        {
+          service_product_id:'',
+          amount:'',
+          currency_unit:'CNY',
+          register_date:'',
+          seller_id:'',
+          seller_name:'',
+          remark:''
+        }
+      ],
+    },
+    //选中的套餐ID - 级联选择器绑定值
+    selectServices:[],
+    validityDate:[]
+  })
+
+  // 监听
+
+  watch(()=>dialog.validityDate,(newVal)=>{
+    // console.log(newVal);
+    if(!newVal){
+      dialog.registrationPreForm.start_date=''
+      dialog.registrationPreForm.end_date=''
+    }else{
+      dialog.registrationPreForm.start_date = newVal[0]
+      dialog.registrationPreForm.end_date = newVal[1]
+    }
+  })
+
+// -----------------------------------------套餐部分 - 开始
+// 套餐列表
+const servicesList=ref([])
+const selectServicesRef=ref(null)
+
+// 套餐类型 1-FICC 2-权益 3-FICC&权益
+const serviceType=ref(3)
+
+// 预开票/预到款套餐类型 1-FICC 2-权益 3-FICC&权益
+const serviceTypePre=ref(3)
+
+// 获取套餐列表
+const getServicesListFun=()=>{
+  getServiceList().then(res=>{
+    servicesList.value=res.data||[]
+  })
+}
+
+// 套餐类型更改
+const productIdChange=(value,item)=>{
+  item.seller_id=''
+}
+
+watch(serviceType,(newVal)=>{
+  if(newVal==1 || newVal==2){
+    dialog.registrationPreForm.IorPInfo.map(item =>{
+      item.service_product_id=newVal
+    })
+  }else{
+    dialog.registrationPreForm.IorPInfo.map(item =>{
+      item.service_product_id=''
+    })
+  }
+})
+
+watch(serviceTypePre,(newVal)=>{
+  if(newVal==1 || newVal==2){
+    preDialog.preForm.service_product_id=newVal
+  }else{
+    preDialog.preForm.service_product_id=''
+  }
+})
+// -----------------------------------------套餐部分 - 结束
+// -----------------------------------------销售部分 - 开始
+//FICC的销售列表
+const sellerInvoiceListF=ref(null)
+//权益的销售列表
+const sellerInvoiceListQ=ref(null)
+
+//获取销售列表
+const getSellerListFun=()=>{
+  getSellerList().then(res=>{
+    sellerInvoiceListF.value = res.data.ficc_list || []
+    sellerInvoiceListQ.value = res.data.rai_list || []
+  })
+}
+
+let elMessageDom=null
+const selectVisible=(value)=>{
+  if(value){
+    if(!elMessageDom){
+      elMessageDom=ElMessage.warning('请选择套餐类型')
+      setTimeout(()=>{
+        elMessageDom=null
+      },1000)
+    }
+  }
+}
+
+// -----------------------------------------销售部分 - 结束
+// 预登记列表
+const placementPreList=()=>{
+  getPreRegistrationList(placemenetPre.searchParams).then(res=>{
+    placemenetPre.tableData=res.data.list || []
+    placemenetPre.total=res.data.page?.total || 0
+    // console.log(res);
+  })
+}
+//新增预登记
+const addRegistrationPre=(type)=>{
+  dialog.registrationType = type
+  dialog.title=`新增${type}预登记`
+  dialog.registrationPreShow=true
+}
+
+//新增预登记的行
+const addRegistrationPreRow=()=>{
+  let lastItem=dialog.registrationPreForm.IorPInfo[dialog.registrationPreForm.IorPInfo.length-1]
+  if(!(lastItem.amount&&lastItem.currency_unit&&lastItem.register_date)){
+    ElMessage.error('请填写完整!')
+    return 
+  }
+  if(dialog.registrationType=='开票'&&!(lastItem.service_product_id&&lastItem.seller_id)){
+    ElMessage.error('请填写完整!')
+    return 
+  }
+  dialog.registrationPreForm.IorPInfo.push({
+    service_product_id:serviceType.value==3?'':serviceType.value,
+    amount:'',
+    currency_unit:'CNY',
+    register_date:'',
+    seller_id:'',
+    seller_name:'',
+    remark:''
+  })
+}
+//删除预登记的行
+const deleteRegistrationPreRow=(index)=>{
+  ElMessageBox.confirm(`是否删除该条${dialog.registrationType}记录?`,
+    '提示',    
+    {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning',
+    }).then(res=>{
+      dialog.registrationPreForm.IorPInfo.splice(index,1)
+    }).catch(()=>{}) 
+}
+//编辑预登记
+const editRegistrationPre=(row)=>{
+  preRegistrationDetail({contract_register_id:row.contract_register_id,
+  invoice_type:row.invoice_type}).then(res=>{
+    if(!res.data) return
+    dialog.registrationPreForm.contract_register_id = res.data.contract_register_id
+    dialog.registrationPreForm.pre_register_id = row.pre_register_id
+    dialog.registrationPreForm.company_name = res.data.company_name
+    dialog.registrationPreForm.invoice_type = row.invoice_type
+    dialog.registrationPreForm.IorPInfo=res.data.list
+    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.registrationType=row.invoice_type==3?'开票':'到款'
+    dialog.title=`编辑${dialog.registrationType}预登记`
+    dialog.registrationPreShow=true
+    nextTick(()=>{
+      servicesChange(dialog.selectServices,1)
+    })
+  })
+}
+
+//弹窗关闭动画 回调
+const dialogClosed=()=>{
+  dialog.registrationPreForm.company_name=''
+  dialog.registrationPreForm.services=[]
+  dialog.registrationPreForm.IorPInfo=[
+    {
+      service_product_id:'',
+      amount:'',
+      currency_unit:'CNY',
+      register_date:'',
+      seller_id:'',
+      seller_name:'',
+      remark:''
+    }
+  ]
+  dialog.validityDate=[]
+  dialog.selectServices=[]
+  resetDisable(servicesList.value)
+  setTimeout(()=>{
+    registrationPreForm.value.clearValidate()
+  },0)
+}
+
+// 提交
+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;
+    }
+  }
+  let params={
+    contract_register_id:dialog.registrationPreForm.contract_register_id||0,
+    pre_register_id:dialog.registrationPreForm.pre_register_id||0,
+    company_name:dialog.registrationPreForm.company_name,
+    register_type:dialog.registrationType=='开票'?3:4,
+    start_date:dialog.registrationPreForm.start_date,
+    end_date:dialog.registrationPreForm.end_date,
+    list:dialog.registrationPreForm.IorPInfo,
+    services:servicesParam,
+  }
+  params.list.forEach(item =>{
+    item.amount = parseFloat(item.amount)
+    item.seller_id=item.seller_id||0
+    item.service_product_id=item.service_product_id||0
+  })
+  registrationPreForm.value.validate((valid)=>{
+    if(valid){
+      let prePlacementProp=preRegistrationAdd
+      if(params.contract_register_id){
+        // 编辑
+        prePlacementProp=preRegistrationEdit
+      }
+      prePlacementProp(params).then(res=>{
+        dialog.registrationPreShow=false
+        ElMessage.success(`${dialog.title}成功`)
+        placementPreList()
+      })
+    }
+  })
+}
+// ------------------------------------------------预开票/到款 弹窗
+const preDialog=reactive({
+  show:false,
+  title:'',
+  preForm:{
+    company_name:'',
+    service_product_id:'',
+    start_date:'',
+    end_date:'',
+    services:[],
+    amount:'',
+    currency_unit:'CNY',
+    seller_id:'',
+    invoice_type:'',
+    register_date:'',
+    remark:''
+  },
+  validityDate:[],
+  selectService:[],
+  rules:{
+    end_date:{required:true,message:"约定有效期不能为空",trigger:'change'},
+    services:{required:true,message:'套餐不能为空',trigger:'change'},
+    amount:[{required:true,message:'金额不能为空',trigger:'blur'},
+    {validator:(rule,value,callback)=>{
+      if(!parseFloat(value)){
+        callback(new Error('金额无效'))
+      }
+      if(!preDialog.preForm.currency_unit){
+        callback(new Error('货币单位不能为空'))
+      }else{
+        callback()
+      }
+    },trigger:'blur'}],
+    seller_id:{required:true,message:'销售不能为空',trigger:'change'},
+    register_date:{required:true,message:'开票日不能为空',trigger:'change'}
+  }
+})
+const preFormRef=ref(null)
+const selectServicesPreRef=ref(null)
+watch(()=>preDialog.validityDate,(newVal)=>{
+  if(!newVal){
+    preDialog.preForm.start_date=''
+    preDialog.preForm.end_date=''
+  }else{
+    preDialog.preForm.start_date = newVal[0]
+    preDialog.preForm.end_date = newVal[1]
+  }
+})
+// 预开票/到款
+const preIorP=(row)=>{
+  preRegistrationDetail({contract_register_id:row.contract_register_id,
+  invoice_type:row.invoice_type==3?4:3}).then(res=>{
+    if(!res.data) return
+    preDialog.preForm.contract_register_id = res.data.contract_register_id
+    preDialog.preForm.pre_register_id = row.pre_register_id
+    preDialog.preForm.company_name = res.data.company_name
+    preDialog.preForm.invoice_type = row.invoice_type==3?4:3
+    if(res.data.list.length>0){
+      preDialog.preForm.contract_invoice_id = res.data.list[0].contract_invoice_id
+      preDialog.preForm.amount=res.data.list[0].amount
+      preDialog.preForm.currency_unit=res.data.list[0].currency_unit
+      preDialog.preForm.service_product_id=res.data.list[0].service_product_id
+      preDialog.preForm.seller_id=res.data.list[0].seller_id
+      preDialog.preForm.invoice_type=res.data.list[0].invoice_type
+      preDialog.preForm.register_date=res.data.list[0].register_date
+      preDialog.preForm.remark=res.data.list[0].remark
+    }
+    preDialog.preForm.services=res.data.services || []
+    preDialog.validityDate=[res.data.start_date,res.data.end_date]
+    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)
+    })
+  })
+}
+
+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;
+        }
+      }
+      preDialog.preForm.amount = parseFloat(preDialog.preForm.amount)
+      let params={
+        contract_register_id:preDialog.preForm.contract_register_id,
+        pre_register_id:preDialog.preForm.pre_register_id,
+        company_name:preDialog.preForm.company_name,
+        register_type:preDialog.preForm.invoice_type,
+        start_date:preDialog.preForm.start_date,
+        end_date:preDialog.preForm.end_date,
+        list:[{
+          contract_invoice_id:preDialog.preForm.contract_invoice_id,
+          amount:preDialog.preForm.amount,
+          currency_unit:preDialog.preForm.currency_unit,
+          remark:preDialog.preForm.remark,
+          register_date:preDialog.preForm.register_date,
+          seller_id:preDialog.preForm.seller_id||0,
+          service_product_id:preDialog.preForm.service_product_id,
+        }],
+        services:servicesParam||[]
+      }
+      preRegistrationSave(params).then(res=>{
+        preDialog.show=false
+        ElMessage.success(`${preDialog.title}成功`)
+        placementPreList()
+      })
+    }
+  })
+}
+
+const preDialogClosed=()=>{
+  preDialog.preForm={
+    service_product_id:'',
+    start_date:'',
+    end_date:'',
+    services:[],
+    amount:'',
+    currency_unit:'CNY',
+    seller_id:'',
+    register_date:''
+  },
+  preDialog.validityDate=[]
+  preDialog.selectServices=[]
+  resetDisable(servicesList.value)
+  setTimeout(()=>{
+    preFormRef.value.clearValidate()
+  },0)
+}
+
+// -------------------------------货币列表
+const currencyList=ref([])
+// 获取货币列表
+const getCurrencyListFun=()=>{
+  getCurrencyList().then(res=>{
+    currencyList.value=res.data || []
+  })
+}
+// 以防currenvy_unitw为空
+const currencyValidator=(item,callback)=>{
+  if(!parseFloat(item.amount)){
+    callback(new Error('金额单位无效'))
+  }
+  if(!item.currency_unit){
+    callback(new Error('货币单位不能为空'))
+  }else{
+    callback()
+  }
+}
+// 新增或编辑预登记 币种修改
+const currencyUnitChange=(value)=>{
+  dialog.registrationPreForm.IorPInfo.map(item =>{
+    item.currency_unit = 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
+  placementPreList()
+}
+const changePageNo = (pageNo)=>{
+  placemenetPre.searchParams.current = pageNo
+  placementPreList()
+}
+const searchPlacementPre=()=>{
+  placemenetPre.searchParams.current = 1
+  placementPreList()
+}
+
+// 补录合同
+const supplementaryContract=(row)=>{  
+  // console.log(id);
+  router.push({path:'/financial/list/contractProgress',query:{
+    supplementaryId:row.contract_register_id,
+    invoice_type:row.invoice_type
+  }})
+}
+// 查看备注
+const remarkView=(type,row)=>{
+  let remarkTitle=type+'备注'
+  let text = ''
+  if(type=='开票'){
+    text=row.remark
+  }else{
+    text=row.arrive_remark
+  }
+  ElMessageBox.alert(text,remarkTitle,{
+    confirmButtonText:'知道了',
+    confirmButtonClass:'message-box-remark'
+  })
+}
+
+
+// 删除
+const delteRecord=(row)=>{
+  ElMessageBox.confirm('未补录合同,删除后不可恢复,是否确认删除?','操作提示',    
+  {
+    confirmButtonText: '确定',
+    cancelButtonText: '取消',
+    type: 'warning',
+  }).then(res=>{
+    preRegistrationDelete({
+      arrive_id:row.arrive_id,contract_register_id:row.contract_register_id,
+      invoice_id:row.invoice_id,pre_register_id:row.pre_register_id,}).then(res=>{
+      ElMessage.success('删除成功')
+      placementPreList()
+    })
+  }).catch(()=>{})
+}
+
+//  ---------------------created
+getSellerListFun()
+getServicesListFun()
+getCurrencyListFun()
+placementPreList()
+</script>
+
+<template>
+  <div class="placemenetPre-list-container" id="placemenetPre-list-container" > 
+    <!-- 顶部区域 -->
+    <div class="placemenetPre-top-zone">
+      <div class="placemenetPre-top-search-zone">
+        <el-input v-model="placemenetPre.searchParams.keyword" placeholder="客户姓名" :prefix-icon="Search"
+        style="width: 240px;" @input="searchPlacementPre" clearable />
+      </div>
+      <!-- 按钮区域 -->
+      <div class="placemenetPre-top-option-zone">
+        <el-button type="primary" @click="addRegistrationPre('开票')" class="main-button-large" 
+        style="margin-left: 30px;" v-permission="'financial:registrationPre:AandEInvoice'">开票预登记</el-button>         
+        <el-button type="primary" @click="addRegistrationPre('到款')" class="main-button-large" style="margin-left: 30px;"
+        v-permission="'financial:registrationPre:AandEPayment'">到款预登记</el-button>         
+      </div>
+    </div>
+    <div class="placemenetPre-table-zone">
+      <!-- 表格 -->
+      <el-table :data="placemenetPre.tableData" border max-height="695px"
+      size="default"> 
+        <el-table-column label="客户名称" prop="company_name"
+        show-overflow-tooltip min-width="120"></el-table-column>
+        <el-table-column label="开票日" prop="invoice_time" width="110">
+        </el-table-column>
+        <el-table-column label="开票金额" prop="origin_amount" width="120">
+        </el-table-column>
+        <el-table-column label="开票销售" width="100" prop="seller_name"></el-table-column>
+        <el-table-column label="到款日" prop="arrive_time" width="110">
+        </el-table-column>
+        <el-table-column label="到款金额" prop="arrive_origin_amount" width="120">
+        </el-table-column>
+        <el-table-column label="约定有效期" width="210" prop="start_date">
+          <template #default="{row}">
+            {{(row.start_date+' 至 '+row.end_date)}}
+          </template>
+        </el-table-column>
+        <el-table-column label="套餐" prop="services" show-overflow-tooltip></el-table-column>
+        <el-table-column label="操作" fixed="right" >
+          <template #default="{row}">
+            <div class="table-options">
+              <span class="table-option-buttons" v-permission="'financial:registrationPre:supplementary'"
+              @click="supplementaryContract(row)">
+                补录合同
+              </span>
+              <span class="table-option-buttons" v-permission="'financial:registrationPre:preInvoice'"
+              @click="preIorP(row)" v-if="row.invoice_type==4">
+                预开票
+              </span>
+              <span class="table-option-buttons" v-permission="'financial:registrationPre:prePayment'"
+              @click="preIorP(row)"  v-if="row.invoice_type==3">
+                预到款
+              </span>
+              <span class="table-option-buttons" v-permission="'financial:registrationPre:AandEInvoice'"
+              @click="editRegistrationPre(row)" v-if="row.invoice_type==3" >
+                编辑
+              </span>              
+              <span class="table-option-buttons" v-permission="'financial:registrationPre:AandEPayment'"
+              @click="editRegistrationPre(row)" v-if="row.invoice_type==4">
+                编辑
+              </span>
+              <span class="table-option-buttons" v-permission="'financial:registrationPre:delete'"
+              @click="delteRecord(row)" style="color:var(--dangerColor);" v-if="adminId==row.admin_id">
+                删除
+              </span>
+              <el-dropdown popper-class="classifyFandQ" size="large"  @command="(type)=>remarkView(type,row)">
+                <el-icon style="cursor: pointer;font-size: 16px;"><MoreFilled /></el-icon>
+                <template #dropdown>
+                  <el-dropdown-menu>
+                    <el-dropdown-item command="开票">开票备注</el-dropdown-item>
+                    <el-dropdown-item command="到款">到款备注</el-dropdown-item>
+                  </el-dropdown-menu>
+                </template>
+              </el-dropdown>
+            </div>
+          </template>
+        </el-table-column>
+        <template #empty>
+          <div class="table-no-data">
+            <img src="@/assets/img/icon/empty-data.png" />
+            <span>暂无数据</span>
+          </div>
+        </template>
+      </el-table>
+      <!-- 分页 -->
+      <m-page :pageSize="placemenetPre.searchParams.page_size" :page_no="placemenetPre.searchParams.current" 
+      style="display: flex;justify-content: flex-end;margin-top: 20px;" 
+      :total="placemenetPre.total" @handleCurrentChange="changePageNo" @handleSizeChange="changePageSize"/>
+    </div>
+    <!-- 新增/编辑弹窗 -->
+    <el-dialog v-model="dialog.registrationPreShow" :title="dialog.title" top="5vh"
+     width="942px" @closed="dialogClosed"
+     :close-on-click-modal="false">
+      <el-form :model="dialog.registrationPreForm" inline ref="registrationPreForm" style="margin:0 10px;"> 
+        <el-form-item label="客户名称" prop="company_name" label-width="90" style="margin-right: 30px;"
+        :rules="{required:true,message:'客户名称不能为空',trigger:'blur'}"> 
+          <el-input v-model="dialog.registrationPreForm.company_name"
+          placeholder="请输入客户名称" style="width:320px" />
+        </el-form-item>
+        <el-form-item label="约定有效期" prop="end_date" label-width="102" style="margin-right: 20px;"
+        :rules="dialog.registrationType=='开票'?{required:true,message:'约定有效期不能为空',trigger:'change'}:{required:false}">
+          <el-date-picker type="daterange" 
+            v-model="dialog.validityDate" style="max-width: 320px;"
+            start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD"
+            :clearable="false">
+            </el-date-picker>
+        </el-form-item>
+        <el-form-item label="套餐" prop="services" label-width="90" style="margin-right: 20px;"
+        :rules="dialog.registrationType=='开票'?{required:true,message:'套餐不能为空',trigger:'change'}:{required:false}">
+          <el-cascader filterable :options="servicesList" placeholder="请选择套餐" @change="(value)=>servicesChange(value,1)"
+            :show-all-levels="true" v-model="dialog.selectServices" :clearable="false" ref="selectServicesRef"
+            :props="{multiple:true,label:'title',value:'service_template_id',emitPath:false}" collapse-tags collapse-tags-tooltip
+            key="seriveces" style="min-width: 775px;z-index: 100;">
+          </el-cascader>
+        </el-form-item>
+        <el-scrollbar max-height="470px" noresize style="margin: 0 -10px;padding: 0 10px;" >
+          <div class="invoice-payment-row" v-for="(item,index) in dialog.registrationPreForm.IorPInfo" :key="index">
+            <el-form-item label="套餐类型" :prop="`IorPInfo.${index}.service_product_id`" v-if="serviceType==3"
+            label-width="90" style="margin-right: 20px;"
+            :rules="dialog.registrationType=='开票'?{required:true,message:'套餐类型不能为空',trigger:'change'}:{required:false}">
+              <el-select v-model="item.service_product_id" style="width: 176px;" @change="value=> productIdChange(value,item)"
+              placeholder="请选择套餐">
+                <el-option label="FICC套餐" :value="1"></el-option>
+                <el-option label="权益套餐" :value="2"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item :label="dialog.registrationType+'金额'" :prop="`IorPInfo.${index}.amount`" label-width="90"  style="margin-right: 20px;"
+            :rules="[{required:true,message:'金额不能为空',trigger:'blur'},
+              {validator:(rule,value,callback)=>currencyValidator(item,callback),trigger:'blur'}]">
+              <el-input v-model.trim="item.amount" 
+              :placeholder="`请输入${dialog.registrationType}金额`" style="width: 131px;margin-right: 15px;" />
+              <el-select v-model="item.currency_unit" placeholder="请选择货币类型" style="width: 91px;" @change="currencyUnitChange">
+                <el-option v-for="currency in currencyList" :key="currency.code" :label="currency.name" :value="currency.code">
+                </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item :label="dialog.registrationType+'日'" :prop="`IorPInfo.${index}.register_date`" label-width="73" 
+            :style="{marginRight:serviceType==3?'0':'20px'}"
+            :rules="{required:true,message:dialog.registrationType+'日不能为空',trigger:'change'}">
+              <el-date-picker v-model="item.register_date" style="max-width: 156px!important;"
+                :placeholder="`请选择${dialog.registrationType}日`" value-format="YYYY-MM-DD" :clearable="false">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="开票销售" :prop="`IorPInfo.${index}.seller_id`" label-width="90" style="margin-right: 0;"
+            :rules="{required:true,message:'销售不能为空',trigger:'change'}" v-if="dialog.registrationType=='开票'">
+              <el-select v-model="item.seller_id" style="width: 176px;"
+              placeholder="请选择销售" filterable v-if="item.service_product_id==1">
+                <el-option :label="seller.seller_name" :value="seller.seller_id" 
+                v-for="seller in sellerInvoiceListF" :key="seller.seller_id">
+                </el-option>
+              </el-select>
+              <el-select v-model="item.seller_id" style="width: 176px;"
+              placeholder="请选择销售" filterable v-else-if="item.service_product_id==2">
+                <el-option :label="seller.seller_name" :value="seller.seller_id" 
+                v-for="seller in sellerInvoiceListQ" :key="seller.seller_id">
+                </el-option>
+              </el-select>
+              <el-select v-model="item.seller_id" style="width: 176px;" 
+              placeholder="请选择销售" v-else
+                @visible-change="selectVisible">
+              </el-select>
+            </el-form-item>
+            <el-form-item label="备注" :prop="`IorPInfo.${index}.remark`" label-width="90" 
+            style="margin-right: 0;" :style="{marginLeft:serviceType==3 && dialog.registrationType=='开票'?'20px':'0'}"> 
+              <el-input v-model="item.remark" placeholder="请输入备注" :style="{width:serviceType==3&&dialog.registrationType=='开票'?'486px':'772px'}" />
+            </el-form-item>
+            <el-icon color="#D0D2D5" class="deleteIcon" size="16px" @click="deleteRegistrationPreRow(index)"
+            v-show="dialog.registrationPreForm.IorPInfo.length>1"><CircleCloseFilled /></el-icon>
+          </div>
+        </el-scrollbar>
+      </el-form>
+      <div class="add-invoice-payment" @click="addRegistrationPreRow">
+        <el-icon size="16px" color="var(--themeColor)">
+          <svg-icon name="svgIcon-common-add"></svg-icon>
+        </el-icon>
+        <span>添加{{ dialog.registrationType}}信息</span>
+      </div>
+      <template #footer>
+        <div>
+          <el-button @click="dialog.registrationPreShow=false" class="common-button-medium">取消</el-button>
+          <el-button type="primary" @click="submitForm" style="margin-left: 30px;">确定</el-button>
+        </div>
+      </template> 
+    </el-dialog>
+    <!--预开票/到款 弹窗 -->
+    <el-dialog v-model="preDialog.show" :title="preDialog.title"
+     width="450px" @closed="preDialogClosed"
+     :close-on-click-modal="false">
+      <el-form :model="preDialog.preForm" :rules="preDialog.rules" id="preFormRef"
+      ref="preFormRef" style="margin-left:10px;" label-width="101px"> 
+        <el-form-item label="约定有效期" prop="end_date" v-if="preDialog.title=='预开票'">
+          <el-date-picker type="daterange" key="pre"
+            v-model="preDialog.validityDate" style="max-width: 286px;"
+            start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD"
+            :clearable="false">
+            </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)"
+            :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;">
+          </el-cascader>
+        </el-form-item>
+        <el-form-item label="套餐类型" prop="service_product_id" v-if="serviceTypePre==3" 
+        :rules="preDialog.title=='预开票'?{required:true,message:'套餐类型不能为空',trigger:'change'}:{required:false}">
+          <el-select v-model="preDialog.preForm.service_product_id"
+          style="width: 286px;" @change="value=> productIdChange(value,preDialog.preForm)"
+          placeholder="请选择套餐">
+            <el-option label="FICC套餐" :value="1"></el-option>
+            <el-option label="权益套餐" :value="2"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item :label="preDialog.title=='预开票'?'开票金额':'到款金额'" prop="amount">
+          <el-input v-model.trim="preDialog.preForm.amount" style="width: 185px;margin-right: 10px;"
+          :placeholder="preDialog.title=='预开票'?'请输入开票金额':'请输入到款金额'"  />
+          <el-select v-model="preDialog.preForm.currency_unit" placeholder="请选择货币类型" style="width: 91px;" >
+            <el-option v-for="currency in currencyList" :key="currency.code" :label="currency.name" :value="currency.code">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="开票销售" prop="seller_id" v-if="preDialog.title=='预开票'">
+          <el-select v-model="preDialog.preForm.seller_id" style="width: 286px;"
+          placeholder="请选择销售" filterable v-if="preDialog.preForm.service_product_id==1">
+            <el-option :label="seller.seller_name" :value="seller.seller_id" 
+            v-for="seller in sellerInvoiceListF" :key="seller.seller_id">
+            </el-option>
+          </el-select>
+          <el-select v-model="preDialog.preForm.seller_id" style="width: 286px;"
+          placeholder="请选择销售" filterable v-else-if="preDialog.preForm.service_product_id==2">
+            <el-option :label="seller.seller_name" :value="seller.seller_id" 
+            v-for="seller in sellerInvoiceListQ" :key="seller.seller_id">
+            </el-option>
+          </el-select>
+          <el-select v-model="preDialog.preForm.seller_id" style="width: 286px;" 
+          placeholder="请选择销售" v-else
+            @visible-change="selectVisible">
+          </el-select>
+        </el-form-item>
+        <el-form-item :label="preDialog.title=='预开票'?'开票日':'到款日'" prop="register_date">
+          <el-date-picker v-model="preDialog.preForm.register_date"
+          :placeholder="preDialog.title=='预开票'?'请选择开票日':'请选择到款日'" value-format="YYYY-MM-DD" :clearable="false">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark"> 
+          <el-input v-model="preDialog.preForm.remark" type="textarea" :rows="2"
+          placeholder="请输入备注" style="width:286px" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div>
+          <el-button @click="preDialog.show=false" class="common-button-medium">取消</el-button>
+          <el-button type="primary" @click="submitPreForm" style="margin-left: 30px;">确定</el-button>
+        </div>
+      </template> 
+    </el-dialog>
+
+  </div>
+</template>
+  
+<style lang="scss" scoped>
+  .placemenetPre-list-container{
+    min-height: 100%;
+    .placemenetPre-top-zone{
+      display: flex;
+      flex-wrap: wrap;
+      align-items: flex-start;
+      justify-content: space-between;
+      margin-bottom: 20px;
+      .placemenetPre-top-search-zone{
+        display: flex;
+        align-items: center;
+        margin-bottom: 8px;
+      }
+    }
+    .placemenetPre-table-zone{
+      margin-top: 20px;
+    }
+    .invoice-payment-row{
+      padding: 20px 10px 0;
+      background-color: #FBF9F4;
+      margin-bottom: 20px;
+      position: relative;
+      &:last-child{
+        margin-bottom: 0;
+      }
+      .deleteIcon{
+        cursor: pointer;
+        position: absolute;
+        top:0;
+        right: 0;
+        z-index: 3;
+      }
+    }
+    .add-invoice-payment{
+      display: inline-flex;
+      align-items: center;
+      margin-top: 20px;
+      padding: 0 10px;
+      cursor: pointer;
+      span{
+        color: $themeColor;
+        font-size: 14px;
+        margin-left: 6px;
+      }
+    }
+  }
+</style>
+<style lang="scss">
+  #placemenetPre-list-container{
+    .el-dialog__footer{
+      padding-top: 0!important;
+      padding: 0 0 36px 0;
+    }
+    #preFormRef{
+      .el-date-editor{
+        .el-input__wrapper{
+          width: 286px;
+        }
+      }
+    }
+  }
+  .message-box-remark{
+    color: white!important;
+  }
+</style>

+ 14 - 4
src/views/financialStatistics/commodityPayment.vue

@@ -127,9 +127,9 @@ const moment = inject('$moment')
     commodityPList()
     commodityPList()
   }
   }
 
 
-  const dataExport=()=>{
-    getInvoicePaymentList({...searchParams,is_export:1}).then(res=>{
-      downloadByFlow(res,'xlsx',`商品到款统计列表`)
+  const dataExport=({value,text})=>{
+    getInvoicePaymentList({...searchParams,is_export:1,list_param:value}).then(res=>{
+      downloadByFlow(res,'xlsx',`商品到款统计列表-`+text)
     })
     })
   }
   }
 
 
@@ -389,7 +389,17 @@ const moment = inject('$moment')
             </div>
             </div>
           </div>
           </div>
         </div>
         </div>
-        <el-button @click="dataExport" style="margin-bottom: 10px;" size="large" class="element-common-button">导出</el-button>
+        <el-dropdown trigger="click" popper-class="classifyFandQ" size="large"  @command="dataExport">
+          <el-button style="margin-bottom: 10px;" size="large" class="element-common-button">导出</el-button>
+          <template #dropdown>
+            <el-dropdown-menu>
+              <el-dropdown-item :command="{value:0,text:'FICC&权益'}">FICC&权益</el-dropdown-item>
+              <el-dropdown-item :command="{value:1,text:'FICC'}">FICC</el-dropdown-item>
+              <el-dropdown-item :command="{value:2,text:'权益'}">权益</el-dropdown-item>
+            </el-dropdown-menu>
+          </template>
+        </el-dropdown>
+        
       </div>
       </div>
       <div class="table-zone">
       <div class="table-zone">
         <el-table :data="commodityPData.tableData" border ref="tableRef"
         <el-table :data="commodityPData.tableData" border ref="tableRef"