Browse Source

16.1 init

bding 5 months ago
parent
commit
df7558ebc5

+ 1 - 1
src/routes/modules/statisticRoutes.js

@@ -48,7 +48,7 @@ export default [
 			{
 				path: 'equityCustomStatistics',
 				component: () => import('@/views/dataReport_manage/equityCustomStatistics.vue'),
-				name: '权益客户统计',
+				name: '权益增量客户',
 				hidden: false
 			},
 			{

+ 51 - 0
src/views/dataReport_manage/components/NotRenewedDlg.vue

@@ -0,0 +1,51 @@
+<template>
+  <el-dialog :visible.sync="isNotRenewedDlg" :close-on-click-modal="false" :modal-append-to-body="false" @close="cancelHandle" center title="下载未续约率" width="35%">
+    <div>
+      <el-radio-group v-model="radio">
+        <el-radio style="margin-bottom: 20px" :label="1">下载当前销售的合同明细数据</el-radio>
+        <el-radio :label="2">下载所有销售未续约数据列表</el-radio>
+      </el-radio-group>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="cancelHandle">取 消</el-button>
+      <el-button type="primary" @click="downloadHandle">确 定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import { dataMainInterface } from "@/api/api.js";
+export default {
+  props: {
+    isNotRenewedDlg: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  watch: {},
+  data() {
+    return {
+      radio: 1,
+    };
+  },
+  methods: {
+    // 关闭弹框
+    cancelHandle() {
+      this.$emit("update:isNotRenewedDlg", false);
+    },
+    // 下载
+    downloadHandle() {
+      let link = document.createElement("a");
+      link.style.display = "none";
+      link.href = 'url 地址------';
+      link.setAttribute("download", name);
+      document.body.appendChild(link);
+      link.click();
+      document.body.removeChild(link);
+    },
+  },
+  created() {},
+  mounted() {},
+};
+</script>
+<style lang="scss"></style>

+ 36 - 29
src/views/dataReport_manage/configdata.js

@@ -62,11 +62,6 @@ export const incrementTableColums = [
     textsty: "color:#409EFF;cursor:pointer;",
     link: true,
   },
-  {
-    label: "客户类型",
-    key: "ProductName",
-    widthsty: "100px",
-  },
   {
     label: "不续约归因",
     key: "AscribeContent",
@@ -145,11 +140,6 @@ export const stockTableColums = [
     textsty: "color:#409EFF;cursor:pointer;",
     link: true,
   },
-  {
-    label: "客户类型",
-    key: "ProductName",
-    widthsty: "100px",
-  },
   {
     label: "不续约归因",
     key: "AscribeContent",
@@ -168,15 +158,19 @@ export const stockTableColums = [
     widthsty: "150px",
   },
   {
-    label: "服务期限",
+    label: "合同期限",
     dataType: "新签客户,续约客户",
   },
+  // todo 这个地方等
   {
-    label: "剩余天数",
-    key: "ExpireDay",
-    widthsty: "150px",
+    label: "合同金额",
+    dataType: "新签客户,续约客户",
+  },
+  {
+    label: "签约套餐",
     dataType: "新签客户,续约客户",
   },
+  // 
   {
     label: "最近合同到期时间",
     key: "EndDate",
@@ -315,6 +309,11 @@ export const equityTableColums = (type) => {
           key: "SellerName",
           widthsty: "150px",
         },
+        {
+          label: "服务销售",
+          key: "ShareSeller",
+          widthsty: "150px",
+        },
         {
           label: "合同期限",
           align: "center",
@@ -350,6 +349,11 @@ export const equityTableColums = (type) => {
           key: "SellerName",
           widthsty: "150px",
         },
+        {
+          label: "服务销售",
+          key: "ShareSeller ",
+          widthsty: "150px",
+        },
         {
           label: "合同到期时间",
           key: "EndDate",
@@ -366,20 +370,6 @@ export const equityTableColums = (type) => {
           key: "Money",
           dataType: "新签客户",
         },
-        {
-          label: "未续约说明",
-          key: "RenewalReason",
-          dataType: "未续约客户",
-          widthsty: "300px",
-          sort: true,
-        },
-        {
-          label: "备注",
-          key: "Remark",
-          dataType: "未续约客户",
-          widthsty: "100px",
-          sort: true,
-        },
         {
           label: "不续约归因",
           key: "AscribeContent",
@@ -387,5 +377,22 @@ 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: "CreateTime",
+    }]
+    :[];
 };

+ 77 - 78
src/views/dataReport_manage/equityCustomStatistics.vue

@@ -37,7 +37,10 @@
                 {{ lableTextDisplay(item.label) }}数
                 <el-tooltip class="item" effect="dark" :content="item.label === '新签客户' ? '<br />' : item.label === '续约客户' ? '起始时间在所选时间段内的续约合同' : ''" placement="top">
                   <template slot="content">
-                    <div v-if="item.label === '新签客户'">
+                    <div v-if="item.label === '新增试用客户'">
+                      <p>新建试用客户的时间或跨部门领取的时间,包含在所选时间段内的客户数</p>
+                    </div>
+                    <div v-else-if="item.label === '新签客户'">
                       <p>起始时间在所选时间段内的新签合同</p>
                       <p>(第一份合同起始时间一年内的再次签约仍属于新签合同)</p>
                     </div>
@@ -45,7 +48,7 @@
                       <p>起始时间在所选时间段内的续约合同</p>
                       <p>(第一份合同起始时间一年以后的再次签约均属于续约合同)</p>
                     </div>
-                    <p v-else>合同截止时间在所选时间段内的非正式、非永续客户</p>
+                    <p v-else>当前客户状态为非正式、非X类试用,且截止时间在所选时间段内的合同数(打分客户佣金不计入)</p>
                   </template>
                   <i class="el-icon-info"></i>
                 </el-tooltip>
@@ -53,7 +56,9 @@
             </div>
             <div class="card-cont">
               {{
-                item.label === "新签客户"
+                item.label === "新增试用客户"
+                  ? TrialTotal
+                  : item.label === "新签客户"
                   ? NewCompanyTotal
                   : item.label === "续约客户"
                   ? RenewalCompanyTotal
@@ -64,38 +69,6 @@
             </div>
           </el-card>
         </div>
-        <div class="annual-select-content">
-          <div class="select-content">
-            <div class="lable-text">
-              不续约率
-              <el-tooltip style="margin-right: 16px" class="item" effect="dark" content="所选年度的续约合同/所选年度的到期合同" placement="top-start">
-                <template slot="content">
-                  <div>
-                    <p>所选时间段的已确认不续约的合同金额/所选时间段的到期的合同金额</p>
-                    <p>(剔除非业务不续约的金额)</p>
-                  </div>
-                </template>
-                <i class="el-icon-info" style="color: #999"></i>
-              </el-tooltip>
-            </div>
-            <el-date-picker
-              v-model="yearValue"
-              type="daterange"
-              format="yyyy-MM-dd"
-              value-format="yyyy-MM-dd"
-              :clearable="false"
-              @change="getIncrementalCompanyContractPercentageList"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-            >
-            </el-date-picker>
-          </div>
-          <div class="select-content">
-            <span class="editsty" v-if="RenewalDataForm.RenewalRateMoney" @click="renewalRateLableHandler">&nbsp;&nbsp;{{ RenewalDataForm.RenewalRateMoney }}&nbsp;&nbsp;</span>
-            {{ RenewalDataForm.RenewalRateTotalContent ? `(${RenewalDataForm.RenewalRateTotalContent})` : " -  -" }}
-          </div>
-        </div>
       </div>
       <div class="tabs-box">
         <div class="tabs-box-confirm">
@@ -106,11 +79,30 @@
         </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 style="display: flex; align-items: cente; margin-bottom: 20px">
+          <el-radio-group v-model="isNotRenewedConfirm" style="margin: 0px 20px 0 0" 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>
+            <div class="center-line"></div>
+            <el-radio-button :label="2">到期合同</el-radio-button>
+          </el-radio-group>
+          <div class="lable-text">
+            未续约率
+            <el-tooltip style="margin-right: 16px" class="item" effect="dark" content="所选年度的续约合同/所选年度的到期合同" placement="top-start">
+              <template slot="content">
+                <div>
+                  <p>所选时间段的已确认不续约的合同金额/所选时间段的到期的合同金额</p>
+                  <p>(剔除非业务不续约的金额)</p>
+                </div>
+              </template>
+              <i class="el-icon-info" style="color: #999"></i>
+            </el-tooltip>
+            <p class="editsty" v-if="RenewalDataForm.RenewalRateMoney" @click="renewalRateLableHandler">&nbsp;&nbsp;{{ RenewalDataForm.RenewalRateMoney }}&nbsp;&nbsp;</p>
+            {{ RenewalDataForm.RenewalRateTotalContent ? `(${RenewalDataForm.RenewalRateTotalContent})` : " -  -" }}
+            <el-button v-if="canConfirmNotRenewed" type="primary" size="mini" style="margin-left: 20px" @click="isNotRenewedDlg = true">下载</el-button>
+          </div>
+        </div>
         <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>
@@ -207,6 +199,7 @@
     <previous-detail :previousDetailDlg.sync="previousDetailDlg" :rowInfo="rowInfo" />
     <RenewalRateDetail :showRenewalRateDetailDlg.sync="showRenewalRateDetailDlg" :renewalRateDetailForm.sync="renewalRateDetailForm" :noRenewalReasonListSon="noRenewalReasonList" />
     <historical-notes-dlg :historicalNotesDlgVisible.sync="historicalNotesDlgVisible" :CompanyId.sync="historicalNotesId" />
+    <NotRenewedDlg :isNotRenewedDlg.sync="isNotRenewedDlg" />
   </div>
 </template>
 
@@ -221,12 +214,13 @@ import confirmedNoRenewal from "./components/noRenewalReasonDia/confirmedNoRenew
 import PreviousDetail from "./components/previousDetail.vue";
 import RenewalRateDetail from "./components/renewalRateDetail.vue";
 import HistoricalNotesDlg from "@/components/historicalNotesDlg.vue";
-
+import NotRenewedDlg from "./components/NotRenewedDlg.vue";
 var moment = require("moment");
 moment().format();
 export default {
   name: "",
-  components: { mPage, renewalListDia, addRemark, viewRemark, confirmedNoRenewal, PreviousDetail, RenewalRateDetail, HistoricalNotesDlg },
+  components: { mPage, renewalListDia, addRemark, viewRemark, confirmedNoRenewal, PreviousDetail, RenewalRateDetail, HistoricalNotesDlg, NotRenewedDlg },
+
   computed: {
     exportExcel() {
       let baseUrl = process.env.API_ROOT + "/statistic_report/merge_company_list";
@@ -283,7 +277,7 @@ export default {
         month: "近1个月",
         date: [],
         sale: "",
-        data_type: "新客户",
+        data_type: "新增试用客户",
       },
       monthLabel: [
         {
@@ -307,6 +301,9 @@ export default {
       page_no: sessionStorage.getItem("incrementBack") ? JSON.parse(sessionStorage.getItem("incrementBack")).page_no : 1,
       total: 0,
       data_typeArr: [
+        {
+          label: "新增试用客户",
+        },
         {
           label: "新签客户",
         },
@@ -328,6 +325,7 @@ export default {
         { name: "冻结/流失", value: "非试用" },
       ],
       tabsActiveName: "",
+			TrialTotal:0,//新增试用数
       NotRenewalNotTryOut: 0, //冻结流失的人数
       NotRenewalTryOut: 0, //试用的人数
       isNotRenewedConfirm: 1, //未续约的是否已确认
@@ -356,6 +354,8 @@ export default {
 
       historicalNotesDlgVisible: false, //历史备注的弹框
       historicalNotesId: 0,
+
+      isNotRenewedDlg: false, //未续约 弹框
     };
   },
   /* 页面跳转前记录参数 */
@@ -456,6 +456,7 @@ export default {
         if (res.Ret === 200) {
           this.tableData = res.Data.List || [];
           this.total = res.Data.Paging.Totals;
+					this.TrialTotal = res.Data.TrialTotal;
           this.NewCompanyTotal = res.Data.NewCompanyTotal;
           this.RenewalCompanyTotal = res.Data.RenewalCompanyTotal;
           this.NotRenewalCompanyTotal = res.Data.NotRenewalCompanyTotal;
@@ -479,6 +480,7 @@ export default {
       this.filterObj.month = label;
       let days = label == "近1个月" ? 1 : label == "近2个月" ? 2 : label == "近3个月" ? 3 : 0;
       this.filterDate(days);
+      this.getIncrementalCompanyContractPercentageList();
     },
     /* 选择服务日期 */
     dateChange(e) {
@@ -500,6 +502,7 @@ export default {
       this.incrementTableColums = equityTableColums(this.filterObj.data_type);
       this.noRenewalReasonId = "";
       if (label == "未续约客户") {
+        this.getIncrementalCompanyContractPercentageList();
         this.getNORenewalReasonList();
       }
       this.tabsActiveName = "";
@@ -631,11 +634,11 @@ export default {
       let str = text == "新签客户" ? "新签合同" : text == "续约客户" ? "续约合同" : "未续约客户";
       return str;
     },
-    // 年度续约的标签点击事件
-    annualSelectHandler(item) {
-      this.annualSelectActivue = item.name;
-      this.getIncrementalCompanyContractPercentageList();
-    },
+    // // 年度续约的标签点击事件
+    // annualSelectHandler(item) {
+    //   this.annualSelectActivue = item.name;
+    //   this.getIncrementalCompanyContractPercentageList();
+    // },
     // 点击了续约率
     renewalRateLableHandler() {
       this.showRenewalRateDetailDlg = true;
@@ -643,6 +646,7 @@ export default {
     },
     // 获取年度续约的数据
     async getIncrementalCompanyContractPercentageList() {
+      if (this.filterObj.data_type != "未续约客户") return;
       let params = this.initCompanyContractPercentageList();
       const res = await dataMainInterface.incrementalCompanyContractPercentageListV2(params);
       if (res.Ret === 200) {
@@ -658,8 +662,8 @@ export default {
         });
       }
       let params = {
-        EndDate: this.yearValue.length > 0 ? this.yearValue[1] : "",
-        StartDate: this.yearValue.length > 0 ? this.yearValue[0] : "",
+        EndDate: this.end_date,
+        StartDate: this.start_date,
         AdminId: salesArr.join(","),
       };
       return params;
@@ -748,34 +752,29 @@ export default {
 .package-difference {
   cursor: pointer;
 }
-.annual-select-content {
-  .select-content {
-    display: flex;
-    align-items: center;
-    margin-bottom: 15px;
-    .lable-text {
-      flex-shrink: 0;
-    }
-    .select-lable {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      box-sizing: border-box;
-      margin-left: 10px;
-      width: 92px;
-      height: 40px;
-      color: #409eff;
-      background-color: #ecf5ff;
-      border: 1px solid #b3d8ff;
-      border-radius: 4px;
-      cursor: pointer;
-    }
-    .act-select-lable {
-      color: #fff;
-      background-color: #409eff;
-      border: none;
-    }
-  }
+
+.lable-text {
+  display: flex;
+  align-items: center;
+}
+.select-lable {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  box-sizing: border-box;
+  margin-left: 10px;
+  width: 92px;
+  height: 40px;
+  color: #409eff;
+  background-color: #ecf5ff;
+  border: 1px solid #b3d8ff;
+  border-radius: 4px;
+  cursor: pointer;
+}
+.act-select-lable {
+  color: #fff;
+  background-color: #409eff;
+  border: none;
 }
 </style>
 <style lang="scss">

+ 29 - 7
src/views/dataReport_manage/stockCutomList.vue

@@ -34,7 +34,7 @@
 					@change="changeFilter">
 				</el-cascader>
 
-				<el-select 
+				<!-- <el-select 
 				v-model="filterObj.type" 
 				placeholder="请选择客户类型" 
 				style="width:150px;marginRight:10px;marginBottom:8px;" 
@@ -60,7 +60,7 @@
 						:label="item"
 						:value="item">
 					</el-option>
-				</el-select>
+				</el-select> -->
 				<date-picker
 				style="marginBottom:8px;"
 				v-model="filterObj.date" 
@@ -125,9 +125,9 @@
 				<el-option :label="item.AscribeContent" :value="item.CompanyAscribeId"
 				v-for="item in noRenewalReasonList" :key="item.reasonId"></el-option>
 			</el-select>
-			<div class="tabs-box" v-if="filterObj.data_type=='未续约客户'">
+			<!-- <div class="tabs-box" v-if="filterObj.data_type=='未续约客户'">
 				<span @click="tabsHandler(item)" :class="tabsActiveName===item.value ? 'active':''" v-for="item in tabsList" :key="item">{{item.name}}({{item.name==='试用'?NotRenewalTryOut:NotRenewalNotTryOut}})</span>
-			</div>
+			</div> -->
 			<el-table
 				:data="tableData"
 				border
@@ -190,6 +190,11 @@
 					</template>
 				</el-table-column>
 			</template>
+			<el-table-column label="操作" width="180px" align="center">
+				<template slot-scope="{ row }">
+				  <span v-if="isRoleType == 'admin' || isRoleType == '权益'" @click="historicalNotesClickHandler(row)" class="editsty">历史备注</span>
+				</template>
+			</el-table-column>
 				<div slot="empty" style="lineHeight: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>
@@ -209,6 +214,10 @@
 		<!-- 确认不续约弹窗 -->
 		<confirmedNoRenewal :isShow.sync="isConfirmNoRenewalShow" :dataForm="confirmNoRenewalForm" 
 			:noRenewalReasonList="noRenewalReasonList" @refreshReasonList="getNORenewalReasonList" @saveLabel="saveLabel" />
+		
+		<!-- 历史备注的弹框 -->
+		<HistoricalNotesDlg :historicalNotesDlgVisible.sync="historicalNotesDlgVisible" :CompanyId.sync="historicalNotesId" />
+
 	</div>
 </template>
 
@@ -219,12 +228,13 @@ import mPage from '@/components/mPage.vue'
 import renewalListDia from './components/renewalListDia.vue'
 import viewRemark from './components/noRenewalReasonDia/viewRemark.vue'
 import confirmedNoRenewal from './components/noRenewalReasonDia/confirmedNoRenewal.vue'
+import HistoricalNotesDlg from "@/components/historicalNotesDlg.vue";
 
 var moment = require('moment');
 moment().format();
 export default {
 	name:'',
-	components: {mPage,renewalListDia,viewRemark,confirmedNoRenewal},
+	components: {mPage,renewalListDia,viewRemark,confirmedNoRenewal,HistoricalNotesDlg},
 	computed: {
 		exportExcel() {
 			let baseUrl = process.env.API_ROOT + "/statistic_report/stack_company_list";
@@ -266,7 +276,11 @@ export default {
 		//管理权限
 		ManageType() {
 			return localStorage.getItem('ManageType') || '';
-		}
+		},
+		// crm 15.9.1 历史备注 区分权益FICC的展示
+		isRoleType() {
+		    return localStorage.getItem("RoleType") || "";
+		},
 	},
 	data () {
 		return {
@@ -331,7 +345,10 @@ export default {
 			confirmNoRenewalForm:{
 				reason:"",
 				detailReason:""
-			}
+			},
+
+			historicalNotesDlgVisible: false, //历史备注的弹框
+      		historicalNotesId: 0,
 		};
 	},
 	/* 页面跳转前记录参数 */
@@ -503,6 +520,11 @@ export default {
 					this.getTableData()
 				}
 			})
+		},
+		// 点击了历史留言
+		historicalNotesClickHandler(item) {
+		this.historicalNotesDlgVisible = true;
+		this.historicalNotesId = item.CompanyId;
 		}
 	},
 	created() {},