Bladeren bron

画像调整

qymljy 1 jaar geleden
bovenliggende
commit
74960e4071

+ 1 - 1
src/HDrpManagement/customerPortrait/modules/detail.vue

@@ -112,7 +112,7 @@
                   </span>
                   <span v-else>--</span>
                 </p>
-                <div v-else style="text-wrap:wrap">
+                <div v-else style="text-wrap: wrap;word-wrap: break-word;white-space: normal;">
                   {{ scope.data.data[scope.data.columnname] || '--' }}
                 </div>
               </template>

+ 1 - 1
src/HDrpManagement/projectPortrait/modules/detail.vue

@@ -143,7 +143,7 @@
                   </span>
                   <span v-else>--</span>
                 </p>
-                <div v-else style="text-wrap:wrap">
+                <div v-else style="text-wrap:wrap;word-wrap: break-word;white-space: normal;">
                   {{ scope.data.data[scope.data.columnname] || '--' }}
                 </div>
               </template>

+ 17 - 10
src/HDrpManagement/salerPortrait/modules/detail.vue

@@ -42,13 +42,13 @@
               <myRadio :value1="param1.content" key1="type" @clickBtn="getPerformance" :btnOptions="[{label:'本年',value:3},{label:'本季',value:2},{label:'本月',value:1}]">
               </myRadio>
             </div>
-            <myCard
+            <myNewCard
               :list="
               [
-                {custom:'dingdan',data:performance,title:'订单目标',value2descript:'差额',value:performance.orderCR,value2:unitCompile(performance.amount - performance.target_l),bg:'#F3F9FC',color:'#3874F6'},
-                {custom:'chuhuo',data:performance,title:'出货目标',value2descript:'差额',value:performance.outOrderCR,value2:unitCompile(performance.outamount - performance.target_l),bg:'#E8F7EC',color:'#00B32B'},
-                {custom:'kaipiao',data:performance,title:'开票目标',value2descript:'差额',value:performance.invCR,value2:unitCompile(performance.invoiceamount - performance.target_l),bg:'#F9F2E5',color:'#FF7603'},
-                {title:'回款金额',value:unitCompile(performance.writeoffamount || 0),bg:'#FDF3F3',color:'#E85B5B'},
+                {custom:'dingdan',data:performance,title:'订单',titleRate:'目标达成率',value2descript:'差额',value:performance.orderCR,value2:unitCompile(performance.amount - performance.target_l),bg:'#F3F9FC',color:'#3874F6'},
+                {custom:'chuhuo',data:performance,title:'出货',titleRate:'目标达成率',value2descript:'差额',value:performance.outOrderCR,value2:unitCompile(performance.outamount - performance.target_l),bg:'#E8F7EC',color:'#00B32B'},
+                {custom:'kaipiao',data:performance,title:'开票',titleRate:'目标达成率',value2descript:'差额',value:performance.invCR,value2:unitCompile(performance.invoiceamount - performance.target_l),bg:'#F9F2E5',color:'#FF7603'},
+                {custom:'huikuan',data:performance,title:'回款',titleRate:'目标达成率',value2descript:'差额',value:performance.writeoffCR,value2:unitCompile(performance.writeoffamount - performance.target_l),bg:'#FDF3F3',color:'#E85B5B'},
               ]"
             >
               <template v-slot:dingdan="scope">
@@ -69,7 +69,13 @@
                     <p :style="[{'font-size':'18px'},{color:scope.data.color},{'font-weight':'bold'}]">{{ unitCompile(scope.data.data.invoiceamount || 0) }}/{{ unitCompile(scope.data.data.target_l || 0) }}</p>
                   </div>
               </template>
-            </myCard>
+              <template v-slot:huikuan="scope">
+                <div>
+                  <p style="font-size:14px">实际/目标</p>
+                  <p :style="[{'font-size':'18px'},{color:scope.data.color},{'font-weight':'bold'}]">{{ unitCompile(scope.data.data.writeoffamount  || 0) }}/{{ unitCompile(scope.data.data.target_l || 0) }}</p>
+                </div>
+              </template>
+            </myNewCard>
           </el-card>
         </div>
 
@@ -190,7 +196,7 @@
               :custom="true"
             >
               <template v-slot:custom="scope">
-                <div style="text-wrap:wrap">
+                <div style="text-wrap:wrap;word-wrap: break-word;white-space: normal;">
                   {{ scope.data.data[scope.data.columnname] }}
                 </div>
               </template>
@@ -259,7 +265,7 @@
                   </span>
                   <span v-else>--</span>
                 </p>
-                <div v-else style="text-wrap:wrap">
+                <div v-else style="text-wrap:wrap;word-wrap: break-word;white-space: normal;">
                   {{ scope.data.data[scope.data.columnname] || '--' }}
                 </div>
               </template>
@@ -332,7 +338,7 @@
                   </span>
                   <span v-else>--</span>
                 </p>
-                <div v-else style="text-wrap:wrap">
+                <div v-else style="text-wrap:wrap;word-wrap: break-word;white-space: normal;">
                   {{ scope.data.data[scope.data.columnname] || '--' }}
                 </div>
               </template>
@@ -441,11 +447,12 @@
 import pageTable from '@/HDrpManagement/customerPortrait/modules/pageTable'
 import showIsNone from '@/HDrpManagement/customerPortrait/modules/showIsNone'
 import myCard from '@/HDrpManagement/customerPortrait/modules/myCrad'
+import myNewCard from './myNewCrad'
 import myTag from '@/HDrpManagement/customerPortrait/modules/myTag'
 import myRadio from '@/HDrpManagement/customerPortrait/modules/myRadio'
 export default {
   name: "index",
-  components:{showIsNone,pageTable,myCard,myTag,myRadio},
+  components:{showIsNone,pageTable,myCard,myTag,myRadio,myNewCard},
   props:['data'],
   data() {
     return {

+ 827 - 0
src/HDrpManagement/salerPortrait/modules/detailCopy.vue

@@ -0,0 +1,827 @@
+<template>
+  <el-drawer append-to-body :visible.sync="dialogFormVisible" size="97%">
+    <div class="Mcontainer">
+      <div style="background:#ffffff;padding:10px" v-if="Object.keys(baseInfo).length">
+        <div class="Mcontainer-header">
+          <div class="Mcontainer-header__left">
+            <div style="width:60px;height: 60px;background:#F3F9FC;border-radius:10px;padding:10px">
+              <img src="@/assets/saler.svg" style="width:100%;height:100%" alt="">
+            </div>
+            <div class="account">
+              <p class="normal-title" style="font-size:18px">
+                <el-tooltip class="item" effect="dark" :content="baseInfo.projectname" placement="top">
+                  <p>{{ baseInfo.name }}</p>
+                </el-tooltip>
+              </p>
+              <div class="Mtag">
+                <el-tag size="small" v-for="(item,index) in baseInfo.sys_tag" :key="index" style="margin-right:10px">{{ item }}</el-tag>
+              </div>
+            </div>
+          </div>
+          <div class="Mcontainer-header__right">
+            <el-descriptions class="margin-top">
+              <el-descriptions-item label="编号">{{ baseInfo.hrcode }}</el-descriptions-item>
+              <el-descriptions-item label="部门">{{ baseInfo.depname }}</el-descriptions-item>
+              <el-descriptions-item label="手机号">{{ baseInfo.phonenumber }}</el-descriptions-item>
+              <el-descriptions-item label="营销区域"> {{ baseInfo.areaname }}</el-descriptions-item>
+              <el-descriptions-item label="登录账号">{{ baseInfo.accountno }}</el-descriptions-item>
+              <el-descriptions-item label="职位">{{ baseInfo.position }}</el-descriptions-item>
+              <el-descriptions-item label="邮箱"> {{ baseInfo.email }}</el-descriptions-item>
+              <el-descriptions-item label="最低授权折扣"><span style="color:#E85B5B;font-size:16px;font-weight:bold">{{ baseInfo.discountrate * 100 + '%' }}</span></el-descriptions-item>
+              <el-descriptions-item label="状态"> {{ +baseInfo.status ? '离职' : '在职' }}</el-descriptions-item>
+            </el-descriptions>
+          </div>
+        </div>
+      </div>
+      <div v-if="data" style="padding: 0 10px;">
+        <!--业绩-->
+        <div class="Mproject" style="margin-top:10px">
+          <el-card class="box-card">
+            <div slot="header">
+              <span class="myTitle">业绩</span>
+              <myRadio :value1="param1.content" key1="type" @clickBtn="getPerformance" :btnOptions="[{label:'本年',value:3},{label:'本季',value:2},{label:'本月',value:1}]">
+              </myRadio>
+            </div>
+            <myCard
+              :list="
+              [
+                {custom:'dingdan',data:performance,title:'订单目标',value2descript:'差额',value:performance.orderCR,value2:unitCompile(performance.amount - performance.target_l),bg:'#F3F9FC',color:'#3874F6'},
+                {custom:'chuhuo',data:performance,title:'出货目标',value2descript:'差额',value:performance.outOrderCR,value2:unitCompile(performance.outamount - performance.target_l),bg:'#E8F7EC',color:'#00B32B'},
+                {custom:'kaipiao',data:performance,title:'开票目标',value2descript:'差额',value:performance.invCR,value2:unitCompile(performance.invoiceamount - performance.target_l),bg:'#F9F2E5',color:'#FF7603'},
+                {title:'回款金额',value:unitCompile(performance.writeoffamount || 0),bg:'#FDF3F3',color:'#E85B5B'},
+              ]"
+            >
+              <template v-slot:dingdan="scope">
+                  <div>
+                    <p style="font-size:14px">实际/目标</p>
+                    <p :style="[{'font-size':'18px'},{color:scope.data.color},{'font-weight':'bold'}]">{{ unitCompile(scope.data.data.amount || 0) }}/{{ unitCompile(scope.data.data.target_l || 0) }}</p>
+                  </div>
+              </template>
+              <template v-slot:chuhuo="scope">
+                  <div>
+                    <p style="font-size:14px">实际/目标</p>
+                    <p :style="[{'font-size':'18px'},{color:scope.data.color},{'font-weight':'bold'}]">{{ unitCompile(scope.data.data.outamount || 0) }}/{{ unitCompile(scope.data.data.target_l || 0) }}</p>
+                  </div>
+              </template>
+              <template v-slot:kaipiao="scope">
+                  <div>
+                    <p style="font-size:14px">实际/目标</p>
+                    <p :style="[{'font-size':'18px'},{color:scope.data.color},{'font-weight':'bold'}]">{{ unitCompile(scope.data.data.invoiceamount || 0) }}/{{ unitCompile(scope.data.data.target_l || 0) }}</p>
+                  </div>
+              </template>
+            </myCard>
+          </el-card>
+        </div>
+
+        <!--订单-->
+        <div class="Mproject" style="margin-top:10px">
+          <el-card class="box-card">
+            <div slot="header">
+              <span class="myTitle">订单</span>
+              <myRadio :value1="param2.content" key1="isAll" @clickBtn="refreshTable('param2','dingdan')" :btnOptions="[{label:'全部',value:1},{label:'本年',value:0}]">
+              </myRadio>
+              <el-select style="margin-left:24px" v-model="param2.content.where.type" clearable size="mini" placeholder="请选择订单类型" @change="typeChange('param2','dingdan')">
+                <el-option label="全部" value=""></el-option>
+                <el-option :label="item.value" :value="item.value" v-for="(item,index) in orderTypeList" :key="index"></el-option>
+              </el-select>
+            </div>
+            <myCard
+              :list="
+              [
+                {title:'订单数量',value:$refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].allOrderQty,bg:'#F3F9FC',color:'#3874F6'},
+                {title:'订单总金额',value:unitCompile($refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].allAmount || 0),bg:'#E8F7EC',color:'#78B32B'},
+                {title:'订单回款金额',value:unitCompile($refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].cashbillAmount || 0),bg:'#F9F2E5',color:'#FF7603'},
+                {title:'订单未出货金额',value:unitCompile($refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].allunAmount || 0),bg:'#FDF3F3',color:'#E85B5B'},
+                {title:'已出货未开票金额',value:unitCompile($refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].alluninvoicamount || '0'),bg:'#F9F2E5',color:'#FF7603'},
+                {title:'已开票未回款金额',value:unitCompile($refs.dingdan && $refs.dingdan.list && $refs.dingdan.list[0] && $refs.dingdan.list[0].allunwriteoffamount || '0'),bg:'#FDF3F3',color:'#E85B5B'},
+              ]"
+            ></myCard>
+            <showIsNone title="订单明细">
+              <div style="float: right;margin-bottom: 10px;margin-top: -40px">
+                <el-button-group>
+                  <el-button :type="param2.content.sort[0].sortid == '174'?'primary':''"  size="mini" @click="sortChange('订单')">订单</el-button>
+                  <el-button :type="param2.content.sort[0].sortid == '175'?'primary':''"  size="mini" @click="sortChange('出货')">出货</el-button>
+                  <el-button :type="param2.content.sort[0].sortid == '176'?'primary':''"  size="mini" @click="sortChange('开票')">开票</el-button>
+                  <el-button :type="param2.content.sort[0].sortid == '177'?'primary':''"  size="mini" @click="sortChange('回款')">回款</el-button>
+                </el-button-group>
+                <img v-if="param2.content.sort[0].reversed == 0" @click="upSort('down')" width="28" height="28" src="../../../assets/icons/upSort.svg" alt="" style="vertical-align: middle;margin-left: 10px;">
+                <img v-if="param2.content.sort[0].reversed == 1" @click="upSort('up')" width="28" height="28" src="../../../assets/icons/downSort.svg" alt="" style="vertical-align: middle;margin-left: 10px;">
+              </div>
+              <div>
+
+              </div>
+
+              <pageTable
+                ref="dingdan"
+                :tablecols="tool.tabelCol($route.name).orderTable.tablecols"
+                :param="param2"
+                :custom="true"
+              >
+                <template v-slot:custom="scope">
+                  <div v-if="scope.data.columnname == 'sumamount'">
+                    {{scope.data.data.sumamount && tool.formatAmount(scope.data.data.sumamount || 0,2,'¥')  }}
+                  </div>
+                  <div v-else-if="scope.data.columnname == 'writeoffamount'">
+                    <span :style="{color:param2.content.sort[0].sortid == '177'?'#3874F6':''}">{{scope.data.data.writeoffamount && tool.formatAmount(scope.data.data.writeoffamount || 0,2,'¥')  }}</span>
+                  </div>
+                  <div v-else-if="scope.data.columnname == 'unoutOrderamount'">
+                    <span :style="{color:param2.content.sort[0].sortid == '174'?'#3874F6':''}">{{scope.data.data.unoutOrderamount && tool.formatAmount(scope.data.data.unoutOrderamount || 0,2,'¥')  }}</span>
+                  </div>
+                  <div v-else-if="scope.data.columnname == 'uninvoicamount'">
+                    <span :style="{color:param2.content.sort[0].sortid == '175'?'#3874F6':''}">{{scope.data.data.uninvoicamount && tool.formatAmount(scope.data.data.uninvoicamount || 0,2,'¥')  }}</span>
+                  </div>
+                  <div v-else-if="scope.data.columnname == 'unwriteoffamount'">
+                    <span :style="{color:param2.content.sort[0].sortid == '176'?'#3874F6':''}">{{scope.data.data.unwriteoffamount && tool.formatAmount(scope.data.data.unwriteoffamount || 0,2,'¥')  }}</span>
+                  </div>
+                  <div v-else>
+                    {{ scope.data.data[scope.data.columnname] }}
+                  </div>
+                </template>
+              </pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+        <!--销售线索-->
+        <div class="Mfollow">
+          <el-card class="box-card">
+            <div slot="header">
+              <span class="myTitle">销售线索</span>
+              <myRadio :value1="param3.content" key1="type" @clickBtn="refreshTable('param3','xiansuo');param8.content.type=param3.content.type;refreshTable('param8','fllow')" :btnOptions="[{label:'本年',value:3},{label:'本季',value:2},{label:'本月',value:1}]">
+              </myRadio>
+            </div>
+            <myCard
+              :list="
+              [
+                {title:'线索数',value:$refs.xiansuo && $refs.xiansuo.list[0] && $refs.xiansuo.list[0].orderclueSize,bg:'#F3F9FC',color:'#3874F6'},
+                {title:'新增线索数',value:$refs.xiansuo && $refs.xiansuo.list[0] && $refs.xiansuo.list[0].insertOrderclue,bg:'#E8F7EC',color:'#78B32B'},
+                {title:'线索转化率',value:$refs.xiansuo && $refs.xiansuo.list[0] && $refs.xiansuo.list[0].ordercluezhl,bg:'#F9F2E5',color:'#FF7603'},
+                {title:'跟进次数',value:$refs.fllow && $refs.fllow.list[0] && $refs.fllow.list[0].followSize,bg:'#F3F9FC',color:'#3874F6'},
+                // {title:'跟进频率',value:$refs.fllow && $refs.fllow.list[0] && $refs.fllow.list[0].followfrequency,descript:'平均跟进天数,跟进频率=(总跟进天数-节假日)÷总跟进次数',bg:'#FDF3F3',color:'#E85B5B'},
+              ]"
+            >
+            </myCard>
+            <showIsNone title="销售线索明细">
+            <pageTable
+              ref="xiansuo"
+              :tablecols="tool.tabelCol($route.name).orderclueList.tablecols"
+              :param="param3"
+              :custom="true"
+            >
+              <template v-slot:custom="scope">
+                <div v-if="scope.data.columnname == 'costofconstruction'">
+                  {{scope.data.data.costofconstruction && tool.formatAmount(scope.data.data.costofconstruction || 0,2,'¥')  }}
+                </div>
+                <div v-else-if="scope.data.columnname == 'totalinvestment'">
+                  {{scope.data.data.totalinvestment && tool.formatAmount(scope.data.data.totalinvestment || 0,2,'¥')  }}
+                </div>
+                <div v-else>
+                  {{ scope.data.data[scope.data.columnname] }}
+                </div>
+              </template>
+            </pageTable>
+            </showIsNone>
+
+            <showIsNone title="线索跟进记录明细">
+            <pageTable
+              ref="fllow"
+              :tablecols="tool.tabelCol($route.name).clueFollow.tablecols"
+              :param="param8"
+              :custom="true"
+            >
+              <template v-slot:custom="scope">
+                <div style="text-wrap:wrap">
+                  {{ scope.data.data[scope.data.columnname] }}
+                </div>
+              </template>
+            </pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+        <!--关联客户-->
+        <div class="Mfollow">
+          <el-card class="box-card">
+            <div slot="header">
+              <span class="myTitle">客户</span>
+              <myRadio :value1="param4.content" key1="type" @clickBtn="refreshTable('param4','kehu');param9.content.type=param4.content.type;refreshTable('param9','fllowkehu')" :btnOptions="[{label:'本年',value:3},{label:'本季',value:2},{label:'本月',value:1}]">
+              </myRadio>
+            </div>
+            <myCard
+              :list="
+              [
+                {title:'客户数',value:$refs.kehu && $refs.kehu.list.length,bg:'#F3F9FC',color:'#3874F6'},
+                {title:'新增客户数',value:$refs.kehu && $refs.kehu.list[0] && $refs.kehu.list[0].customersSize,bg:'#E8F7EC',color:'#78B32B'},
+                {title:'跟进次数',value:$refs.fllowkehu && $refs.fllowkehu.list && $refs.fllowkehu.list[0] && $refs.fllowkehu.list[0].followSize,bg:'#F9F2E5',color:'#FF7603'},
+                // {title:'跟进频率',value:$refs.fllowkehu && $refs.fllowkehu.list && $refs.fllowkehu.list[0] && $refs.fllowkehu.list[0].followfrequency,descript:'平均跟进天数,跟进频率=(总跟进天数-节假日)÷总跟进次数',bg:'#FDF3F3',color:'#E85B5B'},
+              ]"
+            >
+            </myCard>
+            <showIsNone title="客户明细">
+            <pageTable
+              ref="kehu"
+              :tablecols="tool.tabelCol($route.name).publicCustomerTable.tablecols"
+              :param="param4"
+              :custom="true"
+            >
+            <template v-slot:custom="scope">
+              <div v-if="scope.data.columnname == 'sys_tag'">
+                <el-tag size="mini" v-for="(item,index) in scope.data.data.sys_tag" :key="index">{{ item }}</el-tag>
+              </div>
+              <div v-else-if="scope.data.columnname == 'industry'">
+                <el-tag size="mini" v-for="(item,index) in scope.data.data.industry" :key="index">{{ item }}</el-tag>
+              </div>
+              <div v-else>
+                {{ scope.data.data[scope.data.columnname] }}
+              </div>
+            </template>
+            </pageTable>
+            </showIsNone>
+
+            <showIsNone title="客户跟进记录明细">
+            <pageTable
+              ref="fllowkehu"
+              :tablecols="tool.tabelCol($route.name).customerFollow.tablecols"
+              :param="param9"
+              :custom="true"
+            >
+              <template v-slot:custom="scope">
+                <p v-if="scope.data.columnname === 'followname'">
+                  <span v-if="scope.data.data.followname.length > 0">
+                    <span v-for="(item,index) in scope.data.data.followname">
+                      <span v-if="index === scope.data.data.followname.length -1">
+                        {{item}}
+                      </span>
+                      <span v-else>
+                        {{item + ','}}
+                      </span>
+                    </span>
+                  </span>
+                  <span v-else>--</span>
+                </p>
+                <div v-else style="text-wrap:wrap">
+                  {{ scope.data.data[scope.data.columnname] || '--' }}
+                </div>
+              </template>
+            </pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+        <!--项目-->
+        <div class="Mproject" style="margin-top:10px">
+          <el-card class="box-card">
+            <div slot="header">
+              <span class="myTitle">项目</span>
+              <myRadio :value1="param5.content" key1="type" @clickBtn="refreshTable('param5','project');param10.content.type=param5.content.type;refreshTable('param10','projectfllow')" :btnOptions="[{label:'本年',value:3},{label:'本季',value:2},{label:'本月',value:1}]">
+              </myRadio>
+            </div>
+            <myCard
+              :list="
+              [
+                {title:'项目数',value:$refs.project && $refs.project.list && $refs.project.list[0] && $refs.project.list[0].projectSize,bg:'#F3F9FC',color:'#3874F6'},
+                {title:'新增项目数',value:$refs.project && $refs.project.list && $refs.project.list[0] && $refs.project.list[0].insertProject,bg:'#E8F7EC',color:'#78B32B'},
+                {title:'项目成交率',value:$refs.project && $refs.project.list && $refs.project.list[0] && $refs.project.list[0].projectcjl,bg:'#F9F2E5',color:'#FF7603'},
+                {title:'跟进次数',value:$refs.projectfllow && $refs.projectfllow.list && $refs.projectfllow.list[0] && $refs.projectfllow.list[0].followSize,bg:'#F3F9FC',color:'#3874F6'},
+                // {title:'跟进频率',value:$refs.projectfllow && $refs.projectfllow.list[0] && $refs.projectfllow.list[0].followfrequency,descript:'平均跟进天数,跟进频率=(总跟进天数-节假日)÷总跟进次数',bg:'#FDF3F3',color:'#E85B5B'},
+              ]"
+            ></myCard>
+
+            <showIsNone title="项目明细">
+            <pageTable
+              ref="project"
+              :tablecols="tool.tabelCol($route.name).competeProjectsTable.tablecols"
+              :param="param5"
+              :custom="true"
+            >
+              <template v-slot:custom="scope">
+                <div v-if="scope.data.columnname == 'stagecount'">
+                  <el-tag size="small" v-for="(item,index) in scope.data.data.stagecount" :key="index">{{ item.stagename }}</el-tag>
+                </div>
+                <div v-else-if="scope.data.columnname == 'signamount_due'">
+                  {{scope.data.data.signamount_due && tool.formatAmount(scope.data.data.signamount_due || 0,2,'¥')  }}
+                </div>
+                <div v-else-if="scope.data.columnname == 'scale'">
+                  {{scope.data.data.scalc ? scope.data.data.scale + scope.data.data.unitname : '' }}
+                </div>
+                <div v-else>
+                  {{ scope.data.data[scope.data.columnname] }}
+                </div>
+              </template>
+            </pageTable>
+            </showIsNone>
+
+            <showIsNone title="项目跟进记录明细">
+            <pageTable
+              ref="projectfllow"
+              :tablecols="tool.tabelCol($route.name).projectFollow.tablecols"
+              :param="param10"
+              :custom="true"
+            >
+              <template v-slot:custom="scope">
+                <p v-if="scope.data.columnname === 'followname'">
+                  <span v-if="scope.data.data.followname.length > 0">
+                    <span v-for="(item,index) in scope.data.data.followname">
+                      <span v-if="index === scope.data.data.followname.length -1">
+                        {{item}}
+                      </span>
+                      <span v-else>
+                        {{item + ','}}
+                      </span>
+                    </span>
+                  </span>
+                  <span v-else>--</span>
+                </p>
+                <div v-else style="text-wrap:wrap">
+                  {{ scope.data.data[scope.data.columnname] || '--' }}
+                </div>
+              </template>
+            </pageTable>
+            </showIsNone>
+
+          </el-card>
+        </div>
+
+        <!--报价单-->
+        <div class="Mproject" style="margin-top:10px">
+          <el-card class="box-card">
+            <div slot="header">
+              <span class="myTitle">报价单</span>
+              <myRadio :value1="param6.content" key1="isAll" @clickBtn="refreshTable('param6','baojiadan')" :btnOptions="[{label:'全部',value:1},{label:'本年',value:0}]">
+              </myRadio>
+            </div>
+            <myCard
+              :list="
+              [
+                {title:'报价次数',value:$refs.baojiadan && $refs.baojiadan.total,bg:'#F3F9FC',color:'#3874F6'},
+                {title:'最近报价金额',value:unitCompile($refs.baojiadan && $refs.baojiadan.list && $refs.baojiadan.list[0] && $refs.baojiadan.list[0].sumamount || '0'),bg:'#E8F7EC',color:'#78B32B'},
+                {title:'最近报价时间',value:$refs.baojiadan && $refs.baojiadan.list && $refs.baojiadan.list[0] && $refs.baojiadan.list[0].submitdate || '--',bg:'#F9F2E5',color:'#FF7603'},
+              ]"
+            ></myCard>
+            <showIsNone title="报价单明细">
+            <pageTable
+              ref="baojiadan"
+              :tablecols="tool.tabelCol($route.name).quotedPriceTable.tablecols"
+              :param="param6"
+              :custom="true"
+            >
+              <template v-slot:custom="scope">
+                <div v-if="scope.data.columnname == 'specialoffer'">
+                  {{ scope.data.data.specialoffer ? '是' : '否' }}
+                </div>
+                <div v-else-if="scope.data.columnname == 'sumamount'">
+                  {{scope.data.data.sumamount && tool.formatAmount(scope.data.data.sumamount || 0,2,'¥')  }}
+                </div>
+                <div v-else-if="scope.data.columnname == 'begdate'">
+                  {{scope.data.data.begdate }}-{{scope.data.data.enddate }}
+                </div>
+                <div v-else>
+                  {{ scope.data.data[scope.data.columnname] }}
+                </div>
+              </template>
+            </pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+
+        <!--合同-->
+        <div class="Mproject" style="margin-top:10px">
+          <el-card class="box-card">
+            <div slot="header">
+              <span class="myTitle">合同</span>
+              <myRadio :value1="param7.content" key1="isAll" @clickBtn="refreshTable('param7','hetong')" :btnOptions="[{label:'全部',value:1},{label:'本年',value:0}]">
+              </myRadio>
+              <el-select style="margin-left:24px" v-model="param7.content.where.type" clearable size="mini" placeholder="请选择合同类型" @change="typeChange('param7','hetong')">
+                <el-option label="全部" value=""></el-option>
+                <el-option :label="item.remarks" :value="item.value" v-for="(item,index) in contractTypeList" :key="index"></el-option>
+              </el-select>
+            </div>
+            <myCard
+              :list="
+              [
+                {title:'合同总数',value:$refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].allQty,bg:'#F3F9FC',color:'#3874F6'},
+                {title:'合同金额',value:unitCompile($refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].sumSignAmount || 0),bg:'#E8F7EC',color:'#78B32B'},
+                {title:'进行中合同数',value:$refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].inProgressQty,bg:'#FDF3F3',color:'#E85B5B'},
+                {title:'进行中合同金额',value:unitCompile($refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].inProgressAmount || 0),bg:'#F9F2E5',color:'#FF7603'},
+                {title:'到期合同数',value:$refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].expireQty,bg:'#F3F9FC',color:'#3874F6'},
+                {title:'到期合同金额',value:unitCompile($refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].expireAmount || 0),bg:'#F9F2E5',color:'#FF7603'},
+                {title:'转订单合同数',value:$refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].convertOrderContractQty,bg:'#F3F9FC',color:'#3874F6'},
+                {title:'转订单金额',value:unitCompile($refs.hetong && $refs.hetong.list && $refs.hetong.list[0] && $refs.hetong.list[0].convertOrderContractAmount || 0),bg:'#E8F7EC',color:'#78B32B'},
+              ]"
+            ></myCard>
+            <showIsNone title="合同明细">
+            <pageTable
+              ref="hetong"
+              :tablecols="tool.tabelCol($route.name).contractTable.tablecols"
+              :param="param7"
+              :custom="true"
+            >
+              <template v-slot:custom="scope">
+                <div v-if="scope.data.columnname == 'signAmount'">
+                  {{scope.data.data.signAmount && tool.formatAmount(scope.data.data.signAmount || 0,2,'¥')  }}
+                </div>
+                <div v-else>
+                  {{ scope.data.data[scope.data.columnname] }}
+                </div>
+              </template>
+            </pageTable>
+            </showIsNone>
+          </el-card>
+        </div>
+
+
+      </div>
+
+    </div>
+  </el-drawer>
+</template>
+
+<script>
+import pageTable from '@/HDrpManagement/customerPortrait/modules/pageTable'
+import showIsNone from '@/HDrpManagement/customerPortrait/modules/showIsNone'
+import myCard from '@/HDrpManagement/customerPortrait/modules/myCrad'
+import myTag from '@/HDrpManagement/customerPortrait/modules/myTag'
+import myRadio from '@/HDrpManagement/customerPortrait/modules/myRadio'
+export default {
+  name: "index",
+  components:{showIsNone,pageTable,myCard,myTag,myRadio},
+  props:['data'],
+  data() {
+    return {
+      dialogFormVisible:false,
+      baseInfo:{},//基本信息
+      //业绩
+      param1: {
+        "id": 20230717100404,
+        "content": {
+            "type":3,
+            "hrid":this.$route.query.id
+        }
+      },
+      //订单
+      param2: {
+        "id": 20230717100504,
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "isAll":1,
+            "hrid":this.$route.query.id,
+            "where": {
+              "type":''
+            },
+          "sort":[{
+            "reversed": 1,//1降序,0升序
+            "sorted": 1,
+            "sortid": 174,//订单:174,出货:175,开票:176,回款:177
+          }]
+        }
+      },
+      //销售线索
+      param3: {
+        "id": 20230717100604,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "type":3,
+          "hrid":this.$route.query.id,
+        }
+      },
+      //线索跟进
+      param8: {
+        "id": 20230717100704,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "type":3,
+          "hrid":this.$route.query.id,
+        }
+      },
+      //客户
+      param4: {
+        "id": 20230717100804,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "type":3,
+          "hrid":this.$route.query.id,
+        }
+      },
+      //客户跟进
+      param9: {
+        "id": 20230717100904,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "type":3,
+          "hrid":this.$route.query.id,
+        }
+      },
+      //项目
+      param5: {
+        "id": 20230717101004,
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "type":3,
+            "hrid":this.$route.query.id
+        }
+      },
+      //项目跟进
+      param10: {
+        "id": 20230717101104,
+        "content": {
+            "pageNumber": 1,
+            "pageSize": 20,
+            "type":3,
+            "hrid":this.$route.query.id
+        }
+      },
+      //报价单
+      param6: {
+        "id": 20230717101204,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "isAll":1,
+          "hrid":this.$route.query.id,
+          "where":{
+              "type":""
+          }
+        }
+      },
+      //合同
+      param7: {
+        "id": 20230717101304,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 20,
+          "isAll":1,
+          "hrid":this.$route.query.id,
+          "where":{
+              "type":""
+          }
+        }
+      },
+      performance:{},
+      contractTypeList:[],
+      orderTypeList:[],
+      stageList:[],
+    }
+  },
+  methods:{
+    async getbaseInfo () {
+      let res = await this.$api.requested({
+        "id": 20230717100304,
+        "content": {
+            "hrid":this.$route.query.id
+        }
+      })
+      this.baseInfo = res.data[0]
+      console.log(this.baseInfo,'基本信息');
+    },
+    async getPerformance () {
+      let res = await this.$api.requested(this.param1)
+      this.performance = res.data[0]
+      console.log(this.performance,'业绩');
+    },
+    async getSelectList () {
+      const res = await this.$store.dispatch('optiontypeselect','contracttype')
+      this.contractTypeList = res.data
+      console.log(this.contractTypeList,'合同类型');
+
+      const res2 = await this.$store.dispatch('optiontypeselect','ordertype')
+      this.orderTypeList = res2.data
+      console.log(this.orderTypeList,'订单类型');
+
+      /*获取阶段*/
+      const res3 = await this.$api.requested({
+        "id": 20221128143604,
+        "content": {
+          "pageNumber": 1,
+          "pageSize": 9999,
+          "where": {
+            "condition": "",
+            "allprojecttype":"",
+            "projecttype":""
+          }
+        }
+      })
+      this.stageList = res3.data
+    },
+    refreshTable (param,el) {
+      this[param].content.pageNumber = 1
+      this.$refs[el] && this.$refs[el].listData()
+    },
+    typeChange(param,el) {
+      this[param].content.pageNumber = 1
+      this.$refs[el] && this.$refs[el].listData()
+    },
+    unitCompile (num) {
+      if (num == 0) {
+        return this.tool.formatAmount(num,0,'¥')
+      } else {
+        return this.tool.formatAmount(num / 10000,2,'¥') + '万'
+      }
+    },
+    /*订单明细排序*/
+    sortChange(val){
+      if (val === '订单'){
+        this.param2.content.sort[0].sortid = 174
+      }else if (val === '出货'){
+        this.param2.content.sort[0].sortid = 175
+      }else if (val === '开票'){
+        this.param2.content.sort[0].sortid = 176
+      }else if (val === '回款'){
+        this.param2.content.sort[0].sortid = 177
+      }
+      this.$refs.dingdan.listData()
+    },
+    upSort(val){
+      if (val === 'down'){
+        this.param2.content.sort[0].reversed = 1
+      }else {
+        this.param2.content.sort[0].reversed = 0
+      }
+      this.$refs.dingdan.listData()
+    }
+  },
+  mounted() {
+    this.getbaseInfo()
+    this.getPerformance()
+    this.getSelectList()
+  }
+}
+</script>
+
+<style scoped>
+*{
+  box-sizing: border-box;
+}
+.my-label {
+  background: rgba(235, 245, 253, 1);
+}
+.nowrap {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  flex: 100;
+}
+
+/deep/.el-drawer {
+  background:#F5F5F5 !important;
+}
+/deep/.el-drawer__header{
+  display: none !important;
+}
+
+/deep/.el-descriptions-item__cell {
+  padding: 8px 8px 0px 8px !important;
+}
+
+
+/deep/.el-card__header,/deep/.el-card__body {
+  padding: 10px !important;
+}
+.Mcontainer .Mcontainer-header {
+  display: flex;
+  align-items: center;
+}
+.Mcontainer .Mcontainer-header .Mcontainer-header__left {
+  display: flex;
+  max-width: 350px;
+  min-width: 350px;
+  align-items: center;
+  padding-right: 20px;
+}
+.Mcontainer .Mcontainer-header .Mcontainer-header__right {
+  flex: 100;
+  border-left: 1px solid #cccccc;
+  padding-left: 20px;
+}
+.Mcontainer .Mcontainer-header .Mcontainer-header__left .account{
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  margin-left: 10px;
+  overflow: hidden;
+  flex:100;
+}
+.Mcontainer .Mcontainer-header .Mcontainer-header__left .account .Mtag{
+  margin-top: 5px;
+}
+
+.Mcontainer .Mfollow{
+  margin-top: 10px;
+}
+
+.Mcontainer .peopleInfo {
+  margin-top: 10px;
+  padding-bottom: 10px;
+}
+.peopleInfo-content {
+  display: flex;
+  flex-direction: column;
+  height: 300px;
+  overflow-y: scroll;
+}
+.peopleInfo-content::-webkit-scrollbar {
+  display: none;
+}
+.peopleInfo-content .leader {
+  margin-bottom: 10px;
+  display: flex;
+  flex-direction: column;
+}
+.peopleInfo-content .leader .title {
+  font-size: 14px;
+}
+.peopleInfo-content .leader .content {
+  display: flex;
+  flex-wrap: wrap;
+}
+.peopleInfo-content .leader .content .item {
+  display: flex;
+  align-items: center;
+  margin: 0 20px 10px 0;
+}
+.peopleInfo-content .leader .content .avatar {
+  width: 50px;
+  height: 50px;
+  border-radius: 50%;
+  text-align: center;
+  line-height: 50px;
+  background: #3874F6;
+  margin-right:10px;
+  color: #ffffff;
+}
+.peopleInfo-content .leader .content .Info {
+  display: flex;
+  flex-direction: column;
+}
+.peopleInfo-content .leader .content .Info div {
+  display: flex;
+  align-items: center;
+  font-size: 12px;
+  color: #cccccc;
+}
+
+
+.peopleInfo-content .people {
+  margin-bottom: 10px;
+  display: flex;
+  flex-direction: column;
+}
+.peopleInfo-content .people .title {
+  font-size: 14px;
+}
+.peopleInfo-content .people .content {
+  display: flex;
+  flex-wrap:wrap;
+}
+.peopleInfo-content .people .content .item {
+  display: flex;
+  align-items: center;
+  margin: 0 20px 10px 0;
+}
+.peopleInfo-content .people .content .avatar {
+  width: 50px;
+  height: 50px;
+  border-radius: 50%;
+  text-align: center;
+  line-height: 50px;
+  background: #3874F6;
+  margin-right: 10px;
+  color: #ffffff;
+}
+.peopleInfo-content .people .content .Info {
+  display: flex;
+  flex-direction: column;
+}
+.peopleInfo-content .people .content .Info div {
+  display: flex;
+  align-items: center;
+  font-size: 12px;
+  color: #cccccc;
+}
+
+.peopleInfo-content .people {}
+
+.descript {
+  font-size: 12px;
+  color: #cccccc;
+  margin-right: 20px;
+  white-space:nowrap;
+}
+.title {
+  font-size: 14px;
+  color: #000000;
+  margin-right: 10px;
+  white-space:nowrap;
+}
+.myTitle {
+  margin-right:24px;
+  font-size: 16px;
+  font-weight: bold;
+}
+</style>

+ 53 - 0
src/HDrpManagement/salerPortrait/modules/myNewCrad.vue

@@ -0,0 +1,53 @@
+<template>
+  <div class="dataInfo">
+    <div :style="[{'background': item.bg}]" class="item" v-for="(item,index) in list" >
+        <div>
+          <p :style="[{'font-size': '14px','fontWeight':'bold'}]">{{ item.title }}</p>
+          <p :style="[{'font-size': '14px'}]">{{ item.titleRate }}</p>
+          <div style="display:flex;justify-content:space-between">
+            <p :style="[{'font-weight': 'bold'},{'font-size':'18px'},{'color':item.color}]">{{ item.value || 0 }}</p>
+            <div style="position: relative;">
+              <span v-if="item.value2descript" style="position:absolute;top:-20px;right:0px;font-size:14px;color:#303133;white-space:nowrap;font-weight: bold">{{ item.value2descript }}</span>
+              <p :style="[{'font-size':'16px'},{'color':+item.value2 > 0 ? '#000000' : 'red'}]">{{ item.value2 }}</p>
+            </div>
+          </div>
+          <slot v-if="item.custom" :name="item.custom" :data="item"></slot>
+        </div>
+        <el-tooltip effect="dark" :content="item.descript" placement="top">
+          <i v-if="item.descript" style="cursor: pointer;position:absolute;right:10px;top:10px" class="el-icon-warning-outline"></i>
+        </el-tooltip>
+    </div>
+
+  </div>
+</template>
+<script>
+ export default {
+  name:'myCard',
+  props:{
+    list: {
+      type:Array,
+      default:() => []
+    },
+  },
+  data () {
+    return {
+
+    }
+  }
+ }
+</script>
+
+<style scoped>
+.dataInfo {
+  display: flex;
+  flex-wrap:wrap;
+}
+.item {
+  min-width:260px;
+  padding:10px 10px;
+  margin:0 10px 10px 0;
+  position:relative;
+}
+</style>
+
+