Jelajahi Sumber

Merge branch 'master' into xqc_1039

bding 1 bulan lalu
induk
melakukan
b7a8c72f1d

+ 5 - 1
src/api/modules/crmApi.js

@@ -1099,7 +1099,11 @@ const customInterence = {
    */
   editOutboundMobile:(params)=>{
       return http.post("/custom/user/edit/outbound_mobile",params)
-   }
+   },
+  // 用印合同编号检索接口
+  searchSealcodeSeal:(params)=>{
+    return http.get("/seal/sealcode/search",params)
+  },
 };
 
 /*

+ 4 - 0
src/api/modules/sealApi.js

@@ -54,6 +54,10 @@ const sealInterence={
 	getContractListBySeal:params=>{
 		return http.get('/contract/getListBySeal',params)
 	},
+	//公司检索
+	getCompanyListSearch:params=>{
+		return http.get('/seal/company/search',params)
+	},
 	//上传接口
 	resourceUpload:params=>{
 		return http.post('/resource/image/upload',params)

+ 421 - 403
src/api/modules/statisticApi.js

@@ -1,395 +1,394 @@
-import http from "@/api/http.js"
-
+import http from "@/api/http.js";
 
 /* 数据报表模块 */
 const dataMainInterface = {
-	/* 工作台 */
-	workdata: params => {
-		return http.get('/statistic_report/home')
-	},
-	/**
-	 * 获取即将过期的客户列表接口
-	 * @param {PageSize } params 
-	 * @param {CurrentIndex } params 
-	 * @param {EndDate } params 结束日期
-	 * @param {CompanyType} params 
-	 * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
-	 * @param {RegionType } params 
-	 * @returns 
-	 */
-	expireList:params => {
-		return http.get('/statistic_report/will_expire_list',params);
-	},
-	/**
-	 * 获取存量客户列表接口
-	 * @param {PageSize } params 
-	 * @param {CurrentIndex } params 
-	 * @param {CompanyType} params 
-	 * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
-	 * @param {RegionType } params 
-	 * @param {Date} params 
-	 * @param {DataType} params 
-	 * @returns 
-	 */
-	stackList:params => {
-		return http.get('/statistic_report/stack_company_list',params);
-	},
-	raiStackList:params => {
-		return http.get('/statistic_report/stack_company_list_rai',params);
-	},
-	/**
-	 * 获取增量客户列表接口
-	 * @param {PageSize} params 
-	 * @param {CurrentIndex} params 
-	 * @param {EndDate} params 结束日期
-	 * @param {CompanyType} params 
-	 * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
-	 * @param {RegionType } params 
-	 * @param {StartDate} params 
-	 * @param {DataType} params 
-	 * @param {IsConfirm} params  是否确认续约: -1-默认全部; 0-待确认; 1-已确认
-	 * @param {CompanyAscribeId} params  归因Id
-	 * @returns  
-	 */
-	incrementalList:params => {
-		return http.get('/statistic_report/incremental_company_list',params);
-	},
-	/**
-	 * 权益客户统计列表接口
-	 * @param {PageSize} params 
-	 * @param {CurrentIndex} params 
-	 * @param {EndDate} params 结束日期
-	 * @param {CompanyType} params 
-	 * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
-	 * @param {RegionType } params 
-	 * @param {StartDate} params 
-	 * @param {DataType} params 
-	 * @param {IsConfirm} params  是否确认续约: -1-默认全部; 0-待确认; 1-已确认
-	 * @param {CompanyAscribeId} params  归因Id
-	 * @returns  
-	 */
-	incrementalEquityList:params => {
-		return http.get('/statistic_report/merge_company_list',params);
-	},
-	/**
- * 获取未续约备注列表
- * @param {CompanyId} params 公司ID
- * @param {ProductId} params 产品ID 1:FICC ,2权益
- * @returns 
- */
-	getNotRenewedRemarkList:params => {
-		return http.get('/custom/company_no_renewed_note/list',params);
-	},
-	/**
- * 添加未续约备注
- * @param {CompanyId} params 公司ID
- * @param {ProductId} params 产品ID 1:FICC ,2权益
- * @param {Content} params 内容
- * @returns 
- */
-	addNotRenewedRemark:params => {
-		return http.post('/custom/company_no_renewed_note/add',params);
-	},
-	/**
- * 获取归因列表
- * @param {KeyWord} params 
- * @returns  
- */
-	getAscribList:params => {
-		return http.get('/custom/company_ascribe/list',params);
-	},
-	/**
-	 * 新增归因
-	 * @param {KeyWord} params 
-	 * @returns  
-	*/
-	addAscrib:params => {
-		return http.post('/custom/company_ascribe/add',params);
-	},
-	/**
-	 * 合同通过归因添加确认不续约接口
-	 * @param {KeyWord} params 
-	 * @returns  
-	*/
-	addAscribContract:params => {
-		return http.post('/custom/company_contract_no_renewed_ascribe/add',params);
-	},
-	/**
-	 * 修改归因标签
-	* @param {CompanyId} params 公司ID
-	* @param {ProductId} params 产品ID 1:FICC ,2权益
-	* @param {Content} params 内容
-	* @param {CompanyAscribeId} params 归因Id
-	 * @returns  
-	*/
-	addNoRenewedAscribe:params => {
-		return http.post('/custom/company_no_renewed_ascribe/add',params);
-	},
-	/**
-	 * 归因标签详情
-	* @param {CompanyId} params 公司ID
-	* @param {ProductId} params 产品ID 1:FICC ,2权益
-	 * @returns  
-	*/
-	infoNoRenewedAscribe:params => {
-		return http.get('/custom/company_no_renewed_ascribe/detail',params);
-	},
-	/**
-	 * 合同确认归因不续约详情接口
-	* @param {CompanyContractId} params 合同ID
-	 * @returns  
-	*/
-	contractInfoNoRenewedAscribe:params => {
-		return http.get('/custom/company_contract_no_renewed_ascribe/detail',params);
-	},
-	/**
-	 * 获取收入统计列表接口
-	 * @param {PageSize} params 
-	 * @param {CurrentIndex} params 
-	 * @param {EndDate} params 结束日期
-	 * @param {CompanyType} params 
-	 * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
-	 * @param {RegionType } params
-	 * @returns 
-	 */
-	incomeList:params => {
-		return http.get('/statistic_report/income_list',params);
-	},
-	/**
-	 * 获取合同数据报表接口
-	 * @param {PageSize} params 
-	 * @param {CurrentIndex} params 
-	 * @param {EndDate} params 结束日期
-	 * @param {CompanyType} params 
-	 * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
-	 * @param {RegionType } params
-	 * @returns 
-	 */
-	contractList:params => {
-		return http.get('/statistic_report/contract_list',params);
-	},
-	/**
-	 * 获取企业客户的合同数据报表接口
-	 * @param {CompanyId  } params
-	 * @returns 
-	 */
-	companyContractList:params => {
-		return http.get('/statistic_report/company_contract_list',params);
-	},
-	// 系统合同类调此接口
-	companyContractDetailList:params => {
-		return http.get('/statistic_report/contract_detail_list',params);
-	},
+  /* 工作台 */
+  workdata: (params) => {
+    return http.get("/statistic_report/home");
+  },
+  /**
+   * 获取即将过期的客户列表接口
+   * @param {PageSize } params
+   * @param {CurrentIndex } params
+   * @param {EndDate } params 结束日期
+   * @param {CompanyType} params
+   * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
+   * @param {RegionType } params
+   * @returns
+   */
+  expireList: (params) => {
+    return http.get("/statistic_report/will_expire_list", params);
+  },
+  /**
+   * 获取存量客户列表接口
+   * @param {PageSize } params
+   * @param {CurrentIndex } params
+   * @param {CompanyType} params
+   * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
+   * @param {RegionType } params
+   * @param {Date} params
+   * @param {DataType} params
+   * @returns
+   */
+  stackList: (params) => {
+    return http.get("/statistic_report/stack_company_list", params);
+  },
+  raiStackList: (params) => {
+    return http.get("/statistic_report/stack_company_list_rai", params);
+  },
+  /**
+   * 获取增量客户列表接口
+   * @param {PageSize} params
+   * @param {CurrentIndex} params
+   * @param {EndDate} params 结束日期
+   * @param {CompanyType} params
+   * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
+   * @param {RegionType } params
+   * @param {StartDate} params
+   * @param {DataType} params
+   * @param {IsConfirm} params  是否确认续约: -1-默认全部; 0-待确认; 1-已确认
+   * @param {CompanyAscribeId} params  归因Id
+   * @returns
+   */
+  incrementalList: (params) => {
+    return http.get("/statistic_report/incremental_company_list", params);
+  },
+  /**
+   * 权益客户统计列表接口
+   * @param {PageSize} params
+   * @param {CurrentIndex} params
+   * @param {EndDate} params 结束日期
+   * @param {CompanyType} params
+   * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
+   * @param {RegionType } params
+   * @param {StartDate} params
+   * @param {DataType} params
+   * @param {IsConfirm} params  是否确认续约: -1-默认全部; 0-待确认; 1-已确认
+   * @param {CompanyAscribeId} params  归因Id
+   * @returns
+   */
+  incrementalEquityList: (params) => {
+    return http.get("/statistic_report/merge_company_list", params);
+  },
+  /**
+   * 获取未续约备注列表
+   * @param {CompanyId} params 公司ID
+   * @param {ProductId} params 产品ID 1:FICC ,2权益
+   * @returns
+   */
+  getNotRenewedRemarkList: (params) => {
+    return http.get("/custom/company_no_renewed_note/list", params);
+  },
+  /**
+   * 添加未续约备注
+   * @param {CompanyId} params 公司ID
+   * @param {ProductId} params 产品ID 1:FICC ,2权益
+   * @param {Content} params 内容
+   * @returns
+   */
+  addNotRenewedRemark: (params) => {
+    return http.post("/custom/company_no_renewed_note/add", params);
+  },
+  /**
+   * 获取归因列表
+   * @param {KeyWord} params
+   * @returns
+   */
+  getAscribList: (params) => {
+    return http.get("/custom/company_ascribe/list", params);
+  },
+  /**
+   * 新增归因
+   * @param {KeyWord} params
+   * @returns
+   */
+  addAscrib: (params) => {
+    return http.post("/custom/company_ascribe/add", params);
+  },
+  /**
+   * 合同通过归因添加确认不续约接口
+   * @param {KeyWord} params
+   * @returns
+   */
+  addAscribContract: (params) => {
+    return http.post("/custom/company_contract_no_renewed_ascribe/add", params);
+  },
+  /**
+   * 修改归因标签
+   * @param {CompanyId} params 公司ID
+   * @param {ProductId} params 产品ID 1:FICC ,2权益
+   * @param {Content} params 内容
+   * @param {CompanyAscribeId} params 归因Id
+   * @returns
+   */
+  addNoRenewedAscribe: (params) => {
+    return http.post("/custom/company_no_renewed_ascribe/add", params);
+  },
+  /**
+   * 归因标签详情
+   * @param {CompanyId} params 公司ID
+   * @param {ProductId} params 产品ID 1:FICC ,2权益
+   * @returns
+   */
+  infoNoRenewedAscribe: (params) => {
+    return http.get("/custom/company_no_renewed_ascribe/detail", params);
+  },
+  /**
+   * 合同确认归因不续约详情接口
+   * @param {CompanyContractId} params 合同ID
+   * @returns
+   */
+  contractInfoNoRenewedAscribe: (params) => {
+    return http.get("/custom/company_contract_no_renewed_ascribe/detail", params);
+  },
+  /**
+   * 获取收入统计列表接口
+   * @param {PageSize} params
+   * @param {CurrentIndex} params
+   * @param {EndDate} params 结束日期
+   * @param {CompanyType} params
+   * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
+   * @param {RegionType } params
+   * @returns
+   */
+  incomeList: (params) => {
+    return http.get("/statistic_report/income_list", params);
+  },
+  /**
+   * 获取合同数据报表接口
+   * @param {PageSize} params
+   * @param {CurrentIndex} params
+   * @param {EndDate} params 结束日期
+   * @param {CompanyType} params
+   * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
+   * @param {RegionType } params
+   * @returns
+   */
+  contractList: (params) => {
+    return http.get("/statistic_report/contract_list", params);
+  },
+  /**
+   * 获取企业客户的合同数据报表接口
+   * @param {CompanyId  } params
+   * @returns
+   */
+  companyContractList: (params) => {
+    return http.get("/statistic_report/company_contract_list", params);
+  },
+  // 系统合同类调此接口
+  companyContractDetailList: (params) => {
+    return http.get("/statistic_report/contract_detail_list", params);
+  },
 
-	// 客户数据未续约说明更多
-	moreRenewReason:params => {
-		return http.get('/statistic_report/more_renew_reason',params);
-	},
-	// 客户数据未续约说明更多
-	mergeCompanyPreviousDetail:params => {
-		return http.get('/statistic_report/merge_company_previous/detail',params);
-	},
-	// 客户数据未续约说明更多上一年
-	mergeCompanyPreviousDetailYear:params => {
-		return http.get('/statistic_report/merge_company_previous/last_year',params);
-	},
-	/**
-	 * 	// 获取图表阅读统计列表
-	 * @param {PageSize} params 
-	 * @param {CurrentIndex} params 
-	 * @param {ClassifyId} params 分类ID
-	 * @param {Order} params 排序
-	 * @returns 
-	 */
-	getchartCensusList:params => {
-		return http.get('/yb/chartCensus/getVisitList',params);
-	},
-	/**
-	 * 	// 图表阅读统计详情列表
-	 * @param {PageSize} params 
-	 * @param {CurrentIndex} params 
-	 * @param {ClassifyId} params 分类ID
-	 * @param {Order} params 排序
-	 * @returns 
-	 */
-	 getchartgetVisitDetailList:params => {
-	   return http.get('yb/chartCensus/getVisitDetailList',params);
-	 },
-	 /**
-	 * 	// 用户图表访问明细
-	 * @returns 
-	 */
-	  getCompanyChartVisitDetail:params => {
-		return http.get('yb/chartCensus/getCompanyChartVisitDetail',params);
-	  },
-	 /**
-	 * 	// 图库权限开通客户统计列表
-	 * @returns 
-	 */
-	 getCompanyAuthCensusList:params => {
-		return http.get('yb/chartCensus/getCompanyAuthCensusList',params);
-	  },
-	  
-	/**新增客户统计 
-	 * StartDate EndDate DataType
-	 * @return 
-	 */
-	newcustomStatistic: params => {
-		return http.get('/statistic_report/report/incremental_company',params)
-	},
-	/**
-	 * 存量客户统计
-	 * Date
-	 * @return
-	 */
-	stockcustomStatistic: params => {
-		return http.get('/statistic_report/report/stack_company',params)
-	},
-	/**续约客户统计 
-	 * StartDate 统计开始时间
-	 * EndDate 统计结束时间
-	 * DataType 统计范围类型
-	 * ProductId 项目类型 1 ficc  2 权益
-	 * @return 
-	 */
-	 renewalCustomStatistic: params => {
-		return http.get('/statistic_report/report/renew_company',params)
-	},
+  // 客户数据未续约说明更多
+  moreRenewReason: (params) => {
+    return http.get("/statistic_report/more_renew_reason", params);
+  },
+  // 客户数据未续约说明更多
+  mergeCompanyPreviousDetail: (params) => {
+    return http.get("/statistic_report/merge_company_previous/detail", params);
+  },
+  // 客户数据未续约说明更多上一年
+  mergeCompanyPreviousDetailYear: (params) => {
+    return http.get("/statistic_report/merge_company_previous/last_year", params);
+  },
+  /**
+   * 	// 获取图表阅读统计列表
+   * @param {PageSize} params
+   * @param {CurrentIndex} params
+   * @param {ClassifyId} params 分类ID
+   * @param {Order} params 排序
+   * @returns
+   */
+  getchartCensusList: (params) => {
+    return http.get("/yb/chartCensus/getVisitList", params);
+  },
+  /**
+   * 	// 图表阅读统计详情列表
+   * @param {PageSize} params
+   * @param {CurrentIndex} params
+   * @param {ClassifyId} params 分类ID
+   * @param {Order} params 排序
+   * @returns
+   */
+  getchartgetVisitDetailList: (params) => {
+    return http.get("yb/chartCensus/getVisitDetailList", params);
+  },
+  /**
+   * 	// 用户图表访问明细
+   * @returns
+   */
+  getCompanyChartVisitDetail: (params) => {
+    return http.get("yb/chartCensus/getCompanyChartVisitDetail", params);
+  },
+  /**
+   * 	// 图库权限开通客户统计列表
+   * @returns
+   */
+  getCompanyAuthCensusList: (params) => {
+    return http.get("yb/chartCensus/getCompanyAuthCensusList", params);
+  },
+
+  /**新增客户统计
+   * StartDate EndDate DataType
+   * @return
+   */
+  newcustomStatistic: (params) => {
+    return http.get("/statistic_report/report/incremental_company", params);
+  },
+  /**
+   * 存量客户统计
+   * Date
+   * @return
+   */
+  stockcustomStatistic: (params) => {
+    return http.get("/statistic_report/report/stack_company", params);
+  },
+  /**续约客户统计
+   * StartDate 统计开始时间
+   * EndDate 统计结束时间
+   * DataType 统计范围类型
+   * ProductId 项目类型 1 ficc  2 权益
+   * @return
+   */
+  renewalCustomStatistic: (params) => {
+    return http.get("/statistic_report/report/renew_company", params);
+  },
 
-	// 续约异常客户统计
-	unusualRenewalCustomStatistic: params => {
-		return http.get('/statistic_report/report/unusual_renew_company',params)
-	},
-	//续约异常客户统计图表数据
-	unusualRenewalCustomStatisticChartData:params=>{
-		return http.get('/statistic_report/report/unusual_renew_company/chart',params)
-	},
+  // 续约异常客户统计
+  unusualRenewalCustomStatistic: (params) => {
+    return http.get("/statistic_report/report/unusual_renew_company", params);
+  },
+  //续约异常客户统计图表数据
+  unusualRenewalCustomStatisticChartData: (params) => {
+    return http.get("/statistic_report/report/unusual_renew_company/chart", params);
+  },
 
-	/**
-	 * 新增客户列表
-	 * @param {} params PageSize CurrentIndex SortParam SortType 	CompanyIds
-	 * @return
-	 */
-	newcustomList: params => {
-		return http.post('/statistic_report/report/company_list',params)
-	},
-	/**
-	 * 销售To do统计
-	 * DataType ProductId StartDate EndDate
-	 * @return
-	 */
-	 todoStatistic: params => {
-		return http.get('/statistic_report/report/seller_company_todo',params)
-	},
+  /**
+   * 新增客户列表
+   * @param {} params PageSize CurrentIndex SortParam SortType 	CompanyIds
+   * @return
+   */
+  newcustomList: (params) => {
+    return http.post("/statistic_report/report/company_list", params);
+  },
+  /**
+   * 销售To do统计
+   * DataType ProductId StartDate EndDate
+   * @return
+   */
+  todoStatistic: (params) => {
+    return http.get("/statistic_report/report/seller_company_todo", params);
+  },
 
-	/**
-	 * 语音播报统计
-	 * @param SectionId	板块id
-	 * @param VarietyId 品种id
-	 * @param AdminId  语音管理员id
-	 * @param ClickSort 排序 1升序 2降序
-	 * @param Title 搜索关键词
-	 */
-	voicePlayStatistic:params=>{
-		return http.get('/yb/voice/broadcast/list',params)
-	},
+  /**
+   * 语音播报统计
+   * @param SectionId	板块id
+   * @param VarietyId 品种id
+   * @param AdminId  语音管理员id
+   * @param ClickSort 排序 1升序 2降序
+   * @param Title 搜索关键词
+   */
+  voicePlayStatistic: (params) => {
+    return http.get("/yb/voice/broadcast/list", params);
+  },
 
-	/**
-	 * 语音播报详情
-	 * @param BroadcastId
-	 */
-	voicePlayDetailSta:params=>{
-		return http.get('/yb/voice/broadcast/deatil',params)
-	},
+  /**
+   * 语音播报详情
+   * @param BroadcastId
+   */
+  voicePlayDetailSta: (params) => {
+    return http.get("/yb/voice/broadcast/deatil", params);
+  },
 
-	/**
-	 * 价格驱动点击量-列表
-	 */
-	priceDrivenStatisticsList:params=>{
-		return http.get('/yb/price_driven/click_census_list',params)
-	},
-	/**
-	 * 价格驱动点击量-详情
-	 */
-	 priceDrivenStatisticsDetail:params=>{
-		return http.get('/yb/price_driven/click_census_detail',params)
-	},
+  /**
+   * 价格驱动点击量-列表
+   */
+  priceDrivenStatisticsList: (params) => {
+    return http.get("/yb/price_driven/click_census_list", params);
+  },
+  /**
+   * 价格驱动点击量-详情
+   */
+  priceDrivenStatisticsDetail: (params) => {
+    return http.get("/yb/price_driven/click_census_detail", params);
+  },
 
-	//ficc产品阅读统计
-	ficcProductStatistic:params=>{
-		return http.get('/statistic_report/report/seller_yb_log',params)
-	},
+  //ficc产品阅读统计
+  ficcProductStatistic: (params) => {
+    return http.get("/statistic_report/report/seller_yb_log", params);
+  },
 
-	/**
-	 * 分产品阅读客户统计-- 新增客户列表
-	 * @param {} params PageSize CurrentIndex SortParam SortType SellerIds ProductId ProductType StartDate EndDate CompanyStatus
-	 * @return
-	*/
-		newCustomProductionList: params => {
-		return http.post('/statistic_report/report/seller_yb_log/user',params)
-	},
+  /**
+   * 分产品阅读客户统计-- 新增客户列表
+   * @param {} params PageSize CurrentIndex SortParam SortType SellerIds ProductId ProductType StartDate EndDate CompanyStatus
+   * @return
+   */
+  newCustomProductionList: (params) => {
+    return http.post("/statistic_report/report/seller_yb_log/user", params);
+  },
 
   /**
    * 分产品阅读统计 -- 收藏统计
    * @param Datatype
    */
-  collectStatistic:params=>{
-    return http.get('/statistic_report/report/seller_collect_log',params)
+  collectStatistic: (params) => {
+    return http.get("/statistic_report/report/seller_collect_log", params);
   },
 
   /**
    * 分产品阅读统计 -- 收藏统计用户详情
    * @param Datatype
    */
-   collectStatisticList:params=>{
-    return http.post('/statistic_report/report/seller_collect_log/user',params)
+  collectStatisticList: (params) => {
+    return http.post("/statistic_report/report/seller_collect_log/user", params);
   },
 
   /**
    * 分产品阅读统计 -- 收藏详情详情
    * @param CollectionType
    */
-   collectDetailList:params=>{
-    return http.post('/statistic_report/report/seller_collect_log/detail',params)
+  collectDetailList: (params) => {
+    return http.post("/statistic_report/report/seller_collect_log/detail", params);
   },
-   /**
+  /**
    * 分产品阅读统计 -- 图收藏统计
    * @param Datatype
    */
-    chartStatistic:params=>{
-      return http.get('/statistic_report/report/seller_chart_collect_log',params)
-    },
+  chartStatistic: (params) => {
+    return http.get("/statistic_report/report/seller_chart_collect_log", params);
+  },
   /**
    * 分产品阅读统计 -- 图收藏统计用户详情
    * @param Datatype
    */
-  chartStatisticList:params=>{
-    return http.post('/statistic_report/report/seller_chart_collect_log/user',params)
+  chartStatisticList: (params) => {
+    return http.post("/statistic_report/report/seller_chart_collect_log/user", params);
   },
   /**
    * 分产品阅读统计 -- 图收藏详情列表
    * @param CollectionType
    */
-   chartDetailList:params=>{
-    return http.post('/statistic_report/report/seller_chart_collect_log/detail',params)
+  chartDetailList: (params) => {
+    return http.post("/statistic_report/report/seller_chart_collect_log/detail", params);
+  },
+  /**
+   * 权益客户统计列表接口
+   * @param {PageSize} params
+   * @param {CurrentIndex} params
+   * @param {EndDate} params 结束日期
+   * @param {CompanyType} params
+   * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
+   * @param {RegionType } params
+   * @param {StartDate} params
+   * @param {DataType} params
+   * @param {IsConfirm} params  是否确认续约: -1-默认全部; 0-待确认; 1-已确认
+   * @param {CompanyAscribeId} params  归因Id
+   * @returns
+   */
+  incrementalCompanyContractPermissionList: (params) => {
+    return http.get("/statistic_report/merge_company/company_contract_permission/list", params);
   },
- /**
-  * 权益客户统计列表接口
-  * @param {PageSize} params 
-  * @param {CurrentIndex} params 
-  * @param {EndDate} params 结束日期
-  * @param {CompanyType} params 
-  * @param {AdminId } params 销售id,多个用英文逗号隔开,空字符串为全部
-  * @param {RegionType } params 
-  * @param {StartDate} params 
-  * @param {DataType} params 
-  * @param {IsConfirm} params  是否确认续约: -1-默认全部; 0-待确认; 1-已确认
-  * @param {CompanyAscribeId} params  归因Id
-  * @returns  
-  */
- incrementalCompanyContractPermissionList:params => {
- 	return http.get('/statistic_report/merge_company/company_contract_permission/list',params);
- },
   /**
   * 权益客户续约率统计
   * @param {PageSize} params 
@@ -401,77 +400,96 @@ const dataMainInterface = {
 
   * @returns  
   */
-  incrementalCompanyContractPercentageList:params => {
-	return http.get('/statistic_report/merge_company/company_contract_percentage/list',params);
+  incrementalCompanyContractPercentageList: (params) => {
+    return http.get("/statistic_report/merge_company/company_contract_percentage/list", params);
   },
-  incrementalCompanyContractPercentageListV2:params => {
-	return http.get('/statistic_report/merge_company/company_contract_percentage/listV2',params);
+  incrementalCompanyContractPercentageListV2: (params) => {
+    return http.get("/statistic_report/merge_company/company_contract_percentage/listV2", params);
   },
   /**
-  * 权益客户续约率统计所能查询的年份
-  * @returns  
-  */
-  incrementalCompanyContractGetYearList:params => {
-	return http.get('/statistic_report/merge_company/get_year_list',params);
+   * 权益客户续约率统计所能查询的年份
+   * @returns
+   */
+  incrementalCompanyContractGetYearList: (params) => {
+    return http.get("/statistic_report/merge_company/get_year_list", params);
   },
   /**
-  * 权益服务统计列表接口
-  * @returns  
-  */
-  getRaiServeList:params => {
-	return http.get('/cygx/rai_serve/list',params);
+   * 权益服务统计列表接口
+   * @returns
+   */
+  getRaiServeList: (params) => {
+    return http.get("/cygx/rai_serve/list", params);
   },
   /**
-  * 标签搜索接口
-  * @returns  
-  */
-  getRaiServeSearchTag:params => {
-	return http.get('/cygx/rai_serve/search_tag',params);
+   * 标签搜索接口
+   * @returns
+   */
+  getRaiServeSearchTag: (params) => {
+    return http.get("/cygx/rai_serve/search_tag", params);
   },
   /**
-  * 近四周覆盖率
-  * @returns  
-  */
-  getRaiServeCoverageRate:params => {
-	return http.get('/cygx/rai_serve/coverage_rate',params);
+   * 近四周覆盖率
+   * @returns
+   */
+  getRaiServeCoverageRate: (params) => {
+    return http.get("/cygx/rai_serve/coverage_rate", params);
   },
   /**
-  * 明细列表接口
-  * @returns  
-  */
-  getRaiServeBillList:params => {
-	return http.get('/cygx/rai_serve/bill_list',params);
+   * 明细列表接口
+   * @returns
+   */
+  getRaiServeBillList: (params) => {
+    return http.get("/cygx/rai_serve/bill_list", params);
   },
   /**
-  * 服务类型列表接口
-  * @returns  
-  */
-  getRaiServeTypeList:params => {
-	return http.get('/cygx/rai_serve/type_list',params);
+   * 服务类型列表接口
+   * @returns
+   */
+  getRaiServeTypeList: (params) => {
+    return http.get("/cygx/rai_serve/type_list", params);
   },
   /**
-  * 获取权益服务组销售列表
-  * @returns  
-  */
-  getRaiServeCustomSellerList:params => {
-	return http.get('/custom/seller/rai_serve/list',params);
+   * 获取权益服务组销售列表
+   * @returns
+   */
+  getRaiServeCustomSellerList: (params) => {
+    return http.get("/custom/seller/rai_serve/list", params);
   },
   /**
-  * 历史备注列表
-  * @returns  
-  */
-  getRaiServeRemarkList:params => {
-	return http.get('/cygx/rai_serve/remark/list',params);
+   * 历史备注列表
+   * @returns
+   */
+  getRaiServeRemarkList: (params) => {
+    return http.get("/cygx/rai_serve/remark/list", params);
   },
   /**
-  * 新增历史备注
-  * @returns  
-  */
-  getRaiServeRemarkAdd:params => {
-	return http.post('/cygx/rai_serve/remark/add',params);
+   * 新增历史备注
+   * @returns
+   */
+  getRaiServeRemarkAdd: (params) => {
+    return http.post("/cygx/rai_serve/remark/add", params);
+  },
+  /**
+   * 权益数据汇总列表接口
+   * @returns
+   */
+  getRaiDataSummary: (params) => {
+    return http.get("/statistic_report/rai_data_summary/list", params);
+  },
+  /**
+   * 获取权益开拓组或者服务组下面的销售接口
+   * @returns
+   */
+  getListRaiSellerServer: (params) => {
+    return http.get("/custom/seller/check/list_rai/server_type", params);
+  },
+  /**
+   * 获取权益弹窗详情接口
+   * @returns
+   */
+  getRaiDataSummaryList: (params) => {
+    return http.get("/statistic_report/rai_data_summary/detail", params);
   },
-}
+};
 
-export {
-	dataMainInterface
-}
+export { dataMainInterface };

TEMPAT SAMPAH
src/assets/img/icons/black_tip.png


+ 6 - 0
src/routes/modules/statisticRoutes.js

@@ -133,6 +133,12 @@ export default [
 				name: '权益服务统计',
 				hidden: false
 			},
+			{
+				path: 'equityDataSummary',
+				component: () => import('@/views/dataReport_manage/equityDataSummary.vue'),
+				name: '权益数据汇总',
+				hidden: false
+			},
 		]
 	},
 ]

+ 1 - 1
src/views/custom_manage/approvalTurn.vue

@@ -271,7 +271,7 @@ export default {
 		ContractTermTxt(){
 			let date = `${this.contractInfo.StartDate}-${this.contractInfo.EndDate}`;
 			let calculation = CalculationDate(this.contractInfo.StartDate,this.contractInfo.EndDate);
-			let str = this.contractInfo.Quarter ? this.contractInfo.Quarter + `(${date})` : date + `(${calculation})`;
+			let str = date + `(${calculation})`;
 			return str
 		}
 	},

+ 1 - 1
src/views/custom_manage/customList/addCustom.vue

@@ -83,7 +83,7 @@
 			<el-form-item label="客户状态" prop="cuStatus" style="marginRight:120px;">
 				<i style="color:#f00;fontSize:20px;position:absolute;left:-90px;top:10%;">*</i>
 				<el-radio-group v-model="dataForm.cuStatus" size="medium" style="width:400px;">
-					<el-radio border label="试用"  style="width:184px;">试用(2个月)</el-radio>
+					<el-radio border label="试用"  style="width:184px;">试用({{typeArr.includes('权益') ? 1 : 2}}个月)</el-radio>
 					<el-radio border label="永续" style="width:184px;marginLeft:0;" v-if="Role=='admin'">永续</el-radio>
 				</el-radio-group>
 			</el-form-item>

+ 76 - 69
src/views/custom_manage/customList/applyTurn.vue

@@ -39,7 +39,7 @@
 			<div class="apply_info">
 				<h3 style="fontSize:16px;">申请信息</h3>
 				<div class="info_cont">
-					<span style="display:block;marginBottom:30px;color:#333;paddingLeft:10px;">申请内容:试用转正式</span>
+					<span v-if="!isRaiSellerShow" style="display:block;marginBottom:30px;color:#333;paddingLeft:10px;">申请内容:试用转正式</span>
 					<el-form 
 					@submit.native.prevent 
 					inline 
@@ -66,7 +66,18 @@
 									<i class="el-icon-info"></i>
 							</el-tooltip>
 						</el-form-item>
-						<el-form-item label="合同期限" prop="term" style="marginRight:60px;" :rules="{ required: true, message: '合同期限不能为空', trigger: 'blur' }" v-if="!isXClassCustom">
+						<el-form-item label-width="140px" label="请输入合同编号" style="width:100%" prop="CreditCode" v-if="isRaiSellerShow"
+						 :rules="{required: true, message: '请输入合同编号', trigger: 'blur'}">
+						   <i style="color:#f00;fontSize:20px;position:absolute;left:-128px;top:10%;">*</i>
+						   <el-autocomplete
+						   	style="width:360px;"
+						   	v-model="formData.CreditCode"
+						   	:fetch-suggestions="querySearchCreditCode"
+						   	placeholder="请复制申请用印时生成的合同编号"
+						   	@select="handleSelectCreditCode"
+						></el-autocomplete>
+						</el-form-item>
+						<el-form-item label="合同期限" prop="term" style="marginRight:60px;" :rules="{ required: true, message: '合同期限不能为空', trigger: 'blur' }">
 							<i style="color:#f00;fontSize:20px;position:absolute;left:-90px;top:10%;">*</i>
 							<el-date-picker
 							v-model="formData.term"
@@ -75,11 +86,12 @@
 							start-placeholder="开始日期"
 							end-placeholder="结束日期"
 							@change="dateChange"
+							:disabled="isRaiSellerShow"
 							value-format="yyyy-MM-dd"
 							style="width:400px;">
 							</el-date-picker>
 						</el-form-item>
-						<el-form-item label="合同期限" prop="term" :rules="{ required: true, message: '合同期限不能为空', trigger: 'change' }" style="marginRight:60px;" v-if="isXClassCustom">
+						<!-- <el-form-item label="合同期限" prop="term" :rules="{ required: true, message: '合同期限不能为空', trigger: 'change' }" style="marginRight:60px;" v-if="isXClassCustom">
 							<i style="color:#f00;fontSize:20px;position:absolute;left:-90px;top:10%;">*</i>
 							<div class="quarters-content">
 								<el-checkbox-group v-model="selectedQuarters" @input="checkboxInputHandler">
@@ -91,13 +103,14 @@
 										{{ selectedDateRange }}
 								</div>
 							</div>
-						</el-form-item>
+						</el-form-item> -->
 						<el-form-item label="合同金额" prop="amount" style="marginRight:60px;">
 							<i style="color:#f00;fontSize:20px;position:absolute;left:-90px;top:10%;">*</i>
 							<el-input 
 							v-model.number="formData.amount"
 							:placeholder="isRaiCompany ? '请输入实际付款金额(优惠后)':'请输入金额'"
 							style="width:400px"
+							:disabled="isRaiCompany"
 							clearable></el-input>
 							<span style="color:#666;">元</span>
 						</el-form-item>
@@ -133,8 +146,7 @@
 								权限设置
 							</label>
 							<template  v-if="(companyInfo.CompanyType=='权益' || isRoleType== '权益') && !isXClassCustom" >
-								<raiPermissionbox ref="raiPermissionboxRef" v-for="item in authList" :key="item.ClassifyName" :data="item" :formData="formData"
-								:hasNoChild="hasNoChild"></raiPermissionbox>
+								<raiPermissionbox ref="raiPermissionboxRef" v-for="item in authList" :key="item.ClassifyName" :allData="item.Items" :formData.sync="formData" :raiCheckList.sync="raiCheckList"></raiPermissionbox>
 							</template>
 							<ul class="menu_lists" style="width:100%" v-else>
 								<li v-for="item in authList" :key="item.ClassifyName" class="menu_item">
@@ -204,6 +216,9 @@ export default {
 		isRaiCompany(){
 			return this.companyInfo.CompanyType == '权益' || this.isRoleType== '权益'
 		},
+		isRaiSellerShow() {
+			return localStorage.getItem('Role') === 'rai_seller';
+		},
 	},
 	data () {
 		return {
@@ -218,6 +233,7 @@ export default {
 				imglist:[],//合同列表图片
 				setmeal:'',
 				qyBigServeCheck:0,
+				CreditCode:''
 			},
 			hasNoChild:false, // 医药、消费、科技、智造是否没有主客观
 			authList:[],//权限列表
@@ -245,6 +261,8 @@ export default {
 			citiesEquity:[], //
 			citiesListEquity:[], //
 			citiesListpitchOn:[],
+
+			raiCheckList:[], //权益复选框
 		};
 	},
 	methods: {
@@ -277,24 +295,9 @@ export default {
 					let newArr = [];
 					/* 处理权限列表 */
 					if(this.isRaiCompany && !this.isXClassCustom ) {
-						res.Data.Item.PermissionList[0].Items.map(item => {
-							item.disabled=item.isIndeterminate=false								
-							if(item.ChartPermissionId==22 && (!item.Child)) this.hasNoChild=true
-						})
-						/* 处理数据把复选框 拆分成三个*/
 						res.Data.Item.PermissionList.length&&res.Data.Item.PermissionList.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,30,148,62].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54].includes(key.ChartPermissionId))
-						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
-						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
-							let obj = {
-								...item,
-								Items:arr,
-								ItemsPrivate,
-								ItemsUp,
-								ItemsBig
-							}
-							newArr.push(obj)
+							this.raiCheckList = item.CheckList || []
+							newArr.push(item)
 						})
 					} else {
 						res.Data.Item.PermissionList.forEach(item => {
@@ -321,24 +324,8 @@ export default {
 				let newArr = [];
 				if(res.Ret === 200) {
 					if(this.isRaiCompany && !this.isXClassCustom) {
-						res.Data.List[0].Items.map(item => {
-							item.disabled=item.isIndeterminate=false								
-							if(item.ChartPermissionId==22 && (!item.Child)) this.hasNoChild=true
-						})
-						/* 处理数据把复选框 拆分成三个*/
 						res.Data.List.length&&res.Data.List.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,30,148,62].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54].includes(key.ChartPermissionId))
-						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
-						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
-							let obj = {
-								...item,
-								Items:arr,
-								ItemsPrivate,
-								ItemsUp,
-								ItemsBig
-							}
-							newArr.push(obj)
+							newArr.push(item)
 						})
 					}else {
 						res.Data.List.length&&res.Data.List.forEach(item => {
@@ -374,35 +361,34 @@ export default {
 				if (valid) {
 					/* 处理权限列表 */
 					let checkArr = [];
-					let checkArrName = [];
-					let hasMinusSignVal = 0
-					if((this.companyInfo.CompanyType==='权益' || this.isRoleType== '权益') && !this.isXClassCustom){
-					 	hasMinusSignVal = this.$refs.raiPermissionboxRef[0].minus_sign_val;		
+					let PointsArr = []
+					let isPoints = true;
+					if((this.companyInfo.CompanyType === '权益' || this.isRoleType == '权益') && !this.isXClassCustom){
+						checkArr = this.raiCheckList
 						this.authList.forEach(item => {
-								if(item.CheckList.length) {
-									checkArr.push(item.CheckList)
-									item.ItemsUp.forEach(key=>{
-										if(item.CheckList.includes(key.ChartPermissionId)) {
-											checkArrName.push(key.PermissionName)
-										}
-									})
-								}
-							})
-						}else {
-							this.authList.forEach(item => {
-								if(item.CheckList.length) {
-									checkArr.push(item.CheckList)
+							item.Items.forEach(key => {
+								if (checkArr.includes(key.ChartPermissionId) && key.ShowInput) {
+									if (!key.Points) return isPoints = false;
+									PointsArr.push({
+										ChartPermissionId: key.ChartPermissionId,
+										Points: key.Points-0,
+									});
 								}
 							})
+							
+						})
+					}else {
+						this.authList.forEach(item => {
+							if(item.CheckList.length) {
+								checkArr.push(item.CheckList)
+							}
+						})
 					}
-					const hasFiftyTwo = checkArr.flat(2).includes(52);
-					if(hasFiftyTwo && !hasMinusSignVal) return this.$message.error('请输入研选扣点数')
-
+					if(!isPoints) return this.$message.warning('请输入点数!')
 					if(!checkArr.length && this.companyInfo.CompanyType === '权益') {
 						this.$message.warning('请选择权限!');
 						return
 					}else {
-						
 						let PermissionIds = [... new Set(checkArr.flat(2))].join(',');
 						let params = {
 							CompanyId:Number(this.companyInfo.CompanyId),
@@ -416,15 +402,12 @@ export default {
 							PayMethod:this.formData.payway,
 							PermissionIds,
 							PackageType:this.formData.setmeal ? this.formData.setmeal : 0,
-							PermissionNames:checkArrName.length? checkArrName.join(','):'',
 							RaiPackageType:this.formData.qyBigServeCheck||0,
-							Points:hasMinusSignVal||0
+							PointsArr
 						}
-						// console.log(params);
 						customInterence.applyTurn(params).then(res => {
 							if(res.Ret === 200) {
 								this.$message.success(res.Msg);
-								//this.$router.go(-1);
 								this.$router.push({path:`/${this.$route.meta.pathFrom}`})
 							}
 						})
@@ -600,10 +583,34 @@ export default {
 				this.$message.warning('请勾选品种')
 			}
 		},
-	checkboxInputHandler(){
-		this.formData.term = this.selectedQuarters ? [this.selectedDateRange.split(" ~ ")[0],this.selectedDateRange.split(" ~ ")[1]]:[]
-	}
-	
+		checkboxInputHandler(){
+			this.formData.term = this.selectedQuarters ? [this.selectedDateRange.split(" ~ ")[0],this.selectedDateRange.split(" ~ ")[1]]:[]
+		},
+		// 获取合同编号
+		async querySearchCreditCode(queryString, cb) {
+			cb([])
+			if(queryString) {
+			  const res = await customInterence.searchSealcodeSeal({
+				KeyWord:queryString
+			  })
+			  if(res.Ret === 200) {
+				if(res.Data.List.length) {
+				  const data = res.Data.List.map(item => {
+					return {
+					  value: item.Code,
+					  ...item
+					}
+				  })
+				  cb(data)
+				}
+			  }
+			}
+		},
+		// 选择合同编号
+		handleSelectCreditCode(item) {
+			this.formData.term = [item.StartDate,item.EndDate]
+			this.formData.amount = item.Money
+		}
 	},
 	created() {},
 	mounted() {

+ 1 - 2
src/views/custom_manage/customList/components/deductDetailDlg.vue

@@ -2,7 +2,7 @@
   <div class="">
     <!-- banner 详情的弹框 -->
     <el-dialog
-      :title="isShowDlgType == '专项调研' ? '专项调研次数明细' : '研选服务点数明细'"
+      :title="isShowDlgType == '专项调研' ? '专项/路演点数' : '研选服务点数明细'"
       :visible.sync="isShowResearchNumber"
       width="1200px"
       v-dialogDrag
@@ -14,7 +14,6 @@
       <el-table style="margin-bottom: 30px" :data="tableList" border height="500">
         <el-table-column align="center" prop="Content" label="事项"></el-table-column>
         <el-table-column align="center" prop="CreateTime" label="时间" width="180"></el-table-column>
-        <el-table-column align="center" prop="ChartPermissionName" label="行业" width="100" v-if="isShowDlgType == '专项调研'"></el-table-column>
         <el-table-column align="center" prop="RealName" label="参会人" width="100"></el-table-column>
         <el-table-column align="center" prop="minNumber" label="小计" width="80">
           <template slot-scope="{ row }">

+ 279 - 312
src/views/custom_manage/customList/components/raiPermissionbox.vue

@@ -1,92 +1,49 @@
 <template>
-  <div class="rai-checkbox-content" id="rai-checkbox-content">
-    <div class="rai-checkbox-bigS-box">
-      <el-checkbox
-        v-model="itB.Checked"
-        v-for="itB in data.ItemsBig"
-        :key="itB.PermissionName"
-        @change="(e) => bigServeCheck(e, itB, data)"
-        :indeterminate="itB.isIndeterminate && !itB.disabled"
-        class="bigS-item"
-        :disabled="itB.disabled || (formData.qyBigServeCheck != getQyBigServeCheckNumber(itB.PermissionName) && formData.qyBigServeCheck != 0)"
-        >{{ itB.PermissionName }}</el-checkbox
-      >
-    </div>
-    <div class="rai-checkbox-box">
-      <div class="rai-checkbox-main-container">
-        <div class="rai-checkbox-main-row">
-          <div
-            class="rai-checkbox-item"
-            v-for="it in data.Items"
-            :key="it.ChartPermissionId"
-            :style="{ width: [23, 148, 62].includes(it.ChartPermissionId) ? '84px' : it.ChartPermissionId == 30 ? '110px' : '168px' }"
+  <div class="rai-checkbox-box">
+    <!-- 第一行:套餐 -->
+    <el-row :gutter="10" style="margin-bottom: 16px">
+      <el-col v-for="item in packages" :key="item.PermissionName" :span="3">
+        <el-checkbox v-model="item.Checked" @change="onPackageChange(item)" :disabled="item.disabled">
+          {{ item.PermissionName }}
+        </el-checkbox>
+      </el-col>
+    </el-row>
+
+    <!-- 第二行:主模块 -->
+    <div class="main-list">
+      <div class="main-list-item" :class="[item.Child && 'fixed-width']" v-for="item in mainList" :key="item.PermissionName">
+        <div>
+          <el-checkbox v-model="item.Checked" :indeterminate="item.isIndeterminate" :disabled="item.disabled" @change="onMainChange(item)">
+            {{ item.PermissionName }}
+          </el-checkbox>
+        </div>
+        <div v-if="item.Child" style="margin-left: 10px">
+          <el-checkbox
+            v-for="child in item.Child"
+            :key="child.PermissionName"
+            :disabled="item.disabled"
+            v-model="child.Checked"
+            @change="() => onChildChange(item)"
+            style="display: block; margin-right: 15px"
           >
-            <template v-if="it.Child">
-              <el-checkbox
-                :label="it.PermissionName"
-                style="margin-right: 8px"
-                v-model="it.Checked"
-                @change="handleItemCheck(it, data)"
-                :indeterminate="it.isIndeterminate"
-                :disabled="it.disabled"
-              ></el-checkbox>
-              <el-checkbox-group v-model="data.CheckList" style="height: unset" @change="handleQYChecked(it, data)" :disabled="it.disabled">
-                <div class="rai-checkbox-serve-box">
-                  <el-checkbox :label="itChild.ChartPermissionId" v-for="itChild in it.Child" :key="itChild.ChartPermissionId" class="small-item">{{ itChild.PermissionName }}</el-checkbox>
-                </div>
-              </el-checkbox-group>
-            </template>
-            <template v-else>
-              <el-checkbox-group v-model="data.CheckList" style="height: unset; margin-right: 8px" @change="handleQYChecked(it, data)">
-                <el-checkbox :label="it.ChartPermissionId" :disabled="it.disabled">{{ it.PermissionName }}</el-checkbox>
-              </el-checkbox-group>
-            </template>
-          </div>
+            {{ child.PermissionName }}
+          </el-checkbox>
         </div>
-        <el-checkbox-group v-model="data.CheckList" style="height: unset">
-          <div class="rai-checkbox-upS-box">
-            <el-checkbox
-              :label="itU.ChartPermissionId"
-              v-for="itU in data.ItemsUp"
-              :key="itU.ChartPermissionId"
-              class="rai-checkbox-item upS-item"
-              :disabled="itU.disabled"
-              @change="(e) => handleUpdateChecked(e, itU.PermissionName, data)"
-              >{{ itU.PermissionName }}</el-checkbox
-            >
-          </div>
-        </el-checkbox-group>
+        <el-input type="number" style="width: 118px; margin: 0 8px" placeholder="请输入点数" v-if="item.ShowInput" v-model="item.Points"></el-input>
+        <p class="text-content" v-if="item.ChartContent">{{ item.ChartContent }}</p>
       </div>
-      <div class="rai-checkbox-private-container">
-        <el-checkbox-group v-model="data.CheckList" style="height: unset">
-          <div class="rai-checkbox-upS-box">
-            <el-checkbox
-              :label="itP.ChartPermissionId"
-              v-for="(itP, inP) in data.ItemsPrivate"
-              :key="itP.ChartPermissionId"
-              :disabled="itP.disabled"
-              :style="{ height: hasNoChild ? '48px' : '95px', width: itP.ChartPermissionId == 52 && data.CheckList.includes(52) ? '220px' : itP.PermissionName.includes('研选') ? '130px' : '84px' }"
-              class="rai-checkbox-item upS-item"
-              @change="(e) => handlePrivateChecked(e, itP, data)"
-            >
-              {{ itP.PermissionName }}
-              <p v-if="itP.ChartPermissionId == 31" class="checkbox-text">(30000元/年)</p>
-              <p v-if="itP.ChartPermissionId == 52" class="checkbox-text">(点/2000元)</p>
-              <input
-                @click.stop
-                @input="validateInteger"
-                placeholder="请输入点数"
-                style="margin-left: 10px"
-                v-if="itP.ChartPermissionId == 52 && data.CheckList.includes(52)"
-                v-model="minus_sign_val"
-              />
-            </el-checkbox>
-          </div>
-        </el-checkbox-group>
-        <div class="rai-checkbox-notice-box" v-if="data.ItemsUp.length > 0">
-          <span class="rai-checkbox-notice" v-if="formData.qyBigServeCheck"> 同时包含{{ formData.qyBigServeCheck == 2 ? "12" : "16" }}次专项调研</span>
-          <p class="rai-checkbox-notice" v-if="equityGroupDisabled(data.CheckList)">同时包含升级行业各5次专项调研</p>
-        </div>
+    </div>
+
+    <!-- 第三行:升级模块 -->
+    <div class="bootm-list">
+      <div class="bootm-list-item" v-for="item in upgradeList" :key="item.PermissionName">
+        <el-checkbox v-model="item.Checked" :disabled="item.disabled" @change="onUpgradeChange(item)">
+          {{ item.PermissionName }}
+        </el-checkbox>
+      </div>
+      <div class="rai-checkbox-notice-box">
+        <span class="rai-checkbox-notice" v-if="this.formData.qyBigServeCheck"> 同时包含{{ this.formData.qyBigServeCheck == 2 ? "12" : "16" }}次专项调研</span>
+        <p class="rai-checkbox-notice" v-if="equityGroupDisabled(raiCheckList)">同时包含升级行业各5次专项调研</p>
       </div>
     </div>
   </div>
@@ -94,282 +51,292 @@
 
 <script>
 export default {
-  name: "raiPermissionbox",
-  data() {
-    return {
-      minus_sign_val: "",
-    };
-  },
+  name: "PermissionCheckboxGroup",
   props: {
-    data: {
+    allData: {
+      type: Array,
       required: true,
-      type: Object,
+    },
+    raiCheckList: {
+      type: Array,
+      default: () => [],
     },
     formData: {
-      //formData.qyBigServeCheck  0-无 1- 70万 2- 45万
-      required: true,
       type: Object,
     },
-    hasNoChild: {
-      type: Boolean,
-      default: false,
+  },
+  data() {
+    return {
+      qyBigServeCheck: "",
+    };
+  },
+  computed: {
+    packages() {
+      return this.allData.filter((item) => item.PermissionName.includes("套餐"));
+    },
+    mainList() {
+      return this.allData.filter((item) => item.PermissionName && !item.PermissionName.includes("升级") && !item.PermissionName.includes("套餐"));
+    },
+    upgradeList() {
+      return this.allData.filter((item) => item.PermissionName.includes("升级"));
     },
   },
-  created() {
-    // 回显
-    if (this.data.CheckList && this.data.CheckList.length > 0) {
-      this.data.Items.map((item) => {
+  methods: {
+    // 处理选中后的id
+    updateCheckList() {
+      const list = [];
+      this.allData.forEach((item) => {
         if (item.Child) {
-          item.Child.map((t) => {
-            this.handleQYChecked(item, this.data);
+          item.Child.forEach((child) => {
+            if (child.Checked) {
+              list.push(child.ChartPermissionId);
+            }
           });
-        } else {
-          this.handleQYChecked(item, this.data);
+          return;
+        }
+        if (item.Checked && item.ChartPermissionId > 0) {
+          list.push(item.ChartPermissionId);
         }
       });
-      this.data.ItemsPrivate.map((itP) => {
-        let flag = this.data.CheckList.includes(itP.ChartPermissionId);
-        this.handlePrivateChecked(flag, itP, this.data);
-      });
-      this.data.ItemsUp.map((itU) => {
-        let flag = this.data.CheckList.includes(itU.ChartPermissionId);
-        this.handleUpdateChecked(flag, itU.PermissionName, this.data);
-      });
-    }
-  },
-  methods: {
-    // 套餐选中逻辑修复
-    bigServeCheck(value, itB, item) {
-      this.formData.qyBigServeCheck = value ? this.getQyBigServeCheckNumber(itB.PermissionName) : 0;
-
-      // 更新 `indeterminate` 状态
-      item.ItemsBig.forEach((itB) => (itB.isIndeterminate = false));
+      this.$emit("update:raiCheckList", list);
+    },
+    // 套餐选中后的逻辑
+    onPackageChange(pkg) {
+      if (pkg.Checked) {
+        let indexItme = this.packages.findIndex((item) => item.PermissionName === pkg.PermissionName);
+        this.packages[indexItme == 0 ? 1 : 0].disabled = true;
+        // 取消其他套餐
+        this.packages.forEach((item) => {
+          if (item !== pkg) {
+            item.Checked = false;
+          }
+        });
 
-      const bigServeItems = this.hasNoChild
-        ? [22, 21, 20, 19, 23, 30]
-        : process.env.NODE_ENV === "production"
-        ? [22, 39, 21, 38, 20, 37, 19, 36, 23, 30, 148, 62]
-        : [22, 37, 21, 36, 20, 35, 19, 34, 23, 30, 148, 62];
+        // 全部先清空
+        this.mainList.forEach((main) => {
+          main.Checked = false;
+          main.isIndeterminate = false;
+          main.disabled = false;
+          if (main.Child) {
+            main.Child.forEach((c) => (c.Checked = false));
+          }
+        });
+        this.upgradeList.forEach((up) => {
+          up.Checked = false;
+          up.disabled = false;
+        });
 
-      if (value) {
-        item.CheckList = [...new Set([...item.CheckList, ...bigServeItems])];
+        // 根据 SetMenuChartPermissionId 选中主模块和子模块
+        pkg.SetMenuChartPermissionId.forEach((id) => {
+          const main = this.allData.find((i) => i.ChartPermissionId === id);
+          if (main) {
+            main.Checked = true;
+            if (main.Child) {
+              main.Child.forEach((c) => (c.Checked = true));
+              this.updateIndeterminate(main);
+            }
+            // 禁用升级
+            const upgrade = this.upgradeList.find((u) => u.PermissionName.includes(main.PermissionName));
+            if (upgrade) {
+              upgrade.disabled = true;
+            }
+          }
+        });
       } else {
-        item.CheckList = item.CheckList.filter((t) => !bigServeItems.includes(t));
-      }
-
-      if (!this.hasNoChild) {
-        // 更新子级状态
-        item.Items.forEach((ele) => {
-          if (ele.Child) {
-            ele.Checked = value;
-            this.handleItemCheck(ele, item);
+        this.packages.forEach((item) => (item.disabled = false));
+        // 清空所有勾选
+        this.mainList.forEach((main) => {
+          main.Checked = false;
+          main.isIndeterminate = false;
+          main.disabled = false;
+          if (main.Child) {
+            main.Child.forEach((c) => (c.Checked = false));
           }
         });
+        this.upgradeList.forEach((up) => {
+          up.Checked = false;
+          up.disabled = false;
+        });
       }
+      this.$emit("update:formData", {
+        ...this.formData,
+        qyBigServeCheck: pkg.Checked ? (pkg.PermissionName.includes("70") ? 1 : 2) : 0,
+      });
+      this.updateCheckList();
     },
-    // 医药、消费、科技、智造(有主客观)选中
-    // 父子选中逻辑修复
-    handleItemCheck(it, item) {
-      const childIds = it.Child.map((t) => t.ChartPermissionId);
+    // 行业选中后的逻辑
+    onMainChange(item) {
+      if (item.Child) {
+        item.Child.forEach((child) => {
+          child.Checked = item.Checked;
+        });
+      }
 
-      if (it.Checked) {
-        item.CheckList = [...new Set([...item.CheckList, ...childIds])];
-      } else {
-        item.CheckList = item.CheckList.filter((t) => !childIds.includes(t));
+      const upgradeItem = this.upgradeList.find((up) => up.PermissionName.includes(item.PermissionName));
+      if (upgradeItem) {
+        upgradeItem.disabled = item.Checked;
       }
 
-      this.updateParentStatus(it, item);
+      this.updateIndeterminate(item);
+      this.updateCheckList();
     },
-    // 更新父级状态
-    updateParentStatus(it, item) {
-      let count = 0;
+    // 行业的主客观
+    onChildChange(parent) {
+      const total = parent.Child.length;
+      const checkedCount = parent.Child.filter((c) => c.Checked).length;
 
-      if (it.Child) {
-        it.Child.forEach((child) => {
-          if (item.CheckList.includes(child.ChartPermissionId)) count++;
-        });
-        it.Checked = count === it.Child.length;
-        it.isIndeterminate = count > 0 && count < it.Child.length;
+      if (checkedCount === total) {
+        parent.Checked = true;
+        parent.isIndeterminate = false;
+      } else if (checkedCount > 0) {
+        parent.Checked = false;
+        parent.isIndeterminate = true;
+      } else {
+        parent.Checked = false;
+        parent.isIndeterminate = false;
       }
 
-      // 更新禁用状态
-      const relatedItem = item.ItemsUp.find((up) => up.PermissionName.includes(it.PermissionName));
-      if (relatedItem) {
-        relatedItem.disabled = count !== 0;
+      const upgradeItem = this.upgradeList.find((up) => up.PermissionName.includes(parent.PermissionName));
+      if (upgradeItem) {
+        upgradeItem.disabled = checkedCount > 0;
       }
+      this.updateCheckList();
     },
-    handleQYChecked(it, item) {
-      // console.log(it,item);
-      let count = 0;
-      if (it.Child) {
-        // 有主客观
-        it.Child.map((t) => {
-          if (item.CheckList.includes(t.ChartPermissionId)) count++;
-        });
-        it.Checked = count == 2;
-        it.isIndeterminate = count == 1;
-      }
-      if (this.hasNoChild) {
-        if (item.CheckList.includes(it.ChartPermissionId)) count++;
-      }
-      // 设置升级套餐的禁用
-      let changeItem = item.ItemsUp.find((itUp) => itUp.PermissionName.includes(it.PermissionName));
-      if (changeItem) changeItem.disabled = count != 0;
-      // 设置大套餐的状态
-      let bigServeCheckNum;
-      if (this.formData.qyBigServeCheck) {
-        //qyBigServeCheck有值就作用在对应的大套餐
-        bigServeCheckNum = this.formData.qyBigServeCheck == 1 ? 1 : 0;
-      } else {
-        // 默认作用在45万上 原本有状态的话,就作用在有状态的大套餐
-        bigServeCheckNum = item.ItemsBig[1].isIndeterminate || item.ItemsBig[1].Checked ? 1 : 0;
-      }
-      // 正式服 各行业的客观的chartPermissionId和测试服的不一样
-      let allChartPermissionIds = process.env.NODE_ENV === "production" ? [22, 39, 21, 38, 20, 37, 19, 36, 23, 30, 148, 62] : [22, 37, 21, 36, 20, 35, 19, 34, 23, 30, 148, 62];
+    // 升级选中后的逻辑
+    onUpgradeChange(upgrade) {
+      const main = this.mainList.find((main) => upgrade.PermissionName.includes(main.PermissionName));
+      if (main) {
+        main.disabled = upgrade.Checked;
 
-      let bigServeItems = this.hasNoChild ? [22, 21, 20, 19, 23, 30] : allChartPermissionIds;
-      if (bigServeItems.every((t) => item.CheckList.includes(t))) {
-        item.ItemsBig[bigServeCheckNum].Checked = true;
-        this.formData.qyBigServeCheck = this.getQyBigServeCheckNumber(item.ItemsBig[bigServeCheckNum].PermissionName);
-      } else {
-        item.ItemsBig[bigServeCheckNum].Checked = false;
-        this.formData.qyBigServeCheck = 0;
+        if (upgrade.Checked) {
+          main.Checked = false;
+          main.isIndeterminate = false;
+          if (main.Child) {
+            main.Child.forEach((c) => (c.Checked = false));
+          }
+        }
       }
-      item.ItemsBig[bigServeCheckNum].isIndeterminate = bigServeItems.some((t) => item.CheckList.includes(t)) && !item.ItemsBig[bigServeCheckNum].Checked;
+      this.updateCheckList();
     },
-    handleUpdateChecked(value, name, item) {
-      let isDisabled = item.ItemsUp.some((itU) => item.CheckList.includes(itU.ChartPermissionId));
-      // 设置大套餐禁用
-      item.ItemsBig.map((itb) => (itb.disabled = isDisabled));
-      // 设置基础套餐禁用
-      item.Items.find((its) => name.includes(its.PermissionName)).disabled = value;
-    },
-    handlePrivateChecked(value, itP, item) {
-      if (![20032, 20031, 31].includes(itP.ChartPermissionId)) return;
-      // 买方严选的互斥
-      item.ItemsPrivate.forEach((itPri) => {
-        if ([20032, 20031, 31].includes(itPri.ChartPermissionId) && itP.ChartPermissionId != itPri.ChartPermissionId && value) {
-          itPri.disabled = true;
-        } else {
-          itPri.disabled = false;
-        }
-      });
+    // 更新 indeterminate 状态
+    updateIndeterminate(item) {
+      if (!item.Child) return;
+      const total = item.Child.length;
+      const checked = item.Child.filter((c) => c.Checked).length;
+      item.isIndeterminate = checked > 0 && checked < total;
     },
+    // 是否有超过100000的点数
     equityGroupDisabled(item) {
       return item.some((key) => key > 100000);
     },
-    getQyBigServeCheckNumber(permissionName) {
-      return permissionName.includes("70") ? 1 : 2;
-    },
-    // 数字输入校验
-    validateInteger() {
-      this.minus_sign_val = this.minus_sign_val.replace(/[^0-9]/g, "");
-      if (this.minus_sign_val !== "") {
-        this.minus_sign_val = parseInt(this.minus_sign_val, 10);
+  },
+  mounted() {
+    // 初始化
+    if (this.raiCheckList.length > 0) {
+      // 设置套餐选中与互斥状态
+      if (this.formData.qyBigServeCheck) {
+        const selectedIndex = this.formData.qyBigServeCheck == 2 ? 0 : 1;
+        this.packages[selectedIndex].Checked = true;
+        this.packages[1 - selectedIndex].disabled = true;
       }
-    },
+
+      // 初始化主模块与子模块状态
+      this.mainList.forEach((main) => {
+        const isMainChecked = this.raiCheckList.includes(main.ChartPermissionId);
+        main.Checked = isMainChecked;
+        main.isIndeterminate = false;
+
+        // 更新子模块
+        if (main.Child) {
+          let checkedCount = 0;
+          main.Child.forEach((child) => {
+            const isChildChecked = this.raiCheckList.includes(child.ChartPermissionId);
+            child.Checked = isChildChecked;
+            if (isChildChecked) checkedCount++;
+          });
+
+          if (checkedCount > 0 && checkedCount < main.Child.length) {
+            main.isIndeterminate = true;
+            main.Checked = false;
+          } else if (checkedCount === main.Child.length) {
+            main.Checked = true;
+            main.isIndeterminate = false;
+          }
+        }
+
+        // 升级模块与主模块互斥处理
+        const upgrade = this.upgradeList.find((up) => up.PermissionName.includes(main.PermissionName));
+        if (upgrade) {
+          upgrade.disabled = isMainChecked || (main.Child && main.Child.some((c) => c.Checked));
+        }
+      });
+
+      // 初始化升级模块状态
+      this.upgradeList.forEach((upgrade) => {
+        const isUpgradeChecked = this.raiCheckList.includes(upgrade.ChartPermissionId);
+        upgrade.Checked = isUpgradeChecked;
+
+        const main = this.mainList.find((m) => upgrade.PermissionName.includes(m.PermissionName));
+        if (main) {
+          main.disabled = isUpgradeChecked;
+        }
+      });
+
+      // 更新总勾选列表
+      this.updateCheckList();
+    }
   },
 };
 </script>
 
-<style lang="scss" scoped>
-.rai-checkbox-content {
-  // width: 100%;
-  // height: 160px;
-  padding: 20px 0 20px 20px;
-  border: 1px dashed #aab4cc;
-  // display: flex;
-  .rai-checkbox-bigS-box {
+<style scoped lang="scss">
+.rai-checkbox-box {
+  width: 102%;
+  .main-list {
     display: flex;
-    .bigS-item {
-      display: inline-flex;
+    padding-right: 15px;
+    border-right: 1px solid #e4e7ed;
+    border-top: 1px solid #e4e7ed;
+    border-bottom: 1px solid #e4e7ed;
+    overflow: hidden;
+    .main-list-item {
+      position: relative;
+      display: flex;
       align-items: center;
-      padding: 4px 8px;
-      height: 22px;
-      margin: 0 20px 20px 0;
-    }
-  }
-  .rai-checkbox-box {
-    display: flex;
-    // flex-wrap: wrap;
-    .rai-checkbox-main-container {
-      .rai-checkbox-main-row {
-        display: flex;
-        .small-item {
-          display: inline-flex;
-          align-items: center;
-          border: solid 1px #dcdfe6;
-          padding: 4px 12px;
-          height: 48px;
-          width: 84px;
-          margin-right: -1px;
-          margin-bottom: -1px;
-          &:first-child {
-            margin-top: -1px;
-          }
-        }
+      border-left: 1px solid #e4e7ed;
+      padding: 0 20px;
+      .text-content {
+        position: absolute;
+        left: 10px;
+        bottom: 0;
       }
     }
-    .rai-checkbox-private-container {
-      .rai-checkbox-notice-box {
-        display: flex;
-        align-items: center;
-        border: solid 1px #dcdfe6;
-        border-left: none;
-        height: 48px;
-        margin-right: -1px;
-        margin-left: -276px;
-        padding-left: 200px;
-        .rai-checkbox-notice {
-          color: #f00;
-        }
-      }
+    .fixed-width {
+      width: 150px !important;
     }
-    .rai-checkbox-upS-box {
-      display: flex;
-      .upS-item {
-        position: relative;
-        justify-content: flex-start;
-        .checkbox-text {
-          position: absolute;
-          font-size: 12px;
-          color: #999;
-          bottom: 15px;
-          left: 20px;
-        }
-        input {
-          width: 90px;
-          height: 30px;
-          border-radius: 4px;
-          padding-left: 10px;
-          border: 1px solid #dcdfe6;
-        }
-      }
+  }
+  .bootm-list {
+    display: flex;
+    border-right: 1px solid #e4e7ed;
+    border-left: 1px solid #e4e7ed;
+    border-bottom: 1px solid #e4e7ed;
+    .bootm-list-item {
+      width: 150px;
+      padding-left: 20px;
+      border-right: 1px solid #e4e7ed;
     }
-    .rai-checkbox-item {
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-      border: solid 1px #dcdfe6;
-      margin-bottom: -1px;
-      margin-right: -1px;
-      padding-left: 12px;
-      min-height: 48px;
-      width: 168px;
-      .rai-checkbox-serve-box {
-        display: flex;
-        flex-direction: column;
-        align-items: flex-start;
-        height: unset;
-      }
+  }
+  .rai-checkbox-notice-box {
+    flex: 1;
+    text-align: center;
+    .rai-checkbox-notice {
+      color: #f00;
     }
   }
 }
-</style>
-<style lang="scss">
-#rai-checkbox-content {
-  .el-checkbox {
-    color: #333333;
+@media screen and (max-width: 1701px) {
+  .rai-checkbox-box {
+    width: 107%;
   }
 }
 </style>

+ 3 - 3
src/views/custom_manage/customList/customDetail.vue

@@ -66,7 +66,7 @@
 								<span class="con">{{raiform.Scale ==1?'50亿以下':raiform.Scale ==2?'50~100亿':raiform.Scale ==3?'100亿以上':''}}</span>
 							</li>
 							<li v-if="raiform.SpecialSurplus">
-								<label class="label-num" >专项调研剩余次数</label>
+								<label class="label-num" >专项/路演点数</label>
 								<span class="con">{{raiform.SpecialSurplus}} <span class="editsty" @click="clickDlgNumberHandler('专项调研')">明细>></span></span>
 							</li>
 							<li v-if="RoleType==='admin'" style="width:100%">
@@ -74,11 +74,11 @@
 								>客户编码</label>
 								<span class="con" style="word-break: break-word;">{{raiform.OpenCode}}</span>
 							</li>
-							<li  style="width:100%" v-if="raiform.Points">
+							<!-- <li  style="width:100%" v-if="raiform.Points">
 								<label class="label-num">研选服务点数</label>
 								<span class="con" style="word-break: break-word;">{{raiform.Points}}</span>
 								<span v-if="raiform.Points" @click="clickDlgNumberHandler('研选服务')" class="con" style="word-break: break-word;color:#409EFF;padding-left:10px;cursor: pointer;">明细>></span>
-							</li>
+							</li> -->
 						</ul>
 						<el-collapse v-model="raiCollapseOpen" accordion>
 							<el-collapse-item name="1">

+ 1 - 1
src/views/custom_manage/customList/customList.vue

@@ -532,7 +532,7 @@
 		center>
 			<div slot="title" style="display:flex;alignItems:center;">
 				<!-- <img :src="$icons.auth" style="color:#fff;width:16px;height:16px;marginRight:5px;"> -->
-				<span style="fontSize:16px;">增开试用(默认两个月)</span>
+				<span style="fontSize:16px;">增开试用(默认{{ RoleType == '权益' ? '一' : ''}}个月)</span>
 			</div>
 			<Cauthlist
 			:autharr="authList"

+ 1 - 1
src/views/custom_manage/customList/customShareList.vue

@@ -475,7 +475,7 @@
 		v-dialogDrag
 		center>
 			<div slot="title" style="display:flex;alignItems:center;">
-				<span style="fontSize:16px;">增开试用(默认两个月)</span>
+				<span style="fontSize:16px;">增开试用(默认{{ RoleType == '权益' ? '一' : ''}}个月)</span>
 			</div>
 			<Cauthlist
 				:autharr="authList"

+ 6 - 2
src/views/custom_manage/customList/pickCustom.vue

@@ -16,7 +16,7 @@
 				</li>
 				<li>
 					<label style="marginRight:60px;width:80px;textAlign:right;display:inline-block;">客户状态</label>
-					<el-radio border :label="basicInfo.cuStatus" style="width:184px;marignRight:200px;" v-model="basicInfo.cuStatus">{{basicInfo.cuStatus=='试用'?'试用(2个月)':basicInfo.cuStatus}}</el-radio>
+					<el-radio border :label="basicInfo.cuStatus" style="width:184px;marignRight:200px;" v-model="basicInfo.cuStatus">{{basicInfo.cuStatus=='试用'?`试用(${roleType == '权益' ? 1 : 2}个月)`:basicInfo.cuStatus}}</el-radio>
 				</li>
 				<li>
 					<label style="marginRight:60px;width:80px;textAlign:right;display:inline-block;">客户类型</label>
@@ -78,7 +78,7 @@
 						<el-form-item label="客户状态" prop="cuStatus">
 							<i style="color:#f00;fontSize:20px;position:absolute;left:-90px;top:10%;">*</i>
 							<el-radio-group v-model="pickForm.cuStatus" size="medium">
-								<el-radio border label="试用" style="width:184px;">试用(2个月)</el-radio>
+								<el-radio border label="试用" style="width:184px;">试用({{roleType == '权益' ? 1 : 2}}个月)</el-radio>
 							</el-radio-group>
 						</el-form-item>
 						<el-form-item label="客户类型" prop="custype" style="marginRight:120px;">
@@ -170,6 +170,10 @@ export default {
 			let role = localStorage.getItem('Role') || '';
 			return role;
 		},
+		roleType() {
+			let type = localStorage.getItem('RoleType') || '';
+			return type;
+		}
 	},	
 	data () {
 		return {

+ 107 - 64
src/views/custom_manage/customList/updateServe.vue

@@ -50,15 +50,26 @@
 					ref="dataForm" 
 					label-width="100px"
 					class="demo-ruleForm">
-						<el-form-item label="选择合同类型" prop="contract_type" style="width:70%;padding-left:25px;">
+						<el-form-item label="选择合同类型" prop="contract_type" style="width:70%;padding-left:25px;" v-if="!isRaiSellerShow">
 							<!-- <i style="color:#f00;fontSize:20px;position:absolute;left:-114px;top:10%;">*</i> -->
 							<el-radio label="续约合同" v-model="dataForm.contract_type" v-if="$route.path=='/updateCustom'">续约合同</el-radio>
 							<el-radio label="补充协议" v-model="dataForm.contract_type" v-else>补充协议</el-radio>
 						</el-form-item>
+						<el-form-item label-width="140px" label="请输入合同编号" style="width:100%" prop="CreditCode" v-if="isRaiSellerShow"
+						 :rules="{required: true, message: '请输入合同编号', trigger: 'blur'}">
+						   <i style="color:#f00;fontSize:20px;position:absolute;left:-128px;top:10%;">*</i>
+						   <el-autocomplete
+						   	style="width:360px;"
+						   	v-model="dataForm.CreditCode"
+						   	:fetch-suggestions="querySearchCreditCode"
+						   	placeholder="请复制申请用印时生成的合同编号"
+						   	@select="handleSelectCreditCode"
+						></el-autocomplete>
+						</el-form-item>
 						<el-form-item label="合同期限" prop="term" style="marginRight:60px;">
 							<i style="color:#f00;fontSize:20px;position:absolute;left:-90px;top:10%;">*</i>
 							<el-date-picker
-							:disabled="timeDisable"
+							:disabled="timeDisable || isRaiSellerShow"
 							v-model="dataForm.term"
 							type="daterange"
 							range-separator="至"
@@ -74,6 +85,7 @@
 							<i style="color:#f00;fontSize:20px;position:absolute;left:-90px;top:10%;">*</i>
 							<el-input 
 							v-model.number="dataForm.amount"
+							:disabled="isRaiSellerShow"
 							placeholder="请输入金额"
 							style="width:400px"
 							clearable></el-input>
@@ -111,8 +123,7 @@
 								权限设置
 							</label>
 							<template  v-if="companyInfo.CompanyType=='权益' || isRoleType== '权益'">
-								<raiPermissionbox  ref="raiPermissionboxRef" v-for="item in authList" :key="item.ClassifyName" :data="item" :formData="dataForm"
-								:hasNoChild="hasNoChild"></raiPermissionbox>
+								<raiPermissionbox  ref="raiPermissionboxRef" v-for="item in authList" :key="item.ClassifyName" :allData="item.Items" :formData.sync="dataForm" :raiCheckList.sync="raiCheckList"></raiPermissionbox>
 							</template>
 							<ul v-else class="menu_lists" style="width:100%">
 								<li v-for="item in authList" :key="item.ClassifyName" class="menu_item">
@@ -229,7 +240,8 @@ export default {
 				payfrom:'',
 				imglist:[],
 				setmeal:'',
-				qyBigServeCheck:0
+				qyBigServeCheck:0,
+				CreditCode:'',
 			},
 			formRule:{
 				// contract_type:[
@@ -262,6 +274,8 @@ export default {
 			citiesEquity:[], //
 			citiesListEquity:[], //
 			citiesListpitchOn:[],
+			
+			raiCheckList:[], //权益复选框
 		};
 	},
 	// 补充协议 最大截至日期 为权限中最大的
@@ -426,24 +440,9 @@ export default {
 					/* 处理权限列表 */
 					let newArr = [];
 					if(this.companyInfo.CompanyType == '权益' || this.isRoleType== '权益') {
-						res.Data.Item.PermissionList[0].Items.map(item => {
-							item.disabled=item.isIndeterminate=false								
-							if(item.ChartPermissionId==22 && (!item.Child)) this.hasNoChild=true
-						})
-						/* 处理数据把复选框 拆分成三个*/
 						res.Data.Item.PermissionList.length&&res.Data.Item.PermissionList.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,30,148,62].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54].includes(key.ChartPermissionId))
-						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
-						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
-							let obj = {
-								...item,
-								Items:arr,
-								ItemsPrivate,
-								ItemsUp,
-								ItemsBig
-							}
-							newArr.push(obj)
+							this.raiCheckList = item.CheckList || []
+							newArr.push(item)
 						})
 					} else {
 						res.Data.Item.PermissionList.forEach(item => {
@@ -502,24 +501,8 @@ export default {
 				if(res.Ret === 200) {
 					let newArr = [];
 					if(this.companyInfo.CompanyType == '权益' || this.isRoleType== '权益') {
-						res.Data.List[0].Items.map(item => {
-							item.disabled=item.isIndeterminate=false								
-							if(item.ChartPermissionId==22 && (!item.Child)) this.hasNoChild=true
-						})
-						/* 处理数据把复选框 拆分成三个*/
 						res.Data.List.length&&res.Data.List.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,30,148,62].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54].includes(key.ChartPermissionId))
-						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
-						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
-							let obj = {
-								...item,
-								Items:arr,
-								ItemsPrivate,
-								ItemsUp,
-								ItemsBig
-							}
-							newArr.push(obj)
+							newArr.push(item)
 						})
 					}else {
 					res.Data.List.length&&res.Data.List.forEach(item => {
@@ -709,14 +692,28 @@ export default {
 					if (valid) {
 						/* 处理权限列表 */
 						let checkArr = [];
+						let PointsArr = []
+						let isPoints = true;
 						this.authList.forEach(item => {
 							if(item.CheckList.length) {
 								checkArr.push(item.CheckList)
 							}
 						})
-						if(!checkArr.length && this.companyInfo.CompanyType === '权益') {
-							this.$message.warning('请选择权限!');
-							return
+							
+						if((this.companyInfo.CompanyType === '权益' || this.isRoleType == '权益') && !this.isXClassCustom){
+							checkArr = this.raiCheckList
+							this.authList.forEach(item => {
+								item.Items.forEach(key => {
+									if (checkArr.includes(key.ChartPermissionId) && key.ShowInput) {
+										if (!key.Points) return isPoints = false;
+										PointsArr.push({
+											ChartPermissionId: key.ChartPermissionId,
+											Points: key.Points-0,
+										});
+									}
+								})
+								
+							})
 						}
 						// 判断
 						let flag=this.handleValidate(checkArr.flat(2))
@@ -724,9 +721,10 @@ export default {
 							this.$message.warning('同行业有重叠的合同期限,请核实后再提交')
 							return false
 						}
-						const hasFiftyTwo = checkArr.flat(2).includes(52);
-						const hasMinusSignVal = this.companyInfo.CompanyType === '权益' ? this.$refs.raiPermissionboxRef[0].minus_sign_val : 0	
-						if(hasFiftyTwo && !hasMinusSignVal) return this.$message.error('请输入研选扣点数')
+						// 判断是否有选着了权限没有输入点数
+						if(!isPoints) return this.$message.warning('请输入点数!')
+						if(!checkArr.length && this.companyInfo.CompanyType === '权益') return this.$message.warning('请选择权限!');
+
 						let PermissionIds = checkArr.flat(2).join(',');
 						let params = {
 							CompanyId:this.companyInfo.CompanyId,
@@ -742,7 +740,7 @@ export default {
 							PermissionIds:PermissionIds,
 							PackageType:Number(this.dataForm.setmeal),
 							RaiPackageType:this.dataForm.qyBigServeCheck||0,
-							Points:hasMinusSignVal||0
+							PointsArr
 						}
 
 						console.log(params);
@@ -883,7 +881,7 @@ export default {
 		setmealChange(){
 			if(this.dataForm.setmeal == '1'){
 				this.authList.forEach(item => {
-					if(item.ClassifyName != '市场策略') {
+					if(!['市场策略','固定收益'].includes(item.ClassifyName)) {
 						item.Items.forEach(key => {
 							item.CheckList.push(key.ChartPermissionId)
 							key.Checked = true
@@ -896,26 +894,66 @@ export default {
 				})
 			} else {
 				console.log(this.authList);
-				 this.authList.forEach(item => {
-					 if(item.ClassifyName == '宏观经济') {
-						 item.CheckList = [1]
-						 item.isIndeterminate = true
-						 item.disabled=false
-						 item.Items[1].disabled=false
-						 item.Items[0].disabled=false
-					 }else {
-						 item.Items.forEach(key => {		
-							item.CheckList = []
-							key.Checked = false
-							key.disabled = false
-						})
-						item.isIndeterminate = false
-						item.checkAll = false
-						item.disabled = false	
-					 }
+				// 根据是否为公共品种来设置选中态
+				this.authList.forEach(item=>{
+					const publicIds=[]
+					item.Items.forEach(_item=>{
+						if(_item.IsPublic===1){
+							publicIds.push(_item.ChartPermissionId)
+						}
+						_item.Checked = false
+						_item.disabled = false
+					})
+					item.CheckList=publicIds
+					item.disabled = false
+					item.isIndeterminate = item.CheckList.length===item.Items.length||item.CheckList.length===0?false:true
+					item.checkAll = item.CheckList.length===item.Items.length?true:false
 				})
+				//  this.authList.forEach(item => {
+				// 	 if(item.ClassifyName == '宏观经济') {
+				// 		 item.CheckList = [1]
+				// 		 item.isIndeterminate = true
+				// 		 item.disabled=false
+				// 		 item.Items[1].disabled=false
+				// 		 item.Items[0].disabled=false
+				// 	 }else {
+				// 		 item.Items.forEach(key => {		
+				// 			item.CheckList = []
+				// 			key.Checked = false
+				// 			key.disabled = false
+				// 		})
+				// 		item.isIndeterminate = false
+				// 		item.checkAll = false
+				// 		item.disabled = false	
+				// 	 }
+				// })
 				this.$message.warning('请勾选品种')
 			}
+		},
+		// 获取合同编号
+		async querySearchCreditCode(queryString, cb) {
+			cb([])
+			if(queryString) {
+			  const res = await customInterence.searchSealcodeSeal({
+				KeyWord:queryString
+			  })
+			  if(res.Ret === 200) {
+				if(res.Data.List.length) {
+				  const data = res.Data.List.map(item => {
+					return {
+					  value: item.Code,
+					  ...item
+					}
+				  })
+				  cb(data)
+				}
+			  }
+			}
+		},
+		// 选择合同编号
+		handleSelectCreditCode(item) {
+			this.dataForm.term = [item.StartDate,item.EndDate]
+			this.dataForm.amount = item.Money
 		}
 	},
 	created() {},
@@ -927,6 +965,11 @@ export default {
 		}else {
 			this.getAuthBasic();
 		}
+	},
+	computed: {
+		isRaiSellerShow() {
+			return localStorage.getItem('Role') === 'rai_seller';
+		},
 	}
 }
 </script>

+ 128 - 0
src/views/dataReport_manage/components/DataSummary.vue

@@ -0,0 +1,128 @@
+<template>
+  <div>
+    <el-dialog v-dialogDrag :title="title" :visible.sync="visible" :close-on-click-modal="false" :modal-append-to-body="false" width="60%" @close="closeDialog" top="5vh">
+      <p v-if="isShowText">共{{ CompanyNum }}家客户,其中{{ CompanyMultiple }}家客户有多份合同</p>
+      <el-table :data="tableData" border style="margin: 20px 0" height="600">
+        <el-table-column v-for="(col, index) in columns" :key="index" :prop="col.prop" :label="col.label" align="center">
+          <template slot-scope="{ row }">
+            <span v-if="col.label === '操作'" style="color: #409eff; cursor: pointer; font-size: 14px; margin-right: 20px" @click="historicalNotesClickHandler(row)">历史备注</span>
+            <span v-else>{{ handleRowContent(row, col) }}</span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-col :span="24" class="toolbar" v-if="total">
+        <m-page :total="total" :page_no="page_no" @handleCurrentChange="handleCurrentChange" />
+      </el-col>
+    </el-dialog>
+    <HistoricalNotesDlg :historicalNotesDlgVisible.sync="historicalNotesDlgVisible" :CompanyId.sync="historicalNotesId" />
+  </div>
+</template>
+
+<script>
+import HistoricalNotesDlg from "@/components/historicalNotesDlg.vue";
+import { dataMainInterface } from "@/api/api.js";
+import mPage from "@/components/mPage.vue";
+
+export default {
+  name: "",
+  components: { HistoricalNotesDlg, mPage },
+  props: {
+    visible: {
+      type: Boolean,
+      default: false,
+    },
+    title: {
+      type: String,
+      default: "",
+    },
+    columns: {
+      type: Array,
+      default: [],
+    },
+    timeSelection: {
+      type: Array,
+      default: [],
+    },
+    dataItem: {
+      type: Object,
+      default: {},
+    },
+  },
+  data() {
+    return {
+      tableData: [],
+      historicalNotesDlgVisible: false, //历史备注的弹框
+      historicalNotesId: 0,
+      total: 0,
+      pageSize: 10,
+      page_no: 1,
+      CompanyMultiple: 0,
+      CompanyNum: 0,
+    };
+  },
+  computed: {
+    isShowText() {
+      return ["新签合同", "到期合同", "续约合同", "确认不续约合同"].includes(this.title);
+    },
+  },
+  watch: {
+    visible(val) {
+      if (val) {
+        this.getData();
+      }
+    },
+  },
+  created() {},
+  mounted() {},
+  methods: {
+    closeDialog() {
+      this.tableData = [];
+      this.historicalNotesDlgVisible = false; //历史备注的弹框
+      this.historicalNotesId = 0;
+      this.total = 0;
+      this.pageSize = 10;
+      this.page_no = 1;
+      this.CompanyMultiple = 0;
+      this.CompanyNum = 0;
+      this.$emit("update:visible", false);
+      this.$emit("update:dataItem", {});
+    },
+    // 点击了历史留言
+    historicalNotesClickHandler(row) {
+      this.historicalNotesDlgVisible = true;
+      this.historicalNotesId = row.CompanyId;
+    },
+    handleCurrentChange(val) {
+      this.page_no = val;
+      this.getData();
+    },
+    // 获取数据
+    async getData() {
+      const res = await dataMainInterface.getRaiDataSummaryList({
+        DataType: this.dataItem.DataType,
+        SellerId: this.dataItem.SellerId,
+        IsServerSeller: this.dataItem.IsServerSeller,
+        CurrentIndex: this.page_no,
+        PageSize: this.pageSize,
+        PopupType: this.title,
+        StartDate: this.timeSelection && this.timeSelection.length ? this.timeSelection[0] : "",
+        EndDate: this.timeSelection && this.timeSelection.length ? this.timeSelection[1] : "",
+      });
+      if (res.Ret === 200) {
+        this.tableData = res.Data.List;
+        this.total = res.Data.Paging.Totals;
+        this.CompanyMultiple = res.Data.CompanyMultiple;
+        this.CompanyNum = res.Data.CompanyNum;
+      }
+    },
+    // 处理表格内容
+    handleRowContent(row, col) {
+      if (col.label === "合同期限") {
+        return `${row.StartDate} ~ ${row.EndDate}`;
+      }
+      return row[col.prop];
+    },
+  },
+};
+</script>
+<style scoped lang=""></style>

+ 1 - 0
src/views/dataReport_manage/components/ServiceDetailsDlg.vue

@@ -81,6 +81,7 @@ export default {
         TagId: this.selectForm.TagId,
         ServeTypeId: this.selectForm.ServeTypeId,
         WhatWeek: this.selectForm.WhatWeek,
+        WhatMonth: this.selectForm.WhatMonth,
       });
       if (res.Ret == 200) {
         this.tableData = this.tableData.concat(res.Data.List);

+ 151 - 24
src/views/dataReport_manage/configdata.js

@@ -231,7 +231,7 @@ export const RaiStockTableColums = [
   {
     label: "合同期限",
     dataType: "新签客户,续约客户",
-    key: "StartDate"
+    key: "StartDate",
   },
   {
     label: "合同金额",
@@ -450,27 +450,154 @@ export const equityTableColums = (type) => {
           sort: true,
         },
       ]
-    : type === "新增试用客户" 
-    ? [ {
-      label: "客户名称",
-      key: "CompanyName",
-      widthsty: "300px",
-      textsty: "color:#409EFF;cursor:pointer;",
-      link: true,
-    },
-    {
-      label: "所属销售",
-      key: "SellerName",
-      widthsty: "150px",
-    },
-    {
-      label: "新增类型",
-      key: "Operation",
-      widthsty: "150px",
-    },
-    {
-      label: "新增时间",
-      key: "CreateTime",
-    }]
-    :[];
+    : type === "新增试用客户"
+    ? [
+        {
+          label: "客户名称",
+          key: "CompanyName",
+          widthsty: "300px",
+          textsty: "color:#409EFF;cursor:pointer;",
+          link: true,
+        },
+        {
+          label: "所属销售",
+          key: "SellerName",
+          widthsty: "150px",
+        },
+        {
+          label: "新增类型",
+          key: "Operation",
+          widthsty: "150px",
+        },
+        {
+          label: "新增时间",
+          key: "CreateTime",
+        },
+      ]
+    : [];
+};
+
+export const tableConfigs = {
+  AddTrialCount: [
+    { label: "客户名称", prop: "CompanyName" },
+    { label: "所属销售", prop: "SellerName" },
+    { label: "新增类型", prop: "AddType" },
+    { label: "新增时间", prop: "CreateTime" },
+  ],
+  // 新签合同
+  NewContractData: [
+    { label: "客户名称", prop: "CompanyName" },
+    { label: "所属销售", prop: "SellerName" },
+    { label: "合同期限", prop: "StartDate" },
+    { label: "合同金额", prop: "Money" },
+    { label: "签约套餐", prop: "PermissionName" },
+    { label: "操作", prop: "actions" },
+  ],
+  // 到期合同
+  ExpiredContractData: [
+    { label: "客户名称", prop: "CompanyName" },
+    { label: "所属销售", prop: "SellerName" },
+    { label: "合同期限", prop: "StartDate" },
+    { label: "合同金额", prop: "Money" },
+    { label: "签约套餐", prop: "PermissionName" },
+    { label: "操作", prop: "actions" },
+  ],
+  // 续约合同
+  RenewedContractData: [
+    { label: "客户名称", prop: "CompanyName" },
+    { label: "所属销售", prop: "SellerName" },
+    { label: "合同期限", prop: "StartDate" },
+    { label: "合同金额", prop: "Money" },
+    { label: "签约套餐", prop: "PermissionName" },
+    { label: "操作", prop: "actions" },
+  ],
+  // 续约率
+  RenewalRateData: [
+    { label: "", prop: "TbaleNameAText" },
+    { label: "续约金额(续约客户数)", prop: "RenewedContractMoney" },
+    { label: "到期金额(到期客户数)", prop: "ExpiredContractMoney" },
+    { label: "续约/到期", prop: "RenewalRate" },
+  ],
+  //确认不续约合同
+  ConfirmedNoRenewalContractData: [
+    { label: "客户名称", prop: "CompanyName" },
+    { label: "所属销售", prop: "SellerName" },
+    { label: "合同期限", prop: "StartDate" },
+    { label: "合同金额", prop: "Money" },
+    { label: "签约套餐", prop: "PermissionName" },
+    { label: "操作", prop: "actions" },
+  ],
+  //确认不续约率
+  ConfirmNonRenewalRateData: [
+    { label: "", prop: "TbaleNameAText" },
+    { label: "不续约金额(不续约客户数)", prop: "RenewedContractMoney" },
+    { label: "到期金额(到期客户数)", prop: "ExpiredContractMoney" },
+    { label: "不续约/到期", prop: "RenewalRate" },
+  ],
+  // 签约客户数量
+  SignedClientCount: [
+    { label: "新签客户数量", prop: "NewContractCompany" },
+    { label: "新签合同数量", prop: "NewContract" },
+    { label: "续约客户数量", prop: "RenewedContractCompany" },
+    { label: "续约合同数量", prop: "RenewedContract" },
+  ],
+  // 客单价
+  AverageRevenueCount: [
+    { label: "签约总金额", prop: "ContractMoney" },
+    { label: "签约客户数", prop: "ContractNum" },
+  ],
+  // 开票金额
+  InvoiceAmountCount: [
+    { label: "客户名称", prop: "CompanyName" },
+    { label: "所属销售", prop: "SellerName" },
+    { label: "合同编号", prop: "ContractCode" },
+    { label: "开票金额", prop: "InvoicedAmount" },
+    { label: "开票日期", prop: "CreateTime" },
+  ],
+  // 新客开票
+  NewCustomerInvoicingCount: [
+    { label: "客户名称", prop: "CompanyName" },
+    { label: "所属销售", prop: "SellerName" },
+    { label: "合同编号", prop: "ContractCode" },
+    { label: "开票金额", prop: "InvoicedAmount" },
+    { label: "开票日期", prop: "CreateTime" },
+  ],
+  // 到款金额
+  PaymentReceivedCount: [
+    { label: "客户名称", prop: "CompanyName" },
+    { label: "所属销售", prop: "SellerName" },
+    { label: "合同编号", prop: "ContractCode" },
+    { label: "到款金额", prop: "PaymentAmount" },
+    { label: "到款日期", prop: "CreateTime" },
+  ],
+  // 新客到款
+  NewCustomerPaymentsReceivedCount: [
+    { label: "客户名称", prop: "CompanyName" },
+    { label: "所属销售", prop: "SellerName" },
+    { label: "合同编号", prop: "ContractCode" },
+    { label: "到款金额", prop: "PaymentAmount" },
+    { label: "到款日期", prop: "CreateTime" },
+  ],
+  // 未到款比例
+  UnpaidRatioCount: [
+    { label: "开票金额", prop: "InvoicedAmount" },
+    { label: "到款金额", prop: "PaymentAmount" },
+    { label: "未到款金额", prop: "NotReceivedtAmount" },
+  ],
+};
+export const tableDlgTitle = {
+  AddTrialCount: "新增试用", //新增试用
+  NewContractData: "新签合同", //新签合同(金额/数量)
+  ExpiredContractData: "到期合同", //到期合同(金额/数量)
+  RenewedContractData: "续约合同", //续约合同(金额/数量)
+  RenewalRateData: "续约率", //续约率(金额/数量)
+  ConfirmedNoRenewalContractData: "确认不续约合同", //确认不续约合同(金额/数量)
+  SignedClientCount: "签约客户数量", //签约客户数量
+  AverageRevenueCount: "客单价", //客单价
+  InvoiceAmountCount: "开票金额", //开票金额
+  PaymentReceivedCount: "到款金额", //到款金额
+  UnpaidRatioCount: "未到款比例", //未到款比例
+  NewCustomerInvoicingCount: "新客开票", //新客开票
+  NewCustomerPaymentsReceivedCount: "新客到款", //新客到款
+  ConfirmNonRenewalRateData: "确认不续约率",
 };

+ 343 - 0
src/views/dataReport_manage/equityDataSummary.vue

@@ -0,0 +1,343 @@
+<template>
+  <div class="data-summary-container">
+    <el-card>
+      <div style="display: flex">
+        <div class="data-summary-top">
+          <span :class="['button-sty', { act: monthType === item.label }]" v-for="item in monthLabel" @click="toggleMonth(item.label)" :key="item.label">
+            {{ item.label }}
+          </span>
+        </div>
+        <date-picker v-model="timeRange" type="year" range value-type="format" placeholder="开始至结束" :editable="false" @change="dateChange" :disabled-date="disabledDate" @pick="onPick" clearable />
+        <el-date-picker
+          style="margin-left: 20px"
+          v-model="timeSelection"
+          type="daterange"
+          range-separator="至"
+          @change="salesChangeHandedl"
+          @clear="salesChangeHandedl"
+          start-placeholder="开始日期"
+          value-format="yyyy-MM-dd"
+          end-placeholder="结束日期"
+        >
+        </el-date-picker>
+      </div>
+    </el-card>
+    <div class="dataReport-main">
+      <!-- 合同类型帅选项 -->
+      <div style="display: flex; flex-wrap: wrap">
+        <div class="data-summary-top">
+          <span :class="['button-sty btn-filter', { act: selectedFilters.includes(item) }]" v-for="(fields, item) in filterOptions" @click="toggleFilter(item)" :key="item">
+            {{ item }}
+          </span>
+        </div>
+        <el-cascader
+          v-model="pathfinderSales"
+          :options="salesArrRai"
+          :props="salesArrProps"
+          clearable
+          @change="salesChangeHandedl"
+          placeholder="选择开拓组销售"
+          :disabled="serviceGroupSalesAct.length"
+          style="margin-right: 20px"
+        ></el-cascader>
+        <el-cascader
+          v-model="serviceGroupSalesAct"
+          :options="serviceGroupSales"
+          :props="salesArrProps"
+          clearable
+          @change="salesChangeHandedl"
+          placeholder="选择服务组销售"
+          :disabled="pathfinderSales.length"
+        ></el-cascader>
+        <div class="switch-box">
+          <span>开拓组</span>
+          <el-switch v-model="pathfinderSwitch" :disabled="isSwitchDisabled" @change="salesChangeHandedl"></el-switch>
+          <span>服务组</span>
+          <el-switch v-model="serviceGroupSwitch" :disabled="isSwitchDisabled" @change="salesChangeHandedl"></el-switch>
+        </div>
+      </div>
+      <!-- 数据表格 -->
+      <el-table :data="flattenedData" border style="width: 100%; margin-top: 20px" :span-method="mergeRows">
+        <!-- DataType 作为合并行 -->
+        <el-table-column prop="DataType" label="" align="center" width="120px" />
+
+        <!-- 销售姓名 -->
+        <el-table-column prop="SellerName" label="销售姓名" align="center" width="150px" />
+
+        <el-table-column v-for="col in dynamicColumns" :key="col.key" :prop="col.key" align="center">
+          <template slot="header" slot-scope="{ row }">
+            <el-tooltip :content="col.tooltip" placement="top">
+              <div style="display: inline-flex; align-items: center">
+                <span style="margin-right: 4px">{{ col.label }}</span>
+                <i class="el-icon-info" style="color: #333333" />
+              </div>
+            </el-tooltip>
+          </template>
+          <template slot-scope="{ row }">
+            <span class="editsty" @click="handlerRowClick(row, col.key)">{{ row[col.key] }}</span>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+    <DataSummary :visible.sync="showDlg" :title="titleDlg" :columns="columnsDlg" :dataItem.sync="dataItem" :timeSelection="timeSelection" />
+  </div>
+</template>
+
+<script>
+import { dataMainInterface } from "@/api/api.js";
+import DataSummary from "./components/DataSummary.vue";
+import { tableConfigs, tableDlgTitle } from "./configdata.js";
+export default {
+  components: { DataSummary },
+  data() {
+    const currentYear = new Date().getFullYear() + "";
+    return {
+      timeRange: [currentYear, currentYear],
+      timePick: "",
+      monthType: "季度",
+      monthLabel: [
+        {
+          label: "季度",
+        },
+        {
+          label: "半年度",
+        },
+        {
+          label: "年度",
+        },
+      ],
+      selectedFilters: localStorage.getItem("userName") == "梁春悦6" ? ["续约"] : ["新签", "续约", "收入"], // 用户选择的筛选项
+      // 示例数据(与后端返回的 key 对应)
+      tableData: [],
+      // 扁平化后的数据
+      flattenedData: [],
+      showDlg: false,
+      titleDlg: "",
+      columnsDlg: [],
+      salesArrRai: [], //开拓者销售
+      pathfinderSales: [], //选中的开拓者销售
+      salesArrProps: {
+        multiple: true,
+        value: "AdminId",
+        label: "RealName",
+        children: "ChildrenList",
+      },
+      serviceGroupSales: [], //服务组销售
+      serviceGroupSalesAct: [], //选中的服务组销售
+      pathfinderSwitch: false, //开拓者开关
+      serviceGroupSwitch: false, //服务组开关
+      dataItem: {}, //数据项
+      timeSelection: [], //时间选择器的值
+    };
+  },
+  methods: {
+    /* 选择时间后的处理 */
+    dateChange() {
+      this.$nextTick(() => {
+        if (this.timeRange.length) this.timePick = this.timeRange[0];
+        this.getDataList();
+      });
+    },
+    // 处理结束年份变化的逻辑
+    disabledDate(time) {
+      if (this.timePick) {
+        const minTime = +this.timePick;
+        const maxTime = +this.timePick + 4; // 结束年份最大为开始年份限制5年   +4
+        return this.$moment(time).format("YYYY") < minTime || this.$moment(time).format("YYYY") > maxTime;
+      }
+    },
+    // 选了时间的事件
+    onPick(date) {
+      this.timePick = this.$moment(date).format("YYYY");
+    },
+    // 获取表格数据
+    async getDataList() {
+      let AdminId = this.pathfinderSales.map((item) => item[item.length - 1]).join(",");
+      let ServiceAdminId = this.serviceGroupSalesAct.map((item) => item[item.length - 1]).join(",");
+      let params = {
+        StartYear: this.timeRange[0],
+        EndYear: this.timeRange[1],
+        DataType: this.monthType,
+        AdminId,
+        ServiceAdminId,
+        DevelopButton: this.pathfinderSwitch,
+        ServerButton: this.serviceGroupSwitch,
+        StartDate: this.timeSelection && this.timeSelection.length ? this.timeSelection[0] : "",
+        EndDate: this.timeSelection && this.timeSelection.length ? this.timeSelection[1] : "",
+      };
+      const res = await dataMainInterface.getRaiDataSummary(params);
+      this.tableData = res.Data.List;
+      this.flattenedData = this.tableData.flatMap((item) => item.DataList.map((row) => ({ ...row, DataType: item.DataType })));
+    },
+    // 处理合并行
+    mergeRows({ row, column, rowIndex, columnIndex }) {
+      if (columnIndex === 0) {
+        // 只合并 DataType (第1列)
+        const currentType = row.DataType;
+        const prevType = rowIndex > 0 ? this.flattenedData[rowIndex - 1].DataType : null;
+
+        if (rowIndex === 0 || currentType !== prevType) {
+          // 计算 rowspan(找到相同 DataType 的总行数)
+          const rowspan = this.flattenedData.filter((item) => item.DataType === currentType).length;
+          return { rowspan, colspan: 1 };
+        } else {
+          return { rowspan: 0, colspan: 0 };
+        }
+      }
+    },
+    // 点击表格
+    handlerRowClick(row, key) {
+      this.showDlg = true;
+      this.dataItem = row;
+      this.titleDlg = tableDlgTitle[key];
+      this.columnsDlg = tableConfigs[key];
+    },
+    // 点击头部筛选项
+    toggleMonth(key) {
+      if (this.monthType !== key) {
+        this.monthType = key;
+        this.getDataList();
+      }
+    },
+    // 点击了标签
+    toggleFilter(item) {
+      // 维护固定顺序的参照数组
+      const fixedOrder = ["新签", "续约", "收入"];
+      if (this.selectedFilters.includes(item)) {
+        // 移除时直接过滤
+        this.selectedFilters = this.selectedFilters.filter((key) => key !== item);
+      } else {
+        // 添加时直接推入数组
+        this.selectedFilters.push(item);
+      }
+
+      // 按照固定顺序重新排序
+      this.selectedFilters = fixedOrder.filter((key) => this.selectedFilters.includes(key));
+      this.getDataList();
+    },
+    /* 获取权益销售 */
+    getSaleRai() {
+      dataMainInterface.getListRaiSellerServer().then((res) => {
+        if (res.Ret === 200) {
+          this.salesArrRai = res.Data.List;
+          this.serviceGroupSales = res.Data.ListServer;
+        }
+      });
+    },
+    salesChangeHandedl() {
+      this.getDataList();
+    },
+  },
+  computed: {
+    // 计算动态表头
+    dynamicColumns() {
+      let columns = [];
+      // 判断是否同时选择了新签和续约
+      const hasBoth = this.selectedFilters.includes("新签") && this.selectedFilters.includes("续约");
+
+      this.selectedFilters.forEach((key) => {
+        if (this.filterOptions[key]) {
+          this.filterOptions[key].forEach((field) => {
+            // 如果是续约分类的特殊字段
+            if (key === "续约" && ["SignedClientCount", "AverageRevenueCount"].includes(field.key)) {
+              // 仅在同时选择新签和续约时显示
+              if (!hasBoth) return;
+            }
+            columns.push({ label: field.label, key: field.key, tooltip: field.tooltip });
+          });
+        }
+      });
+      return columns;
+    },
+    // 开关选择是否禁用
+    isSwitchDisabled() {
+      return this.pathfinderSales.length || this.serviceGroupSalesAct.length;
+    },
+    // 筛选项映射的表头字段(新增后端 key)
+    filterOptions() {
+      let useName = localStorage.getItem("userName");
+      let obj = {
+        新签: [
+          { label: "新增试用", key: "AddTrialCount", tooltip: "新增试用客户的时间,包含在所选时间段内的客户数(包括新建和领取流失)" },
+          { label: "新签合同(金额/数量)", key: "NewContractData", tooltip: "起始时间在所选时间段内的新签合同(第一份合同起始时间一年内的再次签约仍属于新签合同)" },
+        ],
+        续约: [
+          { label: "到期合同(金额/数量)", key: "ExpiredContractData", tooltip: "结束时间在所选时间段内的合用" },
+          { label: "续约合同(金额/数量)", key: "RenewedContractData", tooltip: "起始时间在所选时间段内的续约合同(第一份合同起始时间一年以后的再次签约均属于续约合同)" },
+          { label: "续约率(金额/客户)", key: "RenewalRateData", tooltip: "续约合同/到期合同" },
+          { label: "确认不续约合同(金额/数量)", key: "ConfirmedNoRenewalContractData", tooltip: "已确认不续约的到期合同" },
+          { label: "确认不续约率(金额/客户)", key: "ConfirmNonRenewalRateData", tooltip: "确认不续约合同(剔除非业务不续约)/到期合同" },
+          { label: "签约客户数量", key: "SignedClientCount", tooltip: "新签和续约的客户数" },
+          { label: "客单价", key: "AverageRevenueCount", tooltip: "新签合同和续约合同的总金额/签约客户数量" },
+        ],
+        收入: [
+          { label: "开票金额", key: "InvoiceAmountCount", tooltip: "财务系统中已经登记开票的金额" },
+          { label: "到款金额", key: "PaymentReceivedCount", tooltip: "财务系统中已经登记到账的金额" },
+          { label: "未到款比例", key: "UnpaidRatioCount", tooltip: "开票金额-到款金额 / 开票金额" },
+          { label: "新客开票", key: "NewCustomerInvoicingCount", tooltip: "财务系统中已经登记开票的新签合同金额" },
+          { label: "新客到款", key: "NewCustomerPaymentsReceivedCount", tooltip: "财务系统中已经登记开票的新签合同金额" },
+        ],
+      };
+      return useName == "梁春悦6" ? { 续约: obj.续约 } : obj;
+    },
+  },
+  mounted() {
+    this.getDataList();
+    this.getSaleRai();
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.data-summary-container {
+  .data-summary-top {
+    box-sizing: border-box;
+    height: 40px;
+    border: #dcdfe6 1px solid;
+    border-radius: 4px;
+    margin-right: 20px;
+    overflow: hidden;
+  }
+  .button-sty {
+    display: inline-block;
+    text-align: center;
+    line-height: 40px;
+    width: 120px;
+    height: 40px;
+    cursor: pointer;
+    &:nth-child(2) {
+      border-left: 1px solid #dcdfe6;
+      border-right: 1px solid #dcdfe6;
+    }
+  }
+  .act {
+    background-color: #409eff !important;
+    color: #fff !important;
+  }
+  .dataReport-main {
+    padding: 20px 20px 80px;
+    background: #fff;
+    margin-top: 20px;
+    border: 1px solid #ececec;
+    border-radius: 4px;
+    box-shadow: 0 3px 6px rgba(0, 0, 0, 0.05);
+    .btn-filter {
+      background-color: #eaf3fe;
+      color: #333;
+    }
+    .switch-box {
+      display: flex;
+      align-items: center;
+      span {
+        flex-shrink: 0;
+        display: inline-block;
+        margin: 0 10px 0 20px;
+      }
+    }
+  }
+}
+.dete-partition {
+  display: inline-block;
+  margin: 0 10px;
+}
+</style>

+ 31 - 8
src/views/dataReport_manage/equityServiceStatistics.vue

@@ -98,14 +98,34 @@
           </template>
         </el-table-column>
         <el-table-column align="center" prop="Money" sortable="custom" label="合同金额" width="110"> </el-table-column>
-        <el-table-column align="center" prop="PermissionName" label="签约套餐"> </el-table-column>
+        <el-table-column align="center" prop="PermissionName" label="签约套餐"></el-table-column>
+        <el-table-column align="center" prop="ThisMonthAmount" label="本月服务量" width="100">
+          <template slot-scope="{ row }">
+            <span @click="billClickHandler(row, 1, '月')" class="editsty">{{ row.ThisMonthAmount }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="LastMonthQoq" label="上月环比">
+          <template slot-scope="{ row }">
+            <span :style="{ color: row.LastMonthQoqIsRed ? 'red' : '#333' }">{{ row.LastMonthQoq }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="LastMonthAmount" label="上月服务量" width="100">
+          <template slot-scope="{ row }">
+            <span @click="billClickHandler(row, 2, '月')" class="editsty">{{ row.LastMonthAmount }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column align="center" prop="TwoMonthAmount" label="上上月服务量" width="118">
+          <template slot-scope="{ row }">
+            <span @click="billClickHandler(row, 3, '月')" class="editsty">{{ row.TwoMonthAmount }}</span>
+          </template>
+        </el-table-column>
         <el-table-column align="center" prop="ThisWeekAmount" width="118">
           <template slot="header" slot-scope="{}">
             <p>本周服务量</p>
             <p>{{ getWeekRange(0) }}</p>
           </template>
           <template slot-scope="{ row }">
-            <span @click="billClickHandler(row, 1)" class="editsty">{{ row.ThisWeekAmount }}</span>
+            <span @click="billClickHandler(row, 1, '周')" class="editsty">{{ row.ThisWeekAmount }}</span>
           </template>
         </el-table-column>
         <el-table-column align="center" prop="LastWeekAmount" width="118">
@@ -114,7 +134,7 @@
             <p>{{ getWeekRange(-1) }}</p>
           </template>
           <template slot-scope="{ row }">
-            <span @click="billClickHandler(row, 2)" class="editsty">{{ row.LastWeekAmount }}</span>
+            <span @click="billClickHandler(row, 2, '周')" class="editsty">{{ row.LastWeekAmount }}</span>
           </template>
         </el-table-column>
         <el-table-column align="center" prop="TwoWeekAmount" width="118">
@@ -123,7 +143,7 @@
             <p>{{ getWeekRange(-2) }}</p>
           </template>
           <template slot-scope="{ row }">
-            <span @click="billClickHandler(row, 3)" class="editsty">{{ row.TwoWeekAmount }}</span>
+            <span @click="billClickHandler(row, 3, '周')" class="editsty">{{ row.TwoWeekAmount }}</span>
           </template>
         </el-table-column>
         <el-table-column align="center" prop="ThreeWeekAmount" width="118">
@@ -132,7 +152,7 @@
             <p>{{ getWeekRange(-3) }}</p>
           </template>
           <template slot-scope="{ row }">
-            <span @click="billClickHandler(row, 4)" class="editsty">{{ row.ThreeWeekAmount }}</span>
+            <span @click="billClickHandler(row, 4, '周')" class="editsty">{{ row.ThreeWeekAmount }}</span>
           </template>
         </el-table-column>
         <el-table-column align="center" label="操作" width="80" v-if="isRoleType == 'admin' || isRoleType == '权益'">
@@ -155,6 +175,7 @@
         TagId: this.tagId,
         ServeTypeId: this.filterObj.serviceType,
         WhatWeek: this.whatWeek,
+        WhatMonth: this.whatMonth,
       }"
     />
     <historical-notes-dlg :historicalNotesDlgVisible.sync="historicalNotesDlgVisible" :CompanyId.sync="historicalNotesId" />
@@ -205,7 +226,8 @@ export default {
       lableOptions: [],
       tagType: "",
       tagId: "",
-      whatWeek: "",
+      whatWeek: "", // 周度的
+      whatMonth: "", // 月度的
       customSellerList: [],
       searchVal: "", //客户名称
 
@@ -380,8 +402,9 @@ export default {
       this.dlgForm = item;
     },
     // 点击了明细
-    billClickHandler(item, type) {
-      this.whatWeek = type;
+    billClickHandler(item, type, what) {
+      this.whatWeek = what == "周" ? type : "";
+      this.whatMonth = what == "月" ? type : "";
       this.isServiceDetailsShow = true;
       this.dlgForm = item;
     },

+ 34 - 0
src/views/ficc_manage/chapterVariety.vue

@@ -48,6 +48,12 @@
             label="未选中icon"
             prop="UnselectedIcon"
           >
+            <span slot="label" class="item-label-wrap">
+              <span>未选中icon</span>
+              <el-tooltip class="item" effect="dark" content="晨/周报PC端章节详情下方品种未选中样式" placement="top">
+                 <img src="../../assets/img/icons/black_tip.png" class="tip-cion">
+              </el-tooltip>
+            </span>
             <input
               type="file"
               size="small"
@@ -78,6 +84,12 @@
             label="选中icon"
             prop="selectedIcon"
           >
+            <span slot="label" class="item-label-wrap">
+              <span>选中icon</span>
+              <el-tooltip class="item" effect="dark" content="晨/周报PC端章节详情下方品种选中样式" placement="top">
+                 <img src="../../assets/img/icons/black_tip.png" class="tip-cion">
+              </el-tooltip>
+            </span>
             <input
               type="file"
               size="small"
@@ -108,6 +120,12 @@
             label="带字icon"
             prop="wordIcon"
           >
+            <span slot="label" class="item-label-wrap">
+              <span>带字icon</span>
+              <el-tooltip class="item" effect="dark" content="晨/周报移动端章节详情下方品种样式" placement="top">
+                 <img src="../../assets/img/icons/black_tip.png" class="tip-cion">
+              </el-tooltip>
+            </span>
             <input
               type="file"
               size="small"
@@ -138,6 +156,12 @@
             label="章节配图"
             prop="bgImg"
           >
+            <span slot="label" class="item-label-wrap">
+              <span>章节配图</span>
+              <el-tooltip class="item" effect="dark" content="后台写报告展示的章节配图" placement="top">
+                 <img src="../../assets/img/icons/black_tip.png" class="tip-cion">
+              </el-tooltip>
+            </span>
             <input
               type="file"
               size="small"
@@ -363,4 +387,14 @@ export default {
     }
   }
 }
+.item-label-wrap{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  flex-wrap: wrap;
+  .tip-cion{
+    width: 16px;
+    height: 16px;
+  }
+}
 </style>

+ 41 - 1
src/views/ficc_manage/reportVariety.vue

@@ -50,7 +50,7 @@
           ref="aeForm"
           label-position="left"
           hide-required-asterisk
-          label-width="100px"
+          label-width="120px"
         >
           <el-form-item
             prop="showType"
@@ -153,6 +153,12 @@
             v-if="aeForm.parent_id == 0"
             prop="YbFiccIcon"
           >
+            <span slot="label" class="item-label-wrap">
+              <span>FICC页icon</span>
+              <el-tooltip class="item" effect="dark" content="移动端研报列表该分类报告icon" placement="top">
+                 <img src="../../assets/img/icons/black_tip.png" class="tip-cion">
+              </el-tooltip>
+            </span>
             <input
               type="file"
               size="small"
@@ -184,6 +190,12 @@
             v-if="aeForm.parent_id == 0 && aeForm.showType !== 2"
             prop="YbRightBanner"
           >
+            <span slot="label" class="item-label-wrap">
+              <span>报告合集配图</span>
+              <el-tooltip class="item" effect="dark" content="PC端该研报详情右侧报告合集配图" placement="top">
+                 <img src="../../assets/img/icons/black_tip.png" class="tip-cion">
+              </el-tooltip>
+            </span>
             <input
               type="file"
               size="small"
@@ -215,6 +227,12 @@
             prop="YbShareBgImg"
             v-if="aeForm.parent_id == 0"
           >
+            <span slot="label" class="item-label-wrap">
+              <span>分享链接配图</span>
+              <el-tooltip class="item" effect="dark" content="该报告转发分析链接中的配图" placement="top">
+                 <img src="../../assets/img/icons/black_tip.png" class="tip-cion">
+              </el-tooltip>
+            </span>
             <input
               type="file"
               size="small"
@@ -248,6 +266,12 @@
             v-if="aeForm.parent_id != 0 && (parentIsList || parentIsVariety)"
             prop="YbListImg"
           >
+            <span slot="label" class="item-label-wrap">
+              <span>列表背景图</span>
+              <el-tooltip class="item" effect="dark" content="进入该报告的一级分类列表,报告所在的二级分类配图" placement="top">
+                 <img src="../../assets/img/icons/black_tip.png" class="tip-cion">
+              </el-tooltip>
+            </span>
             <input
               type="file"
               size="small"
@@ -280,6 +304,12 @@
             prop="YbShareBgImg_"
             v-if="aeForm.parent_id != 0 && (parentIsList || parentIsVariety)"
           >
+            <span slot="label" class="item-label-wrap">
+              <span>分享链接配图</span>
+              <el-tooltip class="item" effect="dark" content="该报告转发分析链接中的配图" placement="top">
+                 <img src="../../assets/img/icons/black_tip.png" class="tip-cion">
+              </el-tooltip>
+            </span>
             <input
               type="file"
               size="small"
@@ -823,4 +853,14 @@ export default {
     }
   }
 }
+.item-label-wrap{
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  flex-wrap: wrap;
+  .tip-cion{
+    width: 16px;
+    height: 16px;
+  }
+}
 </style>

+ 2 - 2
src/views/roadshow_manage/statistics/mixin.js

@@ -111,7 +111,7 @@ export default {
 				{
 					key: '试用路演',
 					value: item.TryOutNum,
-					askNum:item.AskNum,
+					askNum:item.AskTryOutNum,
 					startDate: item.StartDate,
 					endDate: item.EndDate,
 					userid
@@ -119,7 +119,7 @@ export default {
 				{
 					key: '正式路演',
 					value: item.FormalNum,
-					askNum:item.AskNum,
+					askNum:item.AskFormalNum,
 					startDate: item.StartDate,
 					endDate: item.EndDate,
 					userid

+ 4 - 0
src/views/seal_manage/approvalList.vue

@@ -173,6 +173,10 @@
                 <tr>
                   <td class="table-item width-50">社会信用码:{{detail.SealDetail.CreditCode}}</td>
                   <td class="table-item width-50">合同类型:{{detail.SealDetail.ServiceType}}</td>  
+                </tr>
+                 <tr v-if="detail.SealDetail.ProductId==2">
+                  <td class="table-item width-50">合同期限:{{detail.SealDetail.StartDate}} ~ {{detail.SealDetail.EndDate}}</td>
+                  <td class="table-item width-50">合同金额:{{detail.SealDetail.Money}}元</td>  
                 </tr>
                 <tr>
                   <td class="table-item width-50">

+ 82 - 20
src/views/seal_manage/updateSeal.vue

@@ -33,6 +33,14 @@
           </el-form-item>
           <el-form-item label="客户名称:" prop="CompanyName">
             <el-autocomplete
+                v-if="isRaiSellerShow"
+                v-model="sealForm.CompanyName"
+                :fetch-suggestions="querySearchCompany"
+                placeholder="请输入用户名称"
+                @select="handleSelectCustome"
+            ></el-autocomplete>
+            <el-autocomplete
+              v-else
               ref="companySelector"
               popper-class="custom-autocomplete"
               placeholder="请输入用户名称"
@@ -50,7 +58,18 @@
               </template>
             </el-autocomplete>
           </el-form-item>
-          <el-form-item label="合同类型:" prop="ServiceType">
+          <el-form-item label="合同期限:" prop="time" v-if="isRaiSellerShow" :rules="{ required: true, message: '请选择合同期限', trigger: 'change' }">
+              <el-date-picker 
+                v-model="sealForm.time" 
+                type="daterange" 
+                value-format="yyyy-MM-dd" 
+                range-separator="至" 
+                start-placeholder="开始日期" 
+                end-placeholder="结束日期"
+                > 
+              </el-date-picker>
+            </el-form-item>
+          <el-form-item label="合同类型:" prop="ServiceType" v-else :rules="{ required: true, message: '请选择合同类型', trigger: 'change'}">
             <el-select
               v-model="sealForm.ServiceType"
               :disabled="sealForm.source === '系统合同'"
@@ -64,6 +83,7 @@
               ></el-option>
             </el-select>
           </el-form-item>
+
           <el-form-item
             :class="{ required: sealForm.Use === '代付合同' }"
             label="实际使用方:"
@@ -98,7 +118,18 @@
               class="form-input"
               placeholder="请填写统一社会信用码"
               v-model.trim="sealForm.CreditCode"
-              :disabled="sealForm.source === '系统合同'"
+              :disabled="sealForm.source === '系统合同' || isRaiSellerShow"
+            ></el-input
+          ></el-form-item>
+           <el-form-item label="合同金额:" prop="Money"
+           v-if="isRaiSellerShow"
+            :rules="{
+                required: true, message: '请输入实际付款金额', trigger: 'blur'
+              }">
+            <el-input
+             class="form-input"
+              placeholder="请输入实际付款金额(优惠后)"
+              v-model="sealForm.Money"
             ></el-input
           ></el-form-item>
           <el-form-item label="文件份数:" prop="FileNum"
@@ -189,7 +220,9 @@ export default {
         Remark: "", //审批备注
         fileList: [], //合同附件
         ContractId: 0, //合同id(默认为0)
-        AffiliatedCompany:''
+        AffiliatedCompany:'',
+        time: [],
+        Money: '',// 实际付款金额
       },
       sealRules: {
         //表单校验规则
@@ -198,9 +231,6 @@ export default {
         CompanyName: [
           { required: true, message: "请选择客户名称", trigger: "blur" },
         ],
-        ServiceType: [
-          { required: true, message: "请选择合同类型", trigger: "change" },
-        ],
         UseCompanyName: [
           { validator: ValidateUseCompanyName, trigger: "change" },
         ],
@@ -240,7 +270,7 @@ export default {
       ],
       isWatch: true, // 控制watch是否触发
 
-      belongCompanyOption:[]
+      belongCompanyOption:[],
     };
   },
   created() {
@@ -262,6 +292,11 @@ export default {
         this.sealForm.source === "系统合同"
       );
     },
+    isRaiSellerShow() {
+      return (
+        this.sealForm.source === "上传附件" && localStorage.getItem('Role') === 'rai_seller'
+      );
+    }
   },
   methods: {
     async getBelongCompanyOptions() {
@@ -298,6 +333,9 @@ export default {
           this.sealForm.ServiceType = SealDetail.ServiceType;
           this.sealForm.UseCompanyName = SealDetail.UseCompanyName;
           this.sealForm.AffiliatedCompany = SealDetail.AffiliatedCompany;
+          if(SealDetail.StartDate && SealDetail.EndDate) {
+            this.sealForm.time = [SealDetail.StartDate, SealDetail.EndDate]
+          }
           this.sealForm.source =
             SealDetail.ContractId > 0 ? "系统合同" : "上传附件";
           // 打开监听
@@ -367,22 +405,41 @@ export default {
     // 关键字联想
     async querySearch(queryString, cb) {
       // 合同来源为上传附件时不进行联想
-      if (this.sealForm.source === "上传附件" || queryString === "")
+      if (this.sealForm.source === "上传附件"  || queryString === "")
         return cb([]);
-      let results = [];
-      try {
-        const res = await sealInterence.getContractListBySeal({
-          Keyword: queryString,
+          let results = [];
+          try {
+            const res = await sealInterence.getContractListBySeal({
+              Keyword: queryString,
+            });
+            if (res.Ret === 200) {
+              results = res.Data;
+            }
+          } catch (err) {
+            console.log(err);
+          }
+          if (!results.length) this.sealForm.ContractId = 0;
+          // 调用 callback 返回建议列表的数据
+          cb(results);
+    },
+    // 关键字公司联想
+    async querySearchCompany(query, cb) {
+        if (query === "") return  cb([]);
+        const res = await sealInterence.getCompanyListSearch({
+          KeyWord: query,
         });
         if (res.Ret === 200) {
-          results = res.Data;
+           if(res.Data.length>0){
+            let arr=res.Data.map(item=>{
+              return {value:item.CompanyName,...item}
+            })
+            cb(arr)
+          }
         }
-      } catch (err) {
-        console.log(err);
-      }
-      if (!results.length) this.sealForm.ContractId = 0;
-      // 调用 callback 返回建议列表的数据
-      cb(results);
+    },
+    // 关键字公司联想后的选择事件
+    handleSelectCustome(val){
+        this.sealForm.CreditCode = val.CreditCode;
     },
     // 选择事件
     selectHandel(item) {
@@ -408,6 +465,7 @@ export default {
           ContractId: this.sealForm.ContractId,
           CreditCode: this.sealForm.CreditCode,
           FileNum: this.sealForm.FileNum,
+          Money: +this.sealForm.Money,
           FileUrls: this.sealForm.fileList.map(item => item.FileUrl),
           Remark: this.sealForm.Remark,
           SealType: this.sealForm.SealType.join(","),
@@ -415,6 +473,8 @@ export default {
           Use: this.sealForm.Use,
           UseCompanyName: this.sealForm.UseCompanyName,
           AffiliatedCompany: this.sealForm.AffiliatedCompany,
+          StartDate: this.isRaiSellerShow ? this.sealForm.time[0] : '',
+          EndDate: this.isRaiSellerShow ? this.sealForm.time[1] : '',
         };
         let res = {};
         if (this.sealId) {
@@ -469,7 +529,8 @@ export default {
         Remark: "", //审批备注
         fileList: [], //合同附件
         ContractId: 0, //合同id(默认为0)
-        AffiliatedCompany:''
+        AffiliatedCompany:'',
+        Money:'',
       };
       // 清除校验提示
       this.$nextTick(() => {
@@ -487,6 +548,7 @@ export default {
     .box {
       flex: 1;
     }
+    .el-range-editor.el-input__inner,
     .el-select,
     .el-autocomplete,
     .form-input {