hbchen 2 лет назад
Родитель
Сommit
86d47d014e

+ 16 - 0
src/api/crm.js

@@ -48,3 +48,19 @@ export function getContractSearchList(data) {
       params:data
   })
 }
+
+// 合同套餐及品种
+ /**
+  * 
+  * @param {
+ * contract_id - 合同ID - 必填
+ * } data 
+ * @returns 
+ */
+export function getServiceDetail(data) {
+ return request({
+     url:'/crm/contract/service_detail',
+     method:'get',
+     params:data
+ })
+}

+ 44 - 1
src/api/financialMana.js

@@ -142,4 +142,47 @@ export function registerDelete(data) {
   })
 }
 
-
+// 开票、到款列表
+//获取列表
+ /**
+  * 
+  * @param {
+ * page_size - 每页数据量 - 必填
+ * current - 页码 - 必填
+ * contract_code - 关键词-合同编号 - 非必填
+ * start_date - 开始日期:格式2022-11-22 - 非必填
+ * end_date - 结束日期:格式2022-11-22 - 非必填
+ * min_amount - 开票金额区间-最小值 - 非必填
+ * max_amount - 开票金额区间-最大值 - 非必填
+ * invoice_type - 类型: 1-开票登记; 2-到款登记 - 必填
+ * } data 
+ * @returns 
+ */
+export function getIandPList(data) {
+ return request({
+     url:'/contract/register/invoice_list',
+     method:'get',
+     params:data
+ })
+}
+//导出excel
+ /**
+  * 
+  * @param {
+ * contract_code - 关键词-合同编号 - 非必填
+ * start_date - 开始日期:格式2022-11-22 - 非必填
+ * end_date - 结束日期:格式2022-11-22 - 非必填
+ * min_amount - 开票金额区间-最小值 - 非必填
+ * max_amount - 开票金额区间-最大值 - 非必填
+ * invoice_type - 类型: 1-开票登记; 2-到款登记 - 必填
+ * } data 
+ * @returns 
+ */
+export function exportIandPList(data) {
+ return request({
+     url:'/contract/register/invoice_export',
+     method:'get',
+     responseType:'blob',
+     params:data
+ })
+}

+ 34 - 8
src/views/financialManagement/components/permissionDia.vue

@@ -25,11 +25,36 @@ import {getPermissionList} from '@/api/crm'
   })
 
   watch(()=>props.visible,(newVal)=>{
-    console.log(newVal);
+    // console.log(newVal);
     if(newVal){
+      // 初始化
+      permissionDia.permissionList.length>0&&permissionDia.permissionList.map(item=>{
+        item.check_list = [];
+        item.checked = false;
+        item.indeterminate = false;
+        item.Items?.map(it => {
+          it.checked=false
+        })
+      })
       permissionDia.permissionChecked=[...props.hasCheckedPermission]
+      U:for (let i = 0,len=permissionDia.permissionChecked.length; i < len; i++) {
+        const chart_permission_id = +permissionDia.permissionChecked[i];
+        for (let j = 0,jLen=permissionDia.permissionList.length; j < jLen; j++) {
+          const element = permissionDia.permissionList[j];
+          let index=element.items.findIndex(it => it.chart_permission_id==chart_permission_id)
+          // console.log(index);
+          if(index!=-1){
+            element.items[index].checked=true
+            element.check_list.push(chart_permission_id)
+            continue U
+          }
+        }
+      }
+      permissionDia.permissionList.map(item=>{
+        permissionCheckedChange(item)
+      })
     }
-  })
+  },{immediately:true})
 
   // -------method
   const getPermissionData=()=>{
@@ -45,21 +70,22 @@ import {getPermissionList} from '@/api/crm'
     })
   }
   const permissionCheckedChange=(e)=>{
-    console.log(e);
     e.checked = e.check_list.length == e.items.length
     e.indeterminate = e.check_list.length>0 && e.check_list.length < e.items.length
   }
   const permissionAllChecked=(e)=>{
-    console.log(e);
+    // console.log(e);
     let arr = e.items.map((item) => {
       return item.chart_permission_id;
     });
     e.check_list = e.checked ? arr : [];
     e.indeterminate = false;
   }
-
+ 
   const submit=()=>{
-    
+    permissionDia.permissionList.map(item =>{
+      permissionDia.permissionChecked=[...permissionDia.permissionChecked,...item.check_list]
+    })
     emits('selectFinish',permissionDia.permissionChecked)
     closeDia()
   }
@@ -76,7 +102,7 @@ import {getPermissionList} from '@/api/crm'
 <template>
     <div id="permission-container">
       <el-dialog title="选择品种" :model-value="props.visible"
-       :close-on-click-modal="false" width="940" >
+       :close-on-click-modal="false" width="940" @close="closeDia">
        <div class="variety-box" >
         <div v-for="item in permissionDia.permissionList" class="variety-item" :key="item.classify_name" >
             <el-checkbox v-model="item.checked" :indeterminate="item.check_list.length>0 && item.check_list.length < item.items.length" 
@@ -87,7 +113,7 @@ import {getPermissionList} from '@/api/crm'
             </el-checkbox-group>
           </div>
         </div>
-        <template #footer>
+        <template #footer v-if="props.type!='view'">
           <div class="permission-buttons-zone">
             <el-button type="primary" @click="submit" style="color: white;">保存</el-button>
             <el-button @click="closeDia">取消</el-button>

+ 128 - 0
src/views/financialManagement/composition/IandPList.js

@@ -0,0 +1,128 @@
+
+import {useRouter} from 'vue-router'
+import {getIandPList,exportIandPList} from '@/api/financialMana'
+import { downloadByFlow } from '@/utils/common-methods'
+export default function getIandPListCom(type) {
+  const router = useRouter()
+
+  const placement=reactive({
+    searchParams:{
+      current:1,
+      page_size:10,
+      contract_code:'',
+      start_date:'',
+      end_date:'',
+      min_amount:'',
+      max_amount:'',
+      invoice_type:type
+    },
+    dateRange:[],
+    tableData:[],
+    total:0,
+    amountTotal:0
+  })
+
+
+  watch(()=>placement.dateRange,(newVal)=>{
+    // console.log(newVal);
+    if(newVal && newVal.length>0){
+      placement.searchParams.start_date=newVal[0]
+      placement.searchParams.end_date=newVal[1]
+    }else{
+      placement.searchParams.start_date=placement.searchParams.end_date=''
+    }
+    searchPlacement()
+  })
+
+  const placementList=()=>{
+    getIandPList(placement.searchParams).then(res=>{
+      // console.log(res);
+      placement.tableData=res.data.list || []
+      placement.total=res.page&&res.page.total || 0
+      let amount=placement.tableData.reduce((pre,item)=>{
+        return pre+item.amount
+      },0)
+      // 防止失真
+      placement.amountTotal=Math.round(amount*100)/100
+    })
+  }
+  
+  const searchPlacement=()=>{
+    console.log('search');
+    placement.searchParams.current = 1
+    placementList()
+  }
+  // 搜索项-开始金额和结束金额改变
+  const moneyChange=(value,prop)=>{
+    let trimValue = value.trim()
+    let numerValue=parseFloat(trimValue)
+    if((!numerValue)&&trimValue&&numerValue!=0){
+      setTimeout(()=>{
+        placement.searchParams[prop]=''
+      },500)
+      ElMessage.warning('金额必须是数字')
+      return
+    }
+    if(numerValue<0){
+      setTimeout(()=>{
+        placement.searchParams[prop]=''
+      },500)
+      ElMessage.warning('金额必须大于等于零')
+      return
+    }
+    // 开始金额大于结束金额 就不查询
+    if(placement.searchParams.max_amount &&
+    placement.searchParams.min_amount &&
+      parseFloat(placement.searchParams.min_amount) > placement.searchParams.max_amount){
+      return 
+    }
+    searchPlacement()
+  }
+  // 搜索项-判断开始金额是否大于结束金额
+  const checkMoney=()=>{
+    if(placement.searchParams.max_amount &&
+    placement.searchParams.min_amount &&
+    parseFloat(placement.searchParams.min_amount) > placement.searchParams.max_amount){
+      ElMessage.warning('开始金额不能大于结束金额')
+    }
+  }
+  
+  // 切换每页的数量
+  const changePageSize=(pageSize)=>{
+    placement.searchParams.page_size = pageSize
+    placementList()
+  }
+  const changePageNo = (pageNo)=>{
+    placement.searchParams.current = pageNo
+    placementList()
+  }
+  
+  const placementDetail=(row,detailType)=>{
+    router.push({path:'/financial/list/contractProgress',query:{type:detailType,complianceId:row.contract_register_id}})
+  }
+  const placementExport=()=>{
+    let params={
+      contract_code:placement.searchParams.contract_code,
+      start_date:placement.searchParams.start_date,
+      end_date:placement.searchParams.end_date,
+      min_amount:placement.searchParams.min_amount,
+      max_amount:placement.searchParams.max_amount,
+      invoice_type:type
+    }
+    exportIandPList(params).then(res=>{
+      let fileName = type==1?'开票列表':'到款列表'
+      downloadByFlow(res,'xlxs',fileName)
+    })
+  }
+  return {
+    data:placement,
+    placementList,
+    searchPlacement,
+    moneyChange,
+    placementExport,
+    placementDetail,
+    changePageNo,
+    changePageSize,
+    checkMoney
+  }
+}

+ 119 - 87
src/views/financialManagement/contractProgress.vue

@@ -5,7 +5,7 @@
   import {useRouter,useRoute} from 'vue-router'
   import {useStore} from 'vuex'
   import {ElMessage} from 'element-plus'
-  import {getSellerList,getContractSearchList} from '@/api/crm'
+  import {getSellerList,getContractSearchList,getServiceDetail} from '@/api/crm'
   import {getServiceList,registerAdd,registerDetail,registerEdit,registerInvoice,registerPayment} from '@/api/financialMana'
   import scrollableSelect from '@/components/scrollable-select/index.vue'
 
@@ -21,7 +21,7 @@
 
   const contractSourceArray=['非CRM合同导入','CRM合同导入']
   const contractStatusArray=[{id:1,label:"已审批"},{id:2,label:"单章寄回"},{id:3,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 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:"合规编辑"}]
 
@@ -53,13 +53,12 @@
       end_date:'',
       contract_amount:'',
       contract_type:'',
-      daifufang:'',
-      guanlianhetong:'',
+      pay_contract_code:'',
+      pay_company_name:'',
       sign_date:'',
       agreed_pay_time:'',
       services:[],
-      register_status:'',
-      serviceRemark:'',
+      service_remark:'',
       remark:""
     },
     rules:{
@@ -83,8 +82,8 @@
       contract_type:{required:true,message:'合同类型不能为空',trigger:'change'},
       // sign_date:{required:true,message:'签订日不能为空',trigger:'change'},
       // agreed_pay_time:{required:true,message:'约定付款时间不能为空',trigger:'blur'}
-      daifufang:{required:true,message:'代付方不能为空',trigger:'blur'},
-      guanlianhetong:{required:true,message:'关联合同不能为空',trigger:'blur'}
+      pay_contract_code:{required:true,message:'代付方不能为空',trigger:'blur'},
+      pay_company_name:{required:true,message:'关联合同不能为空',trigger:'blur'}
 
     },
     moneyData:{
@@ -237,12 +236,12 @@
       end_date:'',
       contract_amount:'',
       contract_type:'',
-      daifufang:'',
-      guanlianhetong:'',
+      pay_contract_code:'',
+      pay_company_name:'',
       sign_date:'',
       agreed_pay_time:'',
       services:[],
-      serviceRemark:'',
+      service_remark:'',
       remark:""
     }
     contractInfo.checkedService=[]
@@ -260,12 +259,12 @@
   }
   // 合同类型改变
   const contractTypeChange=(value)=>{
-    console.log(value);
+    // console.log(value);
     if(value!=3){
-      contractInfo.form.daifufang=''
+      contractInfo.form.pay_contract_code=''
     }
     if(value!=4 && value!=3){
-      contractInfo.form.guanlianhetong=''
+      contractInfo.form.pay_company_name=''
     }
   }
 
@@ -316,6 +315,21 @@
   const selectContractNo=(value)=>{
     let selectItem=contractInfo.contractNoArray.find(item=>item.contract_code == value)
     // console.log(selectItem);
+    // 获取套餐详情
+    getServiceDetail({contract_id:selectItem.contract_id}).then(res=>{
+      // console.log(res);
+      contractInfo.form.services = res.data?res.data.Service||[]:[]
+      // 小套餐
+      let smallService = contractInfo.form.services.find(item => item.ServiceTemplateId==2)
+      // 是否有大套餐
+      let hasBigService = contractInfo.form.services.some(item => item.ServiceTemplateId==1)
+
+      contractInfo.serviceVarietyShow=!!smallService
+      contractInfo.varietyDiaType='edit'
+      contractInfo.serviceType = !!smallService?2:hasBigService?1:0
+      contractInfo.checkedService=contractInfo.form.services.map(item => item.ServiceTemplateId)
+      contractInfo.checkedPermission=smallService?smallService.ChartPermissionIds:[]
+    })
     contractInfo.form.company_name=selectItem.company_name
     contractInfo.form.crm_contract_id=selectItem.contract_id
     contractInfo.form.start_date=selectItem.start_date
@@ -325,12 +339,12 @@
     contractInfo.form.seller_name=selectItem.seller_name
     contractInfo.form.seller_id=selectItem.seller_id
     contractInfo.form.contract_type=selectItem.contract_type_key
-    contractInfo.form.daifufang=selectItem.daifufang
-    contractInfo.form.guanlianhetong=selectItem.guanlianhetong
+    contractInfo.form.pay_contract_code=selectItem.pay_contract_code
+    contractInfo.form.pay_company_name=selectItem.pay_company_name
     contractInfoForm.value && 
     contractInfoForm.value.validateField([
       'contract_code','company_name','contract_type','seller_id',
-      'start_date','contract_amount','daifufang','guanlianhetong'
+      'start_date','contract_amount','pay_contract_code','pay_company_name'
     ])
   }
   // 销售选中
@@ -359,7 +373,7 @@
   // 表格删除行
   const deleteRow=(type,index)=>{
     let tempArr=[]
-    if(type=='invoice'){
+    if(type=='invoice'){                                      
       tempArr=invoiceForm.invoiceData
     }else{
       tempArr=placementForm.placementData
@@ -378,7 +392,7 @@
         // 有金额才进行删除后的运算
         if(tempArr[index].amount!=''){
           tempArr.splice(index,1)
-          let money=0
+          let money=0                                           
           tempArr.map(item =>{
             money+=parseFloat(item.amount) || 0
             // console.log(money);
@@ -463,12 +477,10 @@
           // 小套餐
           if(serviceId==2){
             contractInfo.form.services.push({
-              // service_template_id:contractInfo.currentSmallService.service_template_id,
-              // value:contractInfo.currentSmallService.Value,
-              // chart_permission_ids:contractInfo.currentSmallService.chart_permission_ids,
-              // detail:[contractInfo.currentSmallService.tableHeadData,...contractInfo.currentSmallService.tableData],
-              // chart_permission_id:serviceItem.chart_permission_id,
-              check_list:contractInfo.checkedPermission,
+              service_template_id:serviceItem.service_template_id,
+              value:'',
+              chart_permission_ids:contractInfo.checkedPermission?contractInfo.checkedPermission.join(','):'',
+              chart_permission_id:serviceItem.chart_permission_id,
               title:serviceItem.title
             })
           }else{
@@ -477,25 +489,25 @@
         })
         contractInfo.form.contract_amount = parseFloat(contractInfo.form.contract_amount)
         console.log(contractInfo.form);
-        // if(contractInfo.form.contract_register_id){
-        //   // 编辑
-        //   registerEdit(contractInfo.form).then(res=>{
-        //     let messageHint=ElMessage.success('合规登记编辑成功')
-        //     setTimeout(()=>{
-        //       messageHint.close()
-        //       router.back()
-        //     },1000)
-        //   })
-        // }else{
-        //   // 新增
-        //   registerAdd(contractInfo.form).then(res=>{
-        //     let messageHint=ElMessage.success('合规登记成功')
-        //     setTimeout(()=>{
-        //       messageHint.close()
-        //       router.back()
-        //     },1000)
-        //   })
-        // }
+        if(contractInfo.form.contract_register_id){
+          // 编辑
+          registerEdit(contractInfo.form).then(res=>{
+            let messageHint=ElMessage.success('合规登记编辑成功')
+            setTimeout(()=>{
+              messageHint.close()
+              router.back()
+            },1000)
+          })
+        }else{
+          // 新增
+          registerAdd(contractInfo.form).then(res=>{
+            let messageHint=ElMessage.success('合规登记成功')
+            setTimeout(()=>{
+              messageHint.close()
+              router.back()
+            },1000)
+          })
+        }
       }
     })
   }
@@ -592,16 +604,30 @@
         end_date:res.data.end_date,
         contract_amount:res.data.contract_amount,
         contract_type:res.data.contract_type,
-        daifufang:res.data.daifufang,
-        guanlianhetong:res.data.guanlianhetong,
+        pay_contract_code:res.data.pay_contract_code,
+        pay_company_name:res.data.pay_company_name,
         sign_date:res.data.sign_date,
         agreed_pay_time:res.data.agreed_pay_time,
-        serviceRemark:res.serviceRemark,
+        service_remark:res.data.service_remark,
         remark:res.data.remark,
-        register_status:res.data.register_status,
         contract_source:res.data.contract_source,
-        services:res.data.service_list
       }
+      res.data.service_list.map(item =>{
+          // 小套餐
+          if(item.service_template_id==2){
+            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{
+            contractInfo.form.services.push(item)
+          }
+      })
+      console.log(contractInfo.form.services);
       contractInfo.contractValidityDate=[res.data.start_date,res.data.end_date]
       contractInfo.checkedService=res.data.service_list.map(item => {
         let serviceId=item.service_template_id
@@ -653,39 +679,40 @@
         }
       }
       // let samllService=contractInfo.form.services.find(item => item.service_template_id==2)
+
       // if(contractInfo.operationtype=='compliance' && samllService){
-      //   // 合规编辑
-      //   /**
-      //    * 有可能服务模板的接口数据还没返回
-      //    * 这时更改contractInfo.currentSmallService会触发子组件的监听函数,导致空指针错误
-      //    * 创建一个 setInterval 询问contractInfo.serviceArray数据是否返回,已返回就更新contractInfo.currentSmallService
-      //    */
-      //    let temarr = samllService.detail.map((rowItem) => {
-      //     let rowArr = [];
-      //     for (let key in rowItem) {
-      //         if (key.substr(0, 3) === "col" && rowItem[key] !== "") {
-      //           rowArr.push(JSON.parse(rowItem[key]));
-      //         }
-      //       }
-      //       return rowArr;
-      //     });
-      //     let paramsTemp={
-      //       tableHeadData:temarr[0],
-      //       tableData:temarr.slice(1),
-      //       service_template_id:samllService.service_template_id,
-      //       Value:samllService.value,
-      //       chart_permission_ids:samllService.chart_permission_ids
-      //     }
-      //   if(contractInfo.serviceArray.length==0){
-      //     let timer=setInterval(()=>{
-      //       if(contractInfo.serviceArray.length>0){
-      //         contractInfo.currentSmallService=paramsTemp
-      //         clearInterval(timer)
-      //       }
-      //     },10)
-      //   }else{
-      //     contractInfo.currentSmallService=paramsTemp
-      //   }
+        // 合规编辑
+        /**
+         * 有可能服务模板的接口数据还没返回
+         * 这时更改contractInfo.currentSmallService会触发子组件的监听函数,导致空指针错误
+         * 创建一个 setInterval 询问contractInfo.serviceArray数据是否返回,已返回就更新contractInfo.currentSmallService
+         */
+        //  let temarr = samllService.detail.map((rowItem) => {
+        //   let rowArr = [];
+        //   for (let key in rowItem) {
+        //       if (key.substr(0, 3) === "col" && rowItem[key] !== "") {
+        //         rowArr.push(JSON.parse(rowItem[key]));
+        //       }
+        //     }
+        //     return rowArr;
+        //   });
+        //   let paramsTemp={
+        //     tableHeadData:temarr[0],
+        //     tableData:temarr.slice(1),
+        //     service_template_id:samllService.service_template_id,
+        //     Value:samllService.value,
+        //     chart_permission_ids:samllService.chart_permission_ids
+        //   }
+        // if(contractInfo.serviceArray.length==0){
+        //   let timer=setInterval(()=>{
+        //     if(contractInfo.serviceArray.length>0){
+        //       contractInfo.currentSmallService=paramsTemp
+        //       clearInterval(timer)
+        //     }
+        //   },10)
+        // }else{
+        //   contractInfo.currentSmallService=paramsTemp
+        // }
       // }
     })
   }
@@ -746,12 +773,12 @@
                       <el-option :label="item.label" :value="item.id" v-for="item in contractTypeArray" :key="item.id"></el-option>
                     </el-select>
                   </el-form-item>
-                  <el-form-item label="代付方" prop="daifufang" v-if="contractInfo.form.contract_type==3">
-                    <el-input v-model="contractInfo.form.daifufang"
+                  <el-form-item label="代付方" prop="pay_contract_code" v-if="contractInfo.form.contract_type==3">
+                    <el-input v-model="contractInfo.form.pay_contract_code"
                     placeholder="请输入代付方" />
                   </el-form-item>
-                  <el-form-item label="关联合同" prop="guanlianhetong" v-if="contractInfo.form.contract_type==3 || contractInfo.form.contract_type==4">
-                    <el-input v-model="contractInfo.form.guanlianhetong"
+                  <el-form-item label="关联合同" prop="pay_company_name" v-if="contractInfo.form.contract_type==3 || contractInfo.form.contract_type==4">
+                    <el-input v-model="contractInfo.form.pay_company_name"
                     placeholder="请输入关联合同" />
                   </el-form-item>
                   <el-form-item label="合同状态" prop="contract_status">
@@ -807,7 +834,7 @@
               <div class="info-service-remark">
                 <span style="white-space: nowrap;font-size: 14px;margin-right: 20px;">套餐备注</span>
                 <el-input style="flex-grow: 1;" :disabled="contractInfo.operationtype!='compliance'"
-                    v-model="contractInfo.form.serviceRemark" placeholder="请输入备注"
+                    v-model="contractInfo.form.service_remark" placeholder="请输入备注"
                   />
               </div>
             </div>
@@ -971,7 +998,12 @@
                     </div>
                   </template>
                   <div class="progress-item-title">{{operationType[item.op_type-1]?.label}}</div>
-                  <div class="progress-item-info">{{item.admin_name}}</div>
+                  <div class="progress-item-info">
+                    <span>{{item.admin_name}}</span>
+                    <span style="margin-left: 6px;" v-permission="['financial:list:invoice','financial:list:placement','financial:list:viewIandP','or']">
+                      {{item.amount_remark}}
+                    </span>
+                  </div>
                   <div class="progress-item-info">{{item.create_time}}</div>
                   <div class="progress-item-info" v-show="item.remark">备注:{{item.remark}}</div>
                 </el-timeline-item>

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

@@ -8,7 +8,7 @@ import {downloadByFlow} from '@/utils/common-methods'
 const router = useRouter()
 const route = useRoute()
 const changeStatusForm=ref(null)
-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 contractStatusArray=[{id:1,label:"已审批"},{id:2,label:"单章寄回"},{id:3,label:"已签回"}]
 const statusArray=[{id:1,label:"进行中"},{id:2,label:"已完成"}]
 

+ 19 - 115
src/views/financialManagement/invoice/invoiceList.vue

@@ -1,108 +1,12 @@
 <script setup>
-import {useRouter} from 'vue-router'
-  
-const router = useRouter()
-
-  const invoice=reactive({
-    searchParams:{
-      current:1,
-      page_size:10,
-      contract_code:'',
-      dateStart:'',
-      dateEnd:'',
-      moneyStart:'',
-      moneyEnd:''
-    },
-    dateRange:[],
-    tableData:[{contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',invoiceMoney:3000,invoiceDate:'2022-12-12'}],
-    total:30
-  })
-
-  watch(()=>invoice.dateRange,(newVal)=>{
-    // console.log(newVal);
-    if(newVal && newVal.length>0){
-      invoice.searchParams.dateStart=newVal[0]
-      invoice.searchParams.dateEnd=newVal[1]
-    }else{
-      invoice.searchParams.dateStart=invoice.searchParams.dateEnd=''
-    }
-    searchInvoice()
-  })
-
-// ---------------method
-
-const invoiceList=()=>{
-  console.log(invoice.searchParams)
-}
-
-const searchInvoice=()=>{
-  console.log('search');
-  invoice.searchParams.current = 1
-  invoiceList()
-}
-// 搜索项-开始金额和结束金额改变
-const moneyChange=(value,prop)=>{
-  // console.log(value);
-  let trimValue = value.trim()
-  let numerValue=parseFloat(trimValue)
-  if((!numerValue)&&trimValue){
-    setTimeout(()=>{
-      invoice.searchParams[prop]=''
-    },500)
-    ElMessage.warning('金额必须是数字')
-    return
-  }
-  if(numerValue<0){
-    setTimeout(()=>{
-      invoice.searchParams[prop]=''
-    },500)
-    ElMessage.warning('金额必须大于等于零')
-    return
-  }
-  // 开始金额大于结束金额 就不查询
-  if(invoice.searchParams.moneyEnd &&
-    invoice.searchParams.moneyStart &&
-    parseFloat(invoice.searchParams.moneyStart) > invoice.searchParams.moneyEnd){
-    return 
-  }
-  searchInvoice()
-}
-// 搜索项-判断开始金额是否大于结束金额
-const checkMoney=()=>{
-  if(invoice.searchParams.moneyEnd &&
-  invoice.searchParams.moneyStart &&
-  parseFloat(invoice.searchParams.moneyStart) > invoice.searchParams.moneyEnd){
-    ElMessage.warning('开始金额不能大于结束金额')
-  }
-}
 
-// 切换每页的数量
-const changePageSize=(pageSize)=>{
-  invoice.searchParams.page_size = pageSize
-  invoiceList()
-}
-const changePageNo = (pageNo)=>{
-  invoice.searchParams.current = pageNo
-  invoiceList()
-}
+import getCom from '../composition/IandPList'
 
-const invoiceDetail=(row)=>{
-  router.push({path:'/financial/list/contractProgress',query:{type:'invoice',complianceId:row.contract_register_id}})
-}
-const invoiceExport=()=>{
-  console.log("导出");
-}
+const invoice=getCom(1)
+const data = invoice.data
 
 // --------created
-invoiceList()
+invoice.placementList()
 
 </script>
 
@@ -110,37 +14,37 @@ invoiceList()
     <div id="invoice-list-container">
       <div class="invoice-search-zone">
         <div class="invoice-search-box">
-          <el-input v-model="invoice.searchParams.contract_code" placeholder="请输入合同编号"
-          style="width: 309px;margin-left: 40px;margin-bottom: 8px;" clearable @input="searchInvoice" ></el-input>
-          <el-date-picker v-model="invoice.dateRange" start-placeholder="起始日期"
+          <el-input v-model="data.searchParams.contract_code" placeholder="请输入合同编号"
+          style="width: 309px;margin-left: 40px;margin-bottom: 8px;" clearable @input="invoice.searchPlacement" ></el-input>
+          <el-date-picker v-model="data.dateRange" start-placeholder="起始日期"
             end-placeholder="结束日期" style="margin-left: 40px;max-width: 321px;margin-bottom: 8px;"
             value-format="YYYY-MM-DD" type="daterange" ></el-date-picker>
           <div style="margin-left: 40px;margin-bottom: 8px;">
             开票金额
-            <el-input v-model.trim="invoice.searchParams.moneyStart" @blur="checkMoney"
-            @input="(value)=>moneyChange(value,'moneyStart')" style="width: 104px;margin:0 8px" clearable></el-input>
+            <el-input v-model.trim="data.searchParams.min_amount" @blur="invoice.checkMoney"
+            @input="(value)=>invoice.moneyChange(value,'min_amount')" style="width: 104px;margin:0 8px" clearable></el-input>
-            <el-input v-model.trim="invoice.searchParams.moneyEnd" @blur="checkMoney"
-            @input="(value)=>moneyChange(value,'moneyEnd')"
+            <el-input v-model.trim="data.searchParams.max_amount" @blur="invoice.checkMoney"
+            @input="(value)=>invoice.moneyChange(value,'max_amount')"
             style="width: 104px;margin:0 8px" clearable></el-input>
           </div>
         </div>
       </div>
       <div class="invoice-table-container">
         <div class="invoice-table-top">
-          <span style="font-size:14px">已开票金额:2222元</span>
-          <el-button type="primary" style="width: 80px;" size="large" @click="invoiceExport">导出</el-button>
+          <span style="font-size:14px">已开票金额:{{ data.amountTotal }}元</span>
+          <el-button type="primary" style="width: 80px;" size="large" @click="invoice.placementExport">导出</el-button>
         </div>
         <!-- 表格 -->
-        <el-table :data="invoice.tableData" border max-height="560px" size="default" style="position: sticky;"> 
+        <el-table :data="data.tableData" border max-height="560px" size="default" style="position: sticky;"> 
           <el-table-column label="合同编号" align="center" prop="contract_code" show-overflow-tooltip></el-table-column>
-          <el-table-column label="开票金额" align="center" prop="invoiceMoney" show-overflow-tooltip></el-table-column>
-          <el-table-column label="开票日期" align="center" prop="invoiceDate" show-overflow-tooltip></el-table-column>
+          <el-table-column label="开票金额" align="center" prop="amount" show-overflow-tooltip></el-table-column>
+          <el-table-column label="开票日期" align="center" prop="invoice_time" show-overflow-tooltip></el-table-column>
           <el-table-column label="操作" width="120" align="center">
             <template #default="{row}">
               <div class="table-options" style="justify-content: center;">
                 <span class="table-option-buttons" style="margin-right: 0;"
-                @click="invoiceDetail(row)">
+                @click="invoice.placementDetail(row,'invoice')">
                   详情
                 </span>
               </div>
@@ -155,9 +59,9 @@ invoiceList()
         </el-table>
       </div>
       <!-- 分页 -->
-      <m-page :pageSize="invoice.searchParams.page_size" :page_no="invoice.searchParams.current" 
+      <m-page :pageSize="data.searchParams.page_size" :page_no="data.searchParams.current" 
       style="display: flex;justify-content: flex-end;margin-top: 20px;" 
-      :total="invoice.total" @handleCurrentChange="changePageNo" @handleSizeChange="changePageSize"/>
+      :total="data.total" @handleCurrentChange="invoice.changePageNo" @handleSizeChange="invoice.changePageSize"/>
     </div>
 </template>
   

+ 19 - 113
src/views/financialManagement/placement/placementList.vue

@@ -1,108 +1,14 @@
 <script setup>
-import {useRouter} from 'vue-router'
-  
-const router = useRouter()
 
-  const placement=reactive({
-    searchParams:{
-      current:1,
-      page_size:10,
-      contract_code:'',
-      dateStart:'',
-      dateEnd:'',
-      moneyStart:'',
-      moneyEnd:''
-    },
-    dateRange:[],
-    tableData:[{contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},
-    {contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'},{contract_code:'f4f5sdFDsf4',placementMoney:3000,placementDate:'2022-12-12'}],
-    total:30
-  })
+import getCom from '../composition/IandPList'
 
-  watch(()=>placement.dateRange,(newVal)=>{
-    // console.log(newVal);
-    if(newVal && newVal.length>0){
-      placement.searchParams.dateStart=newVal[0]
-      placement.searchParams.dateEnd=newVal[1]
-    }else{
-      placement.searchParams.dateStart=placement.searchParams.dateEnd=''
-    }
-    searchPlacement()
-  })
+const placement=getCom(2)
+const data = placement.data
 
 // ---------------method
 
-const placementList=()=>{
-  console.log(placement.searchParams)
-}
-
-const searchPlacement=()=>{
-  console.log('search');
-  placement.searchParams.current = 1
-  placementList()
-}
-// 搜索项-开始金额和结束金额改变
-const moneyChange=(value,prop)=>{
-  // console.log(value);
-  let trimValue = value.trim()
-  let numerValue=parseFloat(trimValue)
-  if((!numerValue)&&trimValue){
-    setTimeout(()=>{
-      placement.searchParams[prop]=''
-    },500)
-    ElMessage.warning('金额必须是数字')
-    return
-  }
-  if(numerValue<0){
-    setTimeout(()=>{
-      placement.searchParams[prop]=''
-    },500)
-    ElMessage.warning('金额必须大于等于零')
-    return
-  }
-  // 开始金额大于结束金额 就不查询
-  if(placement.searchParams.moneyEnd &&
-  placement.searchParams.moneyStart &&
-    parseFloat(placement.searchParams.moneyStart) > placement.searchParams.moneyEnd){
-    return 
-  }
-  searchPlacement()
-}
-// 搜索项-判断开始金额是否大于结束金额
-const checkMoney=()=>{
-  if(placement.searchParams.moneyEnd &&
-  placement.searchParams.moneyStart &&
-  parseFloat(placement.searchParams.moneyStart) > placement.searchParams.moneyEnd){
-    ElMessage.warning('开始金额不能大于结束金额')
-  }
-}
-
-// 切换每页的数量
-const changePageSize=(pageSize)=>{
-  placement.searchParams.page_size = pageSize
-  placementList()
-}
-const changePageNo = (pageNo)=>{
-  placement.searchParams.current = pageNo
-  placementList()
-}
-
-const placementDetail=(row)=>{
-  router.push({path:'/financial/list/contractProgress',query:{type:'placement',complianceId:row.contract_register_id}})
-}
-const placementExport=()=>{
-  console.log("导出");
-}
-
 // --------created
-placementList()
+placement.placementList()
 
 </script>
 
@@ -110,37 +16,37 @@ placementList()
     <div id="placement-list-container">
       <div class="placement-search-zone">
         <div class="placement-search-box">
-          <el-input v-model="placement.searchParams.contract_code" placeholder="请输入合同编号"
-          style="width: 309px;margin-left: 40px;margin-bottom: 8px;" clearable @input="searchPlacement" ></el-input>
-          <el-date-picker v-model="placement.dateRange" start-placeholder="起始日期"
+          <el-input v-model="data.searchParams.contract_code" placeholder="请输入合同编号"
+          style="width: 309px;margin-left: 40px;margin-bottom: 8px;" clearable @input="placement.searchPlacement" ></el-input>
+          <el-date-picker v-model="data.dateRange" start-placeholder="起始日期"
             end-placeholder="结束日期" style="margin-left: 40px;max-width: 321px;margin-bottom: 8px;"
             value-format="YYYY-MM-DD" type="daterange" ></el-date-picker>
           <div style="margin-left: 40px;margin-bottom: 8px;">
             到款金额
-            <el-input v-model.trim="placement.searchParams.moneyStart" @blur="checkMoney"
-            @input="(value)=>moneyChange(value,'moneyStart')" style="width: 104px;margin:0 8px" clearable></el-input>
+            <el-input v-model.trim="data.searchParams.min_amount" @blur="placement.checkMoney"
+            @input="(value)=>placement.moneyChange(value,'min_amount')" style="width: 104px;margin:0 8px" clearable></el-input>
-            <el-input v-model.trim="placement.searchParams.moneyEnd" @blur="checkMoney"
-            @input="(value)=>moneyChange(value,'moneyEnd')"
+            <el-input v-model.trim="data.searchParams.max_amount" @blur="placement.checkMoney"
+            @input="(value)=>placement.moneyChange(value,'max_amount')"
             style="width: 104px;margin:0 8px" clearable></el-input>
           </div>
         </div>
       </div>
       <div class="placement-table-container">
         <div class="placement-table-top">
-          <span style="font-size:14px">已到款金额:2222元</span>
-          <el-button type="primary" style="width: 80px;" size="large" @click="placementExport">导出</el-button>
+          <span style="font-size:14px">已到款金额:{{ data.amountTotal }}元</span>
+          <el-button type="primary" style="width: 80px;" size="large" @click="placement.placementExport">导出</el-button>
         </div>
         <!-- 表格 -->
-        <el-table :data="placement.tableData" border max-height="560px" size="default" style="position: sticky;"> 
+        <el-table :data="data.tableData" border max-height="560px" size="default" style="position: sticky;"> 
           <el-table-column label="合同编号" align="center" prop="contract_code" show-overflow-tooltip></el-table-column>
-          <el-table-column label="到款金额" align="center" prop="placementMoney" show-overflow-tooltip></el-table-column>
-          <el-table-column label="到款日期" align="center" prop="placementDate" show-overflow-tooltip></el-table-column>
+          <el-table-column label="到款金额" align="center" prop="amount" show-overflow-tooltip></el-table-column>
+          <el-table-column label="到款日期" align="center" prop="invoice_time" show-overflow-tooltip></el-table-column>
           <el-table-column label="操作" width="120" align="center">
             <template #default="{row}">
               <div class="table-options" style="justify-content: center;">
                 <span class="table-option-buttons" style="margin-right: 0;"
-                @click="placementDetail(row)">
+                @click="placement.placementDetail(row,'placement')">
                   详情
                 </span>
               </div>
@@ -155,9 +61,9 @@ placementList()
         </el-table>
       </div>
       <!-- 分页 -->
-      <m-page :pageSize="placement.searchParams.page_size" :page_no="placement.searchParams.current" 
+      <m-page :pageSize="data.searchParams.page_size" :page_no="data.searchParams.current" 
       style="display: flex;justify-content: flex-end;margin-top: 20px;" 
-      :total="placement.total" @handleCurrentChange="changePageNo" @handleSizeChange="changePageSize"/>
+      :total="data.total" @handleCurrentChange="placement.changePageNo" @handleSizeChange="placement.changePageSize"/>
     </div>
 </template>