Browse Source

冲突解决

hbchen 2 years ago
parent
commit
38c97805eb

+ 0 - 1
src/api/crm.js

@@ -52,7 +52,6 @@ export function getSellerTeamList() {
      method:'get'
  })
 }
-
 // 根据合同编号搜索合同列表
  /**
   * 

+ 42 - 0
src/api/financialStatistics.js

@@ -120,3 +120,45 @@ export function setServiceAmount(data) {
         responseType:data.is_export==1?'blob':'text',
     })
    }
+// 未开票统计
+ /**
+ * 未开票统计列表
+ * @param data.page_size - 每页数据量 - 必填
+ * @param data.current - 页码 - 必填
+ * @param data.keyword - 关键词-客户名称/销售
+ * @param data.seller_ids - 销售ID
+ * @param data.service_type - 套餐类型
+ * @param data.sort_param - 'start_date':开票日 、 'end_date':到款日
+ * @param data.sort_type - asc 正序,desc 倒叙
+ * @param data.is_export - 是否是导出:0-否;1-是
+ * @returns 
+ */
+export function getWaitInvoiceList(data) {
+    return request({
+        url:'/census/invoice_payment/not_invoice/list',
+        method:'get',
+        params:data,
+        responseType:data.is_export==1?'blob':'text',
+    })
+}
+// 开票未到款统计
+ /**
+ * 开票未到款统计列表
+ * @param data.page_size - 每页数据量 - 必填
+ * @param data.current - 页码 - 必填
+ * @param data.keyword - 关键词-客户名称/销售
+ * @param data.seller_ids - 销售ID
+ * @param data.service_type - 套餐类型
+ * @param data.sort_param - 'invoice_time':开票日
+ * @param data.sort_type - asc 正序,desc 倒叙
+ * @param data.is_export - 是否是导出:0-否;1-是
+ * @returns 
+ */
+ export function getWaitPaymentList(data) {
+    return request({
+        url:'/census/invoice_payment/not_payment/list',
+        method:'get',
+        params:data,
+        responseType:data.is_export==1?'blob':'text',
+    })
+}

+ 2 - 2
src/assets/svg-icons/financial/info.svg

@@ -1,5 +1,5 @@
-<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M9 16.5C13.1421 16.5 16.5 13.1421 16.5 9C16.5 4.85786 13.1421 1.5 9 1.5C4.85786 1.5 1.5 4.85786 1.5 9C1.5 13.1421 4.85786 16.5 9 16.5Z" fill="#C0C4CC"/>
+<svg width="18" height="18" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
+<path d="M9 16.5C13.1421 16.5 16.5 13.1421 16.5 9C16.5 4.85786 13.1421 1.5 9 1.5C4.85786 1.5 1.5 4.85786 1.5 9C1.5 13.1421 4.85786 16.5 9 16.5Z"/>
 <path d="M9 12V9" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 <path d="M9 6H9.0075" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 </svg>

+ 1 - 0
src/styles/main.scss

@@ -86,6 +86,7 @@ div::-webkit-scrollbar-corner {
   font-size: 16px;
   width: 130px;
   cursor: pointer;
+  box-sizing: border-box;
 }
 // 主题按钮 - 大
 .main-button-large{

+ 4 - 16
src/views/financialManagement/invoice/invoiceList.vue

@@ -1,5 +1,6 @@
 <script setup>
 import {getSellerTeamList} from '@/api/crm'
+import currencyAmountBox from '@/views/financialStatistics/components/currencyAmountBox.vue';
 import getCom from '../composition/IandPList'
 import '../style/iandPList.scss'
 
@@ -55,22 +56,9 @@ invoice.placementList()
       </div>
       <div class="iandP-table-container">
         <div class="iandP-table-top">
-          <div class="iandP-top-amout">
-            <div class="iandP-amout-box">
-              <div class="iandP-amout-box-text">
-                <span>已开票合计金额(换算后)</span>
-                <span>{{ data.amountTotal }}(CNY)</span>
-              </div>
-              <svg-Icon name="svgIcon-financial-calculation" size="40" style="min-width: 40px;" />
-            </div>
-            <div class="iandP-amout-box" v-for="item in data.countryAmountList" :key="item.code">
-              <div class="iandP-amout-box-text">
-                <span>{{ item.name }}({{ item.code }})</span>
-                <span>{{ item.amount }}</span>
-              </div>
-              <img :src="item.flag_img" style="height: 40px;width: 40px;" />
-            </div>
-          </div>
+          <currencyAmountBox :currnecyData="{currencyList:data.countryAmountList,currencyTotal:data.amountTotal}">
+            已开票合计金额(换算后)
+          </currencyAmountBox>
           <el-button class="element-common-button" style="margin-bottom: 10px;" size="large" @click="invoice.placementExport">导出</el-button>
         </div>
         <!-- 表格 -->

+ 4 - 17
src/views/financialManagement/placement/placementList.vue

@@ -1,5 +1,6 @@
 <script setup>
 import {getSellerTeamList} from '@/api/crm'
+import currencyAmountBox from '@/views/financialStatistics/components/currencyAmountBox.vue';
 import getCom from '../composition/IandPList'
 import '../style/iandPList.scss'
 
@@ -57,23 +58,9 @@ placement.placementList()
       </div>
       <div class="iandP-table-container">
         <div class="iandP-table-top">
-          <div class="iandP-top-amout">
-            <div class="iandP-amout-box">
-              <div class="iandP-amout-box-text">
-                <span>已到款合计金额(换算后)</span>
-                <span>{{ data.amountTotal }}(CNY)</span>
-              </div>
-              <svg-Icon name="svgIcon-financial-calculation" style="min-width: 40px;"
-              size="40" />
-            </div>
-            <div class="iandP-amout-box" v-for="item in data.countryAmountList" :key="item.code">
-              <div class="iandP-amout-box-text">
-                <span>{{ item.name }}({{ item.code }})</span>
-                <span>{{ item.amount }}</span>
-              </div>
-              <img :src="item.flag_img" style="height: 40px;width: 40px;" />
-            </div>
-          </div>
+          <currencyAmountBox :currnecyData="{currencyList:data.countryAmountList,currencyTotal:data.amountTotal}">
+            已到款合计金额(换算后)
+          </currencyAmountBox>
           <el-button class="element-common-button" style="margin-bottom: 10px;" size="large" @click="placement.placementExport">导出</el-button>
         </div>
         <!-- 表格 -->

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

@@ -0,0 +1,383 @@
+<!-- 1、到款预登记,之后的版本改为预登记 - registrationPre.vue
+      2、此文件仅作备份-->
+<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 {getPrePlacementList,prePlacementAdd,prePlacementEdit,prePlacementDelete} from '@/api/financialMana'
+
+
+const router = useRouter()
+
+  const placemenetPre=reactive({
+    searchParams:{
+      keyword:'',
+      start_date:'',
+      end_date:'',
+      sort_type:'',
+      page_size:10,
+      current:1,
+    },
+    // 创建时间数组
+    createtime:[],
+    tableData:[],
+    total:0,
+  })
+  // 销售列表
+  const sellerList = ref([])
+  // 货币列表
+  const currencyList=ref([])
+
+  // -----------------弹窗
+  const editPreForm=ref(null)
+
+  const dialog=reactive({
+    // 更改合同状态
+    editPreShow:false,
+    title:'',
+    editPreForm:{
+      company_name:'',
+      payment_date:'',
+      amount:'',
+      currency_unit:'CNY',
+      start_date:'',
+      end_date:'',
+      remark:''
+    },
+    rules:{
+      company_name:{required:true,message:'客户名称不能为空',trigger:'blur'},
+      payment_date:{required:true,message:'到款日不能为空',trigger:'blur'},
+      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:[]
+  })
+
+  // 监听
+  watch(()=>placemenetPre.createtime,(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.validityDate,(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 getCurrencyListFun=()=>{
+    getCurrencyList().then(res=>{
+      currencyList.value=res.data || []
+    })
+  }
+
+  // 预到款登记列表
+  const placementPreList=()=>{
+    getPrePlacementList(placemenetPre.searchParams).then(res=>{
+      placemenetPre.tableData=res.data.list || []
+      placemenetPre.total=res.data.page?.total || 0
+      // console.log(res);
+    })
+  }
+  // 切换每页的数量
+  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})=>{
+    console.log(order);
+    placemenetPre.searchParams.sort_type = order=='ascending'?1:order=='descending'?2:''
+    searchPlacementPre()
+  }
+
+  // 补录合同
+  const supplementaryContract=(row)=>{  
+    // console.log(id);
+    router.push({path:'/financial/list/contractProgress',query:{
+      supplementaryId:row.pre_pay_id,
+      company_name:row.company_name,
+      currency_unit:row.currency_unit,
+      placement_amount:row.origin_amount,
+      start_date:row.start_date,
+      end_date:row.end_date
+    }})
+  }
+
+  //新增预到款
+  const addPre=()=>{
+    dialog.title='新增到款预登记'
+    dialog.editPreShow=true
+  }
+  //编辑预到款
+  const editPre=(row)=>{
+    dialog.editPreForm.pre_pay_id = row.pre_pay_id
+    dialog.editPreForm.company_name=row.company_name
+    dialog.editPreForm.payment_date=row.payment_date
+    dialog.editPreForm.amount=row.origin_amount
+    dialog.editPreForm.currency_unit=row.currency_unit
+    dialog.editPreForm.remark=row.remark
+    dialog.validityDate=[row.start_date,row.end_date]
+    dialog.title='编辑到款预登记'
+    dialog.editPreShow=true
+  }
+
+  //弹窗关闭动画 回调
+  const dialogClosed=()=>{
+    dialog.editPreForm.pre_pay_id = ''
+    dialog.editPreForm.company_name=''
+    dialog.editPreForm.payment_date=''
+    dialog.editPreForm.amount=''
+    dialog.editPreForm.currency_unit='CNY'
+    dialog.editPreForm.remark=''
+    dialog.validityDate=[]
+    setTimeout(()=>{
+      editPreForm.value.clearValidate()
+    },0)
+  }
+
+  // 提交
+  const submitForm=()=>{
+    editPreForm.value.validate((valid)=>{
+      if(valid){
+        console.log(dialog.editPreForm);
+        dialog.editPreForm.amount = parseFloat(dialog.editPreForm.amount)
+        let prePlacementProp=prePlacementAdd
+        if(dialog.editPreForm.pre_pay_id){
+          // 编辑
+          prePlacementProp=prePlacementEdit
+        }
+        prePlacementProp(dialog.editPreForm).then(res=>{
+          dialog.editPreShow=false
+          ElMessage.success(`${dialog.title}成功`)
+          placementPreList()
+        })
+      }
+    })
+  }
+  // 删除
+  const delteRecord=(row)=>{
+    let hintText = '已补录合同,删除后不可恢复,是否确认删除该条到款预登记信息?'
+    if(row.contract_register_id== 0){
+      hintText='未补录合同,删除后不可恢复,是否确认删除该条到款预登记信息?'
+    }
+    ElMessageBox.confirm(hintText,'操作提示',    
+    {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning',
+    }).then(res=>{
+      prePlacementDelete({pre_pay_id:row.pre_pay_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"
+      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="payment_date"
+        show-overflow-tooltip min-width="110"></el-table-column>
+        <el-table-column label="到款金额" prop="origin_amount" width="120"></el-table-column>
+        <el-table-column label="金额单位" prop="unit_name" width="90">
+        </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="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="admin_name"></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:346px" />
+          </el-form-item>
+          <el-form-item label="到款日" prop="payment_date">
+            <el-date-picker v-model="dialog.editPreForm.payment_date" placeholder="请选择到款日" 
+            :clearable="false" value-format="YYYY-MM-DD" format="YYYY-MM-DD"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item label="到款金额" id="contractInfo-contractAmount"
+          prop="amount">
+            <el-input v-model.trim="dialog.editPreForm.amount"
+            placeholder="请输入到款金额" style="width: 206px;" />
+            <el-select v-model="dialog.editPreForm.currency_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="remark">
+            <el-input
+              v-model="dialog.editPreForm.remark"
+              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: 346px;
+      }
+    }
+  }
+
+</style>

+ 0 - 33
src/views/financialManagement/style/iandPList.scss

@@ -34,39 +34,6 @@
       align-items: flex-end;
       justify-content: space-between;
       margin-bottom: 20px;
-      .iandP-top-amout{
-        display: flex;
-        flex-wrap: wrap;
-        .iandP-amout-box{
-          display: flex;
-          justify-content: space-between;
-          height: 88px;
-          width: 274px;
-          background: #FFFFFF;
-          border: 1px solid #DCDFE6;
-          box-shadow: 0px 4px 12px rgba(153, 153, 153, 0.08);
-          border-radius: 8px;
-          padding: 14px 20px 20px;
-          box-sizing: border-box;
-          margin-right: 30px;
-          margin-bottom: 10px;
-          .iandP-amout-box-text{
-            display: flex;
-            flex-direction: column;
-            justify-content: space-between;
-            span{
-              font-size: 18px;
-              font-weight: 700;
-              color: $mainTextColor;
-              &:first-child{
-                font-size: 14px;
-                font-weight: 400;
-                color: $secondaryTextColor;
-              }
-            }
-          }
-        }
-      }
     }
   }
 }

+ 2 - 7
src/views/financialStatistics/commodityPayment.vue

@@ -168,8 +168,7 @@ const moment = inject('$moment')
   // --------------------------销售选择
 
   const sellerArray=ref([])
-  // 销售类型
-  const sellerTypeArray=ref(['','FICC销售','权益销售'])
+
   const sellerChange=(value)=>{
     searchParams.seller_ids = value.join(',')
     searchCommodityP()
@@ -464,11 +463,7 @@ const moment = inject('$moment')
           </el-table-column>
           <el-table-column label="销售" prop="seller_name" align="center"></el-table-column>
           <el-table-column label="销售组别" prop="seller_group_name" align="center"></el-table-column>
-          <el-table-column label="销售类型" prop="seller_type" align="center">
-            <template #default="{row}">
-              {{ sellerTypeArray[row.seller_type] }}
-            </template>
-          </el-table-column>
+          <el-table-column label="销售类型" prop="seller_type" align="center"></el-table-column>
           <el-table-column label="套餐信息" prop="services_name" align="center">
             <template #default="{row}">
               <span v-if="row.payment_amount&&row.payment_amount!=0" @click="setServiceInfo(row)"

+ 64 - 0
src/views/financialStatistics/components/currencyAmountBox.vue

@@ -0,0 +1,64 @@
+<script setup>
+  const props=defineProps({
+    currnecyData:{
+      type:Object,
+      required:true,
+      default:()=>[]
+    }
+  })
+</script>
+
+<template>
+    <div class="iandP-top-amout" v-if="currnecyData">
+      <div class="iandP-amout-box">
+        <div class="iandP-amout-box-text">
+          <span><slot></slot></span>
+          <span>{{ currnecyData.currencyTotal }}(CNY)</span>
+        </div>
+        <svg-Icon name="svgIcon-financial-calculation" size="40" style="min-width: 40px;" />
+      </div>
+      <div class="iandP-amout-box" v-for="item in currnecyData.currencyList" :key="item.code">
+        <div class="iandP-amout-box-text">
+          <span>{{ item.name }}({{ item.code }})</span>
+          <span>{{ item.amount }}</span>
+        </div>
+        <img :src="item.flag_img" style="height: 40px;width: 40px;" />
+      </div>
+    </div>
+</template>
+  
+<style lang="scss" scoped>
+.iandP-top-amout{
+  display: flex;
+  flex-wrap: wrap;
+  .iandP-amout-box{
+    display: flex;
+    justify-content: space-between;
+    height: 88px;
+    width: 274px;
+    background: #FFFFFF;
+    border: 1px solid #DCDFE6;
+    box-shadow: 0px 4px 12px rgba(153, 153, 153, 0.08);
+    border-radius: 8px;
+    padding: 14px 20px 20px;
+    box-sizing: border-box;
+    margin-right: 30px;
+    margin-bottom: 10px;
+    .iandP-amout-box-text{
+      display: flex;
+      flex-direction: column;
+      justify-content: space-between;
+      span{
+        font-size: 18px;
+        font-weight: 700;
+        color: $mainTextColor;
+        &:first-child{
+          font-size: 14px;
+          font-weight: 400;
+          color: $secondaryTextColor;
+        }
+      }
+    }
+  }
+}
+</style>

+ 1 - 1
src/views/financialStatistics/salesStatistics.vue

@@ -182,7 +182,7 @@
             <template #header>
               <el-tooltip content="收入金额为开票金额换算后的人民币金额" placement="top">
                 <span style="display: inline-flex;align-items: center;">收入金额(元)
-                  <svg-Icon name="svgIcon-financial-info" size="18" style="margin-left: 5px;color: white;" />
+                  <svg-Icon name="svgIcon-financial-info" size="18" color="#C0C4CC" style="margin-left: 5px;color: white;" />
                 </span>
               </el-tooltip>
             </template>

+ 216 - 0
src/views/financialStatistics/waitInvoice.vue

@@ -0,0 +1,216 @@
+<script setup>
+  import {getSellerTeamList} from '@/api/crm'
+  import {getWaitInvoiceList} from '@/api/financialStatistics'
+
+  import currencyAmountBox from './components/currencyAmountBox.vue';
+  import {downloadByFlow} from '@/utils/common-methods'
+
+  const searchParams=reactive({
+    keyword:'',
+    list_param:'',
+    seller_ids:'',
+    current:1,
+    page_size:10,
+    sort_param:'',
+    sort_type:'',
+    is_export:0
+  })
+  
+  const tableData=reactive({
+    list:[],
+    total:0,
+    rowMergeArray:[],
+    currencyList:[],
+    currencyTotal:0,
+  })
+  // ---------------------------------销售模块 
+  const sellerArray=ref([])
+  const sellerChange=(value)=>{
+    searchParams.seller_ids = value.join(',')
+    searchList()
+  }
+  // 获取销售列表
+  const getSellerListFun=()=>{
+    getSellerTeamList().then(res=>{
+      sellerArray.value = res.data?.all_list || []
+    })
+  }
+
+  const searchList=()=>{
+    searchParams.current=1
+    getList()
+  }
+
+  const sortChange=({prop,order})=>{
+    // console.log({prop,order});
+    searchParams.sort_param = order?prop:''
+    searchParams.sort_type=order=='descending'?'desc':order=='ascending'?'asc':''
+    getList()
+  }
+
+  const getList=()=>{
+    getWaitInvoiceList(searchParams).then(res=>{
+      // console.log(res);
+      tableData.total = res.data.page?.total || 0
+      let dataTemp=res.data?.list?.data_list||[]
+      tableData.rowMergeArray=[]
+      tableData.list=[]
+      dataTemp.map((item,index) =>{
+        if(!item.not_invoice_list?.length>0){
+          tableData.rowMergeArray.push(1)
+          tableData.list.push({
+            serial_number:searchParams.page_size*(searchParams.current-1)+index+1,
+            ...item
+          })
+        }else{
+          tableData.rowMergeArray.push(item.not_invoice_list.length)
+          item.not_invoice_list.map((it,ind) =>{
+            if(ind>0){
+              tableData.rowMergeArray.push(0)
+            }
+            tableData.list.push({
+              serial_number:searchParams.page_size*(searchParams.current-1)+index+1,
+              ...item,
+              ...{not_invoiced_amount_total:it.not_invoiced_amount_total,
+                service_product_id:it.service_product_id,
+                seller_name:it.seller_name,
+                rai_seller_name:it.rai_seller_name,
+                seller_group_name:it.seller_group_name,
+                rai_seller_group_name:it.rai_seller_group_name,
+                seller_type:it.seller_type}
+            })
+          })
+        }
+      })
+
+      tableData.currencyList = res.data?.list?.not_invoice_currency_total || []
+      tableData.currencyTotal = res.data?.list?.not_invoice_total||0
+      
+    })
+  }
+  const changePageSize=(pageSize)=>{
+    searchParams.page_size = pageSize
+    getList()
+  }
+  const changePageNo = (pageNo)=>{
+    searchParams.current = pageNo
+    getList()
+  }
+  // 合并单元格
+  const cellMerge=({ row,column,rowIndex,columnIndex})=>{
+    if([0,1,2,3,4,5,6].includes(columnIndex)){
+      const _row = tableData.rowMergeArray[rowIndex];
+      return {
+        rowspan: _row,
+        colspan: 1
+      };
+    }
+  }
+
+  // 导出
+  const watiInvoiceExport=()=>{
+    getWaitInvoiceList({...searchParams,is_export:1}).then(res=>{
+      downloadByFlow(res,'xlsx',`未开票统计表`)
+    })
+  }
+
+// --------------------------------created
+  getSellerListFun()
+  getList()
+</script>
+
+<template>
+    <div class="wait-invoice-container" id="wait-invoice-container">
+      <div class="wait-invoice-searchZone">
+        <el-input v-model="searchParams.keyword" placeholder="请输入客户名称/合同编号" 
+        clearable  @input="searchList" class="statistics-search-item" style="width: 308px;"></el-input>
+        <el-cascader :options="sellerArray" style="margin-left: 30px;margin-bottom: 8px;z-index: 100;min-width: 308px;" filterable collapse-tags-tooltip
+          @change="sellerChange" placeholder="请选择销售" clearable collapse-tags :show-all-levels="false"
+          :props="{multiple:true,label:'seller_name',value:'seller_id',children:'child',emitPath:false}" key="seller" >
+        </el-cascader>
+        <el-select v-model="searchParams.list_param" placeholder="请选择套餐类型" style="width: 308px;"
+          @change="searchList" class="statistics-search-item" clearable >
+          <el-option label="FICC套餐" :value="1"></el-option>
+          <el-option label="权益套餐" :value="2"></el-option>
+        </el-select>
+      </div>
+      <div class="iandP-table-top">
+        <currencyAmountBox :currnecyData="{currencyList:tableData.currencyList,currencyTotal:tableData.currencyTotal}">
+          未开票合计金额(换算后)
+        </currencyAmountBox>
+        <el-button class="element-common-button" style="margin-bottom: 10px;width: 118px;" size="large" @click="watiInvoiceExport">导出</el-button>
+      </div>
+      <el-table :data="tableData.list" border max-height="579px" @sort-change="sortChange" :span-method="cellMerge">
+        <el-table-column label="序号" prop="serial_number" width="70px" align="center"></el-table-column>
+        <el-table-column label="客户名称" align="center" prop="company_name" show-overflow-tooltip></el-table-column>
+        <el-table-column label="合同编号" align="center" prop="contract_code" show-overflow-tooltip></el-table-column>
+        <el-table-column label="合同开始时间" align="center" prop="start_date" sortable="custom"></el-table-column>
+        <el-table-column label="合同结束时间" align="center" prop="end_date" sortable="custom"></el-table-column>
+        <el-table-column label="合同金额" align="center" prop="contract_amount"></el-table-column>
+        <el-table-column label="金额单位" align="center" prop="unit_name"></el-table-column>
+        <el-table-column label="未开票金额" align="center" prop="not_invoiced_amount_total"></el-table-column>
+        <el-table-column label="套餐类型" align="center" prop="service_type">
+          <template #header>
+            <el-tooltip content="合同套餐类型" placement="top">
+              <span style="display: inline-flex;align-items: center;">套餐类型
+                <svg-Icon name="svgIcon-financial-info" size="18" style="margin-left: 5px;color: white;" />
+              </span>
+            </el-tooltip>
+          </template>
+          <template #default="{row}">
+            {{ row.service_product_id==1?'FICC套餐':row.service_product_id==2?'权益套餐':'--' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="销售" align="center" prop="seller_name" >
+          <template #header>
+            <el-tooltip content="合同销售" placement="top">
+              <span style="display: inline-flex;align-items: center;">销售
+                <svg-Icon name="svgIcon-financial-info" size="18" style="margin-left: 5px;color: white;" />
+              </span>
+            </el-tooltip>
+          </template>
+          <template #default="{row}">
+            {{ (row.seller_type=='FICC销售'?row.seller_name:row.rai_seller_name) || '--' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="销售组别" align="center" prop="seller_group_name" >
+          <template #default="{row}">
+            {{ (row.seller_type=='FICC销售'?row.seller_group_name:row.rai_seller_group_name) || '--' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="销售类型" align="center" prop="seller_type" ></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="searchParams.page_size" :page_no="searchParams.current" 
+      style="display: flex;justify-content: flex-end;margin-top: 20px;" 
+      :total="tableData.total" @handleCurrentChange="changePageNo" @handleSizeChange="changePageSize"/>
+    </div>
+</template>
+  
+<style lang="scss" scoped>
+  .wait-invoice-container{
+    min-height: 100%;
+    .wait-invoice-searchZone{
+      display: flex;
+      flex-wrap: wrap;
+      margin-left: -30px;
+      margin-bottom: 20px;
+      .statistics-search-item{
+        margin-bottom: 8px;
+        margin-left: 30px;
+      }
+    }
+    .iandP-table-top{
+      display: flex;
+      align-items: flex-end;
+      justify-content: space-between;
+      margin-bottom: 20px;
+    }
+  }
+</style>

+ 182 - 0
src/views/financialStatistics/waitPayment.vue

@@ -0,0 +1,182 @@
+<script setup>
+import { getSellerTeamList } from '@/api/crm'
+import {getWaitPaymentList} from '@/api/financialStatistics'
+
+import currencyAmountBox from './components/currencyAmountBox.vue'
+import {downloadByFlow} from '@/utils/common-methods'
+
+const searchParams = reactive({
+    keyword: '',
+    list_param: '',
+    seller_ids: '',
+    current: 1,
+    page_size: 10,
+    sort_type: '',
+    is_export:0
+})
+
+const tableData = reactive({
+    list: [],
+    total: 0,
+    currencyList: [],
+    currencyTotal: 0,
+})
+// ---------------------------------销售模块 
+const sellerArray = ref([])
+const sellerChange = (value) => {
+    searchParams.seller_ids = value.join(',')
+    searchList()
+}
+// 获取销售列表
+const getSellerListFun=()=>{
+    getSellerTeamList().then(res=>{
+      sellerArray.value = res.data?.all_list || []
+    })
+}
+
+const searchList = () => {
+    searchParams.current=1
+    getList()
+}
+
+const sortChange = ({ prop, order }) => {
+    // console.log({prop,order});
+    // searchParams.sort_param = order ? prop : ''
+    searchParams.sort_type = order == 'descending' ? 'desc' : order == 'ascending' ? 'asc' : ''
+    getList()
+}
+
+const getList = () => {
+    getWaitPaymentList(searchParams).then(res=>{
+      // console.log(res);
+      tableData.total = res.data.page?.total || 0
+      let dataTemp=res.data?.list?.data_list||[]
+      tableData.list=[]
+      dataTemp.map((item,index) =>{
+        tableData.list.push({
+        serial_number:searchParams.page_size*(searchParams.current-1)+index+1,
+        ...item,...(item.invoice_payment_list?item.invoice_payment_list[0]:{})
+        })
+      })
+      tableData.currencyList = res.data?.list?.not_payment_currency_total || []
+      tableData.currencyTotal = res.data?.list?.not_payment_total||0 
+    })
+}
+const changePageSize = (pageSize) => {
+    searchParams.page_size = pageSize
+    getList()
+}
+const changePageNo = (pageNo) => {
+    searchParams.current = pageNo
+    getList()
+}
+
+// 导出
+const watiPlacementExport = () => {
+    getWaitPaymentList({...searchParams,is_export:1}).then(res=>{
+      downloadByFlow(res,'xlsx',`开票未到款统计表`)
+    })
+}
+
+// --------------------------------created
+getSellerListFun()
+getList()
+</script>
+
+<template>
+    <div class="wait-placement-container" id="wait-placement-container">
+        <div class="wait-placement-searchZone">
+            <el-input v-model="searchParams.keyword" placeholder="请输入客户名称/合同编号" clearable @input="searchList"
+                class="statistics-search-item" style="width: 308px;"></el-input>
+            <el-cascader :options="sellerArray" style="margin-left: 30px;margin-bottom: 8px;z-index: 100;width: 308px;" filterable collapse-tags-tooltip
+            @change="sellerChange" placeholder="请选择销售" clearable collapse-tags :show-all-levels="false"
+            :props="{ multiple: true, label: 'seller_name', value: 'seller_id', children: 'child', emitPath: false }" key="seller">
+            </el-cascader>
+            <el-select v-model="searchParams.list_param" placeholder="请选择套餐类型" @change="searchList"
+                class="statistics-search-item" clearable style="width: 308px;">
+                <el-option label="FICC套餐" :value="1"></el-option>
+                <el-option label="权益套餐" :value="2"></el-option>
+            </el-select>
+        </div>
+        <div class="iandP-table-top">
+            <currencyAmountBox :currnecyData="{currencyList:tableData.currencyList,currencyTotal:tableData.currencyTotal}">
+                开票未到款统计(换算后)
+            </currencyAmountBox>
+            <el-button class="element-common-button" style="margin-bottom: 10px;" size="large"
+                @click="watiPlacementExport">导出</el-button>
+        </div>
+        <el-table :data="tableData.list" border max-height="579px" @sort-change="sortChange">
+            <el-table-column label="序号" prop="serial_number" width="70px" align="center"></el-table-column>
+            <el-table-column label="客户名称" align="center" prop="company_name" show-overflow-tooltip></el-table-column>
+            <el-table-column label="合同编号" align="center" prop="contract_code" show-overflow-tooltip></el-table-column>
+            <el-table-column label="合同有效期" align="center" prop="start_date">
+                <template #default="{ row }">
+                    {{ (row.start_date + ' 至 ' + row.end_date) }}
+                </template>
+            </el-table-column>
+            <el-table-column label="套餐类型" align="center" prop="service_type">
+                <template #header>
+                    <el-tooltip content="开票套餐类型" placement="top">
+                        <span style="display: inline-flex;align-items: center;">套餐类型
+                            <svg-Icon name="svgIcon-financial-info" size="18" style="margin-left: 5px;color: white;" />
+                        </span>
+                    </el-tooltip>
+                </template>
+                <template #default="{row}">
+                    {{ row.service_product_id==1?'FICC套餐':row.service_product_id==2?'权益套餐':'--' }}
+                </template>
+            </el-table-column>
+            <el-table-column label="开票金额" align="center" prop="not_payment_amount">
+                <template #header>
+                    <el-tooltip content="开票未到款金额" placement="top">
+                        <span style="display: inline-flex;align-items: center;">开票金额
+                            <svg-Icon name="svgIcon-financial-info" size="18" style="margin-left: 5px;color: white;" />
+                        </span>
+                    </el-tooltip>
+                </template>
+            </el-table-column>
+            <el-table-column label="金额单位" align="center" prop="unit_name"></el-table-column>
+            <el-table-column label="开票日" align="center" prop="invoice_time" sortable="custom"></el-table-column>
+            <el-table-column label="开票销售" align="center" prop="seller_name"></el-table-column>
+            <el-table-column label="销售组别" align="center" prop="seller_group_name"></el-table-column>
+            <el-table-column label="销售类型" align="center" prop="seller_type">
+                <template #default="{row}">
+                    {{ row.seller_type==1?'FICC销售':row.seller_type==2?'权益销售':'--' }}
+                </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="searchParams.page_size" :page_no="searchParams.current"
+            style="display: flex;justify-content: flex-end;margin-top: 20px;" :total="tableData.total"
+            @handleCurrentChange="changePageNo" @handleSizeChange="changePageSize" />
+    </div>
+</template>
+  
+<style lang="scss" scoped>.wait-placement-container {
+    min-height: 100%;
+
+    .wait-placement-searchZone {
+        display: flex;
+        flex-wrap: wrap;
+        margin-left: -30px;
+        margin-bottom: 20px;
+
+        .statistics-search-item {
+            margin-bottom: 8px;
+            margin-left: 30px;
+        }
+    }
+
+    .iandP-table-top {
+        display: flex;
+        align-items: flex-end;
+        justify-content: space-between;
+        margin-bottom: 20px;
+    }
+}</style>