Browse Source

Merge branch 'master' into cygx_12.8

bding 1 year ago
parent
commit
2d4d121849

+ 16 - 0
src/api/modules/businessCustom.js

@@ -121,5 +121,21 @@ export const businessCustomInterence = {
      */
     setAuthList:(params)=>{
         return http.post('/eta_business/menu/relate/save',params)
+    },
+    /**
+     * 获取商家接口权限
+     * @returns 
+     */
+    getConfigList:(params)=>{
+        return http.get('/eta_business/api/config/list',params)
+    },
+    /**
+     * 设置商家接口权限
+     * @param EtaBusinessId 商家ID
+     * @param List 接口权限列表
+     * @returns 
+     */
+    setConfigList:(params)=>{
+        return http.post('/eta_business/api/config/set',params)
     }
 }

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

@@ -699,6 +699,10 @@ const customInterence = {
   getSalesData: (params) => {
     return http.get("/custom/receive/seller", params);
   },
+  //权益销售列表
+  getSalesRaiData: (params) => {
+    return http.get("/custom/seller/check/list_rai", params);
+  },
   //启用/禁用权限
   changeSaleAuth: (params) => {
     return http.post("/custom/receive/permission/change", params);

+ 21 - 0
src/api/modules/statisticApi.js

@@ -52,6 +52,23 @@ const dataMainInterface = {
 		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权益
@@ -149,6 +166,10 @@ const dataMainInterface = {
 	moreRenewReason:params => {
 		return http.get('/statistic_report/more_renew_reason',params);
 	},
+	// 客户数据未续约说明更多
+	mergeCompanyPreviousDetail:params => {
+		return http.get('/statistic_report/merge_company_previous/detail',params);
+	},
 	/**
 	 * 	// 获取图表阅读统计列表
 	 * @param {PageSize} params 

BIN
src/assets/img/icons/gpt-4-turbo.png


BIN
src/assets/img/icons/gpt-4.png


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

@@ -45,6 +45,12 @@ export default [
 				name: '图库阅读统计',
 				hidden: false
 			},
+			{
+				path: 'equityCustomStatistics',
+				component: () => import('@/views/dataReport_manage/equityCustomStatistics.vue'),
+				name: '权益客户统计',
+				hidden: false
+			},
 			{
 				path: 'readClassify',
 				component: () => import('@/views/dataReport_manage/readClassify.vue'),

+ 93 - 3
src/views/business_ETA_manage/businessAuth.vue

@@ -7,7 +7,12 @@
                 <el-button type="primary" @click="handleBtnClik('save')">保存</el-button>
             </div>
         </div>
-        <div class="auth-wrap">
+        <div class="model-wrap">
+            <el-button :type="model==='auth'?'primary':''" @click="model='auth'">菜单权限</el-button>
+            <span class="block"></span>
+            <el-button :type="model==='interence'?'primary':''" @click="model='interence'">接口权限</el-button>
+        </div>
+        <div class="auth-wrap" v-show="model==='auth'">
             <el-checkbox v-model="checkAll" :indeterminate="isIndeterminate" style="margin-bottom: 20px;">全选</el-checkbox>
             <el-tree 
                 v-loading="treeLoading"
@@ -21,6 +26,19 @@
                 @check-change="()=>{handleCheckChange()}">
             </el-tree>
         </div>
+        <div class="interence-wrap" v-show="model==='interence'">
+            <div class="interence-item">
+                <span>研报审批</span>
+                <el-radio-group v-model="isApprove">
+                    <el-radio :label="0">否</el-radio>
+                    <el-radio :label="1">是</el-radio>
+                </el-radio-group>
+                <el-checkbox-group v-model="approveList" v-show="isApprove===1">
+                    <el-checkbox :label="2">智能研报</el-checkbox>
+                    <el-checkbox :label="1">研报列表</el-checkbox>
+                </el-checkbox-group>
+            </div>
+        </div>
     </div>
 </template>
 
@@ -34,7 +52,10 @@ export default {
             treeLoading:false,
             checkAll:false,
             isIndeterminate:false,
-            checkList:[],
+            model:'auth',
+            isApprove:'',
+            approveList:[],
+            checkList:[]
         };
     },
     watch:{
@@ -47,9 +68,38 @@ export default {
                     this.$refs.checkboxTree.setCheckedKeys([])
                 }
             }
+        },
+        isApprove(newVal){
+            if(newVal===0){
+                this.approveList=[]
+            }
         }
     },
     methods: {
+        getBusinessConfigList(){
+            const EtaBusinessId = this.$route.query.id
+            if(!EtaBusinessId) return 
+            businessCustomInterence.getConfigList({
+                EtaBusinessId:Number(EtaBusinessId)
+            }).then(res=>{
+                if(res.Ret!==200) return
+                const list = res.Data||[]
+                const approveItem = list.find(i=>i.ConfigCode==='approval_flow')
+                if(!approveItem) return
+                if(!approveItem.ConfigValue.length){
+                    this.isApprove = approveItem.ConfigValue
+                    return
+                }
+                if(Number(approveItem.ConfigValue)===0){
+                    this.isApprove = Number(approveItem.ConfigValue)
+                    return
+                }
+                if(Number(approveItem.ConfigValue)>0){
+                    this.isApprove = 1
+                    this.approveList = approveItem.ConfigValue==3?[1,2]:[Number(approveItem.ConfigValue)]
+                }
+            })
+        },
         getBusinessAuthList(){
             const EtaBusinessId = this.$route.query.id
             if(!EtaBusinessId) return 
@@ -127,6 +177,30 @@ export default {
                 })
                 if(res.Ret!==200) return 
                 this.$message.success('权限设置成功')
+
+                if(typeof(this.isApprove)==='string'){
+                    this.$message.warning('请配置接口权限')
+                    this.model='interence'
+                    return
+                }else{
+                    if(this.isApprove&&!this.approveList.length){
+                        this.$message.warning('请选择接口权限')
+                        return
+                    }
+                    let configValue = ''
+                    if(this.isApprove){
+                        configValue = this.approveList.length>1?"3":this.approveList[0]+"" //3表示全选
+                    }else{
+                        configValue = this.isApprove+""
+                    }
+                    const list = [{ConfigCode:"approval_flow",ConfigValue:configValue}] //目前只有一项
+                    const interenceRes = await businessCustomInterence.setConfigList({
+                        EtaBusinessId:Number(this.$route.query.id),
+                        List:list
+                    })
+                    if(interenceRes.Ret!==200) return 
+                    this.$message.success('接口权限设置成功')
+                }
             }
             this.$router.push('/businessETAList')
         },
@@ -150,6 +224,7 @@ export default {
         }
     },
     mounted(){
+        this.getBusinessConfigList()
         this.getBusinessAuthList()
     }
 };
@@ -272,8 +347,23 @@ export default {
             font-weight: bold;
         }
     }
-    .auth-wrap{
+    .model-wrap{
+        display: flex;
+        gap:20px;
+        align-items: center;
+        .block{
+            display: inline-block;
+            height:20px;
+            width:1px;
+            background-color: #333;
+        }
+    }
+    .auth-wrap,.interence-wrap{
         margin-top:20px;
     }
+    .interence-item{
+        display: flex;
+        gap:25px;
+    }
 }
 </style>

+ 1 - 1
src/views/custom_manage/contacts/contactsList.vue

@@ -262,7 +262,7 @@ export default {
     },
     /* 获取销售 */
     getSale() {
-      customInterence.getSale().then((res) => {
+      customInterence.getSalesRaiData().then((res) => {
         if (res.Ret === 200) {
           this.salesArr = res.Data.List;
         }

+ 67 - 0
src/views/dataReport_manage/components/previousDetail.vue

@@ -0,0 +1,67 @@
+<template>
+  <el-dialog v-dialogDrag :visible.sync="previousDetailDlg" @close="handleClose" :modal-append-to-body="false" center title="维持套餐">
+    <p>上一份合同信息</p>
+    <el-table :data="dataList" border max-height="250" style="margin: 20px 0">
+      <el-table-column label="合同期限" prop="StartDate" align="center" width="220">
+        <template slot-scope="{ row }">
+          <span> {{ row.StartDate }} ~ {{ row.EndDate }} </span>
+        </template>
+      </el-table-column>
+      <el-table-column label="合同金额" prop="Money" align="center" />
+      <el-table-column label="签约套餐" prop="PermissionName" align="center">
+        <template slot-scope="{ row }">
+          <template v-if="row.PermissionName.length">
+            <el-tag size="mini" style="margin: 0 10px 10px 0" v-for="key in row.PermissionName.split(',')" :key="key">{{ key }}</el-tag>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-dialog>
+</template>
+
+<script>
+import { dataMainInterface } from "@/api/api.js";
+export default {
+  props: {
+    rowInfo: {
+      type: Object,
+      default: null,
+    },
+    previousDetailDlg: {
+      type: Boolean,
+      require: true,
+    },
+  },
+  data() {
+    return {
+      dataList: [],
+    };
+  },
+  methods: {
+    handleClose() {
+      this.$emit("update:previousDetailDlg", false);
+    },
+    async getrenewalReasonList() {
+      console.log(this.rowInfo);
+      const res = await dataMainInterface.mergeCompanyPreviousDetail({
+        CompanyContractId: this.rowInfo.CompanyContractId,
+      });
+      if (res.Ret == 200) {
+        this.dataList = [res.Data.Detail];
+        console.log(this.dataList);
+      }
+    },
+  },
+  watch: {
+    previousDetailDlg(val) {
+      if (val) {
+        this.getrenewalReasonList();
+      } else {
+        this.renewalList = [];
+      }
+    },
+  },
+};
+</script>
+
+<style></style>

+ 380 - 291
src/views/dataReport_manage/configdata.js

@@ -1,302 +1,391 @@
 export const monthLabel = [
-	{
-		label: "未来一个月"
-	},
-	{
-		label: "未来2个月"
-	},
-	{
-		label: "未来3个月"
-	}
-]
+  {
+    label: "未来一个月",
+  },
+  {
+    label: "未来2个月",
+  },
+  {
+    label: "未来3个月",
+  },
+];
 /* 即将到期表格列 */
 export const expringTableColums = [
-	{
-		label:"客户名称",
-		align:"center",
-		key:"CompanyName",
-		widthsty:'300px',
-		textsty:"color:#409EFF;cursor:pointer;",
-		link:true
-	},
-	{
-		label:"客户类型",
-		align:"center",
-		key:"ProductName",
-		widthsty:'100px'
-	},
-	{
-		label:"所属销售",
-		align:"center",
-		key:"SellerName"
-	},
-	// {
-	// 	label:"合同编号",
-	// 	align:"center",
-	// 	key:"ContractCode"
-	// },
-	// {
-	// 	label:"合同金额",
-	// 	align:"center",
-	// 	key:"Money"
-	// },
-	{
-		label:"服务期限",
-		align:"center",
-		key:""
-	},
-	{
-		label:"剩余天数",
-		align:"center",
-		key:"ExpireDay",
-		widthsty:'100px',
-		sort:true
-	},
-]
+  {
+    label: "客户名称",
+    align: "center",
+    key: "CompanyName",
+    widthsty: "300px",
+    textsty: "color:#409EFF;cursor:pointer;",
+    link: true,
+  },
+  {
+    label: "客户类型",
+    align: "center",
+    key: "ProductName",
+    widthsty: "100px",
+  },
+  {
+    label: "所属销售",
+    align: "center",
+    key: "SellerName",
+  },
+  // {
+  // 	label:"合同编号",
+  // 	align:"center",
+  // 	key:"ContractCode"
+  // },
+  // {
+  // 	label:"合同金额",
+  // 	align:"center",
+  // 	key:"Money"
+  // },
+  {
+    label: "服务期限",
+    align: "center",
+    key: "",
+  },
+  {
+    label: "剩余天数",
+    align: "center",
+    key: "ExpireDay",
+    widthsty: "100px",
+    sort: true,
+  },
+];
 /* 增量客户表格列 */
 export const incrementTableColums = [
-	{
-		label:"客户名称",
-		key:"CompanyName",
-		widthsty:'300px',
-		textsty:"color:#409EFF;cursor:pointer;",
-		link:true,
-	},
-	{
-		label:"客户类型",
-		key:"ProductName",
-		widthsty:'100px'
-	},
-	{
-		label:"不续约归因",
-		key:"AscribeContent",
-		dataType:"未续约客户",
-		notRenewedConfirm:1,
-		sort:true
-	},
-	{
-		label:"客户状态",
-		key:"Status",
-		dataType:"未续约客户",
-		sort:true
-	},
-	{
-		label:"所属销售",
-		key:"SellerName",
-		widthsty:'150px'
-	},
-	{
-		label:"新增时间",
-		key:"CreateTime",
-		dataType:"新增试用客户",
-		sort:true
-	},
-	{
-		label:"合同金额",
-		key:"Money",
-		dataType:"新签客户",
-		sort:true
-	},
-	{
-		label:"签约时间",
-		key:"StartDate",
-		dataType:"新签客户",
-		sort:true
-	},
-	{
-		label:"合同金额",
-		key:"Money",
-		dataType:"续约客户",
-		sort:true
-	},
-	{
-		label:"续约时间",
-		key:"StartDate",
-		dataType:"续约客户",
-		sort:true
-	},
-	{
-		label:"最近合同到期时间",
-		key:"EndDate",
-		dataType:"未续约客户",
-		sort:true
-	},
-	{
-		label:"备注",
-		key:"Remark",
-		dataType:"未续约客户",
-		widthsty:'100px',
-		sort:true
-	},
-	{
-		label:"未续约说明",
-		key:"RenewalReason",
-		dataType:"未续约客户",
-		widthsty:'300px',
-		sort:true
-	}
-]
+  {
+    label: "客户名称",
+    key: "CompanyName",
+    widthsty: "300px",
+    textsty: "color:#409EFF;cursor:pointer;",
+    link: true,
+  },
+  {
+    label: "客户类型",
+    key: "ProductName",
+    widthsty: "100px",
+  },
+  {
+    label: "不续约归因",
+    key: "AscribeContent",
+    dataType: "未续约客户",
+    notRenewedConfirm: 1,
+    sort: true,
+  },
+  {
+    label: "客户状态",
+    key: "Status",
+    dataType: "未续约客户",
+    sort: true,
+  },
+  {
+    label: "所属销售",
+    key: "SellerName",
+    widthsty: "150px",
+  },
+  {
+    label: "新增时间",
+    key: "CreateTime",
+    dataType: "新增试用客户",
+    sort: true,
+  },
+  {
+    label: "合同金额",
+    key: "Money",
+    dataType: "新签客户",
+    sort: true,
+  },
+  {
+    label: "签约时间",
+    key: "StartDate",
+    dataType: "新签客户",
+    sort: true,
+  },
+  {
+    label: "合同金额",
+    key: "Money",
+    dataType: "续约客户",
+    sort: true,
+  },
+  {
+    label: "续约时间",
+    key: "StartDate",
+    dataType: "续约客户",
+    sort: true,
+  },
+  {
+    label: "最近合同到期时间",
+    key: "EndDate",
+    dataType: "未续约客户",
+    sort: true,
+  },
+  {
+    label: "备注",
+    key: "Remark",
+    dataType: "未续约客户",
+    widthsty: "100px",
+    sort: true,
+  },
+  {
+    label: "未续约说明",
+    key: "RenewalReason",
+    dataType: "未续约客户",
+    widthsty: "300px",
+    sort: true,
+  },
+];
 /* 存量客户表格列 */
 export const stockTableColums = [
-	{
-		label:"客户名称",
-		key:"CompanyName",
-		widthsty:'300px',
-		textsty:"color:#409EFF;cursor:pointer;",
-		link:true,
-	},
-	{
-		label:"客户类型",
-		key:"ProductName",
-		widthsty:'100px'
-	},
-	{
-		label:"不续约归因",
-		key:"AscribeContent",
-		dataType:"未续约客户",
-		notRenewedConfirm:1,
-		sort:true
-	},
-	{
-		label:"客户状态",
-		key:"Status",
-		dataType:"未续约客户",
-	},
-	{
-		label:"所属销售",
-		key:"SellerName",
-		widthsty:'150px'
-	},
-	{
-		label:"服务期限",
-		dataType:"新签客户,续约客户"
-	},
-	{
-		label:"剩余天数",
-		key:"ExpireDay",
-		widthsty:'150px',
-		dataType:"新签客户,续约客户"
-	},
-	{
-		label:"最近合同到期时间",
-		key:"EndDate",
-		dataType:"未续约客户"
-	},
-	{
-		label:"备注",
-		key:"Remark",
-		dataType:"未续约客户",
-		widthsty:'100px',
-		sort:true
-	},
-	{
-		label:"未续约说明",
-		key:"RenewalReason",
-		dataType:"未续约客户",
-		widthsty:'300px'
-	},
-	{
-		label:"超出到期时间(天)",
-		key:"ExpireDay",
-		widthsty:'150px',
-		dataType:"未续约客户"
-	},
-]
+  {
+    label: "客户名称",
+    key: "CompanyName",
+    widthsty: "300px",
+    textsty: "color:#409EFF;cursor:pointer;",
+    link: true,
+  },
+  {
+    label: "客户类型",
+    key: "ProductName",
+    widthsty: "100px",
+  },
+  {
+    label: "不续约归因",
+    key: "AscribeContent",
+    dataType: "未续约客户",
+    notRenewedConfirm: 1,
+    sort: true,
+  },
+  {
+    label: "客户状态",
+    key: "Status",
+    dataType: "未续约客户",
+  },
+  {
+    label: "所属销售",
+    key: "SellerName",
+    widthsty: "150px",
+  },
+  {
+    label: "服务期限",
+    dataType: "新签客户,续约客户",
+  },
+  {
+    label: "剩余天数",
+    key: "ExpireDay",
+    widthsty: "150px",
+    dataType: "新签客户,续约客户",
+  },
+  {
+    label: "最近合同到期时间",
+    key: "EndDate",
+    dataType: "未续约客户",
+  },
+  {
+    label: "备注",
+    key: "Remark",
+    dataType: "未续约客户",
+    widthsty: "100px",
+    sort: true,
+  },
+  {
+    label: "未续约说明",
+    key: "RenewalReason",
+    dataType: "未续约客户",
+    widthsty: "300px",
+  },
+  {
+    label: "超出到期时间(天)",
+    key: "ExpireDay",
+    widthsty: "150px",
+    dataType: "未续约客户",
+  },
+];
 /* 合同列表表格列 */
 export const contractTableColums = [
-	{
-		label:"客户名称",
-		key:"CompanyName",
-		widthsty:'300px',
-		textsty:"color:#409EFF;cursor:pointer;",
-		link:true,
-	},
-	{
-		label:"客户类型",
-		key:"ProductName",
-		widthsty:'100px'
-	},
-	{
-		label:"所属销售",
-		key:"SellerName",
-		widthsty:'150px'
-	},
-	{
-		label:"有效合同数",
-		key:"Count",
-		widthsty:'150px',
-		dataType:"有效合同总数,有效合同总金额,正式客户数"
-	},
-	{
-		label:"有效合同总金额",
-		key:"SumMoney",
-		widthsty:'150px',
-		dataType:"有效合同总数,有效合同总金额,正式客户数"
-	},
-	{
-		label:'生成方式',
-		key:'Source',
-		widthsty:'150px',
-		dataType:"系统合同/上传附件"
-	},
-	{
-		label:'提交时间',
-		key:'CreateTime',
-		widthsty:'180px',
-		dataType:"系统合同/上传附件"
-	},
-	{
-		label:"操作",
-		textsty:"color:#409EFF;cursor:pointer;",
-		action:{
-			name:'合同详情'
-		}
-		
-	}
-]
+  {
+    label: "客户名称",
+    key: "CompanyName",
+    widthsty: "300px",
+    textsty: "color:#409EFF;cursor:pointer;",
+    link: true,
+  },
+  {
+    label: "客户类型",
+    key: "ProductName",
+    widthsty: "100px",
+  },
+  {
+    label: "所属销售",
+    key: "SellerName",
+    widthsty: "150px",
+  },
+  {
+    label: "有效合同数",
+    key: "Count",
+    widthsty: "150px",
+    dataType: "有效合同总数,有效合同总金额,正式客户数",
+  },
+  {
+    label: "有效合同总金额",
+    key: "SumMoney",
+    widthsty: "150px",
+    dataType: "有效合同总数,有效合同总金额,正式客户数",
+  },
+  {
+    label: "生成方式",
+    key: "Source",
+    widthsty: "150px",
+    dataType: "系统合同/上传附件",
+  },
+  {
+    label: "提交时间",
+    key: "CreateTime",
+    widthsty: "180px",
+    dataType: "系统合同/上传附件",
+  },
+  {
+    label: "操作",
+    textsty: "color:#409EFF;cursor:pointer;",
+    action: {
+      name: "合同详情",
+    },
+  },
+];
 /* 收入列表表格列 */
 export const incomeTableColums = [
-	{
-		label:"合同编号",
-		key:"ContractCode",
-	},
-	{
-		label:"客户名称",
-		key:"CompanyName",
-		widthsty:'200px',
-		textsty:"color:#409EFF;cursor:pointer;",
-		link:true,
-	},
-	{
-		label:"客户类型",
-		key:"ProductName",
-	},
-	{
-		label:"所属销售",
-		key:"SellerName",
-	},
-	{
-		label:"合同金额",
-		key:"Money",
-	},
-	{
-		label:"付款方式",
-		key:"PayMethod",
-	},
-	{
-		label:"付款渠道",
-		key:"PayChannel",
-	},
-	{
-		label:"服务期限",
-		widthsty:"200px"
-	},
-	{
-		label:"操作",
-		textsty:"color:#409EFF;cursor:pointer;",
-		action:{
-			name:'合同详情'
-		}
-		
-	}
-]
+  {
+    label: "合同编号",
+    key: "ContractCode",
+  },
+  {
+    label: "客户名称",
+    key: "CompanyName",
+    widthsty: "200px",
+    textsty: "color:#409EFF;cursor:pointer;",
+    link: true,
+  },
+  {
+    label: "客户类型",
+    key: "ProductName",
+  },
+  {
+    label: "所属销售",
+    key: "SellerName",
+  },
+  {
+    label: "合同金额",
+    key: "Money",
+  },
+  {
+    label: "付款方式",
+    key: "PayMethod",
+  },
+  {
+    label: "付款渠道",
+    key: "PayChannel",
+  },
+  {
+    label: "服务期限",
+    widthsty: "200px",
+  },
+  {
+    label: "操作",
+    textsty: "color:#409EFF;cursor:pointer;",
+    action: {
+      name: "合同详情",
+    },
+  },
+];
+
+/* 权益客户统计表格列 */
+export const equityTableColums = (type) => {
+  return type === "新签客户" || type === "续约客户"
+    ? [
+        {
+          label: "客户名称",
+          key: "CompanyName",
+          widthsty: "300px",
+          textsty: "color:#409EFF;cursor:pointer;",
+          link: true,
+        },
+        {
+          label: "所属销售",
+          key: "SellerName",
+          widthsty: "150px",
+        },
+        {
+          label: "合同期限",
+          align: "center",
+          key: "StartDate",
+        },
+        {
+          label: "合同金额",
+          key: "Money",
+          dataType: "新签客户",
+        },
+        {
+          label: type === "新签客户" ? "签约套餐" : "续约套餐",
+          align: "center",
+          key: "PermissionName",
+        },
+      ]
+    : type === "未续约客户"
+    ? [
+        {
+          label: "客户名称",
+          key: "CompanyName",
+          widthsty: "300px",
+          textsty: "color:#409EFF;cursor:pointer;",
+          link: true,
+        },
+        {
+          label: "客户状态",
+          key: "Status",
+          sort: true,
+        },
+        {
+          label: "所属销售",
+          key: "SellerName",
+          widthsty: "150px",
+        },
+        {
+          label: "合同到期时间",
+          key: "EndDate",
+          dataType: "未续约客户",
+          sort: true,
+        },
+        {
+          label: "签约套餐",
+          align: "center",
+          key: "PermissionName",
+        },
+        {
+          label: "合同金额",
+          key: "Money",
+          dataType: "新签客户",
+        },
+        {
+          label: "未续约说明",
+          key: "RenewalReason",
+          dataType: "未续约客户",
+          widthsty: "300px",
+          sort: true,
+        },
+        {
+          label: "备注",
+          key: "Remark",
+          dataType: "未续约客户",
+          widthsty: "100px",
+          sort: true,
+        },
+        {
+          label: "不续约归因",
+          key: "AscribeContent",
+          notRenewedConfirm: 1,
+          sort: true,
+        },
+      ]
+    : [];
+};

+ 677 - 0
src/views/dataReport_manage/equityCustomStatistics.vue

@@ -0,0 +1,677 @@
+<template>
+  <div class="dataReport-container" id="dataReport-container">
+    <div class="dataReport-top">
+      <a :href="exportExcel" download>
+        <button class="button-sty act">导出EXCEL</button>
+      </a>
+      <button :class="['button-sty', { act: filterObj.month === item.label }]" v-for="item in monthLabel" @click="toggleMonth(item.label)" :key="item.label">
+        {{ item.label }}
+      </button>
+      <date-picker v-model="filterObj.date" type="date" range value-type="format" placeholder="自定义时间段" :clearable="false" :editable="false" @change="dateChange" />
+      <el-input placeholder="请输入客户名称" v-model="searchVal" style="width: 400px; margin-left: auto" @input="handleSearch" clearable>
+        <i slot="prefix" class="el-input__icon el-icon-search"></i>
+      </el-input>
+    </div>
+    <div class="dataReport-main">
+      <div class="main-top">
+        <el-cascader
+          v-if="Role == 'finance' || Role == 'admin' || Role == 'ficc_admin' || Role == 'rai_admin' || ManageType != 0"
+          v-model="filterObj.sale"
+          placeholder="请选择销售"
+          style="min-width: 250px; margin-right: 10px; margin-bottom: 8px"
+          :options="salesArr"
+          :props="defaultSalesProps"
+          :show-all-levels="false"
+          collapse-tags
+          clearable
+          filterable
+          @change="changeFilter"
+        >
+        </el-cascader>
+      </div>
+      <div class="main-section">
+        <el-row :gutter="36">
+          <el-col :span="8" v-for="item in data_typeArr" :key="item.label">
+            <el-card :class="['base-card', { 'main-card': filterObj.data_type === item.label }]" shadow="hover" @click.native="toggleType(item.label)">
+              <div slot="header" class="clearfix">
+                <span>
+                  {{ lableTextDisplay(item.label) }}数
+                  <el-tooltip
+                    class="item"
+                    effect="dark"
+                    :content="
+                      item.label === '新签客户' ? '起始时间在所选时间段内的新签合同' : item.label === '续约客户' ? '起始时间在所选时间段内的续约合同' : '合同截止时间在所选时间段内的非正式、非永续客户'
+                    "
+                    placement="top"
+                  >
+                    <i class="el-icon-info"></i>
+                  </el-tooltip>
+                </span>
+              </div>
+              <div class="card-cont">
+                {{
+                  item.label === "新签客户"
+                    ? NewCompanyTotal
+                    : item.label === "续约客户"
+                    ? RenewalCompanyTotal
+                    : item.label === "未续约客户"
+                    ? NotRenewalCompanyTotal + " / " + NotRenewalCompanyToBeConfirmTotal
+                    : ""
+                }}
+              </div>
+            </el-card>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="tabs-box" v-if="filterObj.data_type == '续约客户'">
+        <div class="tabs-box-confirm">
+          <div style="margin-bottom: 0px" class="tabs-box-confirm" v-for="(item, index) in packageTypeList" :key="item">
+            <div :class="['confirm-box-li', PackageDifference == item && 'active']" @click="notPackageDifferenceChange(item)">{{ item }}</div>
+            <div v-if="index != 2" class="center-line"></div>
+          </div>
+        </div>
+      </div>
+      <div class="tabs-box" v-if="filterObj.data_type == '未续约客户'">
+        <el-radio-group v-model="isNotRenewedConfirm" class="tabs-box-confirm" @change="notRenewedConfirmChange">
+          <el-radio-button :label="1">已确认</el-radio-button>
+          <div class="center-line"></div>
+          <el-radio-button :label="0">待确认</el-radio-button>
+        </el-radio-group>
+        <div class="tabs-box-status" v-show="isNotRenewedConfirm">
+          <el-select v-model="noRenewalReasonId" placeholder="请选择不续约归因" clearable @change="getTableData" style="width: 240px; margin-right: 50px">
+            <el-option :label="item.AscribeContent" :value="item.CompanyAscribeId" v-for="item in noRenewalReasonList" :key="item.reasonId"></el-option>
+          </el-select>
+          <!-- <span @click="tabsHandler(item)" :class="tabsActiveName === item.value ? 'active' : ''" v-for="item in tabsList" :key="item">
+            {{ item.name }}({{ item.name === "试用" ? NotRenewalTryOut : NotRenewalNotTryOut }})
+          </span> -->
+          <el-select v-model="tabsActiveName" placeholder="当前状态" clearable @change="getTableData" style="width: 240px; margin-right: 50px">
+            <el-option :label="item.name" :value="item.value" v-for="item in tabsList" :key="item.value"></el-option>
+          </el-select>
+        </div>
+      </div>
+      <el-table :data="tableData" border style="margin-top: 20px; min-height: 400px" v-loading="isShowloadding" element-loading-text="数据加载中...">
+        <template v-for="item in incrementTableColums">
+          <el-table-column :key="item.label" :label="item.label" :width="item.widthsty" align="center" v-if="item.key != 'AscribeContent'">
+            <template slot-scope="scope">
+              <span :style="item.textsty" @click="jumpHandle(scope.row, item)" v-if="item.key === 'CreateTime'">
+                {{ scope.row[item.key] | formatTime }}
+              </span>
+              <span v-else-if="item.label == '未续约说明'">
+                <span style="display: block" v-if="scope.row[item.key]">最新情况:{{ scope.row[item.key] }}</span>
+                <span v-if="scope.row.RenewalTodo">To Do 事项:{{ scope.row.RenewalTodo }}</span>
+                <span v-if="scope.row[item.key] || scope.row.RenewalTodo" style="color: #409eff; cursor: pointer" @click="renewalReasonMore(scope.row)">&emsp;更多>></span>
+              </span>
+              <div v-else-if="item.key == 'CompanyName'" style="padding: 4px 0">
+                <span :style="item.textsty" @click="jumpHandle(scope.row, item)">
+                  {{ scope.row[item.key] }}
+                </span>
+                <div class="package-difference" v-if="scope.row.PackageDifference && filterObj.data_type == '续约客户'" @click="previousDetailHadler(scope.row)">
+                  {{ scope.row.PackageDifference }}
+                </div>
+              </div>
+              <div v-else-if="item.key === 'Remark'" class="remark-row">
+                <span class="remark-text" @click="viewHistoryRemarkFun(scope.row)" v-if="scope.row.IsShowNoRenewedNote">...</span>
+                <span class="operation-button" v-show="canConfirmNotRenewed && !isNotRenewedConfirm" style="margin-right: 0" @click="addRemarkFun(scope.row)">添加</span>
+              </div>
+              <div v-else-if="item.key == 'AscribeContent'">
+                <span style="color: #409eff; cursor: pointer" @click="editReasonLabel(scope.row)">
+                  {{ scope.row[item.key] }}
+                </span>
+              </div>
+              <div v-else-if="item.key == 'PermissionName'">
+                <template v-if="scope.row.PermissionName.length">
+                  <el-tag size="mini" style="margin: 0 10px 10px 0" v-for="key in scope.row.PermissionName.split(',')" :key="key">{{ key }}</el-tag>
+                </template>
+              </div>
+              <div v-else-if="item.key == 'StartDate'">
+                <span> {{ scope.row[item.key] }} ~ {{ scope.row.EndDate }} </span>
+              </div>
+              <span v-else :style="item.textsty" @click="jumpHandle(scope.row, item)">
+                {{ scope.row[item.key] }}
+              </span>
+            </template>
+          </el-table-column>
+          <el-table-column :key="item.label" :label="item.label" :width="item.widthsty" align="center" v-else-if="item.key == 'AscribeContent' && isNotRenewedConfirm == 1">
+            <template slot-scope="scope">
+              <span style="color: #409eff; cursor: pointer" @click="editReasonLabel(scope.row)">
+                {{ scope.row[item.key] }}
+              </span>
+            </template>
+          </el-table-column>
+        </template>
+        <el-table-column label="操作" width="180px" align="center" v-if="canConfirmNotRenewed && !isNotRenewedConfirm && filterObj.data_type == '未续约客户'">
+          <template slot-scope="scope">
+            <div class="operation-row">
+              <span class="operation-button" @click="confirmedNoRenewalFun(scope.row)">确认不续约</span>
+            </div>
+          </template>
+        </el-table-column>
+        <div slot="empty" style="line-height: 44px; margin: 60px 0; color: #999">
+          <img src="~@/assets/img/cus_m/nodata.png" alt="" style="display: block; width: 160px; height: 128px; margin: auto" />
+          <span>暂无数据</span>
+        </div>
+      </el-table>
+      <el-col :span="24" class="toolbar" v-if="total">
+        <m-page :total="total" :page_no="page_no" @handleCurrentChange="handleCurrentChange" />
+      </el-col>
+    </div>
+    <!-- 未续约说明列表弹窗 -->
+    <renewalListDia :isShow.sync="isRenewalShow" :rowInfo="rowInfo" />
+    <!-- 添加备注弹窗 -->
+    <addRemark :isShow.sync="isAddRemarkShow" @saveRemark="saveRemark" />
+    <!-- 历史备注弹窗 -->
+    <viewRemark :isShow.sync="isViewRemarkShow" :tableData="historyRemarkList" />
+    <!-- 确认不续约弹窗 -->
+    <confirmedNoRenewal
+      :isShow.sync="isConfirmNoRenewalShow"
+      :dataForm="confirmNoRenewalForm"
+      :noRenewalReasonList="noRenewalReasonList"
+      @refreshReasonList="getNORenewalReasonList"
+      @saveLabel="saveLabel"
+    />
+    <previous-detail :previousDetailDlg.sync="previousDetailDlg" :rowInfo="rowInfo" />
+  </div>
+</template>
+
+<script>
+import { equityTableColums } from "./configdata.js";
+import { dataMainInterface, customInterence } from "@/api/api.js";
+import mPage from "@/components/mPage.vue";
+import renewalListDia from "./components/renewalListDia.vue";
+import addRemark from "./components/noRenewalReasonDia/addRemark.vue";
+import viewRemark from "./components/noRenewalReasonDia/viewRemark.vue";
+import confirmedNoRenewal from "./components/noRenewalReasonDia/confirmedNoRenewal.vue";
+import PreviousDetail from "./components/previousDetail.vue";
+
+var moment = require("moment");
+moment().format();
+export default {
+  name: "",
+  components: { mPage, renewalListDia, addRemark, viewRemark, confirmedNoRenewal, PreviousDetail },
+  computed: {
+    exportExcel() {
+      let baseUrl = process.env.API_ROOT + "/statistic_report/merge_company_list";
+      let token = localStorage.getItem("auth") || "";
+      let paramStr = "";
+      // 处理销售筛选
+      let salesArr = [];
+      if (this.filterObj.sale.length) {
+        salesArr = this.filterObj.sale.map((item) => {
+          return item[item.length - 1];
+        });
+      }
+      let obj = {
+        AdminId: salesArr.join(","),
+        EndDate: this.end_date,
+        StartDate: this.start_date,
+        DataType: this.filterObj.data_type == "新增试用客户" ? "新增试用" : this.filterObj.data_type,
+        Keyword: this.searchVal,
+        IsExport: true,
+        IsConfirm: this.filterObj.data_type == "未续约客户" ? this.isNotRenewedConfirm : -1,
+        CompanyAscribeId: this.noRenewalReasonId,
+      };
+      for (let key in obj) {
+        paramStr = `${paramStr}&${key}=${obj[key]}`;
+      }
+      return `${baseUrl}?${token}${paramStr}`;
+    },
+    Role() {
+      let role = localStorage.getItem("Role") || "";
+      return role;
+    },
+    //管理权限
+    ManageType() {
+      return localStorage.getItem("ManageType") || "";
+    },
+    //确认未续约权限
+    canConfirmNotRenewed() {
+      return ["admin", "rai_admin"].includes(this.Role);
+    },
+  },
+  data() {
+    return {
+      searchVal: sessionStorage.getItem("incrementBack") ? JSON.parse(sessionStorage.getItem("incrementBack")).searchVal : "",
+      tableData: [],
+      isShowloadding: false,
+      start_date: "",
+      end_date: "",
+      /* 筛选条件 */
+      filterObj: {
+        month: "近1个月",
+        date: [],
+        sale: "",
+        data_type: "新签客户",
+      },
+      monthLabel: [
+        {
+          label: "近1个月",
+        },
+        {
+          label: "近2个月",
+        },
+        {
+          label: "近3个月",
+        },
+      ],
+      salesArr: [], //销售列表
+      defaultSalesProps: {
+        multiple: true,
+        label: "RealName",
+        children: "ChildrenList",
+        value: "AdminId",
+      }, //销售级联配置
+      pageSize: 10,
+      page_no: sessionStorage.getItem("incrementBack") ? JSON.parse(sessionStorage.getItem("incrementBack")).page_no : 1,
+      total: 0,
+      data_typeArr: [
+        {
+          label: "新签客户",
+        },
+        {
+          label: "续约客户",
+        },
+        {
+          label: "未续约客户",
+        },
+      ], //数据类型
+      NewCompanyTotal: 0, //新签客户数
+      NotRenewalCompanyTotal: 0, //未续约客户数
+      RenewalCompanyTotal: 0, //续约客户数
+      NotRenewalCompanyToBeConfirmTotal: 0,
+      isRenewalShow: false, //未续约说明列表弹框是否显示
+      rowInfo: null, // 未续约说明更多行信息
+      tabsList: [
+        { name: "试用", value: "试用" },
+        { name: "冻结/流失", value: "非试用" },
+      ],
+      tabsActiveName: "",
+      NotRenewalNotTryOut: 0, //冻结流失的人数
+      NotRenewalTryOut: 0, //试用的人数
+      isNotRenewedConfirm: 1, //未续约的是否已确认
+      noRenewalReasonList: [],
+      noRenewalReasonId: "",
+      selectItemRow: {}, // 当前选中的row
+      // 添加备注
+      isAddRemarkShow: false,
+      //历史备注
+      isViewRemarkShow: false,
+      historyRemarkList: [],
+      //确认不续约
+      isConfirmNoRenewalShow: false,
+      confirmNoRenewalForm: {
+        reason: "",
+        detailReason: "",
+      },
+      incrementTableColums: [],
+      PackageDifference: "",
+      previousDetailDlg: false,
+      packageTypeList: ["增加套餐", "减少套餐", "维持套餐"],
+    };
+  },
+  /* 页面跳转前记录参数 */
+  beforeRouteLeave(to, form, next) {
+    let backData = {
+      page_no: this.page_no,
+      end_date: this.end_date,
+      start_date: this.start_date,
+      filterObj: this.filterObj,
+    };
+    sessionStorage.setItem("incrementBack", JSON.stringify(backData));
+    next();
+  },
+  /* 页面进入前是否清除参数 */
+  beforeRouteEnter(to, from, next) {
+    if (from.path != "/customDetail") {
+      sessionStorage.removeItem("incrementBack");
+    }
+    next();
+  },
+  methods: {
+    // 搜索
+    handleSearch() {
+      if (!this.searchVal) {
+        this.page_no = 1;
+        this.filterObj = {
+          month: "近1个月",
+          date: [],
+          sale: "",
+          data_type: this.filterObj.data_type,
+        };
+        let date_before = moment().subtract(1, "M").format("YYYY-MM-DD");
+        let date_now = moment().format("YYYY-MM-DD");
+        let date = [date_before, date_now];
+        this.start_date = date_before;
+        this.end_date = date_now;
+        this.filterObj.date = date;
+        this.getTableData();
+        return;
+      }
+      this.page_no = 1;
+      this.filterObj = {
+        month: "",
+        date: [],
+        sale: "",
+        data_type: this.filterObj.data_type,
+      };
+      this.start_date = "";
+      this.end_date = "";
+      this.getTableData();
+    },
+    //tabs 的点击事件
+    // tabsHandler(item) {
+    //   this.tabsActiveName = item.value;
+    //   this.noRenewalReasonId = "";
+    //   this.page_no = 1;
+    //   this.getTableData();
+    // },
+    notRenewedConfirmChange() {
+      this.tabsActiveName = "";
+      this.noRenewalReasonId = "";
+      this.page_no = 1;
+      this.getTableData();
+    },
+    notPackageDifferenceChange(type) {
+      if (this.PackageDifference == type) {
+        this.PackageDifference = "";
+      } else {
+        this.PackageDifference = type;
+      }
+      this.page_no = 1;
+      this.getTableData();
+    },
+    /* 获取表格 */
+    getTableData() {
+      this.isShowloadding = true;
+      // 处理销售筛选
+      let salesArr = [];
+      if (this.filterObj.sale.length) {
+        salesArr = this.filterObj.sale.map((item) => {
+          return item[item.length - 1];
+        });
+      }
+      let params = {
+        Keyword: this.searchVal,
+        PageSize: this.pageSize,
+        CurrentIndex: this.page_no,
+        AdminId: salesArr.join(","),
+        EndDate: this.end_date,
+        StartDate: this.start_date,
+        DataType: this.filterObj.data_type == "新增试用客户" ? "新增试用" : this.filterObj.data_type,
+        TryOutType: this.filterObj.data_type == "未续约客户" && this.isNotRenewedConfirm == 1 ? this.tabsActiveName : "",
+        IsConfirm: this.filterObj.data_type == "未续约客户" ? this.isNotRenewedConfirm : -1,
+        CompanyAscribeId: this.noRenewalReasonId,
+        PackageDifference: this.PackageDifference,
+      };
+      dataMainInterface.incrementalEquityList(params).then((res) => {
+        if (res.Ret === 200) {
+          this.tableData = res.Data.List || [];
+          this.total = res.Data.Paging.Totals;
+          this.NewCompanyTotal = res.Data.NewCompanyTotal;
+          this.RenewalCompanyTotal = res.Data.RenewalCompanyTotal;
+          this.NotRenewalCompanyTotal = res.Data.NotRenewalCompanyTotal;
+          this.NotRenewalCompanyToBeConfirmTotal = res.Data.NotRenewalCompanyToBeConfirmTotal;
+          this.NotRenewalTryOut = res.Data.NotRenewalTryOut;
+          this.NotRenewalNotTryOut = res.Data.NotRenewalNotTryOut;
+          this.isShowloadding = false;
+        }
+      });
+    },
+    /* 获取销售 */
+    getSale() {
+      customInterence.getSalesRaiData().then((res) => {
+        if (res.Ret === 200) {
+          this.salesArr = res.Data.List;
+        }
+      });
+    },
+    /* 切换月份 */
+    toggleMonth(label) {
+      this.filterObj.month = label;
+      let days = label == "近1个月" ? 1 : label == "近2个月" ? 2 : label == "近3个月" ? 3 : 0;
+      this.filterDate(days);
+    },
+    /* 选择服务日期 */
+    dateChange(e) {
+      if (e[0]) {
+        this.start_date = e[0];
+        this.end_date = e[1];
+      } else {
+        this.start_date = "";
+        this.end_date = "";
+      }
+      this.filterObj.month = "";
+      this.page_no = 1;
+      this.searchVal = "";
+      this.getTableData();
+    },
+    /* 切换数据类型 */
+    toggleType(label) {
+      this.filterObj.data_type = label;
+      this.incrementTableColums = equityTableColums(this.filterObj.data_type);
+      this.noRenewalReasonId = "";
+      if (label == "未续约客户") {
+        this.getNORenewalReasonList();
+      }
+      this.tabsActiveName = "";
+      this.page_no = 1;
+      this.getTableData();
+    },
+    /* 筛选改变时 */
+    changeFilter() {
+      this.page_no = 1;
+      this.searchVal = "";
+      this.getTableData();
+    },
+    /* 切换页码 */
+    handleCurrentChange(page) {
+      this.page_no = page;
+      this.getTableData();
+    },
+    /* 获取近几个月的日期范围 */
+    filterDate(month) {
+      if (month) {
+        let date_before = moment().subtract(month, "M").format("YYYY-MM-DD");
+        let date_now = moment().format("YYYY-MM-DD");
+        let date = [date_before, date_now];
+        this.start_date = date_before;
+        this.end_date = date_now;
+        this.filterObj.date = date;
+        this.page_no = 1;
+        this.searchVal = "";
+        this.getTableData();
+      }
+    },
+    /* 跳转 */
+    jumpHandle(row, item) {
+      if (item.link) {
+        let { href } = this.$router.resolve({
+          path: "/customDetail",
+          query: {
+            id: row.CompanyId,
+          },
+        });
+        window.open(href, "_blank");
+      }
+    },
+    getNORenewalReasonList() {
+      dataMainInterface.getAscribList().then((res) => {
+        if (res.Ret == 200) {
+          this.noRenewalReasonList = res.Data.List || [];
+        }
+      });
+    },
+    // 未续约说明更多按钮
+    renewalReasonMore(row) {
+      this.rowInfo = {
+        CompanyId: row.CompanyId,
+        ProductId: row.ProductId,
+      };
+      this.isRenewalShow = true;
+    },
+    // 添加备注
+    addRemarkFun(row) {
+      this.selectItemRow = row;
+      this.isAddRemarkShow = true;
+    },
+    // 添加备注 保存
+    saveRemark(remark) {
+      // console.log(remark);
+      let params = {
+        CompanyId: this.selectItemRow.CompanyId,
+        ProductId: this.selectItemRow.ProductId,
+        Content: remark,
+      };
+      dataMainInterface.addNotRenewedRemark(params).then((res) => {
+        if (res.Ret == 200) {
+          this.$message.success("添加成功");
+          this.getTableData();
+          this.isAddRemarkShow = false;
+          this.selectItemRow = {};
+        }
+      });
+    },
+    // 查看历史备注
+    viewHistoryRemarkFun(row) {
+      dataMainInterface.getNotRenewedRemarkList({ CompanyId: row.CompanyId, ProductId: row.ProductId }).then((res) => {
+        if (res.Ret == 200) {
+          this.historyRemarkList = res.Data.List || [];
+          this.isViewRemarkShow = true;
+        }
+      });
+    },
+    confirmedNoRenewalFun(row) {
+      this.confirmNoRenewalForm.reason = "";
+      this.confirmNoRenewalForm.detailReason = "";
+      this.selectItemRow = row;
+      this.isConfirmNoRenewalShow = true;
+    },
+    editReasonLabel(row) {
+      dataMainInterface.infoNoRenewedAscribe({ CompanyId: row.CompanyId, ProductId: row.ProductId }).then((res) => {
+        if (res.Ret == 200) {
+          this.confirmNoRenewalForm.reason = res.Data.Detail ? res.Data.Detail.CompanyAscribeId || "" : "";
+          this.confirmNoRenewalForm.detailReason = res.Data.Detail ? res.Data.Detail.Content || "" : "";
+          this.selectItemRow = row;
+          this.isConfirmNoRenewalShow = true;
+        }
+      });
+    },
+    saveLabel(item) {
+      let params = {
+        CompanyId: this.selectItemRow.CompanyId,
+        ProductId: this.selectItemRow.ProductId,
+        CompanyAscribeId: item.CompanyAscribeId,
+        Content: item.Content,
+      };
+      dataMainInterface.addNoRenewedAscribe(params).then((res) => {
+        if (res.Ret == 200) {
+          this.$message.success("确认成功");
+          this.isConfirmNoRenewalShow = false;
+          this.selectItemRow = {};
+          this.getTableData();
+        }
+      });
+    },
+    previousDetailHadler(row) {
+      console.log(123);
+      this.rowInfo = row;
+      this.previousDetailDlg = true;
+    },
+    lableTextDisplay(text) {
+      let str = text == "新签客户" ? "新签合同" : text == "续约客户" ? "续约合同" : "未续约客户";
+      return str;
+    },
+  },
+  created() {},
+  mounted() {
+    this.incrementTableColums = equityTableColums(this.filterObj.data_type);
+    this.getSale();
+    if (sessionStorage.getItem("incrementBack")) {
+      let backData = JSON.parse(sessionStorage.getItem("incrementBack"));
+      this.page_no = backData.page_no;
+      this.end_date = backData.end_date;
+      this.start_date = backData.start_date;
+      this.filterObj = backData.filterObj;
+      this.searchVal = backData.searchVal;
+    }
+    /* 默认选中近1个月 */
+    this.filterDate(this.filterObj.month === "近1个月" ? 1 : this.filterObj.month === "近2个月" ? 2 : this.filterObj.month === "近3个月" ? 3 : 0);
+  },
+};
+</script>
+<style lang="scss" scoped>
+@import "./index.scss";
+.tabs-box {
+  flex-direction: column;
+  .tabs-box-confirm {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    .center-line {
+      width: 1px;
+      height: 21px;
+      background-color: #333333;
+      margin: 0 20px;
+    }
+    .confirm-box-li {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      cursor: pointer;
+      width: 120px;
+      height: 40px;
+      border-radius: 4px;
+    }
+    .active {
+      background-color: #409eff;
+      color: #fff;
+    }
+  }
+}
+.operation-button {
+  color: #409eff;
+  cursor: pointer;
+  font-size: 14px;
+  margin-right: 10px;
+}
+.remark-row {
+  display: flex;
+  justify-content: center;
+  .remark-text {
+    width: 18px;
+    height: 18px;
+    margin-right: 8px;
+    font-size: 18px;
+    color: #409eff;
+    cursor: pointer;
+  }
+}
+.operation-row {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-wrap: wrap;
+  .operation-button {
+    &:last-child {
+      margin-right: 0;
+    }
+  }
+}
+.package-difference {
+  cursor: pointer;
+}
+</style>
+<style lang="scss">
+#dataReport-container {
+  .tabs-box {
+    .el-radio-button {
+      margin-right: 0;
+    }
+    .el-radio-button .el-radio-button__inner {
+      border: none;
+      width: 120px;
+      height: 40px;
+      border-radius: 4px;
+    }
+  }
+}
+</style>

+ 10 - 2
src/views/operation_manage/AIQA/AIQA.vue

@@ -90,13 +90,21 @@ export default {
             modelOldValue:'',
             modelList:[
                 {
-                    label:'gpt-3.5-turbo',
-                    icon:require('@/assets/img/icons/chat-gpt.png'),
+                    label:'GPT-4 Turbo',
+                    icon:require('@/assets/img/icons/gpt-4-turbo.png'),
+                },
+                {
+                    label:'GPT4',
+                    icon:require('@/assets/img/icons/gpt-4.png'),
                 },
                 {
                     label:'gpt-3.5-turbo-16k',
                     icon:require('@/assets/img/icons/chat-gpt-16k.png'),
                 },
+                {
+                    label:'gpt-3.5-turbo',
+                    icon:require('@/assets/img/icons/chat-gpt.png'),
+                },
                 {
                     label:'eta',
                     icon:require('@/assets/img/icons/horizon.png'),

+ 3 - 1
src/views/operation_manage/AIQA/components/messageItem.vue

@@ -31,7 +31,9 @@ export default {
                 'user':require('@/assets/img/set_m/user_img.png'),
                 'gpt-3.5-turbo':require('@/assets/img/icons/chat-gpt.png'),
                 'gpt-3.5-turbo-16k':require('@/assets/img/icons/chat-gpt-16k.png'),
-                'eta':require('@/assets/img/icons/horizon.png')
+                'eta':require('@/assets/img/icons/horizon.png'),
+                'GPT4':require('@/assets/img/icons/gpt-4.png'),
+                'GPT-4 Turbo':require('@/assets/img/icons/gpt-4-turbo.png'),
             },
             isPlay:false,//是否播放动画
             typingText:'',