qymljy 7 ヶ月 前
コミット
46fbbcbc81

+ 48 - 0
package-lock.json

@@ -29,6 +29,7 @@
         "moment": "^2.29.4",
         "nprogress": "^0.2.0",
         "print-js": "^1.6.0",
+        "sass-loader": "^16.0.2",
         "script-loader": "^0.7.2",
         "sortablejs": "^1.15.2",
         "viewerjs": "^1.11.6",
@@ -13053,6 +13054,45 @@
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
       "devOptional": true
     },
+    "node_modules/sass-loader": {
+      "version": "16.0.2",
+      "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-16.0.2.tgz",
+      "integrity": "sha512-Ll6iXZ1EYwYT19SqW4mSBb76vSSi8JgzElmzIerhEGgzB5hRjDQIWsPmuk1UrAXkR16KJHqVY0eH+5/uw9Tmfw==",
+      "dependencies": {
+        "neo-async": "^2.6.2"
+      },
+      "engines": {
+        "node": ">= 18.12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "@rspack/core": "0.x || 1.x",
+        "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
+        "sass": "^1.3.0",
+        "sass-embedded": "*",
+        "webpack": "^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@rspack/core": {
+          "optional": true
+        },
+        "node-sass": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "sass-embedded": {
+          "optional": true
+        },
+        "webpack": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/sax": {
       "version": "1.2.4",
       "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz",
@@ -27092,6 +27132,14 @@
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
       "devOptional": true
     },
+    "sass-loader": {
+      "version": "16.0.2",
+      "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-16.0.2.tgz",
+      "integrity": "sha512-Ll6iXZ1EYwYT19SqW4mSBb76vSSi8JgzElmzIerhEGgzB5hRjDQIWsPmuk1UrAXkR16KJHqVY0eH+5/uw9Tmfw==",
+      "requires": {
+        "neo-async": "^2.6.2"
+      }
+    },
     "sax": {
       "version": "1.2.4",
       "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz",

+ 1 - 0
package.json

@@ -30,6 +30,7 @@
     "moment": "^2.29.4",
     "nprogress": "^0.2.0",
     "print-js": "^1.6.0",
+    "sass-loader": "^16.0.2",
     "script-loader": "^0.7.2",
     "sortablejs": "^1.15.2",
     "viewerjs": "^1.11.6",

+ 106 - 0
src/HManagement/serviceDataScreen/components/funnelBox.vue

@@ -0,0 +1,106 @@
+<template>
+  <div style="display:flex;justify-content: space-between">
+    <div style="width: 7vw;">
+      <div style="display:flex;justify-content: space-between">
+        <div class="box-funnel-title">阶段</div>
+        <div></div>
+      </div>
+      <div class="box-margin-top">
+        <span class="box-funnel-title-span1">预计签约:</span>
+        <span class="box-funnel-title-span2">7.13万元</span>
+      </div>
+      <div class="box-margin-top">
+        <span class="box-funnel-title-span1">项目成交:</span>
+        <span class="box-funnel-title-span3">7.13万元</span>
+      </div>
+    </div>
+    <div class="box-funnel-style" :style="{'width': width + 'vw','background':background}">
+      <div>
+        <div>
+          <div class="box-funnel-title-span5"></div>
+          <div class="box-funnel-title-span4"></div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "funnelBox",
+  props:['width','background']
+}
+</script>
+
+<style scoped>
+.box-funnel-style{
+  height: 4.375vw;
+  /*background: #40DCF2;*/
+  box-shadow: 0.000vw 0.156vw 0.313vw 0.052vw rgba(0,0,0,0.16);
+  border-radius: 0.313vw 0.313vw 0.313vw 0.313vw;
+  opacity: 0.8;
+  margin: auto;
+}
+.box-funnel-title{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: bold;
+  font-size: 0.833vw;
+  color: #E6F4FF;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.box-funnel-title-span1{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.625vw;
+  color: #CFDCE5;
+  line-height: 0.000vw;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.box-funnel-title-span2{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.625vw;
+  color: #6CD2A1;
+  line-height: 0.000vw;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.box-funnel-title-span3{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.625vw;
+  color: #5FB3E3;
+  line-height: 0.000vw;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.box-funnel-title-span4{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.625vw;
+  color: #FFFFFF;
+  line-height: 0.000vw;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.box-funnel-title-span5{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: bold;
+  font-size: 0.625vw;
+  color: #FFFFFF;
+  line-height: 0.000vw;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.box-margin-top{
+  margin-top: 0.521vw;
+}
+</style>

+ 123 - 0
src/HManagement/serviceDataScreen/components/profileTemplate.vue

@@ -0,0 +1,123 @@
+<template>
+  <div class="box-border">
+    <div class="box-margin">
+      <div class="box-content" v-for="item in dataProfile" :key="item.index">
+        <div class="justify">
+          <div>
+            <div class="value-style">
+              <span v-if="item.title == '报价总金额' || item.title == '客户报价金额' || item.title == '项目报价金额'">
+                <span v-if="item.value > 10000" >
+                  {{tool.formatAmount(tool.unitConversion(item.value,10000),2)}}<span style="font-size: 0.729vw">{{$t('万元')}}</span>
+                </span>
+                <span v-else>
+                  {{tool.formatAmount(item.value,2)}}<span style="font-size: 0.729vw">{{$t(' 元')}}</span>
+                </span>
+              </span>
+              <span v-else>{{item.value}}</span>
+            </div>
+            <div class="title-style">{{item.title}}</div>
+          </div>
+          <div style="margin-right: 0.252vw;margin-top: 0.1vw" v-if="item.tips">
+            <el-tooltip placement="top" >
+              <div slot="content">
+              <span v-if="item.title == '已转化线索数'">
+                {{$t('①已转化线索数:销售线索应用中,已分配给业务员,已转化状态的线索数量。')}}<br/>
+                {{$t('②一条线索可进行两次转化:转化客户、转化项目,因此,已转化线索数≠转化客户线索数+转化项目线索数。')}}
+              </span>
+                <span v-else>
+                {{item.tips}}
+              </span>
+              </div>
+              <img style="vertical-align: middle" width="14px" height="14px" src="../../../assets/icons/Tips.svg" >
+            </el-tooltip>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="box-margin" v-if="profileType && profileType.length > 0">
+      <div class="box-content" v-for="k in profileType" :key="k.index">
+        <div class="justify">
+          <div>
+            <div class="value-style">{{k.qty}}</div>
+            <div class="title-style">{{k.value}}</div>
+          </div>
+          <div style="margin-right: 0.252vw;margin-top: 0.1vw" v-if="k.value == '无分类客户'">
+            <el-tooltip placement="top" >
+              <div slot="content">
+                <span v-if="k.value == '无分类客户'">
+                  {{$t('无分类客户数:统计没有客户分类信息的客户数量')}}<br/>
+                </span>
+              </div>
+              <img style="vertical-align: middle" width="14px" height="14px" src="../../../assets/icons/Tips.svg" >
+            </el-tooltip>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "profileTemplate",
+  props:['dataProfile','profileType']
+}
+</script>
+
+<style scoped>
+.box-border{
+  width: 29.167vw;
+  height: 11.146vw;
+  background: #001E41;
+  box-shadow: 0.000vw 0.156vw 0.313vw 0.052vw rgba(0,0,0,0.16);
+  border-radius: 0.313vw 0.313vw 0.313vw 0.313vw;
+  border: 0.052vw solid #CFDCE5;
+  margin-top: 1.042vw;
+  overflow: auto;
+  box-sizing: border-box;
+  -ms-overflow-style: none; /* 适用于 Internet Explorer 和旧版 Edge */
+  scrollbar-width: none; /* 适用于 Firefox */
+}
+.box-border .box-margin{
+  margin: 0 0 1.042vw 1.042vw;
+  overflow: auto;
+  box-sizing: border-box;
+  -ms-overflow-style: none; /* 适用于 Internet Explorer 和旧版 Edge */
+  scrollbar-width: none; /* 适用于 Firefox */
+}
+.box-margin .box-content{
+  width: 6.609vw;
+  height: 2.675vw;
+  /* border: 1px solid #3fc9c9; */
+  float: left;
+  margin-right: 0.359vw;
+  margin-top: 0.705vw;
+}
+.box-margin .justify {
+  display: flex;justify-content: space-between;
+}
+.justify .value-style {
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: bold;
+  font-size: 1.250vw;
+  color: #3685FC;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+  box-sizing: border-box;
+  padding: 0 !important;
+  margin: 0 !important;
+}
+.justify .title-style{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.625vw;
+  color: #CFDCE5;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+  box-sizing: border-box;
+  padding: 0 !important;
+  margin: 0 !important;
+}
+</style>

+ 16 - 1
src/HManagement/serviceDataScreen/index.vue

@@ -58,7 +58,7 @@
         <!-- 应收账款 -->
         <accountsReceivable ref="receivableRef"></accountsReceivable>
         <!-- 数据概况 -->
-        <dataProfile class="inline-top-20"></dataProfile>
+        <dataProfile ref="profileRef" class="inline-top-20"></dataProfile>
       </div>
     </div>
     <fullScreen ref="fullRef" class="inline-16" domId="fullScreen" style="visibility: hidden" @backFull="backFull"></fullScreen>
@@ -274,6 +274,15 @@ export default {
       this.$refs.jobRef.param.content.where.isleave = this.isleave
       this.$refs.jobRef.listData()
 
+      /*销售面板*/
+      this.$refs.panelRef.param.content.dataid = id
+      this.$refs.panelRef.param.content.type = this.departmentid !== ''?1:0
+      this.$refs.panelRef.param.content.where.isleave = this.isleave
+      this.$refs.panelRef.paramChart.content.dataid = id
+      this.$refs.panelRef.paramChart.content.type = this.departmentid !== ''?1:0
+      this.$refs.panelRef.paramChart.content.where.isleave = this.isleave
+      this.$refs.panelRef.listData()
+
       /*营销费用*/
       this.$refs.expensesRef.param.content.dataid = id
       this.$refs.expensesRef.param.content.type = this.departmentid !== ''?1:0
@@ -285,6 +294,12 @@ export default {
       this.$refs.receivableRef.param.content.type = this.departmentid !== ''?1:0
       this.$refs.receivableRef.param.content.where.isleave = this.isleave
       this.$refs.receivableRef.listData()
+
+      /*数据概况*/
+      this.$refs.profileRef.param.content.dataid = id
+      this.$refs.profileRef.param.content.type = this.departmentid !== ''?1:0
+      this.$refs.profileRef.param.content.where.isleave = this.isleave
+      this.$refs.profileRef.listData()
     }
   },
   created() {

+ 342 - 5
src/HManagement/serviceDataScreen/modules/dataProfile.vue

@@ -1,17 +1,354 @@
 <template>
   <div>
-    <borderTemplate borderBox="width: 31.250vw;height: 32.813vw;" title="数据概况" detailTitle="查看详情"></borderTemplate>
+    <borderTemplate borderBox="width: 31.250vw;height: 32.813vw;" title="数据概况" detailTitle="查看详情">
+      <template slot="content">
+        <div class="justify-content">
+          <div class="justify-content-left">
+            <div class="box-border">
+              <el-button v-if="typeSelect == '线索'" type="primary" class="btn-select" @click="typeChange('线索')">{{$t(`线索`)}}</el-button>
+              <el-button type="text" v-else class="btn-unSelect" @click="typeChange('线索')">{{$t(`线索`)}}</el-button>
+            </div>
+            <div class="box-border">
+              <el-button type="primary" v-if="typeSelect == '客户'" class="btn-select" @click="typeChange('客户')">{{$t(`客户`)}}</el-button>
+              <el-button type="text" class="btn-unSelect" v-else @click="typeChange('客户')">{{$t(`客户`)}}</el-button>
+            </div>
+            <div class="box-border">
+              <el-button type="primary" v-if="typeSelect == '项目'" class="btn-select" @click="typeChange('项目')">{{$t(`项目`)}}</el-button>
+              <el-button type="text" class="btn-unSelect" v-else @click="typeChange('项目')">{{$t(`项目`)}}</el-button>
+            </div>
+            <div class="box-border">
+              <el-button type="primary" v-if="typeSelect == '报价'" class="btn-select" @click="typeChange('报价')">{{$t(`报价`)}}</el-button>
+              <el-button type="text" class="btn-unSelect" v-else @click="typeChange('报价')">{{$t(`报价`)}}</el-button>
+            </div>
+          </div>
+          <div>
+            <el-select v-model="param.content.dateType"  class="inline-16" size="small" @change="listData" :popper-append-to-body="false">
+              <el-option :label="$t('全部')" value="全部"></el-option>
+              <el-option :label="$t('本年')" value="本年"></el-option>
+              <el-option :label="$t('本季')" value="本季"></el-option>
+              <el-option :label="$t('本月')" value="本月"></el-option>
+              <el-option :label="$t('去年')" value="去年"></el-option>
+            </el-select>
+          </div>
+        </div>
+        <profileTemplate :dataProfile="dataProfile" :profileType="profileType"></profileTemplate>
+      </template>
+    </borderTemplate>
   </div>
 </template>
 
 <script>
 import borderTemplate from '../components/borderTemplate'
+import profileTemplate from "../components/profileTemplate";
 export default {
   name: "dataProfile",
-  components:{borderTemplate}
+  components:{borderTemplate,profileTemplate},
+  data(){
+    return {
+      typeSelect:'线索',
+      param:{
+        id:20231014114204,
+        content:{
+          dataid:'',
+          dateType:'全部',
+          type:'',
+          where:{
+            isleave:''
+          }
+        }
+      },
+      list:'',
+      dataProfile:[],
+      profileType:[],
+    }
+  },
+  methods:{
+    async listData(){
+      if (this.typeSelect == '线索'){
+        this.param.id = 20231014114204
+      }else if (this.typeSelect == '客户'){
+        this.param.id = 20231015170504
+      }else if (this.typeSelect == '项目'){
+        this.param.id = 20231018110404
+      }else if (this.typeSelect == '报价'){
+        this.param.id = 20231011201004
+      }
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+      if (this.typeSelect == '客户' || this.typeSelect == '项目'){
+        this.profileType = res.data.data
+      }
+      console.log(this.list,this.typeSelect,'数据')
+      console.log(this.profileType,this.typeSelect,'this.profileType')
+      this.profileSet(this.typeSelect)
+    },
+    profileSet(val){
+      if (val == '线索'){
+        this.dataProfile = [
+          {
+            title:'线索总数',
+            value:this.list.total,
+            tips:'线索总数:包含待分配、已分配线索数。'
+          },
+          {
+            title:'待分配未过期线索数',
+            value:this.list.dfp,
+            tips:'待分配未过期线索数:所有线索中,待分配未过期的线索数量。'
+          },
+          {
+            title:'待跟进线索数',
+            value:this.list.dgj,
+            tips:'待跟进线索数:销售线索应用中,已分配给业务员,待跟进状态的线索数量。'
+          },
+          {
+            title:'跟进中线索数',
+            value:this.list.gjz,
+            tips:'跟进中线索数:销售线索应用中,已分配给业务员,跟进中状态的线索数量。'
+          },
+          {
+            title:'已转化线索数',
+            value:this.list.yzh,
+            tips:"①已转化线索数:销售线索应用中,已分配给业务员,已转化状态的线索数量。" + '\n\n' + '②一条线索可进行两次转化:转化客户、转化项目,因此,已转化线索数≠转化客户线索数+转化项目线索数。'
+          },
+          {
+            title:'已无效线索数',
+            value:this.list.ywx,
+            tips:"已无效线索数:销售线索应用中,已分配给业务员,已无效状态的线索数量。"
+          },
+          {
+            title:'待分配已过期线索数',
+            value:this.list.ygq,
+            tips:'待分配已过期线索数:所有线索中,待分配已过期的线索数量。'
+          },
+          {
+            title:'过期比例',
+            value:Math.round(((this.list.gqbl * 100)*100)/100) + '%',
+            tips:'待分配已过期线索数:所有线索中,待分配已过期的线索数量。'
+          },
+          {
+            title:'过期比例',
+            value:Math.round(((this.list.gqbl * 100)*100)/100) + '%',
+            tips:'过期比例=已过期线索数÷待分配线索数×100%'
+          },
+          {
+            title:'转化客户线索数',
+            value:this.list.covercusomers,
+            tips:'转化客户线索数:统计有转化客户操作的线索数'
+          },
+          {
+            title:'转化项目线索数',
+            value:this.list.coverproject,
+            tips:'转化客户线索数:统计有转化项目操作的线索数'
+          },
+          {
+            title:'线索转化率',
+            value:Math.round(((this.list.zhl * 100)*100)/100) + '%',
+            tips:'线索转化率=已转化线索数÷线索总数×100%'
+          },
+          {
+            title:'线索成交数',
+            value:this.list.dealqty,
+            tips:'线索成交数:转化后有下订单的线索数量'
+          },
+          {
+            title:'线索成交率',
+            value:Math.round(((this.list.cjl * 100)*100)/100) + '%',
+            tips:'线索成交率=转化后有下订单的线索数÷线索总数×100%'
+          },
+          {
+            title:'参与线索数',
+            value:this.list.joinordercluesize,
+            tips:'参与线索数:参与的并且至少有一次跟进的线索数量'
+          },
+          {
+            title:'参与线索转化数',
+            value:this.list.joincoverorderclue,
+            tips:'参与线索转化数:参与的并且至少有一次跟进的有发生转化的线索数量'
+          },
+          {
+            title:'参与线索转化率',
+            value:Math.round(((this.list.joinordercluezhl * 100)*100)/100) + '%',
+            tips:'参与线索转化率=参与线索转化数 ÷ 参与线索数 ×100%'
+          },
+          {
+            title:'参与线索成交数',
+            value:this.list.joindealorderclue,
+            tips:'参与线索成交数:参与的并且至少有一次跟进的转化后有下订单的线索数量'
+          },
+          {
+            title:'参与线索成交率',
+            value:Math.round(((this.list.joinordercluecjl * 100)*100)/100) + '%',
+            tips:'参与线索成交率=参与线索成交率 ÷ 参与线索数 ×100%'
+          },
+        ]
+      }else if (val == '客户'){
+        this.dataProfile = [
+          {
+            title:'客户总数',
+            value:this.list.total,
+            tips:'客户总数:包含我的客户、公海客户数量'
+          },
+          {
+            title:'公海客户数',
+            value:this.list.customerpoolqty,
+            tips:''
+          },
+          {
+            title:'成交客户数',
+            value:this.list.tradedCustomers,
+            tips:'成交客户:已成交、多次成交状态的客户数量'
+          },
+          {
+            title:'参与项目客户数',
+            value:this.list.participateProject,
+            tips:'参与项目客户数:参与有下订单的项目的关联客户数'
+          },
+        ]
+      }else if (val == '项目'){
+        this.dataProfile = [
+          {
+            title:'项目总数',
+            value:this.list.reportProject,
+            tips:'报备项目数:统计已报备的项目数量'
+          },
+          {
+            title:'项目总数',
+            value:this.list.reportProject,
+            tips:'报备项目数:统计已报备的项目数量'
+          },
+          {
+            title:'进行中项目数',
+            value:this.list.dealProject,
+            tips:'进行中项目数:进行中状态的项目数量'
+          },
+          {
+            title:'项目成交数',
+            value:this.list.dealProject,
+            tips:'项目成交数:统计有关联审核过的订单的项目数量'
+          },
+          {
+            title:'项目成交率',
+            value:Math.round(((this.list.cjl * 100)*100)/100) + '%',
+            tips:'项目成交率=有关联审核订单的项目数÷项目总数×100%'
+          },
+          {
+            title:'项目失败数',
+            value:this.list.failedproject,
+            tips:'项目失败数:已失败状态的项目数量'
+          },
+          {
+            title:'项目失败率',
+            value:Math.round(((this.list.sbl * 100)*100)/100) + '%',
+            tips:'项目失败率=已失败项目数÷项目总数×100%'
+          },
+          {
+            title:'参与项目数',
+            value:this.list.joinProject,
+            tips:'参与项目数:参与的并且至少有一次跟进的项目数量'
+          },
+          {
+            title:'参与项目成交数',
+            value:this.list.joinDealProject,
+            tips:'参与项目成交数:参与的并且至少有一次跟进的项目的成交数量'
+          },
+          {
+            title:'参与项目成交率',
+            value:Math.round(((this.list.joinDealProjectcjl * 100)*100)/100) + '%',
+            tips:'参与项目成交率=参与项目成交数 ÷ 参与项目数 ×100%'
+          },
+        ]
+      }else if (val == '报价'){
+        this.dataProfile = [
+          {
+            title:'报价总次数',
+            value:this.list.totalqty,
+            tips:'统计到当前查询时间为止的报价总次数(审核状态)'
+          },
+          {
+            title:'客户报价次数',
+            value:this.list.cusqty,
+            tips:'统计到当前查询时间为止的客户报价总次数(审核状态)'
+          },
+          {
+            title:'项目报价次数',
+            value:this.list.proqty,
+            tips:'统计到当前查询时间为止的项目报价总次数(审核状态)'
+          },
+          {
+            title:'报价总金额',
+            value:this.list.totalamount,
+            tips:'统计到当前查询时间为止的报价总金额(审核状态)'
+          },
+          {
+            title:'客户报价金额',
+            value:this.list.cusamount,
+            tips:'统计到当前查询时间为止的客户报价金额(审核状态)'
+          },
+          {
+            title:'项目报价金额',
+            value:this.list.proamount,
+            tips:'统计到当前查询时间为止的项目报价金额(审核状态)'
+          },
+        ]
+      }
+    },
+    typeChange(val){
+      if (val == '线索'){
+        this.typeSelect = '线索'
+      }else if (val == '客户'){
+        this.typeSelect = '客户'
+      }else if (val == '项目'){
+        this.typeSelect = '项目'
+      }else if (val == '报价'){
+        this.typeSelect = '报价'
+      }
+      this.listData()
+    },
+  }
 }
 </script>
-
-<style scoped>
-
+<style>
+.justify-content{
+  display: flex;
+  justify-content: space-between;
+  margin-top: 1.042vw;
+}
+.justify-content-left{
+  display: flex;
+  justify-content: left;
+}
+.justify-content-left .box-border{
+  width: 3.125vw;
+  height: 1.563vw;
+  border-radius: 0.104vw 0.104vw 0.104vw 0.104vw;
+  margin-right: 0.521vw;
+  text-align: center;
+}
+.justify-content-left .box-border .btn-select{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.833vw;
+  color: #E6F4FF;
+  font-style: normal;
+  text-transform: none;
+}
+.justify-content-left .box-border .btn-unSelect{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.729vw;
+  color: #CFDCE5;
+  font-style: normal;
+  text-transform: none;
+  text-align: center;
+}
+</style>
+<style  scoped>
+ /deep/ .el-button--primary:focus, .el-button--primary:hover {
+  background: #6090f8;
+  border-color: #6090f8;
+  /*color: #6090f8;*/
+}
+ /deep/ .element.style {
+  font-size: 15.9386px;
+}
 </style>

+ 48 - 2
src/HManagement/serviceDataScreen/modules/salesFunnel.vue

@@ -1,14 +1,60 @@
 <template>
   <div>
-    <borderTemplate borderBox="width: 33.333vw;height: 35.417vw;" title="销售漏斗" detailTitle="查看详情"></borderTemplate>
+    <borderTemplate borderBox="width: 33.333vw;height: 35.417vw;" title="销售漏斗" detailTitle="查看详情">
+      <template slot="content">
+        <div style="display: flex;justify-content: space-between">
+          <div>
+            <el-checkbox v-model="param.content.where.unfinish">包含失败、结案项目</el-checkbox>
+          </div>
+          <div>
+            <el-select v-model="param.content.dateType"  class="inline-16" size="small" @change="listData" :popper-append-to-body="false">
+              <el-option :label="$t('全部')" value="全部"></el-option>
+              <el-option :label="$t('本年')" value="本年"></el-option>
+              <el-option :label="$t('本季')" value="本季"></el-option>
+              <el-option :label="$t('本月')" value="本月"></el-option>
+              <el-option :label="$t('去年')" value="去年"></el-option>
+            </el-select>
+          </div>
+        </div>
+        <div>
+          <funnelBox style="margin-top: 0.625vw;" v-for="(item,index) in colorSet"  :key="item.index" :width="width - (index * 1.042)" :background="item"></funnelBox>
+        </div>
+      </template>
+    </borderTemplate>
   </div>
 </template>
 
 <script>
 import borderTemplate from '../components/borderTemplate'
+import funnelBox from "../components/funnelBox";
 export default {
   name: "salesFunnel",
-  components:{borderTemplate}
+  components:{borderTemplate,funnelBox},
+  data(){
+    return {
+      param:{
+        id:20230630151504,
+        content:{
+          dataid:'',
+          dateType:'',
+          type:"",
+          where:{
+            isleave:'1',
+            unfinish:''
+          }
+        }
+      },
+      list:[],
+      width:'23.958',
+      colorSet:['#40DCF2','#3685FC','#7367F2','#6CD2A1','#ECB937','#EC6D37']
+    }
+  },
+  methods:{
+    async listData(){
+      const res = await this.$api.requested(this.param)
+      this.list = res.data
+    }
+  }
 }
 </script>
 

+ 297 - 76
src/HManagement/serviceDataScreen/modules/salesPanel.vue

@@ -5,24 +5,24 @@
         <div class="justify-content">
           <div class="justify-content-left">
             <div class="box-border">
-              <el-button v-if="typeSelect == '订单'" type="primary" class="btn-select" @click="typeChange('订单')">订单</el-button>
-              <el-button type="text" v-else class="btn-unSelect" @click="typeChange('订单')">订单</el-button>
+              <el-button v-if="typeSelect == '订单'" type="primary" class="btn-select" @click="typeChange('订单')">{{$t(`订单`)}}</el-button>
+              <el-button type="text" v-else class="btn-unSelect" @click="typeChange('订单')">{{$t(`订单`)}}</el-button>
             </div>
             <div class="box-border">
-              <el-button type="primary" v-if="typeSelect == '出货'" class="btn-select" @click="typeChange('出货')">出货</el-button>
-              <el-button type="text" class="btn-unSelect" v-else @click="typeChange('出货')">出货</el-button>
+              <el-button type="primary" v-if="typeSelect == '出货'" class="btn-select" @click="typeChange('出货')">{{$t(`出货`)}}</el-button>
+              <el-button type="text" class="btn-unSelect" v-else @click="typeChange('出货')">{{$t(`出货`)}}</el-button>
             </div>
             <div class="box-border">
-              <el-button type="primary" v-if="typeSelect == '开票'" class="btn-select" @click="typeChange('开票')">开票</el-button>
-              <el-button type="text" class="btn-unSelect" v-else @click="typeChange('开票')">开票</el-button>
+              <el-button type="primary" v-if="typeSelect == '开票'" class="btn-select" @click="typeChange('开票')">{{$t(`开票`)}}</el-button>
+              <el-button type="text" class="btn-unSelect" v-else @click="typeChange('开票')">{{$t(`开票`)}}</el-button>
             </div>
             <div class="box-border">
-              <el-button type="primary" v-if="typeSelect == '回款'" class="btn-select" @click="typeChange('回款')">回款</el-button>
-              <el-button type="text" class="btn-unSelect" v-else @click="typeChange('回款')">回款</el-button>
+              <el-button type="primary" v-if="typeSelect == '回款'" class="btn-select" @click="typeChange('回款')">{{$t(`回款`)}}</el-button>
+              <el-button type="text" class="btn-unSelect" v-else @click="typeChange('回款')">{{$t(`回款`)}}</el-button>
             </div>
           </div>
           <div>
-            <el-select v-model="param.content.dateType" clearable class="inline-16" size="small" @change="listData" :popper-append-to-body="false">
+            <el-select v-model="param.content.dateType" class="inline-16" size="small" @change="listData" :popper-append-to-body="false">
               <el-option :label="$t('去年')" value="去年"></el-option>
               <el-option :label="$t('本年')" value="本年"></el-option>
               <el-option :label="$t('本季')" value="本季"></el-option>
@@ -35,17 +35,71 @@
             <el-progress
                 color="#6395fa"
                 type="circle"
-                :percentage="50"
+                :percentage="percentage"
                 :stroke-width="15"
                 :width="progressWidth"
                 :format="format"
             ></el-progress>
           </div>
-          <div>
+          <div class="content-style-content">
+            <div class="font1">
+              {{$t(`实际金额(元)`)}}
+            </div>
+            <div>
+              <span class="font2">
+                <span v-if="list.amount > 10000">
+                  {{tool.formatAmount(tool.unitConversion(list.amount, 10000), 2)}}
+                  <span class="font3">{{$t(`万`)}}</span>
+                </span>
+                <span v-else>
+                  {{tool.formatAmount(tool.unitConversion(list.amount, 10000), 2)}}
+                </span>
+              </span>
+            </div>
+            <div>
+              <span class="font4">{{$t(`年同比`)}}:</span>
+              <span class="font5" style="margin-right: 0.417vw">{{ Math.round(list.tbxsje * 100 * 100) / 100 }}%</span>
+              <img style="vertical-align: middle" v-if="list.tbxsje > 0" width="8" height="7" src="../../../assets/icons/up.png" alt="">
+              <img style="vertical-align: middle" v-if="list.tbxsje < 0" width="8" height="7" src="../../../assets/icons/down.png" alt="">
+              <span class="font4" style="margin-left:1.042vw ">{{$t(`年环比`)}}:</span>
+              <span class="font5" style="margin-right: 0.417vw">{{ Math.round(list.hbxsje * 100 * 100) / 100 }}%</span>
+              <img style="vertical-align: middle" v-if="list.hbxsje > 0" width="8" height="7" src="../../../assets/icons/up.png" alt="">
+              <img style="vertical-align: middle" v-if="list.hbxsje < 0" width="8" height="7" src="../../../assets/icons/down.png" alt="">
+            </div>
+            <div class="font1" style="margin-top:1.042vw ">
+              {{$t(`目标金额(元)`)}}
+            </div>
+            <div>
+              <span class="font6">
+                <span v-if="list.target_l > 10000">
+                  {{tool.formatAmount(tool.unitConversion(list.target_l, 10000), 2)}}
+                  <span class="font7">{{$t(`万`)}}</span>
+                </span>
+                <span v-else>
+                  {{tool.formatAmount(tool.unitConversion(list.target_l, 10000), 2)}}
+                </span>
+              </span>
+            </div>
             <div>
+              <span class="font4">{{$t(`目标达成率`)}}:</span>
+              <span class="font5">{{ Math.round((list.wcamount * 100)* 100) / 100 }}%</span>
+              <span class="font4" style="margin-left:0.842vw">{{$t(`实际与目标差额`)}}:</span>
+              <span class="font5" >
+                <span v-if="list.unamount > 10000">
+                  {{tool.formatAmount(tool.unitConversion(list.unamount, 10000), 2)}}
+                  <span class="font5">{{$t(`万元`)}}</span>
+                </span>
+                <span v-else>
+                  {{tool.formatAmount(tool.unitConversion(list.unamount, 10000), 2)}}
+                   <span class="font5">{{$t(`元`)}}</span>
+                </span>
+              </span>
             </div>
           </div>
         </div>
+        <div>
+          <div id="salesPanelChart"></div>
+        </div>
       </template>
     </borderTemplate>
   </div>
@@ -53,12 +107,14 @@
 
 <script>
 import borderTemplate from '../components/borderTemplate'
+import {DualAxes} from "@antv/g2plot";
 export default {
   name: "salesPanel",
   components:{borderTemplate},
   data(){
     return {
       typeSelect:'订单',
+      chartCustomerLine:null,
       param:{
         id:20231009125304,
         content:{
@@ -73,14 +129,31 @@ export default {
       },
       list:'',
       windowWidth: document.documentElement.clientWidth, //实时屏幕宽度
-      progressWidth: (9.65 * document.documentElement.clientWidth) / 100
+      progressWidth: (9.65 * document.documentElement.clientWidth) / 100,
+      percentage:0,
+      paramChart:{
+        "id": 20241009093604,
+        "content": {
+          "type": '',
+          "dataid": '',
+          "year": 2024,
+          "datatype": 1,
+          "where": {
+            "isleave": ""
+          }
+        }
+      },
+      saledateRows:[],
+      tbzzl:[],
     }
   },
   methods:{
     async listData(){
       const res = await this.$api.requested(this.param)
       this.list = res.data
+      this.percentage = Math.round(this.list.wcamount * 100 * 100) / 100;
       console.log(this.list,'销售看板')
+      this.renderPie()
     },
     typeChange(val){
       if (val == '订单'){
@@ -99,77 +172,225 @@ export default {
       this.listData()
     },
     format(percentage) {
-      return this.$t("目标达成率") + "\n\n" + percentage + "%";
+      return this.$t("目标达成率") + '\n\n' + percentage + "%";
+    },
+    /*渲染图表*/
+    async queryModel(){
+      const res = await this.$api.requested(this.paramChart)
+      this.saledateRows = res.data.saledateRows
+      let lastYear = []
+      let nowYear = []
+      let k=0
+      for (var i=0;i<res.data.saledateRows.length;i++){
+        if (res.data.saledateRows[i].name === '去年同期金额'){
+          lastYear[k]=res.data.saledateRows[i]
+          k++
+        }
+      }
+      let x=0
+      for (var i=0;i<res.data.saledateRows.length;i++){
+        if (res.data.saledateRows[i].name === '本年金额'){
+          nowYear[x]=res.data.saledateRows[i]
+          x++
+        }
+      }
+      let saledateRows = nowYear.concat(lastYear)
+      this.saledateRows = saledateRows.map((item)=>{
+        let value = item.value/10000
+        return {
+          "date":item.date,
+          "name":item.name + '(万元)',
+          "value":value
+          /*"value":item.value*/
+        }
+      })
+      this.tbzzl = res.data.tbzzlRows.map((item)=>{
+        return {
+          "date":item.date,
+          "name":item.name,
+          "value":Math.round(((item.value *100)*100)/100)
+        }
+      })
+      this.chartCustomerLine.changeData([this.saledateRows,this.tbzzl])
+    },
+    renderPie(){
+      this.chartCustomerLine = new DualAxes('salesPanelChart', {
+        data: [this.saledateRows,this.tbzzl],
+        xField: 'date',
+        yField: ['value','value'],
+        geometryOptions: [
+          {
+            geometry: 'column',
+            isGroup: true,
+            seriesField: 'name',
+            color:['#3685FC','#6CD2A1'],
+            label:{
+              position:top,
+              formatter: (datum) =>{
+                return '¥' + this.tool.formatAmount(datum.value,2)
+              }
+            }
+          },
+          {
+            geometry: 'line',
+            seriesField: 'name',
+            color: '#ECB937',
+            smooth: true,
+            label:{
+              formatter: (datum) =>{
+                return  datum.value + '%'
+              }
+            }
+          },
+        ],
+        tooltip: {
+          formatter: (datum) => {
+            return {
+              name:datum.name,
+              value:datum.name != '同比增长率'?'¥'+this.tool.formatAmount(datum.value,2):datum.value + '%'
+            }
+          }
+        }
+      });
+      this.chartCustomerLine.render();
+      this.queryModel()
     },
   },
-  // watch:{
-  //   windowWidth (val) {
-  //     console.log("当前屏幕宽度1111:",val );
-  //   },
-  // },
-  // mounted() {
-  //   var that = this;
-  //   // <!--把window.onresize事件挂在到mounted函数上-->
-  //   window.onresize = () => {
-  //     return (() => {
-  //       window.fullWidth = document.documentElement.clientWidth;
-  //       that.windowWidth = window.fullWidth; // 宽
-  //       console.log(that.windowWidth,'333333pingm')
-  //     })();
-  //   };
-  // }
 }
 </script>
-
-<style scoped>
-  .justify-content{
-    display: flex;
-    justify-content: space-between;
-    margin-top: 1.042vw;
-  }
-  .justify-content-left{
-    display: flex;
-    justify-content: left;
-  }
-  .justify-content-left .box-border{
-    width: 3.125vw;
-    height: 1.563vw;
-    border-radius: 0.104vw 0.104vw 0.104vw 0.104vw;
-    margin-right: 0.521vw;
-    text-align: center;
-  }
-  .justify-content-left .box-border .btn-select{
-    font-family: Microsoft YaHei, Microsoft YaHei;
-    font-weight: 400;
-    font-size: 0.833vw;
-    color: #E6F4FF;
-    font-style: normal;
-    text-transform: none;
-  }
-  .justify-content-left .box-border .btn-unSelect{
-    font-family: Microsoft YaHei, Microsoft YaHei;
-    font-weight: 400;
-    font-size: 0.729vw;
-    color: #CFDCE5;
-    font-style: normal;
-    text-transform: none;
-    text-align: center;
-  }
-  .content-style-pie{
-    width: 29.167vw;
-    height: 11.458vw;
-    background: #001E41;
-    box-shadow: 0.000vw 0.156vw 0.313vw 0.052vw rgba(0,0,0,0.16);
-    border-radius: 5.729vw 5.729vw 0.313vw 5.729vw;
-    border: 0.052vw solid #CFDCE5;
-    margin-top: 1.042vw;
-    box-sizing: border-box;
-    display: flex;
-    justify-content: space-between;
-  }
+<style>
+.justify-content{
+  display: flex;
+  justify-content: space-between;
+  margin-top: 1.042vw;
+}
+.justify-content-left{
+  display: flex;
+  justify-content: left;
+}
+.justify-content-left .box-border{
+  width: 3.125vw;
+  height: 1.563vw;
+  border-radius: 0.104vw 0.104vw 0.104vw 0.104vw;
+  margin-right: 0.521vw;
+  text-align: center;
+}
+.justify-content-left .box-border .btn-select{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.833vw;
+  color: #E6F4FF;
+  font-style: normal;
+  text-transform: none;
+}
+.justify-content-left .box-border .btn-unSelect{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.729vw;
+  color: #CFDCE5;
+  font-style: normal;
+  text-transform: none;
+  text-align: center;
+}
+.content-style-pie{
+  width: 29.167vw;
+  height: 11.458vw;
+  background: #001E41;
+  box-shadow: 0.000vw 0.156vw 0.313vw 0.052vw rgba(0,0,0,0.16);
+  border-radius: 5.729vw 5.729vw 0.313vw 5.729vw;
+  border: 0.052vw solid #CFDCE5;
+  margin-top: 1.042vw;
+  box-sizing: border-box;
+  display: flex;
+  justify-content: left;
+}
+.content-style-content{
+  margin-top: 0.917vw;
+  margin-left: 4.250vw;
+}
+.content-style-content .font1{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.938vw;
+  color: #CFDCE5;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.content-style-content .font2{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: bold;
+  font-size: 1.250vw;
+  color: #6CD2A1;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.content-style-content .font3{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: bold;
+  font-size: 0.625vw;
+  color: #6CD2A1;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.content-style-content .font4{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.625vw;
+  color: #CFDCE5;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.content-style-content .font5{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: 400;
+  font-size: 0.625vw;
+  color: #E6F4FF;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.content-style-content .font6{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: bold;
+  font-size: 1.250vw;
+  color: #FFFFFF;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.content-style-content .font7{
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: bold;
+  font-size: 0.625vw;
+  color: #FFFFFF;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+</style>
+<style  scoped>
+/deep/ .el-progress__text {
+  position: absolute;
+  top: 50%; /* 设置垂直居中 */
+  left: 50%;
+  transform: translateX(-50%) translateY(-50%); /* 移动到圆环中心 */
+  font-family: Microsoft YaHei, Microsoft YaHei;
+  font-weight: bold;
+  font-size: 0.833vw !important;
+  color: #E6F4FF;
+  font-style: normal;
+  text-transform: none;
+}
   /deep/ .el-button--primary:focus, .el-button--primary:hover {
     background: #6090f8;
     border-color: #6090f8;
     color: #6090f8;
   }
+  /deep/ .element.style {
+    font-size: 15.9386px;
+  }
 </style>

+ 9 - 0
src/assets/icons/Tips.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+  <g id="组_78" data-name="组 78" transform="translate(-1435 -625)">
+    <g id="椭圆_8" data-name="椭圆 8" transform="translate(1435 625)" fill="none" stroke="#e6f4ff" stroke-width="1">
+      <circle cx="6" cy="6" r="6" stroke="none"/>
+      <circle cx="6" cy="6" r="5.5" fill="none"/>
+    </g>
+    <text id="_" data-name="?" transform="translate(1439 634)" fill="#e6f4ff" font-size="8" font-family="MicrosoftYaHei-Bold, Microsoft YaHei" font-weight="700"><tspan x="0" y="0">?</tspan></text>
+  </g>
+</svg>

BIN
src/assets/icons/down.png


+ 3 - 0
src/assets/icons/home.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16.053" viewBox="0 0 16 16.053">
+  <path id="首页" d="M115.526,104.261l6.175,4.432a2.316,2.316,0,0,1,.965,1.881v7.147a2.316,2.316,0,0,1-2.316,2.316h-3.158V116.67a2.526,2.526,0,0,0-5.053,0v3.368h-3.158a2.316,2.316,0,0,1-2.316-2.316v-7.147a2.316,2.316,0,0,1,.965-1.881l6.175-4.432a1.474,1.474,0,0,1,1.719,0Z" transform="translate(-106.667 -103.985)" fill="#e6f4ff"/>
+</svg>

+ 6 - 0
src/assets/icons/toNext.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="7.071" height="11.314" viewBox="0 0 7.071 11.314">
+  <g id="组_25" data-name="组 25" transform="translate(-576.586 -189.343)">
+    <rect id="矩形_18" data-name="矩形 18" width="8" height="2" rx="1" transform="translate(576.586 199.243) rotate(-45)" fill="#cfdce5"/>
+    <rect id="矩形_19" data-name="矩形 19" width="8" height="2" rx="1" transform="translate(578 189.343) rotate(45)" fill="#cfdce5"/>
+  </g>
+</svg>

BIN
src/assets/icons/up.png


+ 12 - 12
src/views/clueData/modules/digitalSigns.vue

@@ -94,9 +94,9 @@
         </div>
         <div class="item div-click" @click="onClick('线索成交数')">
           <p class="title">{{ list.dealqty }}</p>
-          <span class="content-font-new">线索成交数</span>
+          <span class="content-font-new">{{$t(`线索成交数`)}}</span>
           <el-tooltip placement="top">
-            <div slot="content">线索成交数:转化后有下订单的线索数量</div>
+            <div slot="content">{{$t(`线索成交数:转化后有下订单的线索数量`)}}</div>
             <img style="vertical-align: middle" width="14px" height="14px" src="../../../assets/icons/prompt_icon.svg" >
           </el-tooltip>
         </div>
@@ -110,41 +110,41 @@
         </div>
         <div class="item div-click" @click="onClick('参与线索数')">
           <p class="title">{{ list.joinordercluesize }}</p>
-          <span class="content-font-new">参与线索数</span>
+          <span class="content-font-new">{{$t(`参与线索数`)}}</span>
           <el-tooltip placement="top">
-            <div slot="content">参与线索数:参与的并且至少有一次跟进的线索数量</div>
+            <div slot="content">{{$t(`参与线索数:参与的并且至少有一次跟进的线索数量`)}}</div>
             <img style="vertical-align: middle" width="14px" height="14px" src="../../../assets/icons/prompt_icon.svg" >
           </el-tooltip>
         </div>
         <div class="item div-click" @click="onClick('参与线索转化数')">
           <p class="title">{{ list.joincoverorderclue }}</p>
-          <span class="content-font-new">参与线索转化数</span>
+          <span class="content-font-new">{{$t(`参与线索转化数`)}}</span>
           <el-tooltip placement="top">
-            <div slot="content">参与线索转化数:参与的并且至少有一次跟进的有发生转化的线索数量</div>
+            <div slot="content">{{$t(`参与线索转化数:参与的并且至少有一次跟进的有发生转化的线索数量`)}}</div>
             <img style="vertical-align: middle" width="14px" height="14px" src="../../../assets/icons/prompt_icon.svg" >
           </el-tooltip>
         </div>
         <div class="item">
           <p class="title">{{ Math.round(((list.joinordercluezhl*100)*100)/100) }}%</p>
-          <span class="content-font-new">参与线索转化率</span>
+          <span class="content-font-new">{{$t(`参与线索转化率`)}}</span>
           <el-tooltip placement="top">
-            <div slot="content">参与线索转化率=参与线索转化数 ÷ 参与线索数 ×100%</div>
+            <div slot="content">{{$t(`参与线索转化率=参与线索转化数 ÷ 参与线索数 ×100%`)}}</div>
             <img style="vertical-align: middle" width="14px" height="14px" src="../../../assets/icons/prompt_icon.svg" >
           </el-tooltip>
         </div>
         <div class="item div-click" @click="onClick('参与线索成交数')">
           <p class="title">{{ list.joindealorderclue }}</p>
-          <span class="content-font-new">参与线索成交数</span>
+          <span class="content-font-new">{{$t(`参与线索成交数`)}}</span>
           <el-tooltip placement="top">
-            <div slot="content">参与线索成交数:参与的并且至少有一次跟进的转化后有下订单的线索数量</div>
+            <div slot="content">{{$t(`参与线索成交数:参与的并且至少有一次跟进的转化后有下订单的线索数量`)}}</div>
             <img style="vertical-align: middle" width="14px" height="14px" src="../../../assets/icons/prompt_icon.svg" >
           </el-tooltip>
         </div>
         <div class="item">
           <p class="title">{{ Math.round(((list.joinordercluecjl*100)*100)/100) }}%</p>
-          <span class="content-font-new">参与线索成交率</span>
+          <span class="content-font-new">{{$t(`参与线索成交率`)}}</span>
           <el-tooltip placement="top">
-            <div slot="content">参与线索成交率=参与线索成交率 ÷ 参与线索数 ×100%</div>
+            <div slot="content">{{$t(`参与线索成交率=参与线索成交率 ÷ 参与线索数 ×100%`)}}</div>
             <img style="vertical-align: middle" width="14px" height="14px" src="../../../assets/icons/prompt_icon.svg" >
           </el-tooltip>
         </div>