Browse Source

财务2.3待联调

hbchen 2 năm trước cách đây
mục cha
commit
4ba1a26547

+ 1 - 0
package.json

@@ -12,6 +12,7 @@
   "dependencies": {
     "@element-plus/icons-vue": "^2.0.9",
     "axios": "^0.26.0",
+    "echarts": "^5.4.0",
     "element-plus": "^2.2.14",
     "html2canvas": "1.4.0",
     "js-base64": "^3.7.2",

+ 3 - 0
src/assets/svg-icons/common/arrow_right.svg

@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M6.46042 12.4592L5.54119 11.54L9.08157 7.99962L5.54119 4.45924L6.46042 3.54L10.92 7.99962L6.46042 12.4592Z" fill="currentColor"/>
+</svg>

+ 3 - 2
src/layout/headerBar/breadcrumb.vue

@@ -34,8 +34,9 @@
 
 <template>
   <el-breadcrumb class="header-breadcrumb">
-    <el-breadcrumb-item v-for="(item,index) in route.matched" :key="item.path">
-      <span v-if="index!=(route.matched.length-1)" class="canClick" @click.stop="routeClick(item)">
+    <!-- 判断route.meta.first_level_menu 为了面包屑中在一级路由时只显示一个标题 -->
+    <el-breadcrumb-item v-for="(item,index) in route.meta.first_level_menu?route.matched.slice(0,1):route.matched" :key="item.path">
+      <span v-if="index!=(route.matched.length-1) && !route.meta.first_level_menu" class="canClick" @click.stop="routeClick(item)">
         {{ item.meta.title }}
       </span>
       <span v-else style="font-size:16px;">{{ item.meta.title }}</span>

+ 7 - 1
src/store/modules/router.js

@@ -8,6 +8,8 @@ const hiddenArray=[false,true]
 const routeAllPathToCompMap = import.meta.glob(`@/views/**/*.vue`)
 // console.log(routeAllPathToCompMap);
 
+let count=0
+
 const routeHandle=(route,path='index')=>{
   path = path.startsWith('/')?path.substring(1):path
   if(route.component){
@@ -26,6 +28,7 @@ const routeHandle=(route,path='index')=>{
   }else{
     if(route.children && route.children.length>0){
       route.children = route.children.map(item=>{
+        count++
         return routeHandle(item,item.path)
       })
       return route.children
@@ -57,6 +60,7 @@ export default {
           routesData.map(item=>{
             let afterHandlePath = item.path.startsWith('/')?item.path:'/'+item.path
             if(item.hidden_layout==0){
+              count=0
               let afterHandle = routeHandle(Object.assign({},item))
               // console.log(afterHandle);
               // 判断 afterHandle 是不是数组
@@ -73,7 +77,9 @@ export default {
                 meta:{
                   title:item.name,
                   icon_path:item.icon_path,
-                  type:!flag?'menu':'content'
+                  type:!flag?'menu':'content',
+                  // 是否是一级路由
+                  first_level_menu:count===0?true:false
                 },
                 children:!flag?[afterHandle]:afterHandle
               })

+ 175 - 0
src/views/dashboard/index.vue

@@ -0,0 +1,175 @@
+<script setup>
+  import * as echarts from 'echarts/core';
+  // 引入柱状图图表,图表后缀都为 Chart
+  import { BarChart } from 'echarts/charts';
+  // 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
+  import {
+    TitleComponent,
+    TooltipComponent,
+    GridComponent,
+    DatasetComponent,
+    LegendComponent
+  } from 'echarts/components';
+  // 标签自动布局、全局过渡动画等特性
+  import { LabelLayout, UniversalTransition } from 'echarts/features';
+  // 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
+  import { CanvasRenderer } from 'echarts/renderers';
+
+  import {useRouter} from 'vue-router'
+
+  // 注册必须的组件
+  echarts.use([
+    TitleComponent,
+    TooltipComponent,
+    GridComponent,
+    DatasetComponent,
+    LegendComponent,
+    BarChart,
+    LabelLayout,
+    UniversalTransition,
+    CanvasRenderer
+  ]);
+  
+  const router = useRouter()
+
+  const barChartRef = ref(null)
+  let barChart = null
+
+  const paymentNavigator=()=>{
+    // 去往商品到款统计页面
+    router.push('/financialStatistics/commodityPayment')
+  }
+
+  const resizeChart=()=>{
+    barChart.resize();
+  }
+
+  const getChartData=()=>{
+    console.log('请求数据');
+    nextTick(()=>{
+      chartDraw()
+    })
+    
+  }
+
+  const chartDraw=()=>{
+    console.log(barChartRef.value);
+    barChart = echarts.init(barChartRef.value)
+    barChart.setOption({
+      title: {
+        text:'开票到款统计图',
+        textStyle:{
+          fontSize:20,
+          fontWeight:500
+        },
+        left:'center'
+      },
+      legend:{
+        icon:'circle',
+        left:'center',
+        top:40,
+        textStyle:{
+          fontSize:14
+        },
+        itemGap:34,
+        itemWidth:12
+      },
+      tooltip:{
+        textStyle:{
+          align:'left'
+        }
+      },
+      grid:{
+        top:120
+      },
+      color: ['#FF903E', '#FBE947'],
+      xAxis:{
+        type: 'category',
+        data:['2022-1','2022-2','2022-3','2022-4','2022-5','2022-6','2022-7','2022-8','2022-9','2022-10','2022-11','2022-12',
+        '2023-1','2023-2','2023-3','2023-4','2023-5','2023-6','2023-7','2023-8','2023-9','2023-10','2023-11','2023-12','2024-1'],
+        axisLabel: {
+          color: '#999', //更改坐标轴文字颜色
+          fontSize: 14, //更改坐标轴文字大小
+        },
+      },
+      yAxis: {
+        name:'万元',
+        type: 'value',
+        nameGap:20,
+        nameTextStyle:{
+          align:'right',
+          color:'#999'
+        },
+        axisLabel:{
+          color:'#999'
+        }
+      },
+      series:[{
+        data: [30,10,24,1,15,33,15,68,0,15,33,10,30,10,24,1,15,33,15,68,0,15,33,10,51],
+        type: 'bar',
+        name:'开票金额'
+      },
+      {
+        data: [30,10,24,15,10,30,18,68,9,15,33,10,30,10,24,15,10,30,18,68,9,15,33,10,51],
+        type: 'bar',
+        name:'到款金额'
+      }]
+    })
+    window.addEventListener('resize', resizeChart);
+  }
+
+  onUnmounted(()=>{
+    barChart?.dispose()
+    window.removeEventListener('resize', resizeChart);
+  })
+
+  onMounted(()=>{
+    getChartData()
+  })
+
+
+</script>
+
+<template>
+    <div id="dashboard-index-container">
+      <div class="data-detail" >
+        <span @click="paymentNavigator" v-permission="'dashboard/index/dataDetail'">
+          查看数据详情
+          <el-icon size="16px" color="var(--themeColor)" >
+            <svg-Icon name="svgIcon-common-arrow_right"></svg-Icon>
+          </el-icon>
+        </span>
+      </div>
+      <div ref="barChartRef" class="bar-chart"></div>
+    </div>
+</template>
+  
+<style lang="scss" scoped>
+  #dashboard-index-container{
+    background-color: white;
+    height: calc(100vh - 120px);
+    padding: 30px;
+    box-sizing: border-box;
+    text-align: right;
+    .data-detail{
+      display: flex;
+      // align-items: center;
+      justify-content: flex-end;
+      margin-bottom: 30px;
+      span{
+        display: inline-flex;
+        align-items: center;
+        color: $themeColor;
+        font-size: 14px;
+        cursor: pointer;
+        line-height: 22px;
+        i{
+          margin-left: 4px;
+        }
+      }
+    }
+    .bar-chart{
+      height: calc(100% - 52px) 
+    }
+  }
+</style>

+ 34 - 17
src/views/financialManagement/contractProgress.vue

@@ -195,6 +195,15 @@
   // 是否是新公司的复选框勾选判断
   let is_new_company=ref(false)
 
+  // ------------------ 到款预登记
+  const supplementary_item=reactive({
+    id:0,
+    placement_amount:"",
+    placement_origin_amount:"",
+    create_time:""
+  })
+
+
 // -----------------------------监听
   // 已开票金额
   watch(()=> contractInfo.moneyData.haveInvoiceMoney ,(newValue)=>{
@@ -468,7 +477,11 @@
       // 没有内容 直接删除
       tempArr.splice(index,1)
     }else{
-      ElMessageBox.confirm(`是否删除该条${word}记录?`,
+      let hintText = `是否删除该条${word}记录?`
+      if(Math.random()>0.5){
+        hintText = '该笔到款是预到款,删除后,将同步合同信息,是否确认删除?'
+      }
+      ElMessageBox.confirm(hintText,
       '提示',    
       {
         confirmButtonText: '确定',
@@ -597,6 +610,9 @@
               router.back()
             },1000)
           })
+          if(supplementary_item.id){
+            console.log('到款预登记');
+          }
         }
       }
     })
@@ -717,9 +733,13 @@
   })
 
 // ----------------------created
+  // 合规登记Id
   contractInfo.form.contract_register_id = parseInt(route.query.complianceId) || ''
+  // 到款预登记Id
+  supplementary_item.id = parseInt(route.query.supplementaryId) || ''
   // complianceId没有,认为是合规登记
   contractInfo.operationtype=contractInfo.form.contract_register_id?(route.query.type || 'compliance'):'compliance'
+  
 
   // 是否是开票登记或者单款登记
   const isIOrP =contractInfo.operationtype=='invoice' || contractInfo.operationtype=='placement'
@@ -871,6 +891,19 @@
         }
       }
     })
+  }else if(supplementary_item.id){
+    // 拿到预登记详情信息
+    console.log(supplementary_item.id);
+    
+    contractInfo.form.company_name = route.query.company_name
+    contractInfo.form.currency_unit = route.query.amount_unit
+    contractInfo.form.contract_amount = route.query.placement_amount
+    contractInfo.form.new_company = route.query.new_company
+    contractInfo.form.start_date = route.query.start_date
+    contractInfo.form.end_date = route.query.end_date
+    contractInfo.form.seller_id = route.query.seller_id
+    contractInfo.form.seller_name = route.query.seller_name
+    contractInfo.contractValidityDate = [contractInfo.form.start_date,contractInfo.form.end_date]
   }
 </script>
 
@@ -1026,10 +1059,6 @@
                 </div>
               </div>
             </div>
-            <!-- <div class="contract-operation" v-if="contractInfo.operationtype=='compliance'" >
-              <el-button class="operation-button" style="margin-right: 30px;" @click="registrationCancel">取消</el-button>
-              <el-button type="primary" @click="submit" class="operation-button">保存</el-button>
-            </div> -->
           </div>
           <!-- 开票登记 -->
           <div class="info-box" v-show="contractInfo.operationtype!='compliance' && contractInfo.form.has_payment!=1" 
@@ -1244,10 +1273,6 @@
                     </el-form>
                   </div>
                 </div>
-            <!-- <div class="contract-operation" v-if="contractInfo.operationtype=='placement' || contractInfo.operationtype=='invoice'">
-              <el-button class="operation-button" style="margin-right: 30px;" @click="registrationCancel">取消</el-button>
-              <el-button type="primary" @click="submit" class="operation-button">保存</el-button>
-            </div> -->
               </div>
             </div>
           </div>
@@ -1514,14 +1539,6 @@
         }
       }
     } 
-    // .contract-operation{
-    //   text-align: center;
-    //   padding: 100px 30px 30px;
-    //   .operation-button{
-    //     height: 40px;
-    //     width: 130px;
-    //   }
-    // }
   }
 </style>
 <style lang="scss">

+ 21 - 9
src/views/financialManagement/financialList.vue

@@ -191,10 +191,13 @@ const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
     }).catch(()=>{})
   }
   //  ---------------------created
-  getServiceListFun()
-  financialList()
-  // 获取sessionStorage里面储存的表格选中列项
-  financial.tabelColumnShowArr=sessionStorage.getItem('financialListColumn')?sessionStorage.getItem('financialListColumn').split(','):[]
+  // 由于三级路由还是在当前页面,所以判断路径,避免重复请求
+  if(route.path=='/financial/list'){
+    getServiceListFun()
+    financialList()
+    // 获取sessionStorage里面储存的表格选中列项
+    financial.tabelColumnShowArr=sessionStorage.getItem('financialListColumn')?sessionStorage.getItem('financialListColumn').split(','):[]
+  }
 </script>
 
 <template>
@@ -225,11 +228,15 @@ const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
           </div>
           <!-- 顶部按钮区域 -->
           <div class="financial-top-option-zone">
-              <el-button type="primary" size="large" style="width: 130px;margin-right: 30px;" v-permission="'financial:list:complianceAdd'"
-              @click="registration('compliance')">合规登记</el-button>
+              <div>
+                <el-button type="primary" size="large" v-permission="'financial:list:complianceAdd'"
+                @click="registration('compliance')" class="element-common-button" style="color: white;">合规登记</el-button>
+                <el-button type="primary" size="large" style="margin-left: 0;color: white;"
+                @click="router.push('/financial/placementPre')" class="element-common-button">到款预登记</el-button>
+              </div>
               <div class="financial-top-option-zone-right">
                 <a href="https://hzstatic.hzinsights.com/static/fms/excel/财务列表-导入模板.xlsx" download>
-                  <el-button class="element-common-button" size="large" style="margin-right: 30px;" 
+                  <el-button class="element-common-button" size="large"
                   v-permission="'financial:list:complianceImport'">下载导入模版</el-button>
                 </a>
                 <el-upload
@@ -240,9 +247,9 @@ const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
                   v-permission="'financial:list:complianceImport'"
                 >
                   <el-button size="large" :loading="financial.importLoading"
-                  style="margin-right:30px;" class="element-common-button" >导入</el-button>
+                  class="element-common-button" >导入</el-button>
                 </el-upload>
-                <el-button @click="exportData" size="large" class="element-common-button" >导出</el-button>
+                <el-button @click="exportData" size="large" class="element-common-button" style="margin-right: 0;" >导出</el-button>
               </div>              
           </div>
           <div class="financial-table-zone">
@@ -421,6 +428,11 @@ const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
       .financial-top-option-zone-right{
         display: flex;
       }
+      .element-common-button{
+        width: 118px;
+        margin-right: 30px;
+        font-size: 14px;
+      }
     }
     .financial-table-zone{
       margin-top: 20px;

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

@@ -0,0 +1,447 @@
+<script setup>
+import { Search } from '@element-plus/icons-vue'
+import {useRouter} from 'vue-router'
+import {getSellerList} from '@/api/crm'
+import {getCurrencyList} from '@/api/common'
+
+const router = useRouter()
+
+  const placemenetPre=reactive({
+    searchParams:{
+      keyword:'',
+      start_date:'',
+      end_date:'',
+      contract_type:'',
+      page_size:10,
+      current:1,
+    },
+    // 创建时间数组
+    createtime:[],
+    tableData:[
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'},
+      {id:'11',company_name:'不知名客户',new_company:'是',seller:'张三',placement_amount:'1000',amount_unit:'元',
+      start_date:'2023-02-16',end_date:'2023-04-16',remark:'范德萨发的发多少',create_time:'2023-01-23',creator:'李四'}
+    ],
+    total:30,
+  })
+  // 销售列表
+  const sellerList = ref([])
+  // 货币列表
+  const currencyList=ref([])
+
+  // -----------------弹窗
+  const editPreForm=ref(null)
+
+  const dialog=reactive({
+    // 更改合同状态
+    editPreShow:false,
+    title:'',
+    editPreForm:{
+      company_name:'',
+      new_company:0,
+      seller_id:'',
+      seller_name:'',
+      placement_amount:'',
+      amount_unit:'CNY',
+      start_date:'',
+      end_date:'',
+      remake:''
+    },
+    rules:{
+      company_name:{required:true,message:'客户名称不能为空',trigger:'blur'},
+      seller_id:{required:true,message:'销售不能为空',trigger:'change'},
+      placement_amount:[{required:true,message:'到款金额不能为空',trigger:'blur'},
+      {
+        validator:(rule,value,callback)=>{
+          if(!parseFloat(value)){
+            callback(new Error('到款金额格式错误'))
+          }else{
+            callback()
+          }
+        },
+        trigger:'blur'
+      }],
+      start_date:{required:true,message:'约定有效期不能为空',trigger:'change'}
+    },
+    validityDate:[]
+  })
+  // 是否是新公司的复选框勾选判断
+  const is_new_company=ref(false)
+
+  // 监听
+  watch(()=>placemenetPre.createtime,(newVal)=>{
+    console.log(newVal);
+    if(!newVal){
+      placemenetPre.searchParams.start_date=''
+      placemenetPre.searchParams.end_date=''
+    }else{
+      placemenetPre.searchParams.start_date = newVal[0]
+      placemenetPre.searchParams.end_date = newVal[1]
+    }
+    searchPlacementPre()
+  })
+
+  watch(()=>dialog.editPreForm.new_company,(newVal)=>{
+    if(newVal==1){
+      is_new_company.value=true
+    }else{
+      is_new_company.value=false
+    }
+  })
+
+  watch(()=>dialog.validityDate,(newVal)=>{
+    console.log(newVal);
+    if(!newVal){
+      dialog.editPreForm.start_date=''
+      dialog.editPreForm.end_date=''
+    }else{
+      dialog.editPreForm.start_date = newVal[0]
+      dialog.editPreForm.end_date = newVal[1]
+    }
+  })
+
+//  --------------------------method
+
+  //获取销售列表
+  const getSellerListFun=()=>{
+    getSellerList().then(res=>{
+      sellerList.value=res.data || []
+    })
+  }
+  // 销售选中
+  const selectSeller=(value)=>{
+    dialog.editPreForm.seller_name=sellerList.value.find(item => item.admin_id==value).real_name
+  }
+
+  // 获取货币列表
+  const getCurrencyListFun=()=>{
+    getCurrencyList().then(res=>{
+      currencyList.value=res.data || []
+    })
+  }
+
+  // 预到款登记列表
+  const placementPreList=()=>{
+    console.log(placemenetPre.searchParams,'请求列表');
+  }
+  // 切换每页的数量
+  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 sortChange=({order,prop})=>{
+    console.log(order,prop);
+    searchPlacementPre()
+  }
+
+  // 补录合同
+  const supplementaryContract=(row)=>{  
+    // console.log(id);
+    router.push({path:'/financial/list/contractProgress',query:{
+      supplementaryId:row.id,
+      company_name:row.company_name,
+      seller_id:'row.seller_id',
+      seller_name:'row.seller_name',
+      amount_unit:row.amount_unit,
+      placement_amount:row.placement_amount,
+      new_company:row.new_company,
+      start_date:row.start_date,
+      end_date:row.end_date
+    }})
+  }
+
+  //新增预到款
+  const addPre=()=>{
+    dialog.title='新增到款预登记'
+    dialog.editPreShow=true
+  }
+  //编辑预到款
+  const editPre=(row)=>{
+    dialog.editPreForm.company_name=row.company_name
+    dialog.editPreForm.new_company=row.new_company
+    dialog.editPreForm.seller_id=row.seller_id
+    dialog.editPreForm.seller_name=row.seller_name
+    dialog.editPreForm.placement_amount=row.placement_amount
+    dialog.editPreForm.amount_unit=row.amount_unit
+    dialog.editPreForm.remake=row.remake
+    dialog.validityDate=[row.start_date,row.end_date]
+    dialog.title='编辑到款预登记'
+    dialog.editPreShow=true
+  }
+
+  //弹窗关闭动画 回调
+  const dialogClosed=()=>{
+    dialog.editPreForm.company_name=''
+    dialog.editPreForm.new_company=0
+    dialog.editPreForm.seller_id=''
+    dialog.editPreForm.seller_name=''
+    dialog.editPreForm.placement_amount=''
+    dialog.editPreForm.amount_unit='CNY'
+    dialog.editPreForm.remake=''
+    dialog.validityDate=[]
+    setTimeout(()=>{
+      editPreForm.value.clearValidate()
+    },0)
+  }
+
+  // 提交
+  const submitForm=()=>{
+    editPreForm.value.validate((valid)=>{
+      if(valid){
+        console.log(dialog.editPreForm);
+        // updateRegisterStatus(dialog.contractStatusForm).then(res=>{
+          placementPreList()
+          dialog.editPreShow=false
+          ElMessage.success(`${dialog.title}成功`)
+        // })
+      }
+    })
+  }
+  // 删除
+  const delteRecord=(row)=>{
+    let hintText = '已补录合同,删除后不可恢复,是否确认删除该条到款预登记信息?'
+    if(Math.random()>0.5){
+      hintText='删除后不可恢复,是否确认删除该条到款预登记信息?'
+    }
+    ElMessageBox.confirm(hintText,'操作提示',    
+    {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning',
+    }).then(res=>{
+      // registerDelete({contract_register_id:row.contract_register_id}).then(res=>{
+      ElMessage.success('删除成功')
+      placementPreList()
+      // })
+    }).catch(()=>{})
+  }
+
+  //  ---------------------created
+  getSellerListFun()
+  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: 340px;margin-right: 30px;" @input="searchPlacementPre" clearable />
+        <el-date-picker v-model="placemenetPre.createtime" start-placeholder="开始日期"
+        end-placeholder="结束日期" style="max-width: 240px;"
+        value-format="YYYY-MM-DD" type="daterange"></el-date-picker>
+      </div>
+      <!-- 按钮区域 -->
+      <div class="placemenetPre-top-option-zone" v-permission="'financial:placementPre:add'">
+        <el-button type="primary" size="large" style="color: white;"
+        @click="addPre" class="element-common-button">新增</el-button>         
+      </div>
+    </div>
+    <div class="placemenetPre-table-zone">
+      <!-- 表格 -->
+      <el-table :data="placemenetPre.tableData" border max-height="695px" @sort-change="sortChange"
+      size="default" style="position: sticky;"> 
+        <el-table-column label="客户名称" prop="company_name"
+        show-overflow-tooltip min-width="120"></el-table-column>
+        <el-table-column label="是否新客户" prop="new_company" width="100"></el-table-column>
+        <el-table-column label="销售" width="90" prop="seller">
+          <!-- <template #default="{row}">
+            
+          </template> -->
+        </el-table-column>
+        <el-table-column label="到款金额" prop="placement_amount" width="120"></el-table-column>
+        <el-table-column label="金额单位" prop="amount_unit" width="90">
+        </el-table-column>
+        <el-table-column label="约定有效期" width="210" prop="contract_date">
+          <template #default="{row}">
+            {{(row.start_date+' 至 '+row.end_date)}}
+          </template>
+        </el-table-column>
+        <el-table-column label="备注" prop="remark" show-overflow-tooltip></el-table-column>
+        <el-table-column label="创建时间" prop="create_time" width="165" sortable="custom"></el-table-column>
+        <el-table-column label="创建人" width="90" prop="creator"></el-table-column>
+        <el-table-column label="操作" fixed="right" 
+        v-permission="['financial:placementPre:supplementary','financial:placementPre:edit','financial:placementPre:delete']">
+          <template #default="{row}">
+            <div class="table-options">
+              <span class="table-option-buttons" v-permission="'financial:placementPre:supplementary'"
+              @click="supplementaryContract(row)">
+                补录合同
+              </span>
+              <span class="table-option-buttons" v-permission="'financial:placementPre:edit'"
+              @click="editPre(row)">
+                编辑
+              </span>
+              <span class="table-option-buttons" v-permission="'financial:placementPre:delete'"
+              @click="delteRecord(row)" style="color:var(--dangerColor);">
+                删除
+              </span>
+            </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.editPreShow" :title="dialog.title" width="556px" @closed="dialogClosed"
+     :close-on-click-modal="false">
+      <!-- <template style="display: flex;justify-content: center;"> -->
+        <el-form :model="dialog.editPreForm" ref="editPreForm" label-width="130px"
+        :rules="dialog.rules" style="margin-top: 10px;">
+          <el-form-item label="客户名称" prop="company_name">
+            <el-input v-model="dialog.editPreForm.company_name"
+            placeholder="请输入客户名称" style="width:260px" />
+            <el-checkbox v-model="is_new_company" label="新客户" style="margin-left: 20px;min-width: 100px;"
+            size="large" @change="(value) => dialog.editPreForm.new_company = value?1:0" />
+          </el-form-item>
+          <el-form-item label="销售" prop="seller_id">
+            <el-select v-model="dialog.editPreForm.seller_id" placeholder="请选择销售" style="width: 346px;"
+            filterable @change="selectSeller">
+              <el-option :label="item.real_name" :value="item.admin_id" v-for="item in sellerList" :key="item.admin_id"></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="到款金额" id="contractInfo-contractAmount"
+          prop="placement_amount">
+            <el-input v-model.trim="dialog.editPreForm.placement_amount"
+            placeholder="请输入到款金额" style="width: 206px;" />
+            <el-select v-model="dialog.editPreForm.amount_unit" placeholder="请选择货币类型" 
+            style="margin-left: 20px;width: 120px;">
+              <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="dialog.validityDate" style="max-width: 346px;"
+            start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD"
+            :clearable="false">
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="备注" prop="remake">
+            <el-input
+              v-model="dialog.editPreForm.remake"
+              style="width: 346px;"
+              :rows="3"
+              placeholder="请输入内容"
+              type="textarea"
+            />
+          </el-form-item>
+        </el-form>
+      <!-- </template> -->
+      <template #footer>
+        <div>
+          <el-button @click="dialog.editPreShow=false">取消</el-button>
+          <el-button type="primary" @click="submitForm" 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-top-option-zone{
+        // margin-bottom: 8px;
+        .element-common-button{
+          width: 118px;
+          margin-left: 30px;
+          font-size: 14px;
+        }
+      }
+    }
+    .placemenetPre-table-zone{
+      margin-top: 20px;
+    }
+  }
+</style>
+<style lang="scss">
+  #placemenetPre-list-container{
+    .el-dialog__footer{
+      padding-top: 0!important;
+      padding: 0 0 36px 0;
+    }
+    .el-date-editor{
+      .el-input__wrapper{
+        width: 286px;
+      }
+    }
+  }
+
+</style>